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.

How to remove group to be restricted from orchestration ?

thirumala2
Tera Guru

Hi All ,

 

I have a requirement where I am little stuck with scripting. Kindly need some guidance from experts .

We have a requirement where , there are number of groups if a user selects any of the groups from the list except that grp remaining should be proceeded for orchestration .

 

Comments added within script for better understanding .

 

 

 

//workflow.scratchpad.groupNames=workflow.scratchpad.grps;

workflow.scratchpad.restricted_groups = '';
//restrict few groups for orchestration -STRY0417475

var arrayGroups = workflow.scratchpad.grps;  
//from here I am taking values from user selected from item

workflow.scratchpad.restricted_groups = arrayGroups.split(",");
gs.log(current.number + 'workflow.scratchpad.groupName' + workflow.scratchpad.restricted_groups);

var gr1 = new GlideRecord('sys_user_group');

//this is the list from from which if groups are there we have exclude those from orchestration 

gr1.addEncodedQuery('nameLIKEROL-PCCG_CHS_MTL-ag-EBT_Net-V5^ORnameLIKEROL-PCCG_CHS_TOR-ag-EBT_Net-V5-RX^ORnameLIKEROL-PCCG_CHS_MTL-ag-EBT_Net_Admin-V5^ORnameLIKEROL-SSG-WF-SFTP-Users^ORnameLIKEROL-RPA-OFFICE-BOTS-ACCESS^ORnameLIKEROL-WF-PR-Development^ORnameLIKEROL-WF-PR-ADMIN^ORnameLIKEROL-WF-PR-ADMIN-EI^ORnameLIKEROL-WF-PR-Functional^ORnameLIKEROL-SSG-FORESCOUT^ORnameLIKERUN_NETWORK_NOC_CAN^ORnameLIKERUN_NETWORK_NOC_US_INTL^ORnameLIKERUN_NETWORKS_NOC_ESC^ORnameLIKEROL-ISS Admin^ORnameLIKEROL-ISS Operator^ORnameLIKEBMOUNICAGRP^ORnameLIKEBMOUNICAADM^ORnameLIKEADM-EPS-PE-BSM^ORnameLIKEROL-ISS^ORnameLIKEROL-MIDS Privacy^ORnameLIKEROL-PRODOPS-ACHDT^ORnameLIKEEI_BOWSS^ORnameLIKEROL - LEXMARK MARKVISION ACCESS^ORnameLIKEROL- EJM^ORnameLIKEROL-DevOpsToolsDT^ORnameLIKEROL-BMO-PR-27497-RDMP^ORnameLIKEROL-Basel_CAT_App^ORnameLIKEROL-Vignette BMO Canada^ORnameLIKEROL-SDE^ORnameLIKErol-forescout^ORnameLIKEROL-Centaur-RAF^ORnameLIKEROL-STBG^ORnameLIKEROL-IronPort');
gr1.query();
while (gr1.next()) {
    var arr_groups_restrict = gr1.sys_id.toString();
    gs.log(current.number + 'thiru 3' + arr_groups_restrict);

//here I am facing difficulty in removing the restricted group from user selected groups

    for (var i = 0; i < workflow.scratchpad.restricted_groups.length; i++) {
        if (workflow.scratchpad.restricted_groups.indexOf(arr_groups_restrict[i]) > -1) {
            workflow.scratchpad.restricted_groups.replaceAll(arr_groups_restrict[i], '');
            gs.log(current.number + 'array' + arr_groups_restrict[i]);
            if (workflow.scratchpad.restricted_groups.indexOf(',,') > -1) {
                workflow.scratchpad.restricted_groups.replaceAll(',,', ',');
            }
        }
        workflow.scratchpad.groupNames = workflow.scratchpad.restricted_groups;
    }
}
gs.log(current.number + 'resrtict groups thiru' + workflow.scratchpad.groupNames);


 

 

1 ACCEPTED SOLUTION

It worked from the modified encoded query:

 

@AshishKM Thank you so much for the help 😊.

 

 

var gr1 = new GlideRecord('sys_user_group');
gr1.addEncodedQuery('sys_idIN' + restGroupArray + '^name!=ROL-PCCG_CHS_MTL-ag-EBT_Net-V5^name!=ROL-PCCG_CHS_TOR-ag-EBT_Net-V5-RX^name!=ROL-PCCG_CHS_MTL-ag-EBT_Net_Admin-V5^name!=ROL-SSG-WF-SFTP-Users^name!=ROL-RPA-OFFICE-BOTS-ACCESS^name!=ROL-WF-PR-Development^name!=ROL-WF-PR-ADMIN^name!=ROL-WF-PR-ADMIN-EI^name!=ROL-WF-PR-Functional^name!=ROL-SSG-FORESCOUT^name!=RUN_NETWORK_NOC_CAN^name!=RUN_NETWORK_NOC_US_INTL^name!=RUN_NETWORK_NOC_US_INTL^name!=ROL-ISS Admin^name!=ROL-ISS Operator^name!=BMOUNICAGRP^name!=BMOUNICAADM^nameNOT LIKEADM-EPS-PE-BSM^nameNOT LIKEROL-ISS^nameNOT LIKEROL-MIDS Privacy^nameNOT LIKEROL-PRODOPS-ACHDT^nameNOT LIKEEI_BOWSS^nameNOT LIKEROL - LEXMARK MARKVISION ACCESS^nameNOT LIKEROL- EJM^nameNOT LIKEROL-DevOpsToolsDT^nameNOT LIKEROL-BMO-PR-27497-RDMP^nameNOT LIKEROL-Basel_CAT_App^nameNOT LIKEROL-Vignette BMO Canada^nameNOT LIKEROL-SDE^nameNOT LIKErol-forescout^nameNOT LIKEROL-Centaur-RAF^nameNOT LIKEROL-STBG^nameNOT LIKEROL-IronPort');
gr1.query();
while (gr1.next()) {
    workflow.scratchpad.groupNames = gr1.sys_id;
}
gs.log(current.number + 'Groups' + workflow.scratchpad.groupNames);

 

View solution in original post

14 REPLIES 14

AshishKM
Kilo Patron
Kilo Patron

Hi @thirumala2 , 

Please review the logic again and focus on following point.

 

This scratchpad value is array and you used in for loop

workflow.scratchpad.restricted_groups = arrayGroups.split(",");

but this is inside the while loop and not an array , gr1 represent the single record for each iteration of while loop

var arr_groups_restrict = gr1.sys_id.toString();

if so the following if condition will not execute property

   if (workflow.scratchpad.restricted_groups.indexOf(arr_groups_restrict[i]) > -1) {

 

as per my understanding, you are trying to remove groups from below arrayList based on matched, given in encoded query. 

workflow.scratchpad.restricted_groups

 

Try the updated part from below code and test.

 

while (gr1.next()) {
    var arr_groups_restrict = gr1.sys_id.toString();
    workflow.scratchpad.restricted_groups.splice( workflow.scratchpad.restricted_groups.indexOf(arr_groups_restrict),1);                                       
 
}
//after while loop cpmplete, set the groupNames ( which is actually sys_id )
workflow.scratchpad.groupNames = workflow.scratchpad.restricted_groups;

 

-Thanks,

AshishKMishra

 


Please mark this response as correct and helpful if it helps you can mark more that one reply as accepted solution

HI Ashish,

Thanks for the  reply .

But its not working ,in logs it showing empty for that variable.

workflow.scratchpad.restricted_groups = '';
//restrict few groups for orchestration -STRY0417475
var arrayGroups = workflow.scratchpad.grps;
workflow.scratchpad.restricted_groups = arrayGroups.split(",");
gs.log(current.number + 'workflow.scratchpad.groupName' + workflow.scratchpad.restricted_groups);

var gr1 = new GlideRecord('sys_user_group');
gr1.addEncodedQuery('nameLIKEROL-PCCG_CHS_MTL-ag-EBT_Net-V5^ORnameLIKEROL-PCCG_CHS_TOR-ag-EBT_Net-V5-RX^ORnameLIKEROL-PCCG_CHS_MTL-ag-EBT_Net_Admin-V5^ORnameLIKEROL-SSG-WF-SFTP-Users^ORnameLIKEROL-RPA-OFFICE-BOTS-ACCESS^ORnameLIKEROL-WF-PR-Development^ORnameLIKEROL-WF-PR-ADMIN^ORnameLIKEROL-WF-PR-ADMIN-EI^ORnameLIKEROL-WF-PR-Functional^ORnameLIKEROL-SSG-FORESCOUT^ORnameLIKERUN_NETWORK_NOC_CAN^ORnameLIKERUN_NETWORK_NOC_US_INTL^ORnameLIKERUN_NETWORKS_NOC_ESC^ORnameLIKEROL-ISS Admin^ORnameLIKEROL-ISS Operator^ORnameLIKEBMOUNICAGRP^ORnameLIKEBMOUNICAADM^ORnameLIKEADM-EPS-PE-BSM^ORnameLIKEROL-ISS^ORnameLIKEROL-MIDS Privacy^ORnameLIKEROL-PRODOPS-ACHDT^ORnameLIKEEI_BOWSS^ORnameLIKEROL - LEXMARK MARKVISION ACCESS^ORnameLIKEROL- EJM^ORnameLIKEROL-DevOpsToolsDT^ORnameLIKEROL-BMO-PR-27497-RDMP^ORnameLIKEROL-Basel_CAT_App^ORnameLIKEROL-Vignette BMO Canada^ORnameLIKEROL-SDE^ORnameLIKErol-forescout^ORnameLIKEROL-Centaur-RAF^ORnameLIKEROL-STBG^ORnameLIKEROL-IronPort');
gr1.query();
while (gr1.next()) {
    var arr_groups_restrict = gr1.sys_id.toString();
    workflow.scratchpad.restricted_groups.splice(workflow.scratchpad.restricted_groups.indexOf(arr_groups_restrict), 1);

}
workflow.scratchpad.groupNames = workflow.scratchpad.restricted_groups;
gs.log(current.number + 'resrtict groups thiru' + workflow.scratchpad.groupNames);





gs.log(current.number + 'yashvstring' + workflow.scratchpad.groupNames);

gs.log(current.number + 'workflow.scratchpad.groupName' + workflow.scratchpad.groupNames);

thirumala2_0-1702081643005.png

 

Try this updated code

workflow.scratchpad.restricted_groups = '';
//restrict few groups for orchestration -STRY0417475
var arrayGroups = workflow.scratchpad.grps;
workflow.scratchpad.restricted_groups = arrayGroups.split(",").toString();
gs.log(current.number + 'workflow.scratchpad.groupName' + workflow.scratchpad.restricted_groups);

var gr1 = new GlideRecord('sys_user_group');
gr1.addEncodedQuery('nameLIKEROL-PCCG_CHS_MTL-ag-EBT_Net-V5^ORnameLIKEROL-PCCG_CHS_TOR-ag-EBT_Net-V5-RX^ORnameLIKEROL-PCCG_CHS_MTL-ag-EBT_Net_Admin-V5^ORnameLIKEROL-SSG-WF-SFTP-Users^ORnameLIKEROL-RPA-OFFICE-BOTS-ACCESS^ORnameLIKEROL-WF-PR-Development^ORnameLIKEROL-WF-PR-ADMIN^ORnameLIKEROL-WF-PR-ADMIN-EI^ORnameLIKEROL-WF-PR-Functional^ORnameLIKEROL-SSG-FORESCOUT^ORnameLIKERUN_NETWORK_NOC_CAN^ORnameLIKERUN_NETWORK_NOC_US_INTL^ORnameLIKERUN_NETWORKS_NOC_ESC^ORnameLIKEROL-ISS Admin^ORnameLIKEROL-ISS Operator^ORnameLIKEBMOUNICAGRP^ORnameLIKEBMOUNICAADM^ORnameLIKEADM-EPS-PE-BSM^ORnameLIKEROL-ISS^ORnameLIKEROL-MIDS Privacy^ORnameLIKEROL-PRODOPS-ACHDT^ORnameLIKEEI_BOWSS^ORnameLIKEROL - LEXMARK MARKVISION ACCESS^ORnameLIKEROL- EJM^ORnameLIKEROL-DevOpsToolsDT^ORnameLIKEROL-BMO-PR-27497-RDMP^ORnameLIKEROL-Basel_CAT_App^ORnameLIKEROL-Vignette BMO Canada^ORnameLIKEROL-SDE^ORnameLIKErol-forescout^ORnameLIKEROL-Centaur-RAF^ORnameLIKEROL-STBG^ORnameLIKEROL-IronPort');
gr1.query();
var arr_groups_restrict;
while (gr1.next()) {
    arr_groups_restrict = gr1.sys_id.toString();
    // check arr_groups_restrict ( sys_id ) exist in the restricted group arrayList
    if(workflow.scratchpad.restricted_groups.indexOf(arr_groups_restrict) >-1){
          //remove that sys_id from restricted group arrayList   
          workflow.scratchpad.restricted_groups.splice(arr_groups_restrict, 1);
        }
}
workflow.scratchpad.groupNames = workflow.scratchpad.restricted_groups;
gs.log(current.number + 'resrtict groups thiru' + workflow.scratchpad.groupNames);
gs.log(current.number + 'yashvstring' + workflow.scratchpad.groupNames);
gs.log(current.number + 'workflow.scratchpad.groupName' + workflow.scratchpad.groupNames);

 

-Thanks


Please mark this response as correct and helpful if it helps you can mark more that one reply as accepted solution

hi Ashish ,

I have added log for index of value it showing -1  and that y it not getting into if loop.

var gr1 = new GlideRecord('sys_user_group');
gr1.addEncodedQuery('nameLIKEROL-PCCG_CHS_MTL-ag-EBT_Net-V5^ORnameLIKEROL-PCCG_CHS_TOR-ag-EBT_Net-V5-RX^ORnameLIKEROL-PCCG_CHS_MTL-ag-EBT_Net_Admin-V5^ORnameLIKEROL-SSG-WF-SFTP-Users^ORnameLIKEROL-RPA-OFFICE-BOTS-ACCESS^ORnameLIKEROL-WF-PR-Development^ORnameLIKEROL-WF-PR-ADMIN^ORnameLIKEROL-WF-PR-ADMIN-EI^ORnameLIKEROL-WF-PR-Functional^ORnameLIKEROL-SSG-FORESCOUT^ORnameLIKERUN_NETWORK_NOC_CAN^ORnameLIKERUN_NETWORK_NOC_US_INTL^ORnameLIKERUN_NETWORKS_NOC_ESC^ORnameLIKEROL-ISS Admin^ORnameLIKEROL-ISS Operator^ORnameLIKEBMOUNICAGRP^ORnameLIKEBMOUNICAADM^ORnameLIKEADM-EPS-PE-BSM^ORnameLIKEROL-ISS^ORnameLIKEROL-MIDS Privacy^ORnameLIKEROL-PRODOPS-ACHDT^ORnameLIKEEI_BOWSS^ORnameLIKEROL - LEXMARK MARKVISION ACCESS^ORnameLIKEROL- EJM^ORnameLIKEROL-DevOpsToolsDT^ORnameLIKEROL-BMO-PR-27497-RDMP^ORnameLIKEROL-Basel_CAT_App^ORnameLIKEROL-Vignette BMO Canada^ORnameLIKEROL-SDE^ORnameLIKErol-forescout^ORnameLIKEROL-Centaur-RAF^ORnameLIKEROL-STBG^ORnameLIKEROL-IronPort');
gr1.query();
var arr_groups_restrict;
while (gr1.next()) {
    arr_groups_restrict = gr1.sys_id.toString();
    // check arr_groups_restrict ( sys_id ) exist in the restricted group arrayList
    gs.log(current.number + 'test' + workflow.scratchpad.restricted_groups.indexOf(arr_groups_restrict));
    if (workflow.scratchpad.restricted_groups.indexOf(arr_groups_restrict) > -1) {
        //remove that sys_id from restricted group arrayList   
        workflow.scratchpad.restricted_groups.splice(arr_groups_restrict, 1);
    }
}
workflow.scratchpad.groupNames = workflow.scratchpad.restricted_groups;
gs.log(current.number + 'resrtict groups thiru' + workflow.scratchpad.groupNames);
gs.log(current.number + 'yashvstring' + workflow.scratchpad.groupNames);
gs.log(current.number + 'workflow.scratchpad.groupName' + workflow.scratchpad.groupNames);

thirumala2_0-1702310588383.png