Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

Create child RITMs from workflow-task (sn_sc.CartJS) is looping

Eckhard
Tera Contributor

Dear community,

I have a workflow task as part of a workflow/RITM which creates another RITM as "child" RITM.

I use sn_sc.CartJS and handover some variables for the new child-> this works perfect.

 

But now I have the need to loop over an array (e.g.: 3 items in it) and dependent on the array.length
I have to start several child RITM with sn_sc.CartJS where the variables then differ a bit.

 

The issue now is, that putting such a sn_sc.CartJS into a for loop, this ends in an endless loop and the system creates a new RITM every 2 sec.

 

Do you have another idea/approach how to implement this?

Many thanks

Best regards

Eckhard
P.S. I am on vancouver (Build tag: glide-vancouver-07-06-2023__patch6-01-11-2024)

 

4 REPLIES 4

Sohail Khilji
Kilo Patron

Share the script...


☑️ Please mark responses as HELPFUL or ACCEPT SOLUTION to assist future users in finding the right solution....

LinkedIn - Lets Connect

Sumanth16
Kilo Patron

Hi @Eckhard ,

 

ServiceNow provided workaround for this. Please refer to the below thread. 

 

https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB0869002

 

If I could help you with your Query then, please hit the Thumb Icon and mark it as Correct !!

 

Thanks & Regards,
Sumanth Meda

Dear both,

the KB article is more or less my situation - thanks. The proposed solution (setting a timer before sn_sc.CartJS)  is not clear to me. Does it mean a timer in the workflow to wait e.g.: 5 sec to reach the wf-step including the script?

Or is it a timer in my for...loop, which would be strange because a real "sleep" function is for my understanding not recommended (gs.sleep) in server side scripts.

 

Thanks

best regards

Eckhard

 

See here my function which is part of a central script include, that I call from the wf-task:

 

createOrder: function (cat_item, requested_for, variables, quantity) {
if (!quantity) {
quantity = "1";
}
var grCatItem = new GlideRecord("sc_cat_item");
if (grCatItem.get(cat_item)) {
var grUser = new GlideRecord("sys_user");
grUser.addQuery("sys_id", requested_for);
grUser.addActiveQuery();
grUser.query();
if (grUser.next()) {
var cart = new sn_sc.CartJS("childRequest");
cart.empty();
var request = {
sysparm_id: grCatItem.getValue("sys_id"),
sysparm_quantity: quantity,
sysparm_requested_for: grUser.getValue("sys_id"),
variables: variables,
};

cart.addToCart(request);
var checkoutInfo = cart.checkoutCart();
return checkoutInfo;
}
}
},

HISumanth,
unfortunately the proposed solution does not work.
I added a workflow timer (5 sec.) just before my task that creates several child items, but the situation stays the same.
Many RITM are created every 2 sec.

Do you have another idea?