Approval on Catalog Item
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-04-2024 06:32 AM
Hi All,
I have the requirement Please help me in detail to achieve this.
Process Summary:
1. Day 0: Initial approval request is sent.
2. Day 2: 1st reminder is sent after 2 days of the initial request.
3. Day 5: 2nd reminder is sent after 3 days from the 1st reminder.
4. Day 7: 3rd reminder is sent after 2 days from the 2nd reminder.
5. If no action is taken after the 3rd reminder:
Request is escalated to the next level manager on Day 7.
Next level manager has 5 days (until Day 12) to approve the request via email.
If no action is taken by the next level manager by Day 12, the request expires.
Summary:
Day 0-7: Reminders are sent sequentially if no action is taken.
Day 7: Escalation occurs.
Day 7-12: Next level manager has 5 days to approve after escalation.
Day 12: Request expires if no action is taken by next level manager.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-04-2024 11:21 AM
Hi @Mahesho11 ,
You can achieve it by using ScheduleOnce()
The steps would be :
1) Calling a script inlcude when form submits(Use BR / onSubmit CS)
2) Refer below script for script include. Modify it according to your use
3) Add more functions like notifyUserAfterTwoDay for 7 and 10 days approval
4) So all the notiifcations will be scheduled and when they will run , if the record is approved abort sending notification(as mentioned in below script)
5) You can find scheduled notification here - sys_trigger table
**********************************************************
scheduleNotifications: function(record) {
//Setting up future date to send notification after 3 days from submission of form
var firstNotificationDate = new GlideDateTime();
firstNotificationDate.addDaysUTC(2);
//scheduling first notification after 2 days from submission of form
var scheduledExecution = new ScheduleOnce();
scheduledExecution.script = 'new testScriptInclude().notifyUserAfterTwoDay ("' + record.getUniqueValue() + '","' + record.requestedFor + '")';
scheduledExecution.setTime(firstNotificationDate);
scheduledExecution.setLabel(’SecondDayNotification’);
scheduledExecution.setDocument(record);
scheduledExecution.schedule()
}
},
notifyUserAfterTwoDay : function(record,userSysId ) {
Use glide record on approval table, if
if (it is not approved for the current record) {
//notify user
gs.eventQueue(‘event name’, record, userSysId);
}
}
Similarly, you need write more functions according to your requirement days. It will work fine.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-04-2024 11:56 AM
Hi @Mahesho11 ,
Please follow below steps
1. Create events for each day of notification like
All< System Policy < Event< Registry
a. Create Event for 1st day of notification
Table - sc_req_item
and save, repeat for each day of notification
2. Create business rule to trigger that event
Before update and insert business rule and table - sc_req_item
and add below scirpt
(function executeRule(current, previous /*null when async*/) {
// Add your code here
var currentDate = new GlideDateTime();
var gr = new GlideRecord("sysapproval_approver");
gr.addEncodedQuery("sysapproval.numberSTARTSWITH", current.sys_id);
gr.query();
if(gr.next()){
var addOneDay = new GlideDateTime();
addOneDay.addDays(1);
if(currentDate == addOneDay){
gs.eventQueue('event.for.first.reminder', current, current.requested_for, current.requested_for.manager);
}
var addTwoDay = new GlideDateTime();
addTwoDay.addDays(2);
if(currentDate == addTwoDay){
gs.eventQueue('event.for.second.reminder', current, current.requested_for, current.requested_for.manager);
}
}
})(current, previous);
Please mark my answer correct and helpful if this works for you
Thanks and Regards
Sarthak