How to get outputs from subflow by script, when subflow gets into waiting state?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-01-2020 04:59 AM
Hi,
In our scope application, we need to run a Subflow via script and get outputs. So I used executeSubflow() method:
// Execute Synchronously: Run in foreground. Code snippet has access to outputs.
var outputs = sn_fd.FlowAPI.executeSubflow('subflow_name', inputs);
But when the Subflow gets into waiting state for some time, the method throws an exception 'The current execution is in the waiting state', so I can't get the outputs. It is also written in docs: https://developer.servicenow.com/dev.do#!/reference/api/orlando/server/sn_fd-namespace/ScriptableFlo...
Do you know how to get outputs from subflow that gets into waiting state?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-26-2021 12:52 PM
Here's how I got around this issue:
try {
var inputs = {};
inputs['user'] = "adde4468db816810a7970ad4e2961926"; // Sys ID (GUID)
var contextId = sn_fd.FlowAPI.startSubflow('global.flow_name', inputs);
var exit = false;
var outputs = new GlideRecord('sys_flow_runtime_value');
while (exit == false) {
outputs.addQuery('context', contextId);
outputs.addQuery('type', "OUTPUT");
outputs.query();
if (outputs.next()) {
var outputJSON = JSON.parse(outputs.value);
workflow.scratchpad.output_01 = outputJSON.output_01.displayValue;
workflow.scratchpad.output_02 = outputJSON.output_02.displayValue;
exit = true;
} else {
gs.sleep(5000);
}
}
} catch (ex) {
workflow.scratchpad.error = ex.name;
}
It uses a while loop to check the table "sys_flow_runtime_value" for the OUTPUT record. The field "value" has the outputs stored as JSON, so you can parse out what you need.