How to change the state of a requested catalog item based off status of manager of a group

gunishi
Tera Guru

Hi all, 

 

I have the following requirements:

 

• Once request is submitted approval should go to Manager of the group ‘Food Warriors’.

• Approval Conditions-

    o If manager of the group is missing/inactive then request should get closed cancelled.

    o If manager of the group rejects the requests then it should be moved to rejected state.

 

How would I implement this?

 

For the first task I had initially added an approval - user task to my workflow and added the following script:

 

answer = [];

var gr = new GlideRecord('sys_user_group');

gr.addQuery('sys_id', 'c9666099973131104a02bcb3f153afb8');

gr.query();

while(gr.next()){

var mng = gr.manager;

}

answer.push('mng');

 

However, I then realised that I wouldn't be able to implement the last two bullet points. Workflow is the tool that I am struggling the most with on ServiceNow so any help would be greatly appreciated. 

 

Kind regards , 

G

3 ACCEPTED SOLUTIONS

@gunishi Please refer the below script for IF Activity

answer = ifScript();

function ifScript() {
    var gr = new GlideRecord('sys_user_group');
    gr.addQuery('sys_id', 'c9666099973131104a02bcb3f153afb8');
    gr.query();
    if (gr.next()) {
        return 'yes';
    }
    return 'no';
}

 

AnveshKumarM_0-1697549578741.png

 

AnveshKumarM_1-1697549594602.png

 

 

And in your Approval script, I corrected a mistake.

answer = [];
var gr = new GlideRecord('sys_user_group');
gr.addQuery('sys_id', 'c9666099973131104a02bcb3f153afb8');
gr.query();
var mng = '';
if(gr.next()){
var mng = gr.manager;
}
answer.push(mng);

 

 

Thanks,
Anvesh

View solution in original post

Harsh_Deep
Giga Sage
Giga Sage

Before going for approval activity in WorkFlow, please have another IF activity where you check if the Group manager is Missing or Inactive-

in the IF block use this Script 

answer = ifScript();

function ifScript() {
    var gr = new GlideRecord('sys_user_group');
    gr.addQuery('sys_id', 'c9666099973131104a02bcb3f153afb8');
    gr.addQuery('active', 'ture');
    gr.query();
    if (gr.next()) {
        return 'yes';
    }
    return 'no';
}

 

 IF manager is available link to Approval Activity otherwise set the state to closed complete using set values activity the end the flow.

If my answer has helped with your question, please mark my answer as accepted solution and give a thumb up.👍

View solution in original post

Uday Soni05
Tera Guru

Hi @gunishi ,

Before going for approval activity in WorkFlow, please have another IF activity where you check if the Group has manager or not, IF manager is available link to Approval Activity otherwise set the state to closed complete using set values activity the end the flow.

 

 

 

answer = ifScript();

function ifScript(){
var group = new GlideRecord('sys_user_group');
group.addQuery('sys_id','8a5055c9c61122780043563ef53438e3');
group.query();
if(group.next()){
if(group.manager){
if(group.manager.active == true){
return "yes";
}
return "no";
}
return "no";

}
return "no";
}

 

Screenshot 2023-10-17 at 7.16.42 PM.png

View solution in original post

13 REPLIES 13

AnveshKumar M
Tera Sage
Tera Sage

Hi @gunishi 

Before going for approval activity in WorkFlow, please have another IF activity where you check if the Group has manager or not, IF manager is available link to Approval Activity otherwise set the state to closed complete using set values activity the end the flow.

 

Please mark my answer helpful and accept as solution if it helped you 👍✔️

Thanks,
Anvesh

@gunishi Please refer the below script for IF Activity

answer = ifScript();

function ifScript() {
    var gr = new GlideRecord('sys_user_group');
    gr.addQuery('sys_id', 'c9666099973131104a02bcb3f153afb8');
    gr.query();
    if (gr.next()) {
        return 'yes';
    }
    return 'no';
}

 

AnveshKumarM_0-1697549578741.png

 

AnveshKumarM_1-1697549594602.png

 

 

And in your Approval script, I corrected a mistake.

answer = [];
var gr = new GlideRecord('sys_user_group');
gr.addQuery('sys_id', 'c9666099973131104a02bcb3f153afb8');
gr.query();
var mng = '';
if(gr.next()){
var mng = gr.manager;
}
answer.push(mng);

 

 

Thanks,
Anvesh

Hi @gunishi 

OOTB Closed cancelled will not be there. Instead You can set the stage  (not state) to Request Cancelled and state to Closed Skipped

Thanks,
Anvesh

Hi @AnveshKumar M 

 

This is brilliant, thank you so much for your time and help today. 

 

Kind regards, 

G