- 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,239 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
‎02-22-2021 02:27 PM
Would you do this as a business rule, a script include or in the workflow under a wait for condition?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-08-2015 12:35 PM
Pati... i don't believe this is a problem in your coding in the workflow but in the fact that the workflow doesn't realize it needs to check the tasks again... try this to verify....
close out the workflow task first... then close the manual tasks.. this should result in your workflow hanging up...
once you show all tasks closed and the item just sitting there.. make any change to the item <update the description for example> and save the record... this should nudge the workflow to check the condition and result in the item closing itself.
If this happens than your problem isn't in the coding of y our wait but in the fact that the workflow isn't checking the condition again... there are two ways to correct this issue the easy and hard one...
harder.. create a scheduled job to nudge workflows
easier... create an after br on the table your tasks are on to manually update the item with "Task XXX closed" for manually generated tasks... this update to the item will nudge the workflow and close it properly
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-08-2015 01:43 PM
Agree with Doug. Wait for condition stucks unless there is any update to the RITM.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-08-2015 12:52 PM
Have you tried putting a Set Values WF Activity just before your END
active = false
state = closed compelte