How to implement OnDeleteNodePolicy for deleting user?

cancel
Showing results for 
Search instead for 
Did you mean: 
jeffreyman
Active Member II

How to implement OnDeleteNodePolicy for deleting user?

We want to add custom code when deleting user. We have tried to use OnDeleteNodePolicy or BeforeDeleteNodePolicy, but failed.

Here is custom code:

public void beforeDeleteNode(NodeRef nodeRef) {
String username = serviceRegistry.getPersonService().getPerson(nodeRef).getUserName();
UserInfoDao.removeUserInfo(username); //remove user in custom db
}

Here is error message:

2020-12-09 17:27:06,559 ERROR [extensions.webscripts.AbstractRuntime] [http-nio-8080-exec-1] Exception from executeScript: 11090001 Wrapped Exception (with status template): 11090022 Failed to execute script 'classpath*:alfresco/templates/webscripts/org/alfresco/repository/person/person.delete.js': 11090021 User does not exist and could not be created: user://alfrescoUserStore/28bdc3c9-ff7e-4ece-adec-b90439112a75
org.springframework.extensions.webscripts.WebScriptException: 11090001 Wrapped Exception (with status template): 11090022 Failed to execute script 'classpath*:alfresco/templates/webscripts/org/alfresco/repository/person/person.delete.js': 11090021 User does not exist and could not be created: user://alfrescoUserStore/28bdc3c9-ff7e-4ece-adec-b90439112a75
at org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:1139)
at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:171)
at org.alfresco.repo.web.scripts.RepositoryContainer$3.execute(RepositoryContainer.java:527)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:450)
at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:595)
at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:664)
at org.alfresco.repo.web.scripts.RepositoryContainer.executeScriptInternal(RepositoryContainer.java:435)
at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:315)
at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:399)
at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:210)
at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:132)
at org.alfresco.repo.web.scripts.AlfrescoWebScriptServlet.service(AlfrescoWebScriptServlet.java:43)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:68)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.alfresco.web.app.servlet.ClearSecurityContextFilter.doFilter(ClearSecurityContextFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1627)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)

2 Replies
EddieMay
Community Manager
Community Manager

Re: How to implement OnDeleteNodePolicy for deleting user?

Hi @jeffreyman 

The error says, " User does not exist and could not be created". Is this a case of calling the code at the wrong time (transaction conflict)? This blog post might help, & then there is also Jeff Pott's tutorial.

HTH,

Digital Community Manager, Alfresco Software.
Problem solved? Click Accept as Solution!
kaynezhang
Advanced

Re: How to implement OnDeleteNodePolicy for deleting user?

I think you'd better test if the node is a person node before calling your code

like following

QName nodeTyp = nodeService.getType(nodeRef)
if(ContentModel.TYPE_PERSON.equalsde before calling ){
//your code
}