Query glide list

robm
Kilo Expert

I am filtering a list collector down to a list of groups that are children of a specific group. Previously the parent/child relationship was 1:1 and it was easy to do:

var grpGR = new GlideRecord('sys_user_group');

  grpGR.addQuery('parent', deptName + '_SuggestedDLs');

  grpGR.query();

  while (grpGR.next()) {

            grpList.push(grpGR.sys_id + '');

  }

}

return grpList;

However, we now have a many to many relationship so that a group can have many parents. I created a glide list to accommodate this. How can I query for groups where the glide list contains the specific parent group?

1 ACCEPTED SOLUTION

Hi Pradeep,



Thanks, I got this working. I had to query the parent group first. Regarding the group_sysid, I should have been more clear. The parent group will be dynamic based on the department being passed.



function getDepartmentGroups(deptID){


        var grpList = [];


        var deptGR = new GlideRecord('cmn_deprtment');


        if(deptGR.get(deptID)){


                  var deptName = DeptGR.name.replace(',', '');//Some of the departments contain commas, but the groups do not


                  var parentGroup = new GlideRecord('sys_user_group');


                  parentGroup.addQuery('name', deptName + '_SuggestedDLs');


                  parentGroup.query();


                  while(parentGroup.next()){


                            var grpGR - new GlideRecord('sys_user_group');


                            var grpGR.addQuery('u_parent, 'CONTAINS', parentGroup.sys_id);


                            grpGR.query();


                            while(grpGR.next()){


                                      grpList.push(grpGR.sys_id + '');      


                            }


                  }


        }


        return grpList;


}


View solution in original post

3 REPLIES 3

Pradeep Sharma
ServiceNow Employee
ServiceNow Employee

Hi Robbie,



You have to change 2nd line to


grpGR.addQuery('parent','IN', GROUP_SYSID);



However I would suggest not to hardcode the "GROUP_SYSID" in a variable and instead create a property and then fetch the sys_id via property i.e gs.getProperty('Property Name'); More info here.


Adding a Property - ServiceNow Wiki


GlideRecord - ServiceNow Wiki


Hi Pradeep,



Thanks, I got this working. I had to query the parent group first. Regarding the group_sysid, I should have been more clear. The parent group will be dynamic based on the department being passed.



function getDepartmentGroups(deptID){


        var grpList = [];


        var deptGR = new GlideRecord('cmn_deprtment');


        if(deptGR.get(deptID)){


                  var deptName = DeptGR.name.replace(',', '');//Some of the departments contain commas, but the groups do not


                  var parentGroup = new GlideRecord('sys_user_group');


                  parentGroup.addQuery('name', deptName + '_SuggestedDLs');


                  parentGroup.query();


                  while(parentGroup.next()){


                            var grpGR - new GlideRecord('sys_user_group');


                            var grpGR.addQuery('u_parent, 'CONTAINS', parentGroup.sys_id);


                            grpGR.query();


                            while(grpGR.next()){


                                      grpList.push(grpGR.sys_id + '');      


                            }


                  }


        }


        return grpList;


}


Hi Pradeep,

 

I am trying to hide options on a field of type "list".

I am trying to achieve this on knowledge form.

for a Knowledge Base A, "can read" should display only A,B,C

for a Knowledge Base B, "can read" should display only X,Y,Z

Can read is a field of type list referencing "Uer Criteria"table.

 

Please assist

Thankyou