It is before insert business rule on sysapproval_approver table.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
group is not empty
this script is working fine for catalog items with flows but it is not working for catalog items with workflows. I tried to debug but i got no valid answer for this. here groupid is getting empty value for workflows where as flows i am getting exact group sysid. Help me on this community ..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
Hi @KOLLATIY
you need a fallback mechanism to your script, like if current.group is empty (which only happend in workflows), you should look up the group from the RITM's Assignment Group (or whichever field stores the relevant group on the RITM).
(function executeRule(current, previous /*null when async*/) {
var approverID = current.approver;
var requestedFor = current.sysapproval.request.requested_for;
var groupID = "";
// 1. Try getting Group from the Approval Record (Works for Flow Designer)
if (current.group && current.group.assignment_group) {
groupID = current.group.assignment_group;
}
// 2. Fallback: If empty, get it from the RITM Assignment Group (Works for Workflow)
else if (current.sysapproval && current.sysapproval.sys_class_name == 'sc_req_item') {
groupID = current.sysapproval.assignment_group;
}
gs.info("DEBUG: Approver: " + approverID + " | Group: " + groupID + " | ReqFor: " + requestedFor);
// ------------------------------------------------------------
if (groupID && approverID == requestedFor) {
var grGroup = new GlideRecord('sys_user_group');
if (grGroup.get(groupID)) {
// B. Check Member Count of the Group
var count = new GlideAggregate('sys_user_grmember');
count.addQuery('group', groupID);
count.addAggregate('COUNT');
count.query();
var memberCount = 0;
if (count.next()) {
memberCount = count.getAggregate('COUNT');
}
gs.info("DEBUG: Member Count: " + memberCount);
if (memberCount == 1) {
var newApprover = "";
// === SCENARIO 1: User is the Group Manager ===
if (grGroup.manager == requestedFor) {
var userRec = new GlideRecord('sys_user');
if (userRec.get(requestedFor) && userRec.manager && userRec.manager.active == true) {
newApprover = userRec.manager;
gs.addInfoMessage("Approval rerouted to Requester's Manager.");
}
}
// === SCENARIO 2: User is NOT the Manager (Standard Member) ===
else {
// Priority 1: Check Primary Manager
if (grGroup.manager && grGroup.manager != requestedFor && grGroup.manager.active == true) {
newApprover = grGroup.manager;
gs.addInfoMessage("Approval rerouted to Group Primary Manager.");
}
// Priority 2: Check Secondary Manager (List Field)
else if (!grGroup.u_secondary_manager.nil()) {
var secListStr = grGroup.u_secondary_manager.toString();
var secArray = secListStr.split(',');
for (var i = 0; i < secArray.length; i++) {
var candidateID = secArray[i];
if (candidateID != requestedFor) {
var grCheckUser = new GlideRecord('sys_user');
if (grCheckUser.get(candidateID) && grCheckUser.active == true) {
newApprover = candidateID;
gs.addInfoMessage("Approval rerouted to Group Secondary Manager.");
break;
}
}
}
}
}
if (newApprover) {
current.approver = newApprover;
return; // Stop here to save changes
}
}
}
} else {
gs.info("DEBUG: Could not determine Group ID for RITM: " + current.sysapproval.number);
}
// current.setAbortAction(true);
})(current, previous);
Happy to help! If this resolved your issue, kindly mark it as the correct answer ✅ and Helpful 👍 and close the thread 🔒 so others can benefit too.
Warm Regards,
Deepak Sharma
Community Rising Star 2025
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
what's your actual business requirement here?
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
@KOLLATIY - I second with Ankur, What is the business requirement here?
