- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 10:31 PM
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
Solved! Go to Solution.
- Labels:
-
Project Portfolio Management
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-30-2020 03:13 AM
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
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 11:06 PM
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
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 11:11 PM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 11:28 PM
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
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-30-2020 01:08 AM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-30-2020 01:19 AM
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
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader