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

Hi,

But you would require 2 business rules one for RITM and one for updating in Request

Regards

Ankur

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

Hi Ankur,

 

Thanks for the response, I am struggling with this issue since 2 days, could you please provide me the RITM business rule & Request business rules, As per the best practice both should be on insert business rule only, if you have a time just modify the below BR code as per the requirement

 

(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);

 

Thanks in advance for your time and patience.

Hi,

2 business rules should be there

a) before insert on sc_req_item

b) after insert on sc_req_item

a) before insert BR

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);

b) after insert BR

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

reqRec.query();

if(reqRec.next()){
 reqRec.due_date = current.due_date ;
 reqRec.update();
 gs.addInfoMessage("REQ due date " + current.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

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);