You can use this code block and put into the Bean Shell for Process Participant in Map Participants to Users.

In this piece of code, we will get all the users from the group with ID "G-001". Then, we will traverse through each user and obtain each user's assignment count.

The first user with the least assignment count will be picked as the assignee of the current assignment. You may use this as a reference to your future coding needs.

import java.util.Collection;
import org.joget.workflow.shark.model.dao.WorkflowAssignmentDao;
ExtDirectoryManager directoryManager = (ExtDirectoryManager) AppUtil.getApplicationContext().getBean("directoryManager");
WorkflowAssignmentDao workflowAssignmentDao = (WorkflowAssignmentDao) AppUtil.getApplicationContext().getBean("workflowAssignmentDao");
//set groupId
String groupId = "G-001";
//Get users of the group using directory manager, sorted by firstName
Collection userList = directoryManager.getUsers(null, null, null, null, groupId, null, null, "firstName", false, null, null);
String assignTo = "";
int lowestAssignmentCount = -1;
Collection assignees = new ArrayList();
//loop through the users
for(Object u : userList){
	User user = (User) u;
	//get open assignment count of the current user
	//refer to to refine search conditions
	int userAssignmentSize = workflowAssignmentDao.getAssignmentSize(null, null, null, null, u.getUsername(), "open");
	//System.out.println(u.getUsername() + " has " + userAssignmentSize);
	if(lowestAssignmentCount == -1){
		//assign to the first person first
		lowestAssignmentCount = userAssignmentSize;
		assignTo = u.getUsername();
	}else if(userAssignmentSize < lowestAssignmentCount){
		assignTo = u.getUsername();
		lowestAssignmentCount = userAssignmentSize;
//System.out.println("Will assign to " + assignTo);
return assignees;

Related Elements


  • No labels