As we transition to the new Hyland Community, some post links may be temporarily disrupted as we finalize redirects. We apologize for the inconvenience and are working to resolve this as quickly as possible. Details.
<userTask id="dynamicAssignmentTask" name="Dynamic Assignment Task" > <documentation>Some documentation here</documentation> <extensionElements> <activiti:taskListener event="create" class="org.activiti.tasklistener.DynamicAssignmentHandler" /> </extensionElements> <potentialOwner> <resourceAssignmentExpression> <formalExpression>user(kermit), group(DynamicAssignmentGroup)</formalExpression> </resourceAssignmentExpression> </potentialOwner> </userTask>
@Override public void notify(DelegateTask delegateTask) { // This doesn't delete the candidate group specified in the XML. delegateTask.deleteCandidateGroup("DynamicAssignmentGroup"); // This doesn't delete the user specified in the XML. delegateTask.deleteCandidateUser("kermit"); // This is not specified in the XML and works perfectly. delegateTask.addCandidateUser("gonzo"); delegateTask.deleteCandidateUser("gonzo"); }
In the XML I've defined a user task with a task listener on create event like this:Quote:<userTask id="dynamicAssignmentTask" name="Dynamic Assignment Task" ><documentation>Some documentation here</documentation><extensionElements><activiti:taskListener event="create" class="org.activiti.tasklistener.DynamicAssignmentHandler" /></extensionElements><potentialOwner><resourceAssignmentExpression><formalExpression>user(kermit), group(DynamicAssignmentGroup)</formalExpression></resourceAssignmentExpression></potentialOwner></userTask>
Set<IdentityLink> identityLinks = delegateTask.getCandidates();<br> Iterator<IdentityLink> iterator = identityLinks.iterator();<br> <br> // Contains all candidate users (includes individual users and users from groups)<br> List<String> candidateUsers = new LinkedList<String>();<br> <br> // Iterate over all candidate users for this task<br> while (iterator.hasNext()) {<br> IdentityLink identityLink = iterator.next();<br> <br> if (identityLink.getType().equals(IdentityLinkType.CANDIDATE)) {<br> String userId = identityLink.getUserId();<br> String groupId = identityLink.getGroupId();<br> <br> if (userId != null) { // Single candidate user<br> log.debug("userId (single user): " + userId);<br> candidateUsers.add(userId);<br> } else if (groupId != null) { // Group candidate users<br> log.debug("groupId: " + groupId);<br> <br> List<User> users = ProcessEngines.getDefaultProcessEngine().getIdentityService().createUserQuery().memberOfGroup(groupId).list();<br> for (User user : users) {<br> candidateUsers.add(user.getId());<br> }<br> } else {<br> log.warn("userId and groupId are null");<br> }<br> }<br> <br> }<br> <br> log.info("# candidate users = " + candidateUsers.size());<br> assert candidateUsers.size() != 0;