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 Ramanath,

did you try adding row count for the query?

Also did you check whether the other jobs are present in queue? possibly they would trigger in couple of mins

Regards
Ankur

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

Hi Ankur,

Checking it, I need one more suggestion will the scheduled jobs execute as per the order defined in the Encoded Query? and can I specify the scheduled jobs to execute one after the other between intervals through the script.

Thanks,

Ramananth

Hi Ramanath,

the order of execution would depend on queue status

they all should be placed in queue once the while runs for every record

I won't recommend giving any interval unless there is any dependency between those

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,

There is a dependency, as these scheduled jobs updates a table with aggregated values from different tables.

The Update of records should happen in the sequence of the sys_ids that i provided in the Encoded Query.

As, i am wrapping up of all these scheduled jobs in a UI action to get the real time data as and when needed.

Thanks,

Ramananth

Hi,

in that case you would require the define the order somewhere

I would recommend using this approach; not tested though

1) create event in event registry table

2) create script action and associate the above event

in the UI Action code use eventQueueScheduled() to trigger each event after every 5mins and pass the job sys_id

The script action will then run the job sys_id passed to the event

This will ensure each job gets 5mins to run and get completed and then the 2nd will be running

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