- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-18-2019 11:51 PM
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.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-11-2019 01:51 AM
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);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-22-2019 09:57 AM
Hi,
But you would require 2 business rules one for RITM and one for updating in Request
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
11-24-2019 11:44 PM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-25-2019 05:06 AM
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
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-11-2019 01:51 AM
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);