- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-26-2024 08:25 AM - edited 07-29-2024 11:35 AM
Hi,
We have to update a field called 'End user' on task form with below:
If task type is Incident, then 'End user' to incident.Caller
If task type is Request, then 'End user' to Request.Requested For
I have created onAfter business rule on insert/update on task table:
(function executeRule(current, previous /*null when async*/ ) {
var taskType = current.sys_class_name;
if (taskType == 'incident') {
var inc = new GlideRecord('incident');
inc.addQuery('number', current.number);
inc.query();
if (inc.next()) {
current.u_customer = inc.caller_id;
}
} else if (taskType == 'sc_request') {
var req = new GlideRecord('sc_request');
req.addQuery('number', current.number);
req.query();
if (req.next()) {
current.u_customer = req.requested_for;
}
} else if (taskType == 'sc_req_item') {
var reqItem = new GlideRecord('sc_req_item');
reqItem.addQuery('number', current.number);
reqItem.query();
if (reqItem.next()) {
current.u_customer = reqItem.requested_for;
}
} else if (taskType == 'sc_task') {
var catTask = new GlideRecord('sc_task');
catTask.addQuery('number', current.number);
catTask.query();
if (catTask.next()) {
current.u_customer = catTask.requested_for;
}
} else if (taskType == 'rm_story') {
var story = new GlideRecord('rm_story');
story.addQuery('number', current.number);
story.query();
if (story.next()) {
current.u_customer = story.u_stakeholder;
}
} else if (taskType == 'rm_enhancement') {
var enhancement = new GlideRecord('rm_enhancement');
enhancement.addQuery('number', current.number);
enhancement.query();
if (enhancement.next()) {
current.u_customer = enhancement.opened_by;
}
} else if (taskType == 'change_request') {
var changeReq = new GlideRecord('change_request');
changeReq.addQuery('number', current.number);
changeReq.query();
if (changeReq.next()) {
current.u_customer = changeReq.opened_by;
}
} else if (taskType == 'change_task') {
var changeTask = new GlideRecord('change_task');
changeTask.addQuery('number', current.number);
changeTask.query();
if (changeTask.next()) {
current.u_customer = changeTask.opened_by;
}
} else if (taskType == 'problem') {
var problem = new GlideRecord('problem');
problem.addQuery('number', current.number);
problem.query();
if (problem.next()) {
current.u_customer = problem.opened_by;
}
} else if (taskType == 'problem_task') {
var problemTask = new GlideRecord('problem_task');
problemTask.addQuery('number', current.number);
problemTask.query();
if (problemTask.next()) {
current.u_customer = problemTask.opened_by;
}
}
current.setWorkflow(false);
current.update();
current.setWorkflow(true);
})(current, previous);
Since I have used current.update(), I have inserted current.setWorkflow(false) to avoid triggering recursive business rules. But this has stopped triggering workflows/flow designers entirely even though I inserted current.setWorkflow(true). Please suggest on workarounds to achieve above requirement without using current.update.
I have tried onBefore BR and removing current.update(), it isn't working either.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-26-2024 02:35 PM
I don't know what happened to my previous post, but I've tested the following:
(function executeRule(current, previous /*null when async*/) {
var customerValue = '';
var taskType = current.sys_class_name.toString();
gs.addInfoMessage('taskType = ' + taskType);
switch(taskType) {
case 'incident':
customerValue = current.caller_id;
gs.addInfoMessage("caller_id = " + current.caller_id);
break;
case 'sc_request':
customerValue = current.requested_for;
break;
case 'sc_task':
customerValue = current.request_item.requested_for;
gs.addInfoMessage("sc_task = " + currentValue);
break;
case 'sc_req_item':
customerValue = current.requested_for;
break;
// case 'rm_story':
// customerValue = current.u_stakeholder;
// break;
default:
customerValue = current.opened_by;
}
if(customerValue)
gs.addInfoMessage('customerValue = ' + customerValue);
})(current, previous);
get rid of the gs.info() messages, and change last line to current.u_customer = customerValue;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-27-2024 08:55 AM - edited 07-27-2024 08:56 AM
Hi @sath ,
Instead of after BR please use before BR and you don't need to update the value please use below code it is working for me
(function executeRule(current, previous /*null when async*/ ) {
// Add your code here
var taskType = current.getValue('sys_class_name');
gs.log("Type = " + taskType);
var customerValue = '';
switch (taskType) {
case 'incident':
customerValue = current.getValue("caller_id");
current.setValue('u_customer', customerValue);
break;
case 'sc_request':
customerValue = current.getDisplayValue("requested_for");
current.setValue('u_customer', customerValue);
break;
case 'sc_task':
customerValue = current.request_item.getDisplayValue("requested_for");
current.setValue('u_customer', customerValue);
break;
case 'sc_req_item':
customerValue = current.requested_for;
current.setValue('u_customer', customerValue);
break;
case 'rm_story':
customerValue = current.u_stakeholder;
current.setValue('u_customer', customerValue);
break;
default:
customerValue = current.opened_by;
current.setValue('u_customer', customerValue);
}
gs.log("Customer Vlaue = " + customerValue);
})(current, previous);
Result
Type is type of incident and it gets the value of incident's caller in Customer
Please mark mt answer correct and helpful if this works for you
Thanks and Regards
Sarthak