Flow Cleanup
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-25-2025 08:24 AM
Looking for advice, cautions, gotchas, etc. etc.. around cleaning up orphaned flows associated with task records that are not active. As admins how do you get orphaned flows to a minimum?
Here is a script I am using to explore flows associated with task records, where the task record is no longer active.
var grFlowContext = new GlideRecord('sys_flow_context');
//grFlowContext.addQuery('state', 'WAITING');
//grFlowContext.addQuery('state', 'QUEUED');
//grFlowContext.addQuery('state', 'IN_PROGRESS');
//grFlowContext.addQuery('state', 'PAUSED_IN_DEBUG');
//grFlowContext.addQuery('state', 'PAUSED');
//grFlowContext.addQuery('state', 'CONTINUE_SYNC');
grFlowContext.addQuery('state', 'WAITING').addOrCondition('state','QUEUED').addOrCondition('state','IN_PROGRESS').addOrCondition('state','PAUSED_IN_DEBUG').addOrCondition('state','PAUSED').addOrCondition('state','CONTINUE_SYNC');
grFlowContext.query();
var total = 0;
var found = 0;
while (grFlowContext.next()) {
try {
total = total + 1;
var sourceRecord = new GlideRecord(grFlowContext.source_table);
if (sourceRecord.get(grFlowContext.source_record)) {
if (!sourceRecord.active &&
(grFlowContext.source_table == 'incident' ||
grFlowContext.source_table == 'change_request' ||
grFlowContext.source_table == 'sc_req_item' ||
grFlowContext.source_table == 'sc_task')) {
found = found + 1;
gs.print('Name: ' + grFlowContext.name +
' Flow Context ID: ' + grFlowContext.sys_id +
', Ticket Number: ' + sourceRecord.number +
', Created On: ' + sourceRecord.sys_created_on);
}
}
} catch (e) {
//gs.log('Error processing Flow Context ID: ' + grFlowContext.sys_id + ' - ' + e.message);
}
}
gs.print('Total: ' + total + ' Found: ' + found);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-27-2025 07:48 AM
Technically - a flow can continue execution after the closure/completion of the source record it is associated with. I find this practice to be ill advised for the purposes of support and maintenance for production environments.
In our deployment the rule of thumb for a flow with an associated source record, the record must remain active as long as the flow continues its operation. If a source record closes (becomes inactive), then the flow needs to wrap things up in a timely fashion and complete its operations.
Caveat - A source record can remain active after the completion of a flow; but the opposite is ill advised practice for our environment.
So, I was/am performing general maintenance on our instance and found we have roughly 2K orphaned flows where the source record is inactive, but the flow is still in a state of execution. (Some have been in the Waiting state for over 2 years.) Which should not be the case. I am thinking of canceling these flows and seeking other advice from SN admins that have come across this in the wild.