FlowAPI - スコープ対象、グローバル

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

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

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

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

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

    表 : 1. パラメーター
    名前 タイプ 説明
    contextId 文字列 フロー、サブフロー、またはアクションの実行の詳細レコードの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.');

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

    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(文字列名, マップ入力, 数値タイムアウト)

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

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

    この例では、スクリプトは sn_fdを使用します。FlowAPI.executeAction を使用して、グローバルスコープで actionforpassword2test というアクションを実行します。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(文字列名、マップ入力、数値タイムアウト)

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

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

    オプション。タイムアウト (ミリ秒単位)。この値は、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(文字列名, マップ入力, 数値タイムアウト)

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

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

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

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

    単位:ミリ秒

    表 : 8. 戻り値
    タイプ 説明
    スクリプト可能データストリーム データストリーム内のアイテムを反復処理するために使用されるオブジェクト。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(文字列名, マップ入力, 数値タイムアウト)

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

    ビジネスルール、スクリプトインクルード、またはその他のサーバーサイドスクリプト内からフローを実行します。このメソッドを使用して実行されるフローは、同期的に実行されます。startFlow を使用してフローを非同期に実行します。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    注:
    このメソッドは、フロープロパティで指定されたユーザーとしてフローを実行します。
    表 : 9. パラメーター
    名前 タイプ 説明
    名前 文字列 実行するフローのスコープと名前 ( global.flow_name など)。
    入力 マップ トリガー入力を定義する名前と値のペア。入力ラベルではなく、入力名を使用します。
    タイムアウト 番号 オプション。タイムアウト (ミリ秒単位)。この値は、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(文字列名、マップ入力、数値タイムアウト)

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

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

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

    ビジネスルール、スクリプトインクルード、またはその他のサーバーサイドスクリプト内からサブフローを実行します。このメソッドを使用して実行されるサブフローは、同期的に実行されます。startSubflow を使用して、サブフローを非同期に実行します。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    注:
    このメソッドは、フロープロパティで指定されたユーザーとしてフローを実行します。
    表 : 13. パラメーター
    名前 タイプ 説明
    名前 文字列 実行するサブフローのスコープと名前 ( global.subflow_name など)。
    入力 マップ サブフロー入力を定義する名前と値のペア。入力ラベルではなく、入力名を使用します。
    タイムアウト 番号 オプション。タイムアウト (ミリ秒単位)。この値は、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(文字列名, マップ入力, 数値タイムアウト)

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

    レポートと生成されたレコード
    このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
    ユーザーとして実行
    このメソッドは、セッションを開始したユーザーとしてフローを実行します。システムユーザーとして実行するようにフローを設定すること、またはユーザーの代理操作を行うことはサポートされていません。
    待機サポート
    このメソッドは、フローを一時停止して条件を待機することはサポートしていません。「承認を求める」、「条件待ち」、「期間の待機」などの待機条件で一時停止するアクションまたはフローロジックはサポートされていません。
    MID サーバーのサポート
    このメソッドは、MID サーバーから実行するフローの一時停止をサポートしていません。
    注:
    この API は、ScriptableFlowRunner - スコープ指定 に置き換えられました。これにより、オブジェクトのビルドと ワークフロースタジオ フローおよびアクションの実行に使用される既存のメソッドが廃止されます。FlowAPI クラスの getRunner() メソッドを使用して ScriptableFlowRunner オブジェクトを返し、関連するメソッドを使用します。ドメインセパレーションをサポートする必要がある場合は、ScriptableFlowRunner メソッドを使用します。
    表 : 15. パラメーター
    名前 タイプ 説明
    名前 文字列 実行するサブフローのスコープと内部名。例えば、global.subflow_name です。ワークフロースタジオサブフローのリストで [内部名] フィールドを見つけます。
    入力 マップ サブフロー入力を定義する名前と値のペア。利用可能なサブフロー入力と必要なデータタイプは、サブフローの [入力] にあります。入力ラベルではなく、入力名を使用します。例: {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}
    タイムアウト 番号 オプション。タイムアウト (ミリ秒単位)。この値は、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(文字列 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 は、フロー、サブフロー、またはアクションがエラーステータスの場合にのみ、このパラメーターを生成します。
    {
        "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 は、フロー、サブフロー、またはアクションが [待機中] ステータスの場合にのみこのパラメーターを生成します。
    {
        "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 は、フロー、サブフロー、またはアクションが [待機中] ステータスの場合にのみこのパラメーターを生成します。一般的な例をいくつか示します。
    • WAIT_FOR_CONDITION
    • WAIT_FOR_CONDITION_WITH_TIMEOUT
    • ASK_FOR_APPROVAL
    • CREATE_TASK_WITH_WAIT
    • タイマー
    • SLA_TIMER
    • サブフロー
    <Object>.contextStatus.waitingOn.table 文字列 フロー、サブフロー、またはアクションが待機しているレコードを含むテーブル名。フロー、サブフロー、またはアクションが WAITING ステータスで、stepType が WAIT_FOR_CONDITION、WAIT_FOR_CONDITION_WITH_TIMEOUT、ASK_FOR_APPROVAL、または CREATE_TASK_WITH_WAIT の場合にのみ、API はこのパラメーターを生成します。
    {
        "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. 戻り値
    タイプ 説明
    文字列 次のいずれかの文字列値を返します。
    • 常時:フローには、条件付き If フローロジックブロック内にネストされていない承認を求めるアクションが含まれています。
    • 条件付き:フローには、条件付き If フローロジックブロック内にネストされた承認を求めるアクションが含まれています。
    • いいえ:フローには「承認を求める」アクションが含まれていません。
    • 不明:コンパイラーエラーが発生し、フローに「承認を求める」アクションが含まれているかどうかをシステムが判断できません。

    次の例では、グローバルスコープ内の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(文字列 ContextId, マップ 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(文字列 contextId, 文字列 reason, 整数 delaySeconds)

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

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

    この例では、一時停止したフローを再開するために [ フローを再開 (Resume Flow)] というメッセージを送信します。一時停止したフローは、フロー内の他の場所でペイロード値をデータとして使用できます。

    (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 フィールドの値を返し、変数に格納します。この変数は、sn_fd を使用して呼び出される setEncryptedOutput メソッドに渡されます。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(文字列名, マップ入力)

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

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

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

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

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

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

    この例ではsn_fdを使用します。FlowAPI.startFlow を使用して、test_flow と呼ばれるグローバルフローを実行します。このコードは、フローに必要な入力を含む入力変数を作成します。この場合は、現在のレコードとレコードのテーブルです。コードは 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(文字列名, マップ入力)

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

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

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

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

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

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