- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-08-2015 08:18 AM
Hi,
I have a workflow on requested item table that creates a single catalog task. When this task closes, the item closes as expected. But when users
have added new catalog tasks outside of the WF using the New button, the requested item does not close after all it's tasks are closed. Any idea
how this can be achieved? I have put a 'Wait for Condition' that has the following code, but that doesn't seem to be helping:
checkTask();
function checkTask() {
var task_cnt = 0;
var closed_tasks = 0;
var catalog_task = new GlideRecord('sc_task');
catalog_task.addQuery('request_item',current.sys_id);
catalog_task.query();
task_cnt = catalog_task.getRowCount();
while(catalog_task.next()){
// We are checking, whether the state of task is closed, so "3" is the database value of closed complete state,
// "4" is closed incomplete and "7" is closed skipped
if(catalog_task.state == "3" || catalog_task.state == "4" || catalog_task.state == "7") {
closed_tasks = closed_tasks + 1;
}
}
if( closed_tasks == task_cnt)
{
answer = true;
}
}
Thanks,
Debashree
Solved! Go to Solution.
- 18,238 Views
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-08-2015 04:15 PM
Debashree,
The issue here is whenever the Workflow created task is closed then there will be a business rule which will run and invoke the Workflow on RITM. You need to have similarly for Manually created Tasks.
So, have a Business Rule on sc_task something like this:
Name: Invoke Workflow On RITM
When : onAfter
Order: 800
Condition : current.wf_activity.nil() && (current.state.changesTo(3) || current.state.changesTo(4) || current.state.changesTo(7))
Script:
// Run any workflow(s) so this task's state changes can be checked
runWorkflow_task();
function runWorkflow_task() {
if (!current.request_item.nil()) {
var gr = new GlideRecord('sc_req_item');
gr.addQuery("sys_id",current.request_item.toString());
gr.query();
if (gr.next()) {
new Workflow().broadcastEventToCurrentsContexts(gr, 'update', null);
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-29-2017 05:08 AM
How to change the state of RITM when all tasks are completed(using Bussiness rules)?
i have created one workflow for that. when all tasks completed in workflow then state of the RITM must be show as "Closed complete".
how can i change the state using Business rules?
Thanks,
J.Mohini

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-08-2015 09:37 AM
Hi Debashree,
Here is the script you can write.
var task = getTask();
function getTask()
{
var answer = false;
var catalog_task = new GlideRecord('sc_task');
catalog_task.addQuery('active',true); //query for only active records
catalog_task.addQuery('request_item',current.sys_id);
catalog_task.query();
if(catalog_task.next()){
answer = true; //returns true if the task are not yet closed.
}
return answer;
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-08-2015 10:06 AM
Hi Pradeep,
I tried your code but it didn't work. Any other ideas?
Thanks,
Debashree
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-08-2015 12:27 PM
Where did the workflow stuck? Can you add some log messages in script and check if they are executing or not.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎12-15-2020 01:58 PM
I know this is late, but I modified Pradeep's code in a Wait for condition as shown below, and it works flawlessly:
var answer;
var catalog_task = new GlideRecord('sc_task');
catalog_task.addQuery('active', true); //query for only active records
catalog_task.addQuery('request_item', current.sys_id); //RITM sys_id
catalog_task.query();
if (catalog_task.getRowCount() > 0) {
answer = false;
} else {
answer = true;
}