<h2>Diagnosing and Resolving Common Flow Designer Issues for Top Misconfiguration Patterns</h2><br/><div style="overflow-x:auto"><style type="text/css"><!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } </style> <style> .sn-kb { font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif; line-height: 1.6; color: #2C3E50; max-width: 1100px; } .sn-kb h1 { font-family: 'Gilroy-Bold', 'Source Sans Pro', sans-serif; font-size: 22px; font-weight: 700; color: #293E40; margin: 0 0 6px 0; letter-spacing: -0.3px; } .sn-kb .kb-meta { font-size: 12px; color: #6B7C85; margin-bottom: 20px; line-height: 1.8; } .sn-kb .kb-meta strong { color: #293E40; } .sn-kb h2 { font-family: 'Gilroy-Bold', 'Source Sans Pro', sans-serif; font-size: 15px; font-weight: 700; color: #fff; background: #293E40; padding: 8px 16px; border-radius: 6px; margin: 28px 0 14px 0; letter-spacing: 0.2px; } .sn-kb h3 { font-size: 13px; font-weight: 700; color: #293E40; margin: 20px 0 8px 0; padding-bottom: 4px; border-bottom: 2px solid #D5DFE1; } .sn-kb .err-block { background: #F4F6F7; border-left: 4px solid #D5DFE1; border-radius: 0 8px 8px 0; padding: 16px 20px; margin: 10px 0 16px 0; } .sn-kb .err-label { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.8px; color: #6B7C85; margin-bottom: 4px; } .sn-kb .err-msg { font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace; font-size: 12px; color: #C0392B; background: #fff; padding: 6px 10px; border-radius: 4px; display: inline-block; border: 1px solid #D5DFE1; word-break: break-word; line-height: 1.5; max-width: 100%; } .sn-kb .detail-grid { margin: 10px 0; } .sn-kb .detail-item { font-size: 12px; margin-bottom: 6px; } .sn-kb .detail-item .label { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.6px; color: #6B7C85; display: inline; margin-right: 6px; } .sn-kb .badge { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 11px; font-weight: 700; letter-spacing: 0.3px; white-space: nowrap; } .sn-kb .badge-error { background: #FDEDEC; color: #E74C3C; } .sn-kb .badge-warning { background: #FEF9E7; color: #E67E22; } .sn-kb .badge-ui { background: #EBF5FB; color: #2E86C1; } .sn-kb .badge-server { background: #EAFAF1; color: #1A5632; } .sn-kb .badge-ai { background: #F5EEF8; color: #8E44AD; } .sn-kb .symptom-text { font-size: 12px; color: #3B4A54; font-style: italic; } .sn-kb .ts-title { font-size: 13px; font-weight: 700; color: #293E40; margin: 12px 0 6px 0; } .sn-kb ol.ts-steps { margin: 0 0 10px 0; padding-left: 22px; font-size: 12px !important; line-height: 1.8; color: #3B4A54; } .sn-kb ol.ts-steps li { margin-bottom: 2px; font-size: 12px !important; } .sn-kb ol.ts-steps code { font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace; font-size: 12px !important; background: #EBF5FB; padding: 1px 5px; border-radius: 3px; color: #293E40; } .sn-kb .kw-bar { font-size: 11px; color: #6B7C85; background: #EBF5FB; padding: 6px 10px; border-radius: 4px; margin-top: 10px; } .sn-kb .kw-bar strong { color: #2E86C1; font-weight: 700; } .sn-kb .source-tag { font-size: 9px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; color: #6B7C85; background: #F0F1F3; padding: 1px 6px; border-radius: 3px; margin-left: 6px; } .sn-kb .section-intro { font-size: 13px; color: #3B4A54; margin: 0 0 14px 0; } .sn-kb hr { border: none; border-top: 1px solid #D5DFE1; margin: 24px 0; } .sn-kb .related { background: #F4F6F7; border: 1px solid #D5DFE1; border-radius: 8px; padding: 14px 20px; margin-top: 24px; font-size: 12px; line-height: 1.8; } .sn-kb .related strong { display: block; font-size: 13px; margin-bottom: 4px; } .sn-kb a { color: #2E86C1; text-decoration: none; } .sn-kb a:hover { text-decoration: underline; } </style> <div class="ns-kb-css-body-editor-container"> <div class="sn-kb"> <div class="kb-meta"><strong>Product Area:</strong> Flow Designer<br /><strong>Audience:</strong> Flow Designer administrators, platform developers<br /><strong>Topic:</strong> Flow trigger issues, approval flow errors, subflow output, inline script errors, activation, ACL, email, plugins, scheduled flows, domain separation<br /><strong>Applies to:</strong> Washington DC, Xanadu, Yokohama, Zurich, and later releases</div> <h2>1 Flow Not Triggering: Diagnosing and Fixing Trigger Condition Issues in Flow Designer</h2> <p class="section-intro">The most common reasons a Flow Designer flow fails to trigger, with step-by-step diagnosis and resolution guidance.</p> <div class="err-block"> <div class="err-label">Issue <span class="source-tag">Flow Designer — Trigger Condition</span></div> <span class="err-msg">Flow never starts / trigger condition not working</span> <div class="detail-grid"> <div class="detail-item"><span class="label">Visibility</span><span class="badge badge-ui">Flow Designer</span></div> <div class="detail-item"><span class="label">Severity</span><span class="badge badge-error">Error</span></div> <div class="detail-item"><span class="label">Symptom</span><span class="symptom-text">A flow configured with trigger conditions never executes when a matching record is created or updated. No execution entries appear in the Execution Details log.</span></div> </div> <div class="ts-title">Troubleshooting</div> <ol class="ts-steps"><li><strong>Step 1: Verify the trigger is active.</strong> Navigate to Flow Designer → open the flow → confirm <code>Status = Active</code>. A draft or inactive flow will never execute regardless of trigger conditions.</li><li><strong>Step 2: Check trigger condition logic.</strong> Open the Trigger section. Use <code>Changes to</code> (not just <code>Changes</code>) when filtering for a specific value. Confirm the field referenced exists on the trigger table. Test using the <code>Test</code> button with a real record from the target table.</li><li><strong>Step 3: Check transaction timing.</strong> If the record is created by a business rule or script that runs in the same transaction as the event, the Flow trigger may not fire. Add a <code>sys_id is not empty</code> condition and test with a manual record update.</li><li><strong>Step 4: Review Flow Execution Logs.</strong> Navigate to Flow Designer → Execution Details. Filter by flow name. If no entries exist, the trigger never fired. If entries exist with errors, review the error message in the log.</li><li><strong>Step 5: Catalog item scope.</strong> For catalog flows, ensure the trigger is scoped to the specific Catalog Item sys_id. A table-level trigger on <code>sc_req_item</code> fires for all catalog items — add a condition: <code>Catalog Item is [specific item]</code>.</li></ol> <div class="ts-title">Resolution</div> <ol class="ts-steps"><li>Open Flow → Trigger section → use the <strong>Test</strong> button to evaluate the condition against a real record before activating.</li><li>Confirm the exact field change event using <code>sys_audit</code> or the Flow Execution Log.</li><li>For catalog items, always scope the trigger to the specific catalog item sys_id, not just the <code>sc_req_item</code> table.</li><li>Check whether the business rule or process that creates/updates records runs <strong>before</strong> or <strong>after</strong> the trigger evaluates.</li></ol> <div class="kw-bar"><strong>Keywords:</strong> flow not triggering, flow never starts, trigger condition not working, Flow Designer, execution logs</div> </div> <h2>2 Approval Flow Not Sending Email or Not Progressing</h2> <p class="section-intro">Common causes of approval flows that fail to send notifications or stall indefinitely without progressing.</p> <h3> Approval Flow Not Sending Email or Not Progressing</h3> <div class="err-block"> <div class="err-label">Issue <span class="source-tag">Flow Designer — Ask for Approval</span></div> <span class="err-msg">Approval email not sent / approval flow stalls indefinitely</span> <div class="detail-grid"> <div class="detail-item"><span class="label">Visibility</span><span class="badge badge-ui">Flow Designer</span></div> <div class="detail-item"><span class="label">Severity</span><span class="badge badge-error">Error</span></div> <div class="detail-item"><span class="label">Symptom</span><span class="symptom-text">An approval flow runs without sending a notification email to the approver, or the approval record is created but the flow never advances past the approval step.</span></div> </div> <div class="ts-title">Troubleshooting</div> <ol class="ts-steps"><li><strong>Check 1: Approver resolves to null.</strong> Open <code>sys_approval</code> after the flow runs. If Approver is empty, the approval action resolved a null group or user. Add a <strong>Log</strong> step before the approval step to print the resolved approver value.</li><li><strong>Check 2: Notification template is inactive.</strong> Navigate to <strong>System Notification → Notifications</strong>. Search for the approval notification used by your flow. Confirm <code>Status = Active</code> in the current instance (dev/test/prod — they may differ after a clone).</li><li><strong>Check 3: Approval group has no members.</strong> If the flow uses a group-based approval, navigate to <code>sys_user_group</code> and confirm the group has active members. An empty group creates an approval record that waits indefinitely with no notification.</li><li><strong>Check 4: 'Anyone Approves' vs 'Everyone Approves'.</strong> If set to <strong>Everyone Approves</strong> and one approver is inactive or departed, the approval never completes. Review the approver list for inactive users.</li></ol> <div class="ts-title">Resolution</div> <ol class="ts-steps"><li>Add a <strong>fallback approver</strong>: if the primary approver group is empty, route to a defined backup owner.</li><li>Use the <strong>Set Values</strong> step before <strong>Ask for Approval</strong> to ensure the approver field is always populated before the approval step executes.</li></ol> <div class="kw-bar"><strong>Keywords:</strong> approval flow not sending email, approval not progressing, approver null, notification inactive, empty group, Everyone Approves, Anyone Approves</div> </div> <h2>3 Subflow Output Variable Not Passed to Parent Flow</h2> <p class="section-intro">Common causes of subflow output variables not being passed back to the parent flow correctly.</p> <h3>3.1 Subflow Output Variable Not Passed to Parent Flow</h3> <div class="err-block"> <div class="err-label">Issue <span class="source-tag">Flow Designer — Call Subflow</span></div> <span class="err-msg">Subflow output variable is null or missing in parent flow</span> <div class="detail-grid"> <div class="detail-item"><span class="label">Visibility</span><span class="badge badge-ui">Flow Designer</span></div> <div class="detail-item"><span class="label">Severity</span><span class="badge badge-error">Error</span></div> <div class="detail-item"><span class="label">Symptom</span><span class="symptom-text">A parent flow that calls a subflow receives null or empty values for the subflow's output variables, causing downstream steps to fail or behave unexpectedly.</span></div> </div> <div class="ts-title">Troubleshooting</div> <ol class="ts-steps"><li><strong>Step 1: Check output mapping in parent flow.</strong> Open the parent flow → select the <strong>Call Subflow</strong> step → expand the <strong>Outputs</strong> section. Confirm each subflow output variable is explicitly mapped to a parent flow variable. If the Outputs section is empty, the return values are discarded.</li><li><strong>Step 2: Check subflow output in all branches.</strong> Open the subflow. If the output variable is only set inside an <code>If</code> or <code>For Each</code> block, it will be null when that block is not reached. Move the <strong>Set Output</strong> step outside the conditional, or add a default value assignment at the subflow's end.</li><li><strong>Step 3: Add a Log step for debugging.</strong> After the <strong>Call Subflow</strong> step, add a Log action: <code>Subflow output: [output_variable_name]</code>. Run the flow and check execution logs to confirm the value is populated before downstream steps consume it.</li><li><strong>Step 4: Verify subflow is published.</strong> An unpublished subflow may run a cached version that does not include the latest output variable definitions. Publish the subflow, then re-test the parent flow.</li></ol> <div class="ts-title">Best Practice</div> <ol class="ts-steps"><li>Always set a <strong>default value</strong> for output variables at the top of the subflow, then overwrite with the real value. This ensures the output is never null even if the main logic path is not reached.</li></ol> <div class="ts-title">Resolution</div> <ol class="ts-steps"><li>Open the parent flow → select the <strong>Call Subflow</strong> step → expand <strong>Outputs</strong> section → confirm all expected output variables are mapped to parent flow variables.</li><li>In the subflow, ensure the output variable is set in <strong>all</strong> execution paths (both success and error branches).</li><li>Add a <strong>Log</strong> step after the Call Subflow step in the parent flow to print the output variable value and confirm it is populated.</li></ol> <div class="kw-bar"><strong>Keywords:</strong> subflow output null, subflow variable not passed, Call Subflow, output mapping, parent flow variable, unpublished subflow</div> </div> <h2>4 Script / Inline Script Errors and Null Pointer Exceptions</h2> <p class="section-intro">Inline script errors are the fourth-largest support driver in Flow Designer. This section provides a checklist for writing null-safe scripts and diagnosing existing failures.</p> <h3>4.1 NullPointerException and Script Errors in Flow Designer Inline Scripts</h3> <div class="err-block"> <div class="err-label">Issue <span class="source-tag">Flow Designer — Inline Script</span></div> <span class="err-msg">NullPointerException / inline script error / undefined is not a function</span> <div class="detail-grid"> <div class="detail-item"><span class="label">Visibility</span><span class="badge badge-ui">Flow Designer</span></div> <div class="detail-item"><span class="label">Severity</span><span class="badge badge-error">Error</span></div> <div class="detail-item"><span class="label">Symptom</span><span class="symptom-text">A flow fails at an inline script step with a NullPointerException, undefined is not a function, or similar JavaScript error. The flow stops and does not progress to subsequent steps.</span></div> </div> <div class="ts-title">Diagnosis: Find the Failing Line</div> <ol class="ts-steps"><li>Open Flow Designer → <strong>Execution Details</strong> for the failing flow.</li><li>Click the failed step. The error message shows the JavaScript line number.</li><li>Cross-reference the line number with the inline script content to identify the exact failing statement.</li></ol> <div class="ts-title">Troubleshooting</div> <ol class="ts-steps"><li><strong>Fix 1: Add null checks before field access.</strong> Never call methods directly on a field reference without checking for null first.<br />Replace: <code>var val = current.assignment_group.getDisplayValue();</code><br />With: <code>var grp = current.assignment_group; var val = gs.nil(grp) ? '' : grp.getDisplayValue();</code></li><li><strong>Fix 2: Validate GlideRecord queries.</strong> Always check <code>.next()</code> or <code>.isValidRecord()</code> before accessing fields:<br /><code>var gr = new GlideRecord('incident'); gr.get(sys_id); if (gr.isValidRecord()) { /* safe to read fields */ }</code></li><li><strong>Fix 3: Convert data pills safely.</strong> Data pills in inline scripts are objects, not strings. Use <code>.toString()</code> or <code>String()</code> when concatenating:<br /><code>var msg = 'Record: ' + String(fd_data.trigger.current.number);</code></li></ol> <div class="ts-title">Resolution</div> <ol class="ts-steps"><li>Test your inline script with a record that has all optional fields empty. If the script fails, add the missing null checks.</li><li>Use the <strong>Script Debugger</strong> in the platform for interactive testing before deploying inline scripts in flows.</li></ol> <div class="kw-bar"><strong>Keywords:</strong> NullPointerException flow, inline script error, script fails flow designer, undefined is not a function, null check, GlideRecord, data pill</div> </div> <h2>5 Flow Inactive or Not Published After Configuration</h2> <p class="section-intro">The most common and fastest-to-resolve Flow Designer issue: a flow is configured correctly but not activated. This section explains activation, publishing, and post-clone activation steps.</p> <h3>5.1 Flow Inactive or Not Published After Configuration</h3> <div class="err-block"> <div class="err-label">Issue <span class="source-tag">Flow Designer — Activation</span></div> <span class="err-msg">Flow configured correctly but not running — status is Draft or Inactive</span> <div class="detail-grid"> <div class="detail-item"><span class="label">Visibility</span><span class="badge badge-ui">Flow Designer</span></div> <div class="detail-item"><span class="label">Severity</span><span class="badge badge-warning">Warning</span></div> <div class="detail-item"><span class="label">Symptom</span><span class="symptom-text">A correctly configured flow never executes. The flow status shows Draft or Inactive. This is the most common post-clone and post-deployment issue.</span></div> </div> <div class="ts-title">Troubleshooting</div> <ol class="ts-steps"><li><strong>Step 1: Check flow status.</strong> Open Flow Designer → locate your flow → check the status badge in the top right corner. <code>Draft</code> = will not run. <code>Active</code> = running. Click <strong>Activate</strong> to enable.</li><li><strong>Step 2: Post-clone activation.</strong> After cloning an instance, all flows arrive in their source state. If the source was inactive, they will be inactive in the target. Navigate to Flow Designer → use the <strong>Status</strong> filter to find all inactive flows → activate those that should be running.</li><li><strong>Step 3: Protected flows.</strong> If the Activate button is greyed out, the flow may be protected by its update set or application scope. Navigate to <code>sys_hub_flow</code> → find the record → check the <strong>Protection policy</strong> field. Set to <code>None</code> to allow editing, then activate.</li><li><strong>Step 4: Verify in Execution Logs.</strong> After activating, trigger the flow manually by running a test record through the trigger condition. Navigate to <strong>Execution Details</strong> and confirm a log entry appears. If no entry appears, the trigger condition is not being met — see KB: Flow Not Triggering.</li></ol> <div class="ts-title">Resolution</div> <ol class="ts-steps"><li>Open the flow in Flow Designer → check the Status indicator at the top right. If it shows <code>Draft</code> or <code>Inactive</code>, click <strong>Activate</strong>.</li><li>After a clone, navigate to Flow Designer → filter by <code>Status = Inactive</code> → bulk-activate all flows that should be running.</li><li>If the Activate button is greyed out, check the application scope protection setting on the flow record in the <code>sys_hub_flow</code> table.</li></ol> <div class="kw-bar"><strong>Keywords:</strong> flow inactive, flow not published, flow draft, activate flow, post-clone activation, protection policy, sys_hub_flow</div> </div> <h2>6 Role or ACL Blocking Flow Execution</h2> <p class="section-intro">Flow execution failures caused by missing roles or ACL restrictions are often silent — the flow stops with a vague security error. This section explains how to identify and fix them.</p> <h3>6.1 Role or ACL Blocking Flow Execution</h3> <div class="err-block"> <div class="err-label">Issue <span class="source-tag">Flow Designer — ACL / Security</span></div> <span class="err-msg">Flow fails silently or throws vague security error — missing role or ACL restriction</span> <div class="detail-grid"> <div class="detail-item"><span class="label">Visibility</span><span class="badge badge-ui">Flow Designer</span></div> <div class="detail-item"><span class="label">Severity</span><span class="badge badge-error">Error</span></div> <div class="detail-item"><span class="label">Symptom</span><span class="symptom-text">A flow stops at a read or write step with a vague security or access denied error. The flow works for admin users but fails for end users or service accounts.</span></div> </div> <div class="ts-title">Troubleshooting</div> <ol class="ts-steps"><li><strong>Step 1: Find the failing step.</strong> Open <strong>Execution Details</strong> for the failed flow run. Identify the step that generated the security error. Note the table it was reading or writing.</li><li><strong>Step 2: Identify the required role.</strong> Navigate to <code>sys_security_acl</code>. Search for ACLs on the table identified in Step 1 with <code>Operation = read</code> or <code>write</code>. Note the required role(s).</li><li><strong>Step 3: Check triggering user's roles.</strong> Identify who triggered the flow from Execution Logs. Navigate to that user's profile → <strong>Roles</strong> tab. Confirm they have the required role. If not, grant the role or reconfigure the flow.</li><li><strong>Step 4: Use 'Run as' for elevated steps.</strong> If a specific step requires elevated access, configure the action to <strong>Run as: System Account</strong> rather than granting broad roles to end users. This is the preferred pattern for write operations on restricted tables.</li><li><strong>Step 5: Test with impersonation.</strong> In dev, use <strong>System → Impersonate User</strong> to run as the affected user. Attempt to trigger the flow. If it fails, you have confirmed the role gap. Grant the role, then re-test.</li></ol> <div class="ts-title">Resolution</div> <ol class="ts-steps"><li>Identify which table step is failing from the Execution Log error.</li><li>Navigate to that table's ACL (<code>sys_security_acl</code>) and identify the required role.</li><li>Grant the triggering user or service account the required role — or configure <strong>Run as: System</strong> on the specific flow action that needs elevated access.</li><li>Use <strong>Impersonate User</strong> in dev to reproduce the failure and confirm the fix.</li></ol> <div class="kw-bar"><strong>Keywords:</strong> ACL blocking flow, role missing flow, security error flow, Run as System, impersonate user, sys_security_acl, flow access denied</div> </div> <h2>7 Notification / Email Action Not Sending</h2> <p class="section-intro">When a flow's Send Email or Send Notification step runs without error but no email is received, the issue is almost always instance-level email configuration, not the flow itself.</p> <h3>7.1 Notification or Email Action Not Sending</h3> <div class="err-block"> <div class="err-label">Issue <span class="source-tag">Flow Designer — Send Notification</span></div> <span class="err-msg">Flow Send Email / Send Notification step completes but no email is received</span> <div class="detail-grid"> <div class="detail-item"><span class="label">Visibility</span><span class="badge badge-ui">Flow Designer</span></div> <div class="detail-item"><span class="label">Severity</span><span class="badge badge-warning">Warning</span></div> <div class="detail-item"><span class="label">Symptom</span><span class="symptom-text">The flow completes without error but the intended recipient never receives the email. The step shows as completed in Execution Details with no failure.</span></div> </div> <div class="ts-title">Troubleshooting</div> <ol class="ts-steps"><li><strong>Check 1: Outbound email service status.</strong> Navigate to <strong>System Mailboxes → Outbound</strong> → confirm the outbound mail configuration is Active. Check System Properties for <code>glide.email.smtp.active = true</code>.</li><li><strong>Check 2: Instance not in demo/debug mode.</strong> Navigate to <strong>System Diagnostics → Stats</strong>. Check whether <strong>Email sending is disabled for demo</strong> is set. This silently captures emails without delivering them.</li><li><strong>Check 3: Notification template is active.</strong> Open the notification template referenced in your flow's Send Notification step. Confirm <code>Active = true</code> in the current instance. Templates may be inactive after a clone from dev.</li><li><strong>Check 4: Recipient field resolves to a valid email.</strong> Add a <strong>Log</strong> step before the Send Email step. Log the recipient value. Confirm it is a valid email address and not null or a sys_id.</li><li><strong>Check 5: SMTP relay health.</strong> If emails are queued but not delivered, the issue may be upstream of ServiceNow. Work with your email administrator to check SMTP relay logs for delivery failures.</li></ol> <div class="ts-title">Resolution</div> <ol class="ts-steps"><li>Navigate to <strong>System Mailboxes → Outbound</strong> → confirm Status = Active and SMTP settings are correct.</li><li>Check <strong>System Properties →</strong> <code>glide.email.smtp.active = true</code>.</li><li>Confirm the instance is not in debug/demo mode: <strong>System Diagnostics</strong> → check <strong>Email sending disabled for demo</strong>.</li><li>Verify the notification template referenced in the flow action is Active in this instance.</li><li>Test by sending a manual notification from <strong>System Notification → Test</strong>.</li></ol> <div class="kw-bar"><strong>Keywords:</strong> email not sending, notification not delivered, glide.email.smtp.active, demo mode email, SMTP flow, Send Notification, outbound mailbox</div> </div> <h2>8 Update Set or Plugin Version Mismatch Breaking Flows</h2> <p class="section-intro">Flow Designer breakages after upgrades or update set promotions are almost always caused by plugin version mismatches or unresolved update set conflicts on flow-related records.</p> <h3>8.1 Update Set or Plugin Version Mismatch Breaking Flows</h3> <div class="err-block"> <div class="err-label">Issue <span class="source-tag">Flow Designer — Plugin / Update Set</span></div> <span class="err-msg">Flows break after upgrade or update set promotion — plugin version mismatch</span> <div class="detail-grid"> <div class="detail-item"><span class="label">Visibility</span><span class="badge badge-ui">Flow Designer</span></div> <div class="detail-item"><span class="label">Severity</span><span class="badge badge-error">Error</span></div> <div class="detail-item"><span class="label">Symptom</span><span class="symptom-text">Flows that worked before an upgrade or update set promotion fail to load, activate, or execute. Flow Designer may show blank canvases or missing action types.</span></div> </div> <div class="ts-title">Troubleshooting</div> <ol class="ts-steps"><li><strong>Fix 1: Update all Flow Designer plugins.</strong> Navigate to <strong>System Applications → Plugins</strong>. Search for and update: (1) Flow Designer, (2) Workflow Studio, (3) Unified Developer Core. All three must be on compatible, up-to-date versions. Repair each plugin after updating.</li><li><strong>Fix 2: Run Update Set Preview before promoting.</strong> Before promoting an update set containing flows or subflows, run <strong>Update Set Preview</strong>. Look for conflicts on <code>sys_hub_flow</code>, <code>sys_hub_action_type</code>, and <code>sys_hub_subflow</code> records. Resolve conflicts before completing the promotion.</li><li><strong>Fix 3: Verify spoke versions match across environments.</strong> If your flow uses Integration Hub spokes, confirm the spoke version is identical in source and target. Promote spokes first, then flows that depend on them.</li><li><strong>Fix 4: Repair Flow Designer after upgrade.</strong> After any platform upgrade, navigate to <strong>Plugins → Flow Designer →</strong> click <strong>Repair</strong>. This re-registers extension points and resolves version drift.</li></ol> <div class="ts-title">Prevention</div> <ol class="ts-steps"><li>Before every upgrade, document the current Flow Designer, Workflow Studio, and Unified Developer Core plugin versions. After upgrade, verify all three updated together. Add this to your upgrade runbook.</li></ol> <div class="ts-title">Resolution</div> <ol class="ts-steps"><li>For plugin issues: navigate to <strong>System Applications → Plugins</strong> → search for <strong>Flow Designer</strong>, <strong>Workflow Studio</strong>, <strong>Unified Developer Core</strong> → confirm all are on the same latest version → update if needed.</li><li>For update set conflicts: before promoting, use <strong>Update Set Preview</strong> to identify conflicts on flow-related records. Resolve spoke version conflicts by ensuring the target environment has the same spoke version as the source.</li><li>After any upgrade, run the Flow Designer plugin repair: <strong>Plugins → Flow Designer → Repair</strong>.</li></ol> <div class="kw-bar"><strong>Keywords:</strong> plugin version mismatch, update set conflict, Flow Designer upgrade, Workflow Studio, Unified Developer Core, spoke version, repair plugin</div> </div> <h2>9 Scheduled Flow Not Running at Expected Time</h2> <p class="section-intro">Scheduled flow failures are usually caused by one of three issues: Flow Engine job backlog, timezone misconfiguration, or a Wait step blocking all future runs.</p> <h3>9.1 Scheduled Flow Not Running at Expected Time</h3> <div class="err-block"> <div class="err-label">Issue <span class="source-tag">Flow Designer — Schedule</span></div> <span class="err-msg">Scheduled flow does not run at the configured time or skips executions</span> <div class="detail-grid"> <div class="detail-item"><span class="label">Visibility</span><span class="badge badge-ui">Flow Designer</span></div> <div class="detail-item"><span class="label">Severity</span><span class="badge badge-error">Error</span></div> <div class="detail-item"><span class="label">Symptom</span><span class="symptom-text">A scheduled flow does not execute at its configured time. No entry appears in Execution Details, or the flow fires at the wrong time, or runs are skipped entirely.</span></div> </div> <div class="ts-title">Troubleshooting</div> <ol class="ts-steps"><li><strong>Check 1: Flow Engine Event Handler health.</strong> Navigate to <strong>System Scheduler → Scheduled Jobs</strong> → search for <strong>Flow Engine Event Handler</strong>. Confirm <strong>Next Action</strong> is a future timestamp. If it shows a past date, the job is stuck. Click <strong>Execute Now</strong> to restart it.</li><li><strong>Check 2: Timezone alignment.</strong> Open the flow's schedule definition. Confirm the timezone matches the intended run timezone. ServiceNow schedules use the instance timezone by default — if your users expect local time, set the timezone explicitly.</li><li><strong>Check 3: Wait step blocking execution.</strong> Open <strong>Execution Details</strong>. If a previous execution of the scheduled flow is still in a <code>Waiting</code> state, it may block new executions. Navigate to <code>sys_flow_context</code> → filter by flow name and <code>state = Executing</code> → cancel any stuck contexts.</li><li><strong>Check 4: Duration units.</strong> If using <strong>Wait for Duration</strong>, confirm the value is in the correct unit. '60 minutes' vs '60 seconds' is a common mistake. Review the step configuration carefully.</li></ol> <div class="ts-title">Resolution</div> <ol class="ts-steps"><li>Navigate to <strong>Scheduled Script Executions</strong> → search for <strong>Flow Engine Event Handler</strong> → confirm <strong>Next Action</strong> is a future date/time. If past-dated, update Next Action to now and run.</li><li>Check the flow schedule's timezone setting — confirm it matches the user's expected local time.</li><li>For <strong>Wait for Condition</strong> timeouts, set a maximum wait duration in the flow step to prevent indefinite blocking.</li><li>If using <strong>Wait for Duration</strong>, confirm the duration input is in the correct unit (seconds vs. minutes).</li></ol> <div class="kw-bar"><strong>Keywords:</strong> scheduled flow not running, flow not firing on schedule, Flow Engine Event Handler, timezone flow, Wait for Duration, sys_flow_context, stuck flow</div> </div> <h2>10 Domain Separation Causing Flow Visibility or Execution Failures</h2> <p class="section-intro">Domain separation introduces visibility constraints that affect which flows and subflows execute in a given tenant context. This section explains the most common domain-related flow failures and how to resolve them.</p> <h3>10.1 Domain Separation Causing Flow Visibility or Execution Failures</h3> <div class="err-block"> <div class="err-label">Issue <span class="source-tag">Flow Designer — Domain Separation</span></div> <span class="err-msg">Flow not visible or not executing in expected tenant context — domain separation constraint</span> <div class="detail-grid"> <div class="detail-item"><span class="label">Visibility</span><span class="badge badge-ui">Flow Designer</span></div> <div class="detail-item"><span class="label">Severity</span><span class="badge badge-error">Error</span></div> <div class="detail-item"><span class="label">Symptom</span><span class="symptom-text">A flow that exists in the system is not visible or does not execute for users in a specific domain. Subflows called from a global flow fail because the subflow is in a restricted domain context.</span></div> </div> <div class="ts-title">Troubleshooting</div> <ol class="ts-steps"><li><strong>Check 1: Flow domain assignment.</strong> Navigate to <code>sys_hub_flow</code>. Open the flow record. Check the <strong>Domain</strong> field. For flows that should run across all tenants, set <code>Domain = Global</code>. Subdomain-scoped flows are only visible in that domain's context.</li><li><strong>Check 2: Duplicate flow records across domains.</strong> Search <code>sys_hub_flow</code> for flows with the same name. If duplicates exist in multiple domains, the subdomain version shadows the global version. Remove or merge duplicates, keeping the version that should take precedence.</li><li><strong>Check 3: Subflow domain context.</strong> A parent flow in Global calling a subflow in a subdomain may fail if domain visibility restricts the subflow from being found. Ensure subflows are scoped to the same or a higher domain than their callers.</li><li><strong>Check 4: Post-clone domain drift.</strong> After cloning, domain assignments on flow records may change. Audit <code>sys_hub_flow</code> after a clone to confirm domain assignments match expectations in the target instance.</li></ol> <div class="ts-title">Best Practice</div> <ol class="ts-steps"><li>In multi-tenant deployments, maintain a flow domain inventory document. Before adding a new flow, explicitly decide: Global (all tenants) or domain-scoped (specific tenant only). Document the decision for each flow.</li></ol> <div class="ts-title">Resolution</div> <ol class="ts-steps"><li>Navigate to <code>sys_hub_flow</code> → open the flow record → confirm the <strong>Domain</strong> field is set to <code>Global</code> for flows intended to run across all tenants.</li><li>Check <code>sys_hub_flow</code> for duplicate flow records with the same name in different domains — subdomain versions shadow global versions and may be misconfigured.</li><li>For subflows, ensure the subflow is in the same or higher domain as the calling flow.</li><li>Use <strong>Domain override</strong> carefully — document which flows have subdomain overrides to prevent maintenance confusion.</li></ol> <div class="kw-bar"><strong>Keywords:</strong> domain separation flow, flow not visible domain, subdomain flow, global domain flow, sys_hub_flow domain, post-clone domain drift, multi-tenant flow</div> </div> <hr /></div> <span id="ns-kb-css-end-div-identifier" style="display: none; pointer-events: none;"></span></div></div>