FlowAPI - スコープ指定、グローバル

  • リリースバージョン: Zurich
  • 更新日 2025年07月31日
  • 所要時間:85分
  • FlowAPI は、ブロック方式または非ブロック方式のいずれかを使用して、サーバー側スクリプトでアクション、フロー、またはサブフローを実行するためのメソッドを提供します。

    sn_fd 名前空間を使用して、グローバルスクリプトおよびスコープ指定スクリプトの FlowAPI メソッドにアクセスします。ワークフロースタジオコードスニペットアクションを使用してフローの呼び出しを作成するか、ここで説明する方法を使用してスクリプトを手動で更新します。

    注:
    ドメインセパレーションされたインスタンスでは、この API によってトリガーされるフロー、サブフロー、およびアクションは、スクリプトを開始したユーザーのドメインで実行されます。たとえば、Acme ドメイン内のユーザーがフローをトリガーするスクリプトを開始した場合、フローがシステムユーザーとして実行されている場合でも、フローは Acme ドメイン内で実行され、Acme データにのみアクセスできます。
    注:
    インスタンスのパフォーマンスを最適化するには、非同期ビジネスルールスクリプトからこれらのメソッドを呼び出さないようにします。代わりに、ワークフロースタジオの UI 内でスケジュール済みジョブレコードを作成します。

    FlowAPI - cancel(文字列 contextId, 文字列 reason)

    一時停止中または実行中のフロー、サブフロー、またはアクションをキャンセルします。

    表 : 1. パラメーター
    名前 タイプ 説明
    contextId String フロー、サブフロー、またはアクションの実行詳細レコードの Sys_id。ワークフロースタジオ の [フロー実行] タブに移動して実行の詳細にアクセスするか、startFlow()startSubflow()、または startAction() メソッドによって返されたコンテキストレコードの sys_id を渡します。
    注:
    ターゲットコンテキストがインスタンスの別のノードで実行されている場合、キャンセルにわずかな遅延が発生する可能性があります。同じノードで実行されているコンテキストはすぐにキャンセルされます。別のノードで実行されているコンテキストの場合、まずキャンセルが適切なノードに転送されるまで待つ必要があります。
    理由 文字列 オプション。フロー、サブフロー、またはアクションをキャンセルする理由です。フローエンジンのログエントリー [sys_flow_log] テーブルの [メッセージ] フィールドに表示されます。
    表 : 2. 返される内容
    タイプ 説明
    なし

    この例では、startFlow() メソッドの戻り値を使用して、実行時間の長いフローをキャンセルします。

    (function() { 
    
    var now_GR = new GlideRecord('incident'); 
    now_GR.addQuery('number', 'INC0000050'); 
    now_GR.query(); 
    now_GR.next(); 
    
          try { 
              var inputs = {}; 
              inputs['current'] = now_GR; // GlideRecord of table: 
              inputs['table_name'] = 'incident'; 
    
              // Starts the flow asynchronously.
              var result = sn_fd.FlowAPI.getRunner()
              .flow('global.myFlow')
              .inBackground()
              .withInputs(inputs)
              .run();
    
              var contextId = result.getContextId();
              var dateRun = result.getDate();
              var domainUsed = result.getDomainId();
              var flowName = result.getFlowObjectName();
              var flowObjectType = result.getFlowObjectType(); 
    
          } catch (ex) { 
              var message = ex.getMessage(); 
              gs.error(message); 
          } 
    })();
    
     
    // Call the cancel() method using the context Id returned from the startFlow() method
    sn_fd.FlowAPI.cancel(contextId, 'Flow took too long to execute.');

    この例は、Test Flow という名前のフローをキャンセルします。

    var now_GR = new GlideRecord("sys_flow_context");
    now_GR.addQuery("name", "Test Flow");
    now_GR.query();
    
    while (now_GR.next()) {
    sn_fd.FlowAPI.cancel(now_GR.getUniqueValue(), 'Canceling Test Flows');
    } 

    FlowAPI - executeAction(文字列 name, マップ inputs, 数値 timeout)

    サーバー側スクリプトから同期的にアクションを実行します。

    ビジネスルール、スクリプトインクルード、またはその他のサーバー側スクリプト内からアクションを実行します。このメソッドを使用して実行されるアクションは同期で実行されるため、このメソッドはアクションによって作成された出力にアクセスできます。アクションを非同期で実行するには、startAction を使用します。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    注:
    このメソッドは、セッションを開始したユーザーとしてアクションを実行します。
    表 : 3. パラメーター
    名前 タイプ 説明
    name 文字列 実行されるアクションのスコープと名前。global.action_name など。
    inputs マップ アクションの入力を定義する名前/値ペアです。入力ラベルではなく、入力名を使用します。
    timeout 番号 オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。
    表 : 4. 返される内容
    タイプ 説明
    オブジェクト アクション出力。

    この例では、スクリプトは sn_fd.FlowAPI.executeAction を使用して、グローバルスコープで actionforpassword2tes というアクションを実行します。変数 inputs には、アクションの入力が含まれます。この場合、名前とパスワードです。アクションの出力は、outputs 変数に格納されます。この場合は暗号化されたパスワードオブジェクトです。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。

    (function() {
    	
      try {
        var inputs = {};
        inputs['name'] = ; // String 
        inputs['password2'] = ; // Password (2 Way Encrypted) 
    		
        // Execute Synchronously: Run in foreground. Code snippet has access to outputs.
        // var timeout = ; //timeout in ms
        //sn_fd.FlowAPI.executeAction('global.actionforpassword2test', inputs, timeout)
        var outputs = sn_fd.FlowAPI.executeAction('global.actionforpassword2test', inputs);
    
        // Get Outputs:
        // Note: outputs can only be retrieved when executing synchronously.
        var output = outputs['output']; // Password (2 Way Encrypted)
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();

    FlowAPI - executeActionQuick(文字列 name, マップ inputs, 数値 timeout)

    実行の詳細や他の関連レコードを作成せずに、現在のユーザーセッションでサーバー側スクリプトから同期的にアクションを実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。

    レポートと生成されたレコード
    このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
    待機サポート
    このメソッドは、アクションを一時停止して条件を待機することはサポートしていません。「承認を求める」や「条件待ち」などの待機条件で一時停止するステップはサポートされていません。
    MID サーバーのサポート
    このメソッドは、MID サーバーから実行するアクションの一時停止をサポートしていません。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    表 : 5. パラメーター
    名前 タイプ 説明
    name 文字列 実行するアクションのスコープと内部名です。例えば、global.action_name です。ワークフロースタジオ アクションのリストで [内部名] フィールドを見つけます。
    inputs マップ アクションの入力を定義する名前/値ペアです。利用可能なアクションの入力と必要なデータタイプは、アクションアウトラインの [入力] で確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}
    timeout 番号

    オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。

    表 : 6. 返される内容
    タイプ 説明
    オブジェクト アクションによって定義された出力を含むオブジェクトです。アクションの出力は、アクションアウトラインの [出力] で確認できます。
    (function() {
      try {
    
        var grIncident = new GlideRecord('incident');
        grIncident.get('57af7aec73d423002728660c4cf6a71c');
    
        var inputs = {};
        inputs['variable'] = grIncident;
    
        var outputs = sn_fd.FlowAPI.executeActionQuick('global.update_record_test', inputs);
    
        // Get Outputs:
        // Note: outputs can only be retrieved when executing synchronously.
        var output1 = outputs['output1']; 
    
      } catch (ex) { 
        var message = ex.getMessage();
        gs.error(message);
        }
    	
    })();

    FlowAPI - executeDataStreamAction(文字列 name, マップ inputs, 数値 timeout)

    サーバー側スクリプトからデータストリームアクションを同期的に実行し、ScriptableDataStream オブジェクトを返します。

    データストリームアクションの詳細については、「 データストリームアクションとページネーション」を参照してください。

    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    注:
    エラーを捕捉するために、常にデータストリームのロジックを try/catch ブロックで囲みます。データストリームを閉じてパフォーマンスの問題を防ぐために、常に、ScriptableDataStream クラスの close() メソッドで終了する finally ステートメントを含めます。
    表 : 7. パラメーター
    名前 タイプ 説明
    name 文字列 実行するデータストリームアクションのスコープと名前です。例えば、global.data_stream_action_name です。
    inputs マップ アクションの入力を定義する名前/値ペアです。入力ラベルではなく、入力名を使用します。アクションに入力がない場合は、このパラメーターを含めないでください。
    timeout 番号 オプション。アクションがタイムアウトするまでの時間です。タイムアウトが期限切れになると、例外がスローされます。タイムアウトは executeDataStreamAction メソッドのみに適用されます。ScriptableDataStream クラスのメソッドには適用されません。

    デフォルト:30,000 (com.glide.hub.flow_api.default_execution_time システムプロパティで指定)

    単位:ミリ秒

    表 : 8. 返される内容
    タイプ 説明
    ScriptableDataStream データストリーム内のアイテムを反復処理するために使用されるオブジェクトです。ScriptableDataStream クラスのメソッドを使用して、このオブジェクトを操作します。「ScriptableDataStream API」を参照してください。

    この例は、データストリームで返された各アイテムのインシデントレコードを作成します。

    (function() {
    	
      try {
    
        // Execute Data Stream Action. 
        var stream = sn_fd.FlowAPI.executeDataStreamAction('x_my_scope.data_stream_name');
    
        // Process each item in the data stream
        while (stream.hasNext()) {
    
          // Get a single item from the data stream.
          var item = stream.next();
    
          // Use the item. 
          var now_GR = new GlideRecord('incident');
          now_GR.setValue('number',item.id);
          now_GR.setValue('short_description',item.name);
          now_GR.insert();
    		
          // By default, this code snippet will terminate after 10 items.
          // Remove or modify this limit after testing your code.
          if (stream.getItemIndex() >= 9) {
            break;
          }
        }
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      } finally {
        stream.close();
      }
    	
    })();

    FlowAPI - executeFlow(文字列 name, マップ inputs, 数値 timeout)

    サーバー側スクリプトから同期的にフローを実行します。

    ビジネスルール、スクリプトインクルード、またはその他のサーバー側スクリプト内からフローを実行します。このメソッドを使用して実行されるフローは同期で実行されます。フローを非同期で実行するには、startFlow を使用します。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    注:
    このメソッドは、フロープロパティで指定されたユーザーとしてフローを実行します。
    表 : 9. パラメーター
    名前 タイプ 説明
    name 文字列 実行されるフローのスコープと名前。global.flow_name など。
    inputs マップ トリガーの入力を定義する名前/値ペアです。入力ラベルではなく、入力名を使用します。
    timeout 番号 オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。
    表 : 10. 返される内容
    タイプ 説明
    なし 通常の操作では、戻り値は生成されません。
    例外 同期的に呼び出されたフローが一時停止すると、API が例外をスローします。現在の実行は待機ステータスになります。ほとんどの場合、フローが再開されると例外は削除されます。ただし、API は MID サーバーに送信されたフローを再開できません。

    この例では、sn_fd.FlowAPI.executeFlow を使用して、test_flow というグローバルフローを実行します。このフローは、通常、インシデントテーブルのレコードが更新されたときに発生します。スクリプトからフローをアクティブ化しているので、この情報を指定する必要があります。このコードは、現在のレコードとそのレコードのテーブルを含む入力変数を作成します。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。

    (function() {
      try {
        var inputs = {};
        inputs['current'] = ; // GlideRecord of table:  
        inputs['table_name'] = 'incident';
    
        // Execute Synchronously: Run in foreground.
        // var timeout = ; //timeout in ms
        //sn_fd.FlowAPI.executeFlow('global.test_flow', inputs, timeout)
        sn_fd.FlowAPI.executeFlow('global.test_flow', inputs);
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();

    FlowAPI - executeFlowQuick(文字列 name, マップ inputs, 数値 timeout)

    実行の詳細やその他の関連レコードを作成せずに、サーバー側のスクリプトから、フロー、サブフロー、アクション、またはデータストリームアクションを同期または非同期で実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。

    レポートと生成されたレコード
    このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
    ユーザーとして実行
    このメソッドは、セッションを開始したユーザーとしてフローを実行します。システムユーザーとして実行するようにフローを設定すること、またはユーザーの代理操作を行うことはサポートされていません。
    待機サポート
    このメソッドは、フローを一時停止して条件を待機することはサポートしていません。「承認を求める」、「条件待ち」、「期間の待機」などの待機条件で一時停止するアクションまたはフローロジックはサポートされていません。
    MID サーバーのサポート
    このメソッドは、MID サーバーから実行するフローの一時停止をサポートしていません。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    表 : 11. パラメーター
    名前 タイプ 説明
    name 文字列 実行するフローのスコープと内部名です。例えば、global.flow_name です。ワークフロースタジオ フローのリストで [内部名] フィールドを見つけます。
    inputs マップ トリガーの入力を定義する名前/値ペアです。利用可能なトリガーの入力と必要なデータタイプは、フローの [トリガー] セクションで確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}
    timeout 番号 オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。
    表 : 12. 返される内容
    タイプ 説明
    なし
    (function() {
    	
      try {
        var grIncident = new GlideRecord('incident');
        grIncident.get('ed92e8d173d023002728660c4cf6a7bc');
    
        var inputs = {};
        inputs['current'] = grIncident;
        inputs['table_name'] = 'incident';
    		
        sn_fd.FlowAPI.executeFlowQuick('global.test_quick_flow', inputs);
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
    	}
    	
    })();

    FlowAPI - executeSubflow(文字列 name, マップ inputs, 数値 timeout)

    サーバー側スクリプトから同期的にサブフローを実行します。

    ビジネスルール、スクリプトインクルード、またはその他のサーバー側スクリプト内からサブフローを実行します。このメソッドを使用して実行されるサブフローは同期で実行されます。サブフローを非同期で実行するには、startSubflow を使用します。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    注:
    このメソッドは、フロープロパティで指定されたユーザーとしてフローを実行します。
    表 : 13. パラメーター
    名前 タイプ 説明
    name 文字列 実行されるサブフローのスコープと名前。global.subflow_name など。
    inputs マップ サブフロー入力を定義する名前と値のペア。入力ラベルではなく、入力名を使用します。
    timeout 番号 オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。
    表 : 14. 返される内容
    タイプ 説明
    オブジェクト サブフローの出力を含むオブジェクトです。
    例外 同期的に呼び出されたフローが一時停止すると、API が例外をスローします。現在の実行は待機ステータスになります。ほとんどの場合、フローが再開されると例外は削除されます。ただし、API は MID サーバーに送信されたフローを再開できません。

    この例では、スクリプトは sn_fd.FlowAPI.executeSubflow を使用して、グローバルスコープで subflowTest というサブフローを実行します。変数 inputs には、サブフローの入力が含まれます。この場合、名前とパスワードです。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。

    
    (function() {
    	
    	try {
    		var inputs = {};
    		inputs['name'] = ; // String 
    		inputs['password2'] = ; // Password (2 Way Encrypted) 
    		
    		// Execute Synchronously: Run in foreground.
    		// var timeout = ; //timeout in ms
                  //sn_fd.FlowAPI.executeSubflow('global.subflowTest', inputs, timeout)
                  var outputs = sn_fd.FlowAPI.executeSubflow('global.subflowTest', inputs);
    		
    	} catch (ex) {
    		var message = ex.getMessage();
    		gs.error(message);
    	}	
    })();

    FlowAPI - executeSubflowQuick(文字列 name, マップ inputs, 数値 timeout)

    実行の詳細や他の関連レコードを作成せずに、現在のユーザーセッションでサーバー側スクリプトから同期的にサブフローを実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。

    レポートと生成されたレコード
    このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
    ユーザーとして実行
    このメソッドは、セッションを開始したユーザーとしてフローを実行します。システムユーザーとして実行するようにフローを設定すること、またはユーザーの代理操作を行うことはサポートされていません。
    待機サポート
    このメソッドは、フローを一時停止して条件を待機することはサポートしていません。「承認を求める」、「条件待ち」、「期間の待機」などの待機条件で一時停止するアクションまたはフローロジックはサポートされていません。
    MID サーバーのサポート
    このメソッドは、MID サーバーから実行するフローの一時停止をサポートしていません。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    表 : 15. パラメーター
    名前 タイプ 説明
    name 文字列 実行するサブフローのスコープと内部名です。例えば、global.subflow_name です。ワークフロースタジオ サブフローのリストで [内部名] フィールドを見つけます。
    inputs マップ サブフロー入力を定義する名前と値のペア。利用可能なサブフローの入力と必要なデータタイプは、サブフローの [入力] で確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}
    timeout 番号 オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。
    表 : 16. 返される内容
    タイプ 説明
    オブジェクト サブフローによって定義された出力を含むオブジェクトです。サブフローの出力は、サブフローアウトラインの [サブフローの入力および出力] で確認できます。
    (function() {
    
      try {
        var grIncident = new GlideRecord('incident');
        grIncident.get('57af7aec73d423002728660c4cf6a71c');
    
        var inputs = {};
        inputs['variable'] = grIncident;
    
        var outputs = sn_fd.FlowAPI.executeSubflowQuick('global.test_quick_run_subflow', inputs);
    
        // Get Outputs:
        // Note: outputs can only be retrieved when executing synchronously.
        var output1 = outputs['output1']; 
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
        }
    	
    })();

    FlowAPI - getErrorMessage(文字列 contextId)

    フロー、サブフロー、またはアクションによって生成されたエラーメッセージを返します。このメソッドは、quick() API で実行されるフロー、サブフロー、またはアクションからメッセージを返すことはできません。

    表 : 17. パラメーター
    名前 タイプ 説明
    contextId 文字列 エラーメッセージを取得するフロー、サブフロー、またはアクションの sys_id です。
    表 : 18. 返される内容
    タイプ 説明
    文字列 前回の操作の実行とそれによって生成されたエラーメッセージです。

    この例は、test_error_subflow というグローバルサブフローを開始し、生成されたエラーメッセージを返します。通常は、単一のスクリプトがフローを実行してそのエラーメッセージを取得することはありません。一般に、別のスクリプトまたは ワークフロースタジオ のいずれかが既にフローを実行しています。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。

    (function() {
    
      try {
        // Gather inputs to call flow
        var inputs = {};
        inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
        inputs['ah_comment'] ='Test Comment' ; // String
    
        // Call flow with known errors
        var contextId = sn_fd.FlowAPI.startSubflow('global.test_error_subflow', inputs);
    
        // Get flow error message
        var errormsg = sn_fd.FlowAPI.getErrorMessage(contextId);
        return errormsg;
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();
    

    出力:

    Operation (test_error_flow.574033f6db6811102166e2291396199f.274073f6db6811102166e22913961908.0be0d916c31332002841b63b12d3ae13) failed with error: com.snc.process_flow.exception.OpException: Value of field record is not a GlideRecord
    at com.snc.process_flow.operation.FieldValue.getGlideRecord(FieldValue.java:145)
    at com.snc.process_flow.operation.CRUDOperation.getInputValidGlideRecord(CRUDOperation.java:54)
    at com.snc.process_flow.operation.RecordDeleteOperation.run(RecordDeleteOperation.java:26)
    at com.snc.process_flow.engine.Operation.execute(Operation.java:212)
    at com.snc.process_flow.engine.restricted_caller_access.ExecuteWithCallerAccessTracking.executeWithMetaStack(ExecuteWithCallerAccessTracking.java:31)
    at com.snc.process_flow.engine.ProcessEngine.executeOps(ProcessEngine.java:570)
    at com.snc.process_flow.engine.ProcessEngine.runInternal(ProcessEngine.java:476)
    at com.snc.process_flow.engine.ProcessEngine.run(ProcessEngine.java:462)
    at com.snc.process_flow.engine.ProcessAutomation.run(ProcessAutomation.java:86)
    at com.snc.process_flow.engine.GlideProcessAutomation.runSync(GlideProcessAutomation.java:155)
    at com.snc.process_flow.engine.GlideProcessAutomation.runWithDomain(GlideProcessAutomation.java:270)
    at com.snc.process_flow.engine.GlideProcessAutomation.lambda$runAsUserSync$1(GlideProcessAutomation.java:237)
    at com.snc.process_flow.engine.PFSessionClone.run(PFSessionClone.java:70)
    at com.snc.process_flow.engine.GlidePFSession.runPlanAsUserSession(GlidePFSession.java:42)
    at com.snc.process_flow.engine.GlideProcessAutomation.runAsUserSync(GlideProcessAutomation.java:235)
    at com.snc.process_flow.engine.GlideProcessAutomation.messageFlow(GlideProcessAutomation.java:330)
    at com.snc.process_flow.engine.GlideProcessAutomation.messageFlow(GlideProcessAutomation.java:309)
    at com.snc.process_flow.engine.ProcessHubEventHandler.doSendMessage(ProcessHubEventHandler.java:475)
    at com.snc.process_flow.engine.ProcessHubEventHandler.process(ProcessHubEventHandler.java:119)
    at com.snc.process_flow.engine.ProcessHubEventHandler.process(ProcessHubEventHandler.java:91)
    at com.snc.process_flow.engine.FlowEventManager.processEvents(FlowEventManager.java:122)
    at com.glide.job.EventHandlerJob.execute(EventHandlerJob.java:38)
    at com.glide.schedule.JobExecutor.lambda$executeJob$0(JobExecutor.java:129)
    at com.snc.db.data_replicate.replicator.DataReplicationAdvisors.runInOriginatorContext(DataReplicationAdvisors.java:73)
    at com.glide.schedule.JobExecutor.lambda$inDataReplicationContext$2(JobExecutor.java:159)
    at com.glide.schedule.JobExecutor.executeJob(JobExecutor.java:132)
    at com.glide.schedule.JobExecutor.execute(JobExecutor.java:116)
    at com.glide.schedule_v2.SchedulerWorkerThread.executeJob(SchedulerWorkerThread.java:338)
    at com.glide.schedule_v2.SchedulerWorkerThread.lambda$process$0(SchedulerWorkerThread.java:220)
    at com.glide.worker.TransactionalWorkerThread.executeInTransaction(TransactionalWorkerThread.java:35)
    at com.glide.schedule_v2.SchedulerWorkerThread.process(SchedulerWorkerThread.java:220)
    at com.glide.schedule_v2.SchedulerWorkerThread.run(SchedulerWorkerThread.java:101)

    FlowAPI - getFlowStages(文字列 scopedFlowName)

    フローステージのリストを含む JSON 文字列を返します。

    表 : 19. パラメーター
    名前 タイプ 説明
    scopedFlowName 文字列 ステージを取得するフローのアプリケーションスコープと名前。
    表 : 20. 戻り値
    タイプ 説明
    文字列 フローのステージをステージレコード値別にリストする JSON 形式の文字列。

    この例では、サービスカタログアイテム要求フローのステージの取得を示します。

    (function() {
    
      try {
        // Name of flow with stages
        var flowName = "service_catalog_item_request";
    
        // Get flow stages
        var flowStages = sn_fd.FlowAPI.getFlowStages(flowName);
        //Print JSON as info message  
        gs.info(flowStages);
        return flowStages;
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();
    

    出力:

    JSON 文字列には、ステージフィールドの名前と値のペアが含まれています。詳細については、を参照してください。

    [
      {
        "label": "Manager Approval",
        "value": "manager_approval",
        "type": "standard",
        "duration": "1970-01-03 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 0
      },
      {
        "label": "Set current stage state to:  [Error]",
        "value": "Set current stage state to:  [Error]",
        "type": "error",
        "duration": "1970-01-01 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": false,
        "order": 0
      },
      {
        "label": "Dept. Head Approval",
        "value": "Dept. Head Approval",
        "type": "standard",
        "duration": "1970-01-03 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 1
      },
      {
        "label": "CIO Approval",
        "value": "CIO Approval",
        "type": "standard",
        "duration": "1970-01-03 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 2
      },
      {
        "label": "Order Fulfillment",
        "value": "Order Fulfillment",
        "type": "standard",
        "duration": "1970-01-05 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 3
      },
      {
        "label": "Backordered",
        "value": "Backordered",
        "type": "standard",
        "duration": "1970-01-15 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 4
      },
      {
        "label": "Deployment",
        "value": "Deployment",
        "type": "standard",
        "duration": "1970-01-02 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 5
      },
      {
        "label": "Request Cancelled",
        "value": "Request Cancelled",
        "type": "standard",
        "duration": "1970-01-01 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 6
      },
      {
        "label": "Completed",
        "value": "complete",
        "type": "standard",
        "duration": "1970-01-01 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 7
      }
    ]

    FlowAPI - getOutputs(文字列 contextId)

    完了したアクションまたはサブフローの出力を返します。

    startAction() または startSubflow() メソッドのいずれかの戻り値を contextId パラメーターとして使用できます。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    表 : 21. パラメーター
    名前 タイプ 説明
    contextId 文字列 出力を取得するアクションまたはサブフローの sys_id です。
    表 : 22. 返される内容
    タイプ 説明
    オブジェクト アクションまたはサブフローの出力を含むオブジェクトです。

    この例は、test_subflow というグローバルサブフローを開始し、フローが終了するのを待ってから、その出力値を取得します。通常は、単一のスクリプトがフローを実行してその出力値を取得することはありません。getOutputs() 呼び出しの前にフローが完了しない場合があるため、この例では待機時間を使用しています。一般に、別のスクリプトまたは ワークフロースタジオ のいずれかが既にフローを実行しています。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。

    (function() {
    
      try {
        // Gather inputs to call flow
        var inputs = {};
        inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
        inputs['ah_comment'] ='Test Comment' ; // String
    
        // Call flow
        var contextId = sn_fd.FlowAPI.startSubflow('global.test_subflow', inputs);
    
        // Wait for the flow to finish running
    
        // Get flow outputs
        var outputs = sn_fd.FlowAPI.getOutputs(contextId);
        var output1 = outputs['output1'];
        return output1;
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();
    

    FlowAPI - getRunner()

    実行するフローまたはアクションの ScriptableFlowRunner ビルダーオブジェクトを返します。

    表 : 23. パラメーター
    名前 タイプ 説明
    なし
    表 : 24. 返される内容
    タイプ 説明
    ScriptableFlowRunner ワークフロースタジオ のアクション、フロー、またはサブフローを実行するために使用されるビルダーオブジェクト。

    この例は、フローを同期的に実行します。

    
    (function() {
      try {
    
        var inputs = {}; 
    
        inputs['sys_id'] = '57af7aec73d423002728660c4cf6a71c';  // Pass the record's sys_id in as input.  
    
        var result = sn_fd.FlowAPI.getRunner()  // Create a ScriptableFlowRunner builder object.
          .action('global.markapproved')        // Run the global scope action named markapproved.
          .inForeground()
          .inDomain('TOP/ACME')                 // Run the action from the TOP/ACME domain.                               
          .withInputs(inputs)
          .run();                               // Run the action and return a FlowRunnerResult object.
    
        var contextId = result.getContextId();  // Retrieve the context ID from the result
        var dateRun = result.getDate();
        var domainUsed = result.getDomainId();  // Retrieve the Domain ID from the result.
        var flowName = result.getFlowObjectName();
        var flowObjectType = result.getFlowObjectType();
    
        var outputs = result.getOutputs();            // Retrieve any outputs from the action execution.
        var newApprovalStatus = outputs['approval'];  // Echo back the approval status for verification.
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    	
    })();
       

    FlowAPI - getStatus(String contextId)

    フロー、サブフロー、またはアクションのステータスを返します。

    表 : 25. パラメーター
    名前 タイプ 説明
    contextId 文字列 ステータスを取得するフロー、サブフロー、またはアクションのsys_id。
    表 : 26. 戻り値
    パラメーター タイプ 説明
    <Object> オブジェクト フロー、サブフロー、またはアクションの現在のステータスを名前と値のペアとして含むオブジェクト。
    {
        "hasLookupError": Boolean,
        "errorMessage": "String",
        "contextStatus": {Object}
      }
    <Object>.hasLookupError ブール フロー、サブフロー、またはアクションのコンテキストステータスの検索で問題が発生したかどうかを示すフラグ。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {Object}
      }
    <Object>.errorMessage 文字列 コンテキストルックアップ操作によって返されたエラーメッセージ。hasLookupError が false の場合、このパラメーターは無効です。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {Object}
      }
    <Object>.contextStatus オブジェクト クエリされたフロー、サブフロー、またはアクションに関するステータスの詳細を含むオブジェクト。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "COMPLETE",
          "errorState": "NONE"
        }
      }
    <Object>.contextStatus.state 文字列 フロー、サブフロー、またはアクションコンテキストのステータス。一部のステータス値は、関連するパラメーターに追加情報を提供します。
    • COMPLETE は、 errorState パラメーターに追加情報を提供します
    • ERROR は、 message パラメーターに追加情報を提供します
    • CANCELLED は、 canceledReason パラメーターに追加情報を提供します
    • IN_PROGRESS isRunOnMid パラメーターに追加情報を提供します
    • WAITINGは、 waitingOn パラメータに追加情報を提供します
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "COMPLETE",
          "errorState": "NONE"
        }
      }
    <Object>.contextStatus.errorState 文字列 フローエラー処理によって生成されたフロー完了ステータス。API は、フロー、サブフロー、またはアクションが COMPLETE ステータスの場合にのみ、このパラメーターを生成します。
    • ERROR_CAUGHT
    • ERROR_SKIPPED
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "COMPLETE",
          "errorState": "ERROR_CAUGHT"
        }
      }
    <Object>.contextStatus.message 文字列 フロー、サブフロー、またはアクションによって返されるエラーメッセージ。API は、フロー、サブフロー、またはアクションが ERROR ステータスの場合にのみ、このパラメーターを生成します。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "ERROR",
          "message": "Error:  Error Message! (Process Automation.LOG; line 1)"
        }
      }
    <Object>.contextStatus.canceledReason 文字列 フロー、サブフロー、またはアクションによって返されたキャンセルメッセージ。API は、フロー、サブフロー、またはアクションが CANCELLED ステータスの場合にのみ、このパラメーターを生成します。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "CANCELLED",
          "canceledReason": "User has requested to stop executing the flow"
        }
      }
    <Object>.contextStatus.isRunOnMid ブール フロー、サブフロー、またはアクションが MID サーバー環境で実行されているかどうかを示すフラグ。API は、フロー、サブフロー、またはアクションが IN_PROGRESS ステータスの場合にのみ、このパラメーターを生成します。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "IN_PROGRESS",
          "isRunOnMid": true
        }
      }
      }
    <Object>.contextStatus.waitingOn アレイ 現在のフロー、サブフロー、またはアクションが待機しているアイテムのリスト。API は、フロー、サブフロー、またはアクションが WAITING ステータスの場合にのみ、このパラメーターを生成します。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
            {
              "order":"1",
              "stepType": "TIMER",
              "endTime": 1713627497643
            },
            {
              "order":"5",
              "stepType": "WAIT_FOR_CONDITION_WITH_TIMEOUT",
              "table": "incident",
              "condition": "sys_id=10e8b43243200210338774d6ebb8f22d^short_description=112",
              "endTime": 1713645497800
            }
          ]
        }
      }
    <Object>.contextStatus.waitingOn.order 文字列 フローを待機させる原因となっているアイテムのフローステップ番号。待機アクションがフロー内のカスタムアクションである場合、順序には、フローが待機しているカスタムアクションの期間とアクションステップ番号も含まれます。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
            {
              "order":"1",
              "stepType": "TIMER",
              "endTime": 1713627497643
            },
            {
              "order":"5",
              "stepType": "WAIT_FOR_CONDITION_WITH_TIMEOUT",
              "table": "incident",
              "condition": "sys_id=10e8b43243200210338774d6ebb8f22d^short_description=112",
              "endTime": 1713645497800
            }
          ]
        }
      }
    <Object>.contextStatus.waitingOn.stepType 文字列 フロー、サブフロー、またはアクションを待機させる原因となっているアクションまたはフローステップのタイプ。API は、フロー、サブフロー、またはアクションが WAITING ステータスの場合にのみ、このパラメーターを生成します。一般的な例をいくつか示します。
    • WAIT_FOR_CONDITION
    • WAIT_FOR_CONDITION_WITH_TIMEOUT
    • ASK_FOR_APPROVAL
    • CREATE_TASK_WITH_WAIT
    • タイマー
    • SLA_TIMER
    • サブフロー
    <Object>.contextStatus.waitingOn.table 文字列 フロー、サブフロー、またはアクションが待機しているレコードを含むテーブル名。API は、フロー、サブフロー、またはアクションが WAITING ステータスで、stepType が WAIT_FOR_CONDITION、WAIT_FOR_CONDITION_WITH_TIMEOUT、ASK_FOR_APPROVAL、または CREATE_TASK_WITH_WAIT の場合にのみ、このパラメーターを生成します。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
              {
              "order":"1",
              "stepType": "WAIT_FOR_CONDITION",
              "table": "incident",
              "condition": "sys_id=1347723243200210338774d6ebb8f285^short_description=1238"
              }
            ]
        }
      }
    <Object>.contextStatus.waitingOn.condition 文字列 フロー、サブフロー、またはアクションが待機しているレコードのクエリ条件。API は、フロー、サブフロー、またはアクションが WAITING ステータスにあり、実行を継続するために満たす必要がある条件がある場合にのみ、このパラメーターを生成します。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
              {
              "order":"1",
              "stepType": "WAIT_FOR_CONDITION",
              "table": "incident",
              "condition": "sys_id=1347723243200210338774d6ebb8f285^short_description=1238"
              }
            ]
        }
      }
    <Object>.contextStatus.waitingOn.endTime 整数 フロー、サブフロー、またはアクションが待機している終了時間。API は、フロー、サブフロー、またはアクションが WAITING ステータスで、stepType が WAIT_FOR_CONDITION_WITH_TIMEOUT、TIMER、または SLA_TIMER の場合にのみ、このパラメーターを生成します。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
        "state": "WAITING",
        "waitingOn": [
            {
              "order":"3",
              "stepType": "SLA_TIMER",
              "endTime": 1713574610000
            }
        ]
        }
      }
    <Object>.contextStatus.waitingOn.approvalRule 文字列 フロー、サブフロー、またはアクションが待機している承認ルール。API は、フロー、サブフロー、またはアクションが WAITING ステータスで、stepType が ASK_FOR_APPROVAL の場合にのみ、このパラメーターを生成します。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
            {
              "order":"3",
              "stepType": "ASK_FOR_APPROVAL",
              "table": "incident",
              "condition": "sys_id=3bd89703372002103387963174924b20^approvalINapproved,rejected,cancelled",
              "approvalRule": "ApprovesAnyU[a8f98bb0eb32010045e1a5115206fe3a,71826bf03710200044e0bfc8bcbe5d3b]"
            }
          ]
        }
      }
    <Object>.contextStatus.waitingOn.contextId 文字列 フローまたはサブフローが待機しているサブフローのsys_id。API は、フローまたはサブフローが WAITING ステータスで、stepType が SUBFLOW の場合にのみ、このパラメーターを生成します。
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
        "state": "WAITING",
        "waitingOn": [
            {
              "order":"1",
              "stepType": "SUBFLOW",
              "contextId": "0f724aabd921021020291a665e07e44a"
            }
          ]
        }
      }

    この例では、[Do the following in parallel] フローロジックを含むフローを実行します。通常は、単一のスクリプトがフローを実行してそのエラーメッセージを取得することはありません。一般に、別のスクリプトまたは ワークフロースタジオ のいずれかが既にフローを実行しています。

    (function() {
      try {
        var result = sn_fd.FlowAPI.getRunner()  // Create a ScriptableFlowRunner builder object.
          .flow('global.test_do_in_parallel')   // Run the global scope flow named do_in_parallel.
          .run();                               // Run the flow and return a FlowRunnerResult object.
    
        var contextId = result.getContextId();  // Retrieve the context ID from the result
    
        var flowStatus = sn_fd.FlowAPI
          .getStatus(contextId);                // Retrieve any outputs from the flow execution.
    
        JSON.stringfy(flowStatus);              // Convert object to string
        return flowStatus;
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    	
    })();
    出力:
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
            {
              "order":"1",
              "stepType": "TIMER",
              "endTime": 1713627497643
            },
            {
              "order":"5",
              "stepType": "WAIT_FOR_CONDITION_WITH_TIMEOUT",
              "table": "incident",
              "condition": "sys_id=10e8b43243200210338774d6ebb8f22d^short_description=112",
              "endTime": 1713645497800
            }
          ]
        }
      }

    FlowAPI - hasApprovals(文字列 scopedFlowName)

    指定されたスコープ内のフローが「承認を求める」アクションを含んでいるかどうかをチェックします。

    hasApprovals() メソッドは、指定されたスコープ内のフローが「承認を求める」アクションを含んでいるかどうかを判断します。このメソッドはまた、 フロー内の「承認を求める」アクションが、If フローロジックブロックでネストされているかどうかをチェックします。詳細については、「 承認を求める」アクションを参照してください。

    表 : 27. パラメーター
    名前 タイプ 説明
    scopedFlowName 文字列 実行するフローのスコープと内部名です。例えば、global.flow_name です。ワークフロースタジオ フローのリストで [内部名] フィールドを見つけます。
    表 : 28. 返される内容
    タイプ 説明
    文字列 次の文字列値のいずれか 1 つを返します。
    • ALWAYS:フローに、条件分岐 If フローロジックブロックでネストされていない「承認を求める」アクションが含まれています。
    • CONDITIONALLY:フローに、条件分岐 If フローロジックブロックでネストされた「承認を求める」アクションが含まれています。
    • NO:フローに「承認を求める」アクションは含まれていません。
    • UNKNOWN:コンパイラーエラーが発生しました。フローに「承認を求める」アクションが含まれているかどうかは、システムでは判断されません。

    次の例では、グローバルスコープ内の example_flow に「承認を求める」アクションが含まれているかどうかをチェックし、結果をログに記録します。

    (function() {
    	
      try {
        var result = sn_fd.FlowAPI.hasApprovals('global.example_flow');
        gs.log('Result: ' + result);
      }
    
      catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();

    FlowAPI - restartFlowFromContext(String ContextId, Map providedInputs)

    バックグラウンドで実行されたフロー、サブフロー、またはアクションを再開します。新しい入力を指定することも、省略して以前に行った入力を再利用することもできます。

    表 : 29. パラメーター
    名前 タイプ 説明
    contextId 文字列 再起動するフロー、サブフロー、またはアクションのsys_id。このフロー、サブフロー、またはアクションはバックグラウンドで実行され、sysevent レコードが関連付けられている必要があります。
    providedInputs オブジェクト オプション。フロー、サブフロー、またはアクションの置換入力を定義する名前と値のペアを含むマップオブジェクト。このパラメーターに null 値を省略または指定した場合、フロー、サブフロー、またはアクションは、以前に指定した入力を使用して実行されます。
    表 : 30. 戻り値
    タイプ 説明
    ScriptableFlowRunnerResultsScoped ワークフロースタジオ アクション、フロー、またはサブフローの実行の詳細を含むオブジェクト。

    インシデント テーブルにレコードベースのトリガーがあるサンプル フローを再起動します。元のフローでは、サンプルインシデントINC0008112を入力として使用していました。フローが再開されると、代わりにサンプルインシデントINC0008111が入力として使用されます。

    (function() {
      try {
    
        var flowContextID = '4216396ffd7d11107edcf07204c30fd5';     // sys_id of sys_flow_context record
        var oldIncidentRecord = '552c48888c033300964f4932b03eb092'; // sys_id of INC0008112
        var newIncidentRecord = 'a83820b58f723300e7e16c7827bdeed2'; // sys_id of INC0008111
        var inputs = {};
        var gr = new GlideRecord('incident'); // Create new incident object
    
        gr.get(newIncidentRecord);            // Get GlideRecord object for INC0008111
    
        inputs['current'] = gr;               // Set new Incident record as input
        inputs['table_name'] = 'incident';    // Set table name to Incident
    
        var result = sn_fd.FlowAPI.getRunner()            // Create a ScriptableFlowRunner builder object.
          .restartFlowFromContext(flowContextID, inputs); // Restart flow with new inputs.
    
        var contextId = result.getContextId();  // Retrieve the context ID from the result
        var dateRun = result.getDate();
    
        gs.info(contextId + ' ' + dateRun);
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    
    })();
    

    FlowAPI - scheduleCancel (String contextId、String reason、Integer delaySeconds)

    フローエンジンキュー内のシステムイベントをスケジュールして、進行中、中断と推定、遅延後待機状態になっているフローをキャンセルします。

    表 : 31. パラメーター
    名前 タイプ 説明
    contextId String フロー、サブフロー、またはアクションの実行詳細レコードの Sys_id。ターゲットのフロー、サブフロー、またはアクションは、進行中、中断と推定、または待機状態である必要があります。ワークフロースタジオ の [フロー実行] タブに移動して実行の詳細にアクセスするか、メソッドによって返されたコンテキストレコードのsys_idを渡します。
    注:
    ターゲットコンテキストがインスタンスの別のノードで実行されている場合、キャンセルにわずかな遅延が発生する可能性があります。同じノードで実行されているコンテキストはすぐにキャンセルされます。別のノードで実行されているコンテキストの場合、まずキャンセルが適切なノードに転送されるまで待つ必要があります。
    理由 文字列 フロー、サブフロー、またはアクションをキャンセルする理由です。フローエンジンのログエントリー [sys_flow_log] テーブルの [メッセージ] フィールドに表示されます。
    delaySeconds 整数 オプション。フローエンジンキューでキャンセルイベントを処理するまでの待機秒数。このパラメーターを省略すると、メソッドはデフォルト値の 1 秒を使用します。

    このパラメーターを使用すると、数千のフローコンテキストのキャンセルを同時にスケジュールすることによるパフォーマンスへの影響を回避できます。すべてのキャンセルを同時に実行するのではなく、フローのキャンセルのバッチを遅延でスケジュールします。または、遅延を非同期フローのタイムアウト値として使用することもできます。

    表 : 32. 戻り値
    タイプ 説明
    なし

    この例では、 startFlow() メソッドの戻り値を使用して、長時間実行されるフローのキャンセルをスケジュールします。

    (function() { 
    
    var now_GR = new GlideRecord('incident'); 
    now_GR.addQuery('number', 'INC0000050'); 
    now_GR.query(); 
    now_GR.next(); 
    
          try { 
              var inputs = {}; 
              inputs['current'] = now_GR; // GlideRecord of table: 
              inputs['table_name'] = 'incident'; 
    
              // Starts the flow asynchronously.
              var contextId = sn_fd.FlowAPI.startFlow('global.myFlow', inputs); 
    
          } catch (ex) { 
              var message = ex.getMessage(); 
              gs.error(message); 
          } 
    })();
    
     
    // Call the scheduleCancel() method using the context Id returned from the startFlow() method
    sn_fd.FlowAPI.scheduleCancel(contextId, 'Flow took too long to execute.', 60);

    この例では、「テストフロー」という名前のフローのキャンセルをスケジュールします。

    var now_GR = new GlideRecord("sys_flow_context");
    now_GR.addQuery("name", "Test Flow");
    now_GR.query();
    
    while (now_GR.next()) {
    sn_fd.FlowAPI.scheduleCancel(now_GR.getUniqueValue(), 'Canceling Test Flows', 60);
    } 

    この例では、delaySeconds パラメーターを使用して、フローキャンセルジョブをバッチで実行します。バッチを使用して、数千のフローコンテキストをキャンセルします。

    var delaySeconds = 1;
    
    for (var i; i < sys_flow_context.length; ++i) {
      if (i % 100 === 0) {
        delaySeconds = delaySeconds + 60;
      }
      var contextId = sys_flow_context[i];
      var reason = "Example reason";
      sn_fd.FlowAPI.scheduleCancel(contextId, reason, delaySeconds);
    }

    FlowAPI:sendMessage(文字列 contextSysID, 文字列メッセージ, 文字列ペイロード)

    一時停止してメッセージを待機しているフローに特定のメッセージとペイロード応答を送信します。

    表 : 33. パラメーター
    名前 タイプ 説明
    contextSysID 文字列 一時停止され、特定のメッセージの再開を待機しているフローまたはサブフローのsys_id値。フローまたはサブフローには、[メッセージを待機] アクションが含まれている必要があります。「Wait For Message action」を参照してください。
    メッセージ 文字列 待機中のフローまたはサブフローに送信するテキスト文字列。このメッセージ値が [メッセージを待機] アクションにリストされているメッセージ値と一致する場合、フローまたはサブフローは実行を再開します。「Wait For Message action」を参照してください。
    ペイロード 文字列 待機中のフローに送信するテキスト文字列出力値。フローまたはサブフローは、実行を再開するときにペイロードを入力として使用できます。たとえば、レコードが再オープンされた理由や、新しい承認が必要だった理由を指定できます。
    表 : 34. 戻り値
    タイプ 説明
    なし

    この例では、「 フローを再開」 というメッセージを送信して、一時停止したフローを再開します。一時停止したフローは、ペイロード値をフローの他の場所でデータとして使用できます。

    (function() {
        try {
          // var change = '154a6320db9b12102166e229139619fc';    // Example sys_id of change record
          var pausedFlowId = '6e9bab60949b1210dda11cd237cd955d'; // Example sys_id of a paused flow
          var resumeMessage = 'Resume Flow';                     // Message that paused flow is waiting for
          var payload = 'Resubmitted for approval';              // Data to send back to flow
          var result = sn_fd.FlowAPI
          .sendMessage(pausedFlowId, resumeMessage, payload);    // Send a message to the paused flow
        } catch (ex) {
          var message = ex.getMessage();
          gs.error(message);
        }
      })();  
      

    出力:

    このスクリプトは、独自の出力を生成しません。スクリプト - バックグラウンドモジュールから実行すると、スクリプトによって変更された操作とテーブルが一覧表示されます。[メッセージを待機] アクションのフロー実行の詳細で、スクリプト出力の結果を確認することもできます。
    [0:00:00.074] Script completed in scope global: script
    Script execution history and recovery available here
    Operation	Table	                       Row Count
    delete	   sys_flow_runtime_state_chunk	1
    insert	   sys_flow_runtime_state_chunk	1
    update	   sys_flow_context	            1
    record-watcher asynchronous tracking complete - time: 3 ms. Executed responders: 1 
    record-watcher asynchronous tracking complete - time: 3 ms. Executed responders: 1 
    record-watcher asynchronous tracking complete - time: 3 ms. Executed responders: 1 
    

    FlowAPI - setEncryptedOutput(文字列 password)

    スクリプトステップ内で password2 の値を構築します。

    GlideRecord から返された暗号化された password2 値を特定し、システムが値を暗号化された文字列ではなくマスク済みパスワードとして表示できるようにします。

    表 : 35. パラメーター
    名前 タイプ 説明
    パスワード 文字列 暗号化された password2 値。
    表 : 36. 返される内容
    タイプ 説明
    文字列 暗号化された password2 値。エンジンによってパスワード値として認識されます。

    この例では、ユーザーレコードから password2 フィールドの値を返し、変数に格納します。この変数は setEncryptedOutput メソッドに渡されます。このメソッドは、sn_fd.GlideActionUtil.setEncryptedOutput を使用して呼び出されます。インスタンスは、戻り値をパスワードとして認識します。

    (function execute(inputs, outputs) {
      // ...code...
      var now_GR = new GlideRecord('sys_user');
      now_GR.addQuery('first_name' , 'Abel');
      now_GR.query();
      now_GR.next();
      var pwVal = now_GR.getValue('pw2');
      outputs['usedSetEncrypted'] = sn_fd.GlideActionUtil.setEncryptedOutput(pwVal);
      outputs['justSetDirectly'] = pwVal;
    })(inputs, outputs);

    FlowAPI - startAction(文字列 name, マップ inputs)

    サーバー側スクリプトから非同期的にアクションを実行します。

    ビジネスルール、スクリプトインクルード、またはその他のサーバー側スクリプト内からアクションを実行します。このメソッドを使用して実行されるアクションは非同期的に実行されるため、このメソッドを使用するスクリプトは、アクションによって作成される出力にアクセスできません。アクションを同期で実行し、生成された出力にアクセスするには、executeAction を使用します。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    注:
    このメソッドは、セッションを開始したユーザーとしてアクションを実行します。
    表 : 37. パラメーター
    名前 タイプ 説明
    name 文字列 実行されるアクションのスコープと名前。global.action_name など。
    inputs マップ アクションの入力を定義する名前/値ペアです。入力ラベルではなく、入力名を使用します。
    表 : 38. 返される内容
    タイプ 説明
    文字列 アクションのコンテキストレコードの sys Id です。ワークフロースタジオ の [フローの実行] タブに移動し、フロー実行を選択して [コンテキストレコードを開く] をクリックして、コンテキストレコードにアクセスします。

    この例では、sn_fd.FlowAPI.startAction を使用して、sn_itsm_spoke スコープで add_comment というアクションを実行します。inputs オブジェクトには、ターゲットレコードとそのレコードに追加するコメントが含まれます。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。

    (function() {
      try {
        var inputs = {};
        inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task 
        inputs['ah_comment'] ='Test Comment' ; // String 
    
        var contextId = sn_fd.FlowAPI.startAction('sn_itsm_spoke.add_comment', inputs);	
    			
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();

    FlowAPI - startActionQuick(文字列 name, マップ inputs)

    実行の詳細や他の関連レコードを作成せずに、サーバー側スクリプトから非同期的にアクションを実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。

    レポートと生成されたレコード
    このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
    待機サポート
    このメソッドは、アクションを一時停止して条件を待機することはサポートしていません。「承認を求める」や「条件待ち」などの待機条件で一時停止するステップはサポートされていません。
    MID サーバーのサポート
    このメソッドは、MID サーバーから実行するアクションの一時停止をサポートしていません。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    表 : 39. パラメーター
    名前 タイプ 説明
    name 文字列 実行するアクションのスコープと内部名です。例えば、global.action_name です。ワークフロースタジオ アクションのリストで [内部名] フィールドを見つけます。
    inputs マップ アクションの入力を定義する名前/値ペアです。利用可能なアクションの入力と必要なデータタイプは、アクションアウトラインの [入力] で確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}
    表 : 40. 返される内容
    タイプ 説明
    なし
    (function() {
    	
      try {
        var grIncident = new GlideRecord('incident');
        grIncident.get('57af7aec73d423002728660c4cf6a71c');
    
        var inputs = {};
        inputs['variable'] = grIncident;
    
        sn_fd.FlowAPI.startActionQuick('global.update_record_test', inputs);
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
        }
    	
    })();

    FlowAPI - startFlow(文字列 name, マップ inputs)

    サーバー側スクリプトからフローを実行します。

    ビジネスルール、スクリプトインクルード、またはその他のサーバー側スクリプト内からフローを実行します。このメソッドを使用して実行されるフローは非同期で実行されます。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    注:
    このメソッドは、フロープロパティで指定されたユーザーとしてフローを実行します。
    表 : 41. パラメーター
    名前 タイプ 説明
    name 文字列 実行されるフローのスコープと名前。global.flow_name など。
    inputs マップ トリガーの入力を定義する名前/値ペアです。入力ラベルではなく、入力名を使用します。
    表 : 42. 返される内容
    タイプ 説明
    文字列 フローのコンテキストレコードの sys Id です。ワークフロースタジオ の [フローの実行] タブに移動し、フロー実行を選択して [コンテキストレコードを開く] をクリックして、コンテキストレコードにアクセスします。

    この例では、sn_fd.FlowAPI.startFlow を使用して、test_flow というグローバルフローを実行します。コードは、フローが必要とする入力を含む inputs 変数を作成します。この場合、現在のレコードとそのレコードのテーブルです。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。

    (function() {
     
      var now_GR = new GlideRecord('incident'); 
      now_GR.addQuery('number', 'INC0009009'); 
      now_GR.query(); 
      now_GR.next();
    
      try {
        var inputs = {};
        inputs['current'] = now_GR; // GlideRecord of table: Incident
        inputs['table_name'] = 'incident';
    
        var contextId = sn_fd.FlowAPI.startFlow('global.test_flow', inputs);	
    	
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);  
      }
    })();

    FlowAPI - startFlowQuick(文字列 name, マップ inputs)

    実行の詳細や他の関連レコードを作成せずに、サーバー側スクリプトから非同期的にフローを実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。

    レポートと生成されたレコード
    このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
    システムユーザーとして実行
    このメソッドは、システムユーザーとしてフローを実行します。セッションを開始するユーザーとして実行するようにフローを設定すること、またはユーザーの代理操作を行うことはサポートされていません。
    待機サポート
    このメソッドは、フローを一時停止して条件を待機することはサポートしていません。「承認を求める」、「条件待ち」、「期間の待機」などの待機条件で一時停止するアクションまたはフローロジックはサポートされていません。
    MID サーバーのサポート
    このメソッドは、MID サーバーから実行するフローの一時停止をサポートしていません。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    表 : 43. パラメーター
    名前 タイプ 説明
    name 文字列 実行するフローのスコープと内部名です。例えば、global.flow_name です。ワークフロースタジオ フローのリストで [内部名] フィールドを見つけます。
    inputs マップ トリガーの入力を定義する名前/値ペアです。利用可能なトリガーの入力と必要なデータタイプは、フローの [トリガー] セクションで確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}
    表 : 44. 返される内容
    タイプ 説明
    なし
    (function() {
    	
      try {
        var grIncident = new GlideRecord('incident');
        grIncident.get('ed92e8d173d023002728660c4cf6a7bc');
    
        var inputs = {};
        inputs['current'] = grIncident;
        inputs['table_name'] = 'incident';
    		
        sn_fd.FlowAPI.startFlowQuick('global.test_quick_flow', inputs);
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
    	}
    	
    })();

    FlowAPI - startSubflow(文字列 name, マップ input)

    サーバー側スクリプトからサブフローを実行します。

    ビジネスルール、スクリプトインクルード、またはその他のサーバー側スクリプト内からサブフローを実行します。このメソッドを使用して実行されるサブフローは非同期的に実行され、このメソッドを含むスクリプトは、そのフローによって作成された出力にアクセスできません。サブフローを同期で実行し、生成された出力にアクセスするには、executeSubflow を使用します。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    注:
    このメソッドは、フロープロパティで指定されたユーザーとしてフローを実行します。
    表 : 45. パラメーター
    名前 タイプ 説明
    name 文字列 実行されるサブフローのスコープと名前。global.subflow_name など。
    inputs マップ サブフロー入力を定義する名前と値のペア。入力ラベルではなく、入力名を使用します。
    表 : 46. 返される内容
    タイプ 説明
    文字列 サブフローのコンテキストレコードの sys Id です。ワークフロースタジオ の [フローの実行] タブに移動し、フロー実行を選択して [コンテキストレコードを開く] をクリックして、コンテキストレコードにアクセスします。

    この例は、sn_fd.FlowAPI.startSubflow を使用して、test_subflow というグローバルフローを実行します。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。

    (function() {
      try {
        var inputs = {};
        inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task 
        inputs['ah_comment'] ='Test Comment' ; // String 
    
        var contextId = sn_fd.FlowAPI.startSubflow('global.test_subflow', inputs);
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    	
    })();

    FlowAPI - startSubflowQuick(文字列 name, マップ inputs)

    実行の詳細や他の関連レコードを作成せずに、サーバー側スクリプトから非同期的にサブフローを実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。

    レポートと生成されたレコード
    このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
    システムユーザーとして実行
    このメソッドは、システムユーザーとしてフローを実行します。セッションを開始するユーザーとして実行するようにフローを設定すること、またはユーザーの代理操作を行うことはサポートされていません。
    待機サポート
    このメソッドは、フローを一時停止して条件を待機することはサポートしていません。「承認を求める」、「条件待ち」、「期間の待機」などの待機条件で一時停止するアクションまたはフローロジックはサポートされていません。
    MID サーバーのサポート
    このメソッドは、MID サーバーから実行するフローの一時停止をサポートしていません。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    表 : 47. パラメーター
    名前 タイプ 説明
    name 文字列 実行するサブフローのスコープと内部名です。例えば、global.subflow_name です。ワークフロースタジオ サブフローのリストで [内部名] フィールドを見つけます。
    inputs マップ サブフロー入力を定義する名前と値のペア。利用可能なサブフローの入力と必要なデータタイプは、サブフローの [入力] で確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}
    表 : 48. 返される内容
    タイプ 説明
    なし
    (function() {
    
      try {
        var grIncident = new GlideRecord('incident');
        grIncident.get('57af7aec73d423002728660c4cf6a71c');
    
        var inputs = {};
        inputs['variable'] = grIncident;
    
        sn_fd.FlowAPI.startSubflowQuick('global.test_quick_run_subflow', inputs);
    
      } catch (ex) {
        var message = ex.getMessage();  
        gs.error(message);
        }
    	
    })();