- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-24-2022 03:52 AM
Hi All,
I have been trying hard to set the RITM state to "closed skipped" if all tasks associated to that RITM are "closed skipped"
I am using following script in If activity of workflow but it is not working, please help!
Script in If activity
answer = allCompleted();
function allCompleted() {
var grTask = GlideRecord('sc_task');
var completed = 0;
var skipped = 0;
var count;
grTask.addQuery('request_item', current.sys_id);
grTask.query();
count = grTask.getRowCount();
while (grTask.next()) {
if (grTask.getValue('state') === '3') {
completed++;
}
if (grTask.getValue('state') === '7') {
skipped++;
}
}
if (count == completed) {
return complete;
}
if (count == skipped) {
return skip;
}
else
return incomplete;
}
and if activity results configured like below
The results we are looking for -
We are actually checking for multiple tasks,
Suppose we have 3 tasks in the workflow, the below states we want on RITM
1) If all 3 tasks are closed complete then RITM state should be "closed complete"
2) If one of the 3 tasks is closed complete then RITM state should be "closed incomplete"
3) If all tasks are closed skipped then RITM state should be "closed skipped"
Please let me know where I am doing mistake
Solved! Go to Solution.
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-06-2022 08:28 PM
Hi Ankur,
Following script worked for me.
(function executeRule(current, previous /*null when async*/) {
var grSCTask = new GlideRecord('sc_task');
grSCTask.addQuery('request_item', current.getValue('request_item'));
grSCTask.addActiveQuery(); // added to check for active tasks
grSCTask.query();
if (!grSCTask.hasNext()) // if there still are active SCtasks connected to this RITM, there is no need to set any state on the parent RITM yet
{
var closeCompleteCount = 0;
var closeSkippedCount = 0;
var closedIncompleteCount = 0;
var closedOtherCount = 0;
grSCTask = new GlideRecord('sc_task');
grSCTask.addQuery('request_item', current.getValue('request_item'));
grSCTask.query();
while (grSCTask.next()) {
if (grSCTask.getValue('state') == 3) {
closeCompleteCount++;
}
else if (grSCTask.getValue('state') == 4){
closedIncompleteCount++;
}
else if (grSCTask.getValue('state') == 7){
closeSkippedCount++;
}
else {
closedOtherCount++;
}
}
var ritm = new GlideRecord('sc_req_item');
if (ritm.get(current.getValue('request_item'))){
if (closedIncompleteCount > 0) {
ritm.setValue('state', 4); // ritm is closed incomplete
ritm.update();
}
else if (closeSkippedCount > 0 && closeCompleteCount == 0 && closedIncompleteCount == 0) {
ritm.setValue('state', 7); // ritm is closed skipped
ritm.update();
}
else if (closeCompleteCount > 0 && closeSkippedCount == 0 && closedIncompleteCount == 0){
ritm.setValue('state', 3); // ritm is closed complete
ritm.update();
}
else {
gs.info('Some other combination of closed happened, not setting RITM state');
gs.info('Closed other count: ' + closedOtherCount);
}
}
}
})(current, previous);
Thank you for your help as well
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-06-2022 08:28 PM
Hi Ankur,
Following script worked for me.
(function executeRule(current, previous /*null when async*/) {
var grSCTask = new GlideRecord('sc_task');
grSCTask.addQuery('request_item', current.getValue('request_item'));
grSCTask.addActiveQuery(); // added to check for active tasks
grSCTask.query();
if (!grSCTask.hasNext()) // if there still are active SCtasks connected to this RITM, there is no need to set any state on the parent RITM yet
{
var closeCompleteCount = 0;
var closeSkippedCount = 0;
var closedIncompleteCount = 0;
var closedOtherCount = 0;
grSCTask = new GlideRecord('sc_task');
grSCTask.addQuery('request_item', current.getValue('request_item'));
grSCTask.query();
while (grSCTask.next()) {
if (grSCTask.getValue('state') == 3) {
closeCompleteCount++;
}
else if (grSCTask.getValue('state') == 4){
closedIncompleteCount++;
}
else if (grSCTask.getValue('state') == 7){
closeSkippedCount++;
}
else {
closedOtherCount++;
}
}
var ritm = new GlideRecord('sc_req_item');
if (ritm.get(current.getValue('request_item'))){
if (closedIncompleteCount > 0) {
ritm.setValue('state', 4); // ritm is closed incomplete
ritm.update();
}
else if (closeSkippedCount > 0 && closeCompleteCount == 0 && closedIncompleteCount == 0) {
ritm.setValue('state', 7); // ritm is closed skipped
ritm.update();
}
else if (closeCompleteCount > 0 && closeSkippedCount == 0 && closedIncompleteCount == 0){
ritm.setValue('state', 3); // ritm is closed complete
ritm.update();
}
else {
gs.info('Some other combination of closed happened, not setting RITM state');
gs.info('Closed other count: ' + closedOtherCount);
}
}
}
})(current, previous);
Thank you for your help as well