メインコンテンツへスキップ
見出し画像

Flow Designerのフローが動かないときどこを見る? 実行記録sys_flow_contextで切り分ける


    フローを有効化したはずなのに、何も起きない。エラーも出ない。このときフォームを眺めても原因は見つかりません。見るべきは実行記録(sys_flow_context)です。記録の状態が「0件」「Waiting」「Complete」のどれかで、原因の場所が決まります。この3分岐を背骨に、Australia PDIの実測で切り分け方をまとめました。

    検証環境:Australia PDI / OOTB / 2026-08-29 確認

    Flow Designerとは:レコードの作成・更新などをきっかけに、承認・タスク作成・通知を自動実行する仕組みです。フロー定義はsys_hub_flowに入ります。1回ごとの実行記録はsys_flow_context(画面名:Flow engine contexts)に残ります。

    急いでいる人向けの60秒チェック
    ① /sys_flow_context_list.do を対象レコードのsys_idで検索。実行記録はあるか
    ② Workflow Studioでフローを確認。StatusがPublishedで、Activeがtrueか
    ③ カタログアイテムなら、Process EngineタブのFlow欄が空でないか

    この3つで直れば、以降を読む必要はありません。①で記録があれば、状態を見てWaitingかCompleteの節へ進みます。記録が無ければ②と③です。それでも解けないときだけ、原因別の節を順に確かめてください。

    切り分けの背骨は「実行記録の3分岐」

    最初に押さえる事実が1つあります。フローが起動しなかったとき、その痕跡はどこにも残りません。対象レコードにも一覧にも、警告は出ないのです。だから調査は「動かなかった証拠」ではなく「動いた記録」を探します。


    画像

    分岐は3つです。記録が0件なら、フローは起動していません。原因はトリガー側にあります。Waitingなら、フローは動いています。人の作業(承認かタスク)を待っているだけです。Completeなら最後まで動いています。期待と違うのは中身の設定です。

    以降の節は、すべてこの3分岐のどれかに紐づけて進めます。

    前提:フローは非同期で動く。直後の0件は誤認のもと

    Business Ruleはレコード更新と同じ処理の中で走ります。フローは別方式です。いったんキューに積まれ、別処理で実行されます。実測では、操作直後の実行記録は名前が空のQUEUED状態でした。名前と状態が入るまで数十秒かかっています。0件と判断するのは、1分待って再読み込みしてからです。

    実行記録の見え方には権限の設定もあります。関連プロパティの公式説明はこうです。

    Set true if the users explicitly need access to the flow record in order to see flow's context.
    (訳: フローの実行記録を見るために、フロー本体へのアクセス権を明示的に要求するならtrueにする)
    引用元: /sys_properties_list.do?sysparm_query=name=com.snc.process_flow.reporting.require_flow_access

    既定値はtrueでした。自分には記録が見えるのに、他の担当者には見えない。そういう相談が来たら、このプロパティとフローへのアクセス権を確かめます。

    Flow Designerの位置づけは、プラグイン(v_plugin)の公式説明にこうあります。

    Suite of plugins necessary to support the Flow Designer Designer App
    (訳: Flow Designerのデザイナーアプリを支えるために必要なプラグイン群)

    Provides action steps for basic record operations in Flow Designer.
    (訳: Flow Designerにおける基本的なレコード操作のアクションステップを提供する)
    引用元: /v_plugin_list.do?sysparm_query=idSTARTSWITHcom.glide.hub

    スクリプト系の自動化との使い分けは別記事に譲ります。この記事は「動かないときの見つけ方」だけを扱います。

    0件の原因①:StatusがDraftのまま。ActiveがtrueでもDraftは動かない

    記録が0件のとき、最初に見るのはフローのStatusです。StatusとActiveは別のフィールドです。Statusは公開済み(published)か下書き(draft)かを表します。Activeは有効か無効かです。動くのはpublishedかつtrueのフローだけです。

    このPDIにはフローが394本入っています。内訳を並べます。


    画像

    Workflow Studio(旧Flow Designer)の一覧では、StatusとActiveが別の列に並びます。この2列を必ず両方見ます。


    画像

    「Activeはtrueなのに、StatusはDraftのまま」というフローも実在します。一覧をactive=true^status=draftで絞ると出てきます。


    画像

    自作フローで多いのはこのパターンです。編集して保存しただけではDraftのままです。Workflow Studio右上のActivateを押して、初めてpublishedになります。編集後の再有効化も同じです。修正を保存したら、もう一度Activateを押します。押し忘れると、直前のpublished版が動き続けます。「直したのに挙動が変わらない」ときは、まずここを疑ってください。

    警告:一覧やスクリプトから直接直さない。直したつもりで直らない

    ここに実務上の罠があります。sys_hub_flowのレコードを一覧やスクリプトから直接更新しても、保存されません。実測では、Activeをfalseに書き換えてもエラーが出ませんでした。しかしレコードは変わっていません。更新日時も元のままでした。

    つまり「直したつもりで直っていない」状態が、警告なしに起きます。フローの操作は必ずWorkflow Studioの画面で行います。ActivateもDeactivateも同じです。

    0件の原因②:トリガーが無い、または条件に達していない

    Statusに問題が無ければ、次はトリガーです。トリガー定義(sys_hub_trigger_instance)は一覧で直接開けます。「このテーブルを起点にするフローがあるか」をここで確かめます。


    画像

    このPDIのトリガーは、レコード起点が95本で最多でした(作成43・作成または更新28・更新24)。ほかにSLAタスク6本・サービスカタログ5本などが続きます。

    incidentには注意が要ります。レコードトリガーは15本ありますが、全部がテンプレートフローです。中身はJIRA連携・Teams通知・Zoom会議・VIP割り当てなどでした。StatusはすべてDraftです。だからOOTBのPDIでは、インシデントを何件起票してもフローは1本も動きません。実行記録をsource_table=incidentで検索した結果は、全履歴で0件でした。これはOOTBの仕様です。

    Draftと条件の壁は重なることもあります。例としてVTB Sample Flowを見ます。トリガー条件はpriority=1でした。そのうえStatusはDraftです。優先度1のインシデントを作っても動きません。条件を満たす前に、Statusで止まっているからです。試すならテンプレートをWorkflow Studioで開きます。中身を確認してからActivateする、の順です。

    条件不一致を疑う場面では、公式のデバッグ用プロパティが使えます。

    Comma-separated list of table-names to log the trigger conditions on tables that failed to cause the Flow to trigger. It should only be populated during debugging.
    (訳: フローの起動に至らなかったトリガー条件をログに出すテーブル名のカンマ区切りリスト。デバッグ中だけ設定すること)
    引用元: /sys_properties_list.do?sysparm_query=name=com.glide.hub.flow_trigger.condition_debug

    起動しなかった理由は、普段はどこにも残りません。このプロパティにテーブル名を入れたときだけ、理由がログに出ます。既定値は空です。条件の判定材料は「レコードが変更された瞬間の値」です。あとからレコードを直しても、過去の評価はやり直されません。

    0件の原因③:そもそもフローが紐づいていない

    カタログ申請では、この原因が独特の形で現れます。実例で確かめました。フロー未設定のアイテム「Office Keys」を1件注文します。リクエスト承認は通りました。しかしRITMの実行記録は0件のままです。履行タスクも作られません。stageはRequest Approvalから動きませんでした。


    画像

    原因はアイテムのProcess Engineタブにあります。Flow・Workflow・Execution Planの3欄が、すべて空でした。


    画像

    このPDIのアクティブな標準アイテムは71件です。うちフロー設定ありが43件、FlowもWorkflowも無しが23件でした。未設定組にはConference Room ReservationsやOffice Keysが並びます。こうしたアイテムは、注文しても誰もstageを進めません。放置されたRITMとして残り続けます。

    直し方は明快です。アイテムのProcess Engineタブを開き、Flow欄にフローを設定するだけです。汎用の履行で良ければ、OOTBの「Service Catalog item request」がそのまま使えます。動くアイテムのFlow欄は、実際にこうなっています。


    画像

    Waitingの実例:注文1件は2回の承認待ちを挟んで進む

    Waiting分岐の実例を1本だけ見せます。フロー設定ありのStandard Laptopを注文しました。流れは次の1枚のとおりです。


    画像

    注文直後、RITMの実行記録は0件でした。ここで焦らないでください。記録はリクエスト(sc_request)側にあります。「Service Catalog Request」フローがWaitingで承認を待っていました。


    画像

    承認すると、今度はRITM側のフローが起動します。そして2段目の承認(Dept. Head Approval)で再びWaitingになりました。


    画像

    2段目も承認すると、履行タスクSCTASK0010001が作られました。フローはタスク完了待ちのWaitingで残ります。つまりWaitingの待ち先は2種類です。承認(sysapproval_approver)か、タスク(sc_task)のどちらかになります。

    見分け方は単純です。sysapproval_approverをrequestedで検索します。残っていれば承認待ちです。無ければsc_taskを見ます。未完了のタスクがあれば、それが待ち先です。どちらも担当者へ声をかければ前に進みます。フローを疑う前に、まず人の作業の滞留を疑う。Waiting分岐の要点はこの一言に尽きます。承認の追い方は承認の完全ガイドに、2段構えの仕組みは承認は2段構えの記事に譲ります。

    実行記録のフォームを開くと、起点レコードと状態が1画面で読めます。


    画像

    今回の実測では、注文からタスク生成まで数分でした。間に承認を2回挟んでいます。承認が人待ちになる本番なら、ここは数時間から数日に伸びるはずです。Waitingの長さは、そのまま承認の滞留時間を映します。

    RITMフォーム上部のstageも手掛かりになります。今回はDept. Head Approval、そしてOrder Fulfillmentと進みました。stageの名前が承認系なら、待ち先はまず承認です。

    2つのアイテムの結果を並べます。同じ注文操作でも、分岐が違えば止まり方が違います。


    画像

    Completeなのに期待と違うなら、見るのは中身とログ

    Completeは「フローは最後まで動いた」という意味です。結果が期待と違うなら、原因はアクションの中身にあります。実行記録のフォームを開き、各アクションの結果を上から順に追うのが基本です。分岐(If)のどちらへ進んだかも、ここで確かめられます。

    ログはsys_flow_logに残ります。ただしログレベルの既定はWARNです。正常時の詳細は残りません。詳しく見たいときだけレベルを変え、終わったら戻します。ログの読み方はsyslogの記事が使えます。

    「トリガー条件は合っているのにIfで落ちていた」という誤認が、この分岐では定番です。トリガー条件とフロー内のIfは役割が違います。トリガーは起動の門番です。Ifは起動後の分かれ道にあたります。実行記録があるなら、疑うのはIf以降になります。

    確認順の一覧表

    3分岐と確認箇所を1枚にまとめます。上の3行が「0件」用です。実行記録・StatusとActive・トリガー条件の順に見ます。4行目の承認はWaiting用です。5行目のProcess Engineはカタログ固有の0件原因になります。最終行のログはComplete用です。印刷して手元に置ける粒度にしてあります。


    画像

    Run Asは最後に疑う

    フローには実行ユーザーの設定(Run As)があります。このPDIでは「起動したユーザー」が278本、「システムユーザー」が113本でした。ユーザー実行のフローは、起動した人のACLで動きます。権限が足りないと、フローは起動したのに中の操作だけが失敗する形です。実行記録は残るため、0件とは症状が違います。

    今回の実験は管理者で行いました。権限差による失敗は再現していません。エラー系の記録が残り、起動者の権限が弱いと分かっているときに疑う場所です。設定値の確認先はフローのトリガー画面です。一覧で見るなら、sys_hub_flowのrun_as列を足します。逆にシステムユーザー実行のフローは、誰の操作でも同じ強い権限で動きます。権限エラーには強い設定です。そのぶん、見せてはいけないデータまで処理できてしまいます。新規に作るときは、この違いを踏まえてどちらかを選びます。

    実機を見て気づいたこと

    1回の注文で、実行記録は複数の行に分かれました。リクエスト側のフローとサブフロー、RITM側のフローが別の行です。どの行が目当てのフローかは、source_recordの列で見分けます。一覧にこの列を足しておくと調査が速くなります。


    画像

    source_recordフィールドの公式説明(hint)は「The source script of this execution」でした。実際に入るのはスクリプトではなく起点レコードへの参照です。説明文の方が実態とずれている例として覚えておきます。

    フロー394本に対し、直近の実行記録は通知系のスケジュール実行ばかりでした。日常的に動いているフローは少数です。実行記録の一覧は、その環境で本当に使われている自動化の棚卸しにも使えます。

    操作直後のQUEUED状態(名前が空の行)も、知らないと壊れた実行に見えます。実際は数十秒で名前と状態が入りました。前提節に書いたとおり、判断は1分待ってからです。

    用語

    • sys_hub_flow … フローの定義。Status(published/draft)とActiveを持つ

    • sys_flow_context … フロー1実行=1レコードの実行記録。画面名はFlow engine contexts

    • Workflow Studio … フローを編集・有効化する画面。旧名はFlow Designer

    • Process Engine … カタログアイテムにフロー/ワークフローを紐づけるタブ。エンジンは1つだけ選ぶ

    • sysapproval_approver … 承認者1人につき1件作られる承認レコード。Waitingの正体を確かめる場所

    • Run As … フローを起動者の権限で動かすか、システムユーザーの権限で動かすかの設定

    • sys_flow_log … フロー実行のログテーブル。既定のログレベルはWARN

    • Activate … フローをpublishedかつ有効にするWorkflow Studioのボタン。保存とは別の操作

    付録:自分の環境で確認するときのURL

    • /sys_flow_context_list.do?sysparm_query=source_record=<レコードのsys_id> … 対象レコードを起点にした実行記録

    • /sys_flow_context_list.do?sysparm_query=state=WAITING … 待ち状態の実行をまとめて洗い出す

    • /sys_hub_flow_list.do?sysparm_query=active=true^status=draft … Activeなのに下書きのままのフロー

    • /sys_hub_trigger_instance_list.do … トリガー定義の一覧(種類とフローの対応)

    • /sysapproval_approver_list.do?sysparm_query=state=requested … 滞留中の承認

    • /sc_cat_item_list.do?sysparm_query=active=true^flow_designer_flowISEMPTY^workflowISEMPTY … エンジン未設定のカタログアイテム

    • /sys_flow_log_list.do … フロー実行のログ(既定はWARN以上のみ)

    引用した公式説明を自分で開く

    この記事で引用した説明文は、ServiceNowが製品に同梱しているドキュメントです。

    • Flow Designerプラグイン群の公式説明(引用元):/v_plugin_list.do?sysparm_query=idSTARTSWITHcom.glide.hub^descriptionISNOTEMPTY

    • トリガー条件デバッグ用プロパティの公式説明(引用元):/sys_properties_list.do?sysparm_query=nameLIKEflow_trigger

    参考リンク

    検証範囲とおことわり

    数値と挙動はAustralia PDI(OOTB)で2026-08-29に確認したものです。フロー394本などの件数はこのバージョンの値で、環境により変わります。検証で作成したのはリクエスト2件(REQ0010001・REQ0010002)とその配下のRITM・タスク・承認、およびNew状態の変更要求1件です。いずれもデータレコードで、設定は変更していません。sys_hub_flowへの直接更新は保存されなかったため、OOTB設定は元のままです。

    condition_debugプロパティは説明文の引用にとどめました。値の変更と動作確認は検証範囲外です。Run Asの権限差が実際にどう失敗するかも、権限の弱いユーザーでの再現が必要なため別の検証に譲ります。トリガー種類の集計は、REST APIで取得できた120件のトリガー定義に基づきます。

    関連記事

     
     
    ServiceNowのPDI(Personal Developer Instance)を実機で観察して、Noteに記事を書いています 実装・運用・教育の現場視点で淡々と記録中です リクエストがあればその記事も書きます 個人の観察日記です

    あなたへのおすすめ