I'm trying to use a TaskListener on a User Task, set to the event create, to create a query for all users in a task's candidate group, so I can send them a notification e-mail about the new task.
I first use the delegateTask.getCandidates() method to get a List<IdentityLink>. I iterate through the IdentityLinks and buffer group IDs in an array. I then iterate through the group IDs to fetch a list of users in that group with List<User> userList = identityService().createUserQuery().memberOfGroup(groupID).list();. After that, I iterate through the list to get User object which I want to query for their mail.
Getting group IDs works fine, but it doesn't seem to work after that. Looks like the list of users is always empty.
import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.identityService;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
//
import org.camunda.bpm.engine.delegate.DelegateTask;
import org.camunda.bpm.engine.delegate.TaskListener;
import org.camunda.bpm.engine.identity.User;
import org.camunda.bpm.engine.task.IdentityLink;
public class NeueAufgabeMail implements TaskListener {
private final static Logger LOGGER = Logger.getLogger("AufgabeSendenLogger");
//
@Override
public void notify(DelegateTask delegateTask) {
// Name des Tasks //Task name
String taskName = delegateTask.getName();
LOGGER.log(Level.INFO, "Sende Benachrichtigung über neue Aufgabe für Task " + taskName + " .");
// Liste der Gruppen IDs // List of Group IDs
ArrayList<String> groupIDs = new ArrayList<String>();
// Gruppen IDs per Kandidatenliste des Tasks hinzufügen // add group IDs via candidate list of the task
for (IdentityLink link : delegateTask.getCandidates()) {
groupIDs.add(link.getGroupId());
LOGGER.log(Level.INFO, "GruppenID hinzugefügt: " + link.getGroupId());
}
if (!groupIDs.isEmpty()) {
//Userliste durch Abfrage per GroupID erstellen // create user list by querying via group ID
for (String groupID : groupIDs) {
List<User> userList = identityService().createUserQuery()
.memberOfGroup(groupID).list();
// Mail an jeden User in der Userliste // mail to each user in the group
for (User userInGroup : userList) {
LOGGER.log(Level.INFO, "Sende Benachrichtigung an " + userInGroup.getEmail());
sendMail(userInGroup, taskName);
}
}
} else
{
LOGGER.log(Level.WARNING, "Keine Kandidaten-GruppenIDs für Task " + taskName + " gefunden.");
}
}