- 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-19-2019 04:59 AM
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
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-21-2019 04:15 AM
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);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-21-2019 08:17 PM
Hi,
So for which table it is not setting up? Is it working for RITM and not working for 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-22-2019 06:34 AM
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);