BONITA 6.5 Obtenir la liste d'emails des utilisateurs liés à un acteur de lane

1
0
-1

Bonjour à tous et à toutes ! Mon objectif : sur une lane, j'ai défini un acteur (exemple "service achats"), à cet acteur est rattaché 3 personnes. Toujours sur cette lane, j'ai créé un connecteur email dans lequel je souhaite mettre comme destinataire du mail (A *): un script groovy qui me recherche les emails des 3 personnes rattachées à cet acteur.

Voici le script, que j'ai trouvé dans une documentation BONITA "DEVELOP A FIRST BUSINESS PROCESS APPLICATION"

et que j'ai positionné dans l'édition de script groovy du destinataire (A*) de mon connecteur email :

return BonitaUsers.getUserProfessionalContactInfo(apiAccessor,BonitaUsers.getProcessInstanceInitiator(apiAccessor,processInstanceId).getId()).getEmail();

Voici le log du moteur dans lequel je crois voir qu'il trouve un ID = 0 et ne trouve pas l'utilisateur. Je ne comprends pas.... .... car j'ai bien des personnes rattachées à cet acteur avec des adresses email personnelles et professionnelles que j'ai déclaré dans l'organisation de BONITASOFT.

AVERTISSEMENT: THREAD_ID=137 | HOSTNAME=ACGONL0172 | TENANT_ID=1 | No catch error event was defined to handle the error code 'PB EMAIL' defined in the process [name: Validation Demande Achat, version: 1.0], throw event: PB EMAIL. This throw error event will act as a Terminate Event. 2015-07-30 17:20:40 org.bonitasoft.engine.execution.work.FailureHandlingBonitaWork GRAVE: THREAD_ID=137 | HOSTNAME=ACGONL0172 | TENANT_ID=1 | org.bonitasoft.engine.expression.exception.SExpressionEvaluationException : "PROCESS_DEFINITION_ID=5491842729840529774 | PROCESS_NAME=Validation Demande Achat | PROCESS_VERSION=1.0 | PROCESS_INSTANCE_ID=34 | ROOT_PROCESS_INSTANCE_ID=33 | FLOW_NODE_DEFINITION_ID=-7476404747572908361 | FLOW_NODE_INSTANCE_ID=174 | FLOW_NODE_NAME=Envoi mail validation acheteur | CONNECTOR_DEFINITION_IMPLEMENTATION_CLASS_NAME=Email validation service achat | CONNECTOR_INSTANCE_ID=90 | Groovy script throws an exception of type class org.bonitasoft.engine.identity.UserNotFoundException with message = org.bonitasoft.engine.identity.SUserNotFoundException: USER_ID=0 | Can't find the user Expression : SExpressionImpl [name=toEmail, content=return BonitaUsers.getUserProfessionalContactInfo(apiAccessor,BonitaUsers.getProcessInstanceInitiator(apiAccessor,processInstanceId).getId()).getEmail();, returnType=java.lang.String, dependencies=[SExpressionImpl [name=processInstanceId, content=processInstanceId, returnType=java.lang.Long, dependencies=[], expressionKind=ExpressionKind [interpreter=NONE, type=TYPE_ENGINE_CONSTANT]], SExpressionImpl [name=apiAccessor, content=apiAccessor, returnType=org.bonitasoft.engine.api.APIAccessor, dependencies=[], expressionKind=ExpressionKind [interpreter=NONE, type=TYPE_ENGINE_CONSTANT]]], expressionKind=ExpressionKind [interpreter=GROOVY, type=TYPE_READ_ONLY_SCRIPT]]" org.bonitasoft.engine.expression.exception.SExpressionEvaluationException: PROCESS_DEFINITION_ID=5491842729840529774 | PROCESS_NAME=Validation Demande Achat | PROCESS_VERSION=1.0 | PROCESS_INSTANCE_ID=34 | ROOT_PROCESS_INSTANCE_ID=33 | FLOW_NODE_DEFINITION_ID=-7476404747572908361 | FLOW_NODE_INSTANCE_ID=174 | FLOW_NODE_NAME=Envoi mail validation acheteur | CONNECTOR_DEFINITION_IMPLEMENTATION_CLASS_NAME=Email validation service achat | CONNECTOR_INSTANCE_ID=90 | Groovy script throws an exception of type class org.bonitasoft.engine.identity.UserNotFoundException with message = org.bonitasoft.engine.identity.SUserNotFoundException: USER_ID=0 | Can't find the user Expression : SExpressionImpl [name=toEmail, content=return BonitaUsers.getUserProfessionalContactInfo(apiAccessor,BonitaUsers.getProcessInstanceInitiator(apiAccessor,processInstanceId).getId()).getEmail();, returnType=java.lang.String, dependencies=[SExpressionImpl [name=processInstanceId, content=processInstanceId, returnType=java.lang.Long, dependencies=[], expressionKind=ExpressionKind [interpreter=NONE, type=TYPE_ENGINE_CONSTANT]], SExpressionImpl [name=apiAccessor, content=apiAccessor, returnType=org.bonitasoft.engine.api.APIAccessor, dependencies=[], expressionKind=ExpressionKind [interpreter=NONE, type=TYPE_ENGINE_CONSTANT]]], expressionKind=ExpressionKind [interpreter=GROOVY, type=TYPE_READ_ONLY_SCRIPT]] at org.bonitasoft.engine.expression.impl.GroovyScriptExpressionExecutorCacheStrategy.evaluate(GroovyScriptExpressionExecutorCacheStrategy.java:153) at org.bonitasoft.engine.expression.impl.ExpressionServiceImpl.evaluate(ExpressionServiceImpl.java:86) at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluateExpressionWithResolvedDependencies(ExpressionResolverServiceImpl.java:215) at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluateExpressionsFlatten(ExpressionResolverServiceImpl.java:120) at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluate(ExpressionResolverServiceImpl.java:83) at org.bonitasoft.engine.core.connector.impl.ConnectorServiceImpl.evaluateInputParameters(ConnectorServiceImpl.java:352) at org.bonitasoft.engine.connector.ConnectorServiceDecorator.evaluateInputParameters(ConnectorServiceDecorator.java:99) at org.bonitasoft.engine.execution.work.ExecuteConnectorWork$EvaluateParameterAndGetConnectorInstance.call(ExecuteConnectorWork.java:198) at org.bonitasoft.engine.execution.work.ExecuteConnectorWork$EvaluateParameterAndGetConnectorInstance.call(ExecuteConnectorWork.java:162) at org.bonitasoft.engine.transaction.JTATransactionServiceImpl.executeInTransaction(JTATransactionServiceImpl.java:288) at org.bonitasoft.engine.execution.work.ExecuteConnectorWork.work(ExecuteConnectorWork.java:122) at org.bonitasoft.engine.execution.work.failurewrapping.TxInHandleFailureWrappingWork.work(TxInHandleFailureWrappingWork.java:42) at org.bonitasoft.engine.execution.work.failurewrapping.TxInHandleFailureWrappingWork.work(TxInHandleFailureWrappingWork.java:42) at org.bonitasoft.engine.execution.work.failurewrapping.TxInHandleFailureWrappingWork.work(TxInHandleFailureWrappingWork.java:42) at org.bonitasoft.engine.execution.work.failurewrapping.TxInHandleFailureWrappingWork.work(TxInHandleFailureWrappingWork.java:42) at org.bonitasoft.engine.execution.work.FailureHandlingBonitaWork.work(FailureHandlingBonitaWork.java:66) at org.bonitasoft.engine.work.BonitaWork.run(BonitaWork.java:56) at org.bonitasoft.engine.work.SequenceRunnableExecutor.innerRun(SequenceRunnableExecutor.java:47) at org.bonitasoft.engine.work.BonitaRunnable.run(BonitaRunnable.java:35) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: org.bonitasoft.engine.identity.UserNotFoundException: org.bonitasoft.engine.identity.SUserNotFoundException: USER_ID=0 | Can't find the user at org.bonitasoft.engine.api.impl.IdentityAPIImpl.getUser(IdentityAPIImpl.java:401) at org.bonitasoft.engine.api.UserAPI$getUser.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) at BonitaUsers.getProcessInstanceInitiator(BonitaUsers.groovy:65) at BonitaUsers$getProcessInstanceInitiator.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120) at BScript21.run(BScript21.groovy:1) at org.bonitasoft.engine.expression.impl.GroovyScriptExpressionExecutorCacheStrategy.evaluate(GroovyScriptExpressionExecutorCacheStrategy.java:134) ... 21 more Caused by: org.bonitasoft.engine.identity.SUserNotFoundException: USER_ID=0 | Can't find the user at org.bonitasoft.engine.identity.impl.IdentityServiceImpl.getUser(IdentityServiceImpl.java:1189) at org.bonitasoft.engine.api.impl.transaction.identity.GetSUser.execute(GetSUser.java:52) at org.bonitasoft.engine.api.impl.IdentityAPIImpl.getUser(IdentityAPIImpl.java:398) ... 32 more

Merci de votre aide A+

1 answer

1
0
-1

Bonjour.

Je viens de tester avec ce code qui fontionne :

Long idUser = apiAccessor.getProcessAPI().getProcessInstance(processInstanceId).getStartedBy();
return BonitaUsers.getUserProfessionalContactInfo(apiAccessor, idUser).getEmail();

Pour envoyer le mail à la liste des utilisateurs qui sont dans les acteurs de la lane il faudra : - Récupérer l'acteur de la lane (apiAccessor.getProcessAPI().getActors(processDefinitionId, 0 , nbuser, UserCriterion)) - Iterer pour chacun des acteurs afin de récupérer la liste des users - Iterer pour chaque user afin de récupérer son email - Séparer tous les emails par une virgule (ou un point virgule, c'est à tester)

Notifications