Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Trying to query list collector field on Incident form

alhicks
Tera Guru

I'm trying to change our Assignment Based workload script to query a list collector field instead of our select box field.   Tried several times (script below) but it's not working...:(

var assignTo = getLowestUser();

//gs.addInfoMessage("assigning to is " + assignTo);

current.assigned_to = assignTo;

function getLowestUser() {

var userList = new Array();

var cg = new GlideRecord('sys_user_grmember');

cg.addQuery('group', current.assignment_group);

if (current.assignment_group.getDisplayValue() == 'SD - Collaboration/Mobile') {

//cg.addQuery('user.u_service_desk_workload', 'SD-Collaboration/Mobile');     HERE'S THE PREVIOUS DROP DOWN SELECT FIELD

NOW TRYING TO QUERY A LIST FIELD.   IF THE LIST COLLECTOR CONTAINS THIS ASSIGNMENT GROUP.

//cg.addQuery('user.u_service_dsk_workload', 'LIKE', '591f507cf07d4d0c0f323fc297cb7d10');  

//cg.addOrCondition('user.u_service_dsk_workload', 'CONTAINS', '591f507cf07d4d0c0f323fc297cb7d10');  

//cg.addQuery(user.u_service_dsk_workload.toString().indexOf("591f507cf07d4d0c0f323fc297cb7d10") >-1);

cg.query();

while(cg.next()) {

var tech = cg.user.toString();

                                                                  TRIED TO QUERY HERE.

//if (cg.user.u_service_dsk_workload.toString().indexOf("591f507cf07d4d0c0f323fc297cb7d10") >-1){

//if (cg.user.u_service_dsk_workload, 'LIKE', '591f507cf07d4d0c0f323fc297cb7d10'){

var cnt = countTickets(tech);

//gs.addInfoMessage("Tech counts " + cg.user.name + ' ' + cnt + " " + tech);

userList.push( { sys_id: tech, name: cg.user.name, count: cnt } );

}

for(var i=0; i < userList.length; i++) {

//gs.addInfoMessage(userList.sys_id + " " + userList.name + " " + userList.count);

}

userList.sort(function(a, b) {

//gs.addInfoMessage("Sorting: " + a.sys_id + "(" + a.count + "); " + b.sys_id + "(" + a.count + ")");

return a.count - b.count; });

if (userList.length <= 0)

return "";

return userList[0].sys_id;

}

function countTickets(tech){

var ct = new GlideRecord('incident');

ct.addQuery('assigned_to',tech);

ct.addQuery('active',true);

ct.query();

return ct.getRowCount();

}

}

1 ACCEPTED SOLUTION

Hello Andrea,


I think the problem (if I'm understanding the desired outcome correctly) might lie in both these lines:


cg.addQuery('user.u_service_dsk_workload', 'CONTAINS',   '591f507cf07d4d0c0f323fc297cb7d10');



cg.addQuery(user.u_service_dsk_workload.toString().indexOf("591f507cf07d4d0c0f323fc297cb7d10") > -1);



Am I understanding correctly that you only want members that are just in this group?   If so, I think the first query might just want to do a straight equals comparison by removing the 'CONTAINS' parameter, so just cg.addQuery('user.u_service_dsk_workload',   '591f507cf07d4d0c0f323fc297cb7d10');



It looks like the 2nd query is doing the same thing as the first from what I can see, so it could probably just be removed.   Also, if I'm incorrect in my understanding and you do want to you use the 'CONTAINS' parameter, I might still remove the 2nd line as it seems a bit redundant.   I also think for the 2nd line if you do want to use it, you would want to split that comparison out into 3 comparison parameters.   For instance:   cg.addQuery(user.u_service_dsk_workload.toString().indexOf("591f507cf07d4d0c0f323fc297cb7d10"), '>', -1);



Let me know if trying either of these changes produces the desired results.


View solution in original post

17 REPLIES 17

uluerje
Mega Expert

Try this:


cg.addQuery('user.sys_user.u_service_dsk_workload', 'IN',   '591f507cf07d4d0c0f323fc297cb7d10');


Thank you for the quick reply, that didn't seem to work either.   Here's a pic of my old field and new field.


find_real_file.png



var assignTo = getLowestUser();


//gs.addInfoMessage("assigning to is " + assignTo);


current.assigned_to = assignTo;



function getLowestUser() {


var userList = new Array();


var cg = new GlideRecord('sys_user_grmember');


cg.addQuery('group', current.assignment_group);


if (current.assignment_group.getDisplayValue() == 'SD - Collaboration/Mobile') {


//OLD FIELD


//cg.addQuery('user.u_service_desk_workload', 'SD-Collaboration/Mobile');


//NEW FIELD


cg.addQuery('user.u_service_dsk_workload', 'IN',   '591f507cf07d4d0c0f323fc297cb7d10');


//cg.addQuery('user.sys_user.u_service_dsk_workload', 'IN',   '591f507cf07d4d0c0f323fc297cb7d10');


//cg.addQuery('user.u_service_dsk_workload', 'LIKE', '591f507cf07d4d0c0f323fc297cb7d10');


//cg.addOrCondition('user.u_service_dsk_workload', 'CONTAINS', '591f507cf07d4d0c0f323fc297cb7d10');


//cg.addQuery(user.u_service_dsk_workload.toString().indexOf("591f507cf07d4d0c0f323fc297cb7d10") >-1);


cg.query();


while(cg.next()) {


var tech = cg.user.toString();


//if (cg.user.u_absent != true){


//if (cg.user.u_service_dsk_workload.toString().indexOf("591f507cf07d4d0c0f323fc297cb7d10") >-1){


//if (cg.user.u_service_dsk_workload, 'LIKE', '591f507cf07d4d0c0f323fc297cb7d10'){


var cnt = countTickets(tech);


//gs.addInfoMessage("Tech counts " + cg.user.name + ' ' + cnt + " " + tech);


userList.push( { sys_id: tech, name: cg.user.name, count: cnt } );


}


for(var i=0; i < userList.length; i++) {


//gs.addInfoMessage(userList.sys_id + " " + userList.name + " " + userList.count);


}


userList.sort(function(a, b) {


//gs.addInfoMessage("Sorting: " + a.sys_id + "(" + a.count + "); " + b.sys_id + "(" + a.count + ")");


return a.count - b.count; });



if (userList.length <= 0)


return "";


return userList[0].sys_id;


}



function countTickets(tech){


var ct = new GlideRecord('incident');


ct.addQuery('assigned_to',tech);


ct.addQuery('active',true);


ct.query();


return ct.getRowCount();


}


}


Ok, what about this:



var queryString = "user.u_service_dsk_workloadLIKE591f507cf07d4d0c0f323fc297cb7d10";


var cg = new GlideRecord('sys_user_grmember');


cg.addQuery('group', current.assignment_group);


cg.addEncodedQuery(queryString);


Not sure what the problem is, this one didn't work either..:(