
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-07-2021 05:00 AM
Hi Guys,
I am having troubles with following function, which is checking whether user is member of a group and should also prevent looping (check is done elsewhere). Right after I call a function, I am adding userID to array of "checkedManagers", but if I then check if the array contains such userID, result is always false.
Code:
var checkedManagers = new Array();
function isApprovingManager(userID) {
checkedManagers.push(userID);
//DEBUG CODE
gs.addInfoMessage(userID + " added to checkedManagers: " + checkedManagers.toString());
if (checkedManagers.includes(userID))
{
gs.addInfoMessage(userID + " LISTED");
}
else
{
gs.addInfoMessage(userID + " NOT LISTED");
}
//DEBUG CODE
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('user', userID);
gr.query();
while (gr.next()) {
if (gr.group == 'ddf3d1dedb4f20d0b56645403996196c') //Approving Manager = ddf3d1dedb4f20d0b56645403996196c
{
return true;
}
}
return false;
}
Debug may look like:
2e7e51fcdb69470018aa9ee3db9619d8 added to checkedManagers: 00b0d9a1db761f80ba3f92b8db9619cf,c70fd9ecdb254700fd889414db961985,413539c0dbff2b40ba3f92b8db9619c9,0d9f1ae1dbd01410e98c6d6bd39619fb,2e7e51fcdb69470018aa9ee3db9619d8,2e7e51fcdb69470018aa9ee3db9619d8
2e7e51fcdb69470018aa9ee3db9619d8 NOT LISTED
Any ideas why the check fails?
I am quite sure its something stupidly simple, as always...
Thanks,
Patrik
Solved! Go to Solution.
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-12-2021 12:03 PM
Log the type of the userID variable you push into the array to make sure it's a string.
gs.info("Typeof userID: " + typeof userID);
checkedManagers.push(userID);

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-07-2021 05:16 AM
I'm not finding support for the includes() function for arrays in my PDI.
var abc = ["A", "B", "C"];
gs.info(abc.includes("B")); // displays undefined
gs.info(abc.indexOf("B")); // displays 1
Try this conditional using indexOf() instead instead:
if (checkedManagers.indexOf(userID) != -1)
{
gs.addInfoMessage(userID + " LISTED");
}
else
{
gs.addInfoMessage(userID + " NOT LISTED");
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-07-2021 06:59 AM
Rogers,
Funny, I was using .indexOf() before and then I changed to includes()... so that solved the issue in the function above!
One more place where I am having issue with this (line 7):
function getApprovingManager(userID) {
var result = "no";
var gr = new GlideRecord("sys_user");
gr.get(userID);
if (gr.manager) {
if (checkedManagers.indexOf(gr.manager) == -1) {
//DEBUG CODE
gs.addInfoMessage(gr.manager + " was NOT yet checked: " +checkedManagers.indexOf(gr.manager));
gs.addInfoMessage(checkedManagers.toString());
//DEBUG CODE
if (isApprovingManager(gr.manager)) {
gs.addInfoMessage(gr.manager.user_name + " is Approving Manager");
workflow.scratchpad.approver = gr.manager;
result = "yes";
} else {
gs.addInfoMessage(gr.manager.user_name + " is NOT Approving Manager");
result = this.getApprovingManager(gr.manager);
}
} else {
gs.addInfoMessage(gr.manager.user_name + " has been already checked");
return result;
}
} else {
gs.addInfoMessage(gr.user_name + " has no manager");
result = "no";
}
return result;
}
Debug output:
2e7e51fcdb69470018aa9ee3db9619d8 was NOT yet checked: -1
00b0d9a1db761f80ba3f92b8db9619cf,c70fd9ecdb254700fd889414db961985,413539c0dbff2b40ba3f92b8db9619c9,0d9f1ae1dbd01410e98c6d6bd39619fb,2e7e51fcdb69470018aa9ee3db9619d8,2e7e51fcdb69470018aa9ee3db9619d8,2e7e51fcdb69470018aa9ee3db9619d8,2e7e51fcdb69470018aa9ee3db9619d8
"2e7e51fcdb69470018aa9ee3db9619d8" Is in the array multiple times, but indexOf() still return -1.
Any ideas what I am doing wrong this time?
Full code if it helps anyone:
var requestedFor = current.request.requested_for;
gs.addInfoMessage(" Requested for: " + requestedFor.user_name);
var checkedManagers = new Array();
activity.result = getApprovingManager(requestedFor);
function getApprovingManager(userID) {
var result = "no";
var gr = new GlideRecord("sys_user");
gr.get(userID);
if (gr.manager) {
if (checkedManagers.indexOf(gr.manager) == -1) {
gs.addInfoMessage(gr.manager + " was NOT yet checked: " +checkedManagers.indexOf(gr.manager));
gs.addInfoMessage(checkedManagers.toString());
if (isApprovingManager(gr.manager)) {
gs.addInfoMessage(gr.manager.user_name + " is Approving Manager");
workflow.scratchpad.approver = gr.manager;
result = "yes";
} else {
gs.addInfoMessage(gr.manager.user_name + " is NOT Approving Manager");
result = this.getApprovingManager(gr.manager);
}
} else {
gs.addInfoMessage(gr.manager.user_name + " has been already checked");
return result;
}
} else {
gs.addInfoMessage(gr.user_name + " has no manager");
result = "no";
}
return result;
}
function isApprovingManager(userID) {
checkedManagers.push(userID);
//gs.addInfoMessage(userID + " added to checkedManagers: " + checkedManagers.toString());
/*if (checkedManagers.indexOf(userID) != -1) {
gs.addInfoMessage(userID + " LISTED");
} else {
gs.addInfoMessage(userID + " NOT LISTED");
}*/
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('user', userID);
gr.query();
while (gr.next()) {
//gs.addInfoMessage(userID.user_name + " is member of " + gr.group);
if (gr.group == 'ddf3d1dedb4f20d0b56645403996196c') //Approving Manager = ddf3d1dedb4f20d0b56645403996196c
{
return true;
}
}
return false;
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-07-2021 07:22 AM
When you test whether gr.manager is in the array, use gr.manager.getUniqueValue() so that you're looking for a string in an array of strings. gr.manager is an object so it wouldn't be found in the checkManagers array.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-07-2021 08:39 AM
Ok, I see why, so I changed code to:
if (checkedManagers.indexOf(gr.manager.getUniqueValue()) == -1) {
gs.addInfoMessage(gr.manager + " was NOT yet checked: " +checkedManagers.indexOf(gr.manager.getUniqueValue()));
gs.addInfoMessage("checkedManagers: " + checkedManagers.toString());
But, result seems to be the same:-/
2e7e51fcdb69470018aa9ee3db9619d8 was NOT yet checked: -1
checkedManagers: 00b0d9a1db761f80ba3f92b8db9619cf,c70fd9ecdb254700fd889414db961985,413539c0dbff2b40ba3f92b8db9619c9,0d9f1ae1dbd01410e98c6d6bd39619fb,2e7e51fcdb69470018aa9ee3db9619d8,2e7e51fcdb69470018aa9ee3db9619d8,2e7e51fcdb69470018aa9ee3db9619d8,2e7e51fcdb69470018aa9ee3db9619d8