Workflow Approval Condition Not Working
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2024 01:18 AM
Hi,
I have a workflow for a record producer, that have multiple approvers (like HR Owner, Finance Manager, Business Manager approvals). And I had to add a new approval at the end that goes to 2 individuals Simon and Ed. I have added this new approval but I want to check that whether Simon or Ed has already approved it or not, as a HR Owner, Finance Manager or Business Manager. If they already approved it, so I don't need to send this new approval to them.
I have added an If activity before my new approval for Simon and Ed. Below is the code for that If condition, but it is not working:
function ifScript() {
var simonGriffinUsers = ['ed.griffin', 'simon.belfer'];
var approvalFound = false;
// Query sysapproval_approver to check if either Ed or Simon has already approved the request
var approverGr = new GlideRecord('sysapproval_approver');
approverGr.addQuery('approver', 'IN', simonGriffinUsers); // Filter for Ed Griffin or Simon Belfer
approverGr.addQuery('sysapproval', current.sysapproval); // Ensure it's for the same request
approverGr.addQuery('state', 'approved'); // Look only for approved records
approverGr.query();
while (approverGr.next()) {
// Log or check the approver roles
var approver = approverGr.approver.name;
gs.log("Approver found: " + approver);
// Check if Ed or Simon has approved already as HR Owner or Finance Approver
if (approver == 'ed.griffin' || approver == 'simon.belfer') {
approvalFound = true;
break;
}
}
// Return 'yes' to skip if already approved, 'no' otherwise
if (approvalFound) {
return 'yes'; // Skip sending another approval
}
return 'no'; // Send approval as they haven't approved yet
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2024 01:40 AM
Hi @MuhammadAqS
Try be/ow script
var simonGriffinUsers = ['ed.griffin', 'simon.belfer'];
var approvalFound = false;
var approverGr = new GlideRecord('sysapproval_approver');
approverGr.addQuery('approver', 'IN', simonGriffinUsers.join(','));
approverGr.addQuery('sysapproval', current.sys_id);
approverGr.addQuery('state', 'approved');
approverGr.query();
while (approverGr.next()) {
var approver = approverGr.approver.name;
gs.info("Approver found: " + approver);
if (simonGriffinUsers.indexOf(approver) !== -1) {
approvalFound = true; // Set to true if either has approved
break;
}
}
return approvalFound ? 'yes' : 'no';
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2024 02:36 AM
Hi @Eshwar Reddy,
Thank you so much for your response, but it still sending the approval notification to Ed, when he has already approved that.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2024 03:05 AM
Hello @MuhammadAqS
Can we see the workflow? I think you put the code in an if node, it should work, try a debug with the help of messages.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-02-2024 05:31 AM
Hi @Toderean alexan,
Sure, it is a very complex workflow, so I have attached only that If part and approval part.