I want to populate catalog form OOB duration field Delivery time on respected REQ & RITM form due date & estimated delivery?

Shantharao
Kilo Sage

Hi All,

We have OOB duration filed is available on catalog form view as below, 

I have to populate this OOB duration filed value in Associated or Generated REQ & RITMs, due_date & estimated delivery respectively, screen shots for reference.

find_real_file.png

find_real_file.png

find_real_file.png

 

1 ACCEPTED SOLUTION

Shantharao
Kilo Sage

before insert on sc_request

 

 

(function executeRule(current, previous /*null when async*/ ) {

/**
-> dues date will be the time it got assigned and delivery_time
-> created custom before insert business rule as per the busimess need
-> Auto populating delivery time of catalog item in the generated REQ
**/
var deliverDays;
var ritmRec = new GlideRecord("sc_req_item");
ritmRec.addQuery("request", current.getUniqueValue());
ritmRec.query();
while (ritmRec.next()) {
if (JSUtil.notNil(ritmRec.cat_item.delivery_time)) {
var deliveryTimeGlideDate = new GlideDateTime(ritmRec.cat_item.delivery_time);
var seconds = deliveryTimeGlideDate.getNumericValue() / 1000;
var openedGlideDate = new GlideDateTime(current.opened_at);
openedGlideDate.addSeconds(seconds);
current.due_date.setValue(openedGlideDate);
}
}
})(current, previous);

 

 

After Insert on sc_request

 

(function executeRule(current, previous /*null when async*/ ) {

/**
-> dues date will be the time it got assigned and delivery_time
-> created custom after insert business rule as per the busimess need
-> Auto populating delivery time of catalog item in the generated RITMs due_date & expected delivery
**/
var deliverDays;
var ritmRec = new GlideRecord("sc_req_item");
ritmRec.addQuery("request", current.getUniqueValue());
ritmRec.query();
while (ritmRec.next()) {
if (JSUtil.notNil(ritmRec.cat_item.delivery_time)) {
var deliveryTimeGlideDate = new GlideDateTime(ritmRec.cat_item.delivery_time);
var seconds = deliveryTimeGlideDate.getNumericValue() / 1000;
var openedGlideDate = new GlideDateTime(current.opened_at);
openedGlideDate.addSeconds(seconds);
ritmRec.due_date.setValue(openedGlideDate);
ritmRec.estimated_delivery.setValue(openedGlideDate);
ritmRec.update();
}
}

})(current, previous);

View solution in original post

8 REPLIES 8

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

you can have following approach:

1) have before insert business rule on sc_req_item table and dot walk to cat_item table to get the duration

2) take the current time and add that duration to this value

3) set the value on the estimated delivery and due date field

4) also have after business rule on sc_req_item and get the value of request; already you have due date now calculated by the above business rule as per step 3; query sc_request table and populate the due date based on ritm due date

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,

 

Thanks for the reply, I did the same on sc_req_item but it is populated due date & estimated date on RITM only, it does not pick the RITM values into REQ form, please find the scripts below

Before Insert Business Rule

(function executeRule(current, previous /*null when async*/ ) {


var daysStr = current.cat_item.delivery_time.getDisplayValue();
gs.addInfoMessage("daysStr = " + daysStr);
var days = daysStr.split(' ')[0];
gs.addInfoMessage("days = " + days);
current.due_date = gs.daysAgo(-1 * days);
current.estimated_delivery = gs.daysAgo(-1 * days);
gs.addInfoMessage('current.parent:' + current.request);

 

//this code is commented
// var reqRec = new GlideRecord("sc_request");
// reqRec.get(current.request);
// reqRec.due_date = gs.daysAgo(-1 * days);
// reqRec.update();
// gs.addInfoMessage("REQ due date " + current.due_date);


})(current, previous);

__________________________________________________________

After Insert Business Rule

 

(function executeRule(current, previous /*null when async*/ ) {

//this code is commented
// var daysStr = current.cat_item.delivery_time.getDisplayValue();
// gs.addInfoMessage("daysStr = " + daysStr);
// var days = daysStr.split(' ')[0];
// gs.addInfoMessage("days = " + days);
// current.due_date = gs.daysAgo(-1 * days);
// current.estimated_delivery = gs.daysAgo(-1 * days);
// gs.addInfoMessage('current.parent:' + current.request);


var reqRec = new GlideRecord("sc_request");
reqRec.addQuery("sys_id", current.request);
reqRec.query();
if (reqRec.next()) {
reqRec.due_date = current.due_date; //gs.daysAgo(-1 * days);
reqRec.update();
gs.addInfoMessage("REQ due date " + current.due_date);


}
})(current, previous);

Hi,

So for which table it is not setting up? Is it working for RITM and not working for Request?

Regards

Ankur

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

Hi Ankur,

 

RITM table is working as expected but REQ is not working,

When request submitted due_date & estimated delivery dates are populating in RITM form

but REQ is not populating due_date from RITM after creating those two business rules

Note : I created single business rule on "sc_req_item" table as below, it is working as expected in both REQ & RITM, 

but my team lead has been told me that would be requires only on insert not in update due to performance issues, please suggest me the proper way of solution 

before Insert/Update Business Rule

(function executeRule(current, previous /*null when async*/ ) {


var daysStr = current.cat_item.delivery_time.getDisplayValue();
gs.addInfoMessage("daysStr = " + daysStr);
var days = daysStr.split(' ')[0];
gs.addInfoMessage("days = " + days);
current.due_date = gs.daysAgo(-1 * days);
current.estimated_delivery = gs.daysAgo(-1 * days);
gs.addInfoMessage('current.parent:' + current.request);


 var reqRec = new GlideRecord("sc_request");
 reqRec.addQuery("sys_id", current.request);

reqRec.query();

if(reqRec.next()){
 reqRec.due_date = gs.daysAgo(-1 * days);
 reqRec.update();
 gs.addInfoMessage("REQ due date " + current.due_date);

}
})(current, previous);