Which IIQ version are you inquiring about?
8.5
Share all details about your problem, including any error messages you may have received.
We have this ApprovalAssignment rule in LCM - Provisioning workflow. We are seeing an issue where if a manager submits multiple requests in one access request (that go to separate owners), the first owner to approve ends up canceling the other request.
I have tried other iterations of childApproval.setMode(“parallelPoll”); to set the approvalMode, but it doesn’t seem to change it or override the initialized approvalMode.
Curious if anyone sees something I might be missing in the code below:
import sailpoint.object.ApprovalItem;
import sailpoint.object.Filter;
import sailpoint.object.Identity;
import sailpoint.object.QueryOptions;
import sailpoint.object.Workflow;
import sailpoint.object.WorkItem;
import sailpoint.object.ApprovalSet;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
List finalApprovals = new ArrayList();
List approvalItems = approvalSet.getItems();
Identity launcherIdentity = context.getObjectByName(Identity.class, launcher);
// Process each approval item individually
for (ApprovalItem approvalItem : approvalItems) {
String approvalItemOperation = approvalItem.getOperation();
String owner = approvalItem.getOwner();
if ("Remove".equals(approvalItemOperation)) {
approvalItem.approve();
approvalItem.setState(WorkItem.State.Finished);
approvalItem.setOwner("spadmin");
finalApprovals.add(approvalItem);
} else {
// launcherIsMember logic
QueryOptions q = new QueryOptions();
q.add(Filter.eq("workgroups.name", owner));
boolean launcherIsMember = false;
List members = new ArrayList();
Iterator i = context.search(Identity.class, q, "name");
while (i.hasNext()) {
String member = i.next()[0];
members.add(member);
if (member.equalsIgnoreCase(launcherIdentity.getName())) {
launcherIsMember = true;
}
}
ApprovalSet singleApprovalSet = new ApprovalSet();
singleApprovalSet.add(approvalItem);
if (launcherIsMember) {
for (String memberName : members) {
if (memberName.equalsIgnoreCase(launcherIdentity.getName()))
continue;
Workflow.Approval childApproval = new Workflow.Approval();
childApproval.setOwner(memberName);
childApproval.setDescription("Owner Approval - Account Changes for User: " + identityDisplayName);
childApproval.addArg("workItemTargetClass", "sailpoint.object.Identity");
childApproval.addArg("workItemTargetName", identityName);
childApproval.addArg("workItemNotificationTemplate", identityEmailTemplate);
childApproval.setApprovalSet(singleApprovalSet);
//childApproval.setMode(Workflow.ApprovalModeAny);
//childApproval.setMode(Workflow.ApprovalModeParallelPoll); //testing
//childApproval.setMode("any");
childApproval.setMode("parallelPoll");
finalApprovals.add(childApproval);
}
} else {
Workflow.Approval ownerApproval = new Workflow.Approval();
ownerApproval.setOwner(owner);
ownerApproval.setDescription("Owner Approval - Account Changes for User: " + identityDisplayName);
ownerApproval.addArg("workItemTargetClass", "sailpoint.object.Identity");
ownerApproval.addArg("workItemTargetName", identityName);
ownerApproval.addArg("workItemNotificationTemplate", identityEmailTemplate);
//ownerApproval.setMode(Workflow.ApprovalModeParallelPoll);
ownerApproval.setMode("parallelPoll");
ownerApproval.setApprovalSet(singleApprovalSet);
finalApprovals.add(ownerApproval);
}
}
}
return finalApprovals;
Thanks!