Toggle scripter on flow designer to access the list collector variables.

ar1
Kilo Sage
Hi All,

We do have a catalog item with list collector variable and we're trying to access via toggle script with below script and we're getting sys_id on the logs level but returned ones are not available on group table level.

Could you please check the below one let us know if any changes are required.

Advance thanks.


var aprvlGroups = fd_data._1__get_catalog_variables.entitlements;
gs.log("aprvlGroups: "+aprvlGroups,"WF-TEST");
var aprvlGroupsArray = aprvlGroups.split(",");
gs.log("aprvlGroupsArray: "+aprvlGroupsArray,"WF-TEST");
gs.log("aprvlGroupsArray2: "+aprvlGroupsArray.toString(),"WF-TEST");
var approvers = [];
for (var i = 0; i < aprvlGroupsArray.length; i++) {
var gap = new GlideRecord('sys_user_group');
gap.addQuery('sys_id',aprvlGroupsArray[i].toString());
gap.query();
 
while (gap.next()){
    if(gap.manager){
    // Add group manager sys_id to Approvers array
approvers.push(gap.manager.toString());
 
}
}
}
 
return approvers;
1 ACCEPTED SOLUTION

ar1
Kilo Sage
Below script working fine for us.

Thanks Ankur...

var entitlements = fd_data._1__get_catalog_variables.entitlements;
gs.log("Entitlements: " +entitlements);
 
var entitlementArray = entitlements.split(",");
var approvers = [];
var groups = [];
for (var i = 0; i < entitlementArray.length; i++) {
    var getCorp = new GlideRecord('abc');
    getCorp.addQuery('sys_id', entitlementArray[i]);
    getCorp.query();
    while (getCorp.next()) {
        groups.push(getCorp.customproperty19.toString());
    }
}
 
// Get group managers from groups
gs.log("Rows: " + i);
var grpMember = new GlideRecord('sys_user_group');
grpMember.addQuery('sys_id', 'IN', groups);
grpMember.query();
gs.log("Managers: " + grpMember.getRowCount(), "hello");
while (grpMember.next()) {
    approvers.push(grpMember.manager.sys_id);
}

 

gs.log("Approvers: " + approvers.toString(), "hello");
var deDup = new ArrayUtil();
var clnApprovers = deDup.unique(approvers);
gs.log("Approvers: " + clnApprovers.toString(), "hello");
return clnApprovers.toString();

View solution in original post

3 REPLIES 3

Ankur Bawiskar
Tera Patron
Tera Patron

@ar1 

is the list collector referring to sys_user_group table only?

are you sure those groups have manager in it?

If answer to both is yes then it should have approvers array with all managers

what prints in the array?

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hi Ankur,
Thanks for the response.

Upon checking we found out that, on "entitlements" level there is one more field called SysIDNumber where the sys_id is storing and these two fields under "ABC " table and we need to pass the SysIDNumber  stored sys_id to the sys_user_group table query level.



Could you please help us here.

Advance thanks.

ar1
Kilo Sage
Below script working fine for us.

Thanks Ankur...

var entitlements = fd_data._1__get_catalog_variables.entitlements;
gs.log("Entitlements: " +entitlements);
 
var entitlementArray = entitlements.split(",");
var approvers = [];
var groups = [];
for (var i = 0; i < entitlementArray.length; i++) {
    var getCorp = new GlideRecord('abc');
    getCorp.addQuery('sys_id', entitlementArray[i]);
    getCorp.query();
    while (getCorp.next()) {
        groups.push(getCorp.customproperty19.toString());
    }
}
 
// Get group managers from groups
gs.log("Rows: " + i);
var grpMember = new GlideRecord('sys_user_group');
grpMember.addQuery('sys_id', 'IN', groups);
grpMember.query();
gs.log("Managers: " + grpMember.getRowCount(), "hello");
while (grpMember.next()) {
    approvers.push(grpMember.manager.sys_id);
}

 

gs.log("Approvers: " + approvers.toString(), "hello");
var deDup = new ArrayUtil();
var clnApprovers = deDup.unique(approvers);
gs.log("Approvers: " + clnApprovers.toString(), "hello");
return clnApprovers.toString();