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.

Execute Scheduled Jobs From UI Action

Ramananth1
Giga Contributor

Hello Everyone,

I have a requirement like I need to trigger 5 scheduled jobs from UI Action(List Banner Button) script.

For that I have written the script, but the issue i am facing is the while loop is taking only one sys_id from among the 5 scheduled jobs sys_ids.

Please need a suggestion on this to trigger all the queried sys_ids

UI Action Script :

runScript();

function runScript() {
var gr = new GlideRecord('sysauto_script');
gr.addEncodedQuery('sys_idIN690f3396db61d014b4dbb5b9689619f7,b7c91c1cdbad5850ae12ebd848961961,5f4f9f93db559810ae12ebd8489619a7,f701102fdb51d810ae12ebd8489619b6,1a9199abdb511c10ae12ebd84896199d');
gr.query();
while (gr.next()) {
SncTriggerSynchronizer.executeNow(gr);
}

}

Thanks & Regards

Ramananth

1 ACCEPTED SOLUTION

Hi,

nope

1 event, 1 script action

for event - don't give any table

Note: this is just an assumption that the job would complete in 5mins as there is dependency between those jobs; you give approx your time

Sample UI action script:

Note: Ensure you give valid scheduled job sys_id in the parameter

runScript();

function runScript() {

// for 1st job
var gdt = new GlideDateTime();
gdt.addSeconds(300);
gs.eventQueueScheduled("your_event_name", '', job1SysId ,gs.getUserName(),gdt);

// for 2nd job
var gdt = new GlideDateTime();
gdt.addSeconds(600);
gs.eventQueueScheduled("your_event_name", '', job2SysId ,gs.getUserName(),gdt);

// for 3rd job
var gdt = new GlideDateTime();
gdt.addSeconds(900);
gs.eventQueueScheduled("your_event_name", '', job3SysId ,gs.getUserName(),gdt);

// for 4th job
var gdt = new GlideDateTime();
gdt.addSeconds(1200);
gs.eventQueueScheduled("your_event_name", '', job4SysId ,gs.getUserName(),gdt);

// for 5th job
var gdt = new GlideDateTime();
gdt.addSeconds(1500);
gs.eventQueueScheduled("your_event_name", '', job5SysId ,gs.getUserName(),gdt);

}

Sample Script Action Script

var jobSysId = event.parm1; // this gives you job sys_id sent when event triggered

var gr = new GlideRecord('sysauto_script');
gr.addQuery('sys_id', jobSysId);
gr.query();
if(gr.next()) {
SncTriggerSynchronizer.executeNow(gr);
}

Mark Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

18 REPLIES 18

Hi Ankur,

Thanks, your suggestion is good. But the i need some guidance to achieve this.

With respect to my requirement:

1) I need to create 5 events? and 5 Script Actions? for 5 Scheduled jobs.

2) You said that somewhere we have to give the order of executing the scheduled job and the time 5 minutes, where?

Please suggest me a brief idea on this.

Thanks in Advance

Ramananth

Hi,

nope

1 event, 1 script action

for event - don't give any table

Note: this is just an assumption that the job would complete in 5mins as there is dependency between those jobs; you give approx your time

Sample UI action script:

Note: Ensure you give valid scheduled job sys_id in the parameter

runScript();

function runScript() {

// for 1st job
var gdt = new GlideDateTime();
gdt.addSeconds(300);
gs.eventQueueScheduled("your_event_name", '', job1SysId ,gs.getUserName(),gdt);

// for 2nd job
var gdt = new GlideDateTime();
gdt.addSeconds(600);
gs.eventQueueScheduled("your_event_name", '', job2SysId ,gs.getUserName(),gdt);

// for 3rd job
var gdt = new GlideDateTime();
gdt.addSeconds(900);
gs.eventQueueScheduled("your_event_name", '', job3SysId ,gs.getUserName(),gdt);

// for 4th job
var gdt = new GlideDateTime();
gdt.addSeconds(1200);
gs.eventQueueScheduled("your_event_name", '', job4SysId ,gs.getUserName(),gdt);

// for 5th job
var gdt = new GlideDateTime();
gdt.addSeconds(1500);
gs.eventQueueScheduled("your_event_name", '', job5SysId ,gs.getUserName(),gdt);

}

Sample Script Action Script

var jobSysId = event.parm1; // this gives you job sys_id sent when event triggered

var gr = new GlideRecord('sysauto_script');
gr.addQuery('sys_id', jobSysId);
gr.query();
if(gr.next()) {
SncTriggerSynchronizer.executeNow(gr);
}

Mark Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hi Ankur, 

Thankyou for your sample script and suggestion.

I will work on this.

Thanks,

Ramananth

Do let us know

If my answer solved your issue, please mark my answer as Correct & 👍Helpful based on the Impact.

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hope you are doing good.

If you find my response solved your issue, please mark answer as Correct & Helpful to help others with the same response find the answer more quickly

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader