ワークフロースクリプトの作成

最終公開日 : Sep 16, 2026

概要

EBX® スクリプト IDE から直接ワークフロースクリプトタスクを作成して公開します。スクリプトを公開すると、任意の EBX® ワークフローモデルで使用できます。ワークフローの詳細については、『TIBCO EBX® ユーザーガイド』 のセクション ワークフローモデルの概要 および データ ワークフローの概要 を参照してください。
このチュートリアルでは、次の方法を説明します。
  • ステップ 1: 入力パラメーターと出力パラメーターを含むワークフロースクリプトタスクを作成して公開します。これらのパラメーターにより、スクリプトとの間でデータの受け渡しが可能になります。
  • ステップ 2: ワークフローモデルを作成し、スクリプトタスクをモデルのステップに追加します。このタスク中に、コンテキスト依存のデータ値をキャプチャするデータ コンテキストがモデル内に作成されます。ワークフローが起動されると、値が設定されます。データコンテキスト内の値は、スクリプトの I/O パラメーターにマップされます。
  • ステップ 3: ワークフローランチャーを作成してアクティブ化します。EBX® には、ワークフローを開始するさまざまな方法が含まれています。このチュートリアルには、ワークフローランチャーを作成してテーブルの メニューに追加するための簡単な例が含まれています。

始める前に

このチュートリアルでは、関数の作成 および トリガーの作成 チュートリアルと同じデータモデルとスクリプトを使用します。このチュートリアルに従うには、他のチュートリアルを完了して同じ状態のデータモデルを作成するか、モデルのコピーを作成して従ってください。次の画像は、完全なデータモデルを示しています。
triggerWorkflowTutorialModel.png

ステップ 1: スクリプトの記述と公開

前提条件なしで、Script IDE で直接ワークフロースクリプトを作成して記述できます。この例では、ワークフローのデータコンテキストにマップする入力パラメーターをスクリプトに追加する方法を示します。これにより、データがワークフロースクリプトに渡され、処理されるようになります。
**チュートリアルの使用例:**ビジネスルールでは、Person テーブルからアクティブなユーザーが削除されないようにする必要があります。このテーブルには、ユーザーがアクティブかどうかを示すフィールドが含まれています。ユーザーは、Person レコードを削除するときにワークフローを起動します。スクリプトはユーザーのステータスをチェックします。ユーザーが非アクティブな場合は、レコードが削除されます。ユーザーがアクティブな場合は、レコードを削除できないことを示すメッセージがログに書き込まれます。
**スクリプトのヒント:**定期的にスクリプトを保存してコンパイルすることを習慣にしてください。これにより、コンパイル時のエラーを検出し、保存ポイントを作成して、スクリプトをより安定した状態に戻すことができます。
EBX® スクリプト IDE を使用してワークフロースクリプト タスクを記述するには、次の手順を実行します。
  1. EBX® スクリプト IDE パースペクティブが開いていない場合は、EBX® ツールバーの右上にある uiPerspectiveIcon.png アイコンをクリックし、 を選択します。
  2. 左側のアクティビティバーで、 を見つけて選択します。
  3. 中央のナビゲーションパネルで を選択して、新しいスクリプトを作成します。
  4. 必要な情報とパラメーターを追加します。
    1. スクリプト名 statusBeforeDelete を入力します。
    2. ラベルとオプションの説明 Check status before delete を入力します。
    3. データスペース、データセット、テーブル、レコードなどのデータコンテキストコンポーネントにアクセスするためのパラメーターを追加します。これらの値はスクリプトへの入力を提供し、スクリプトのロジックによって操作されます。
      次の各パラメーターを追加し、すべてのオプションをデフォルトのままにします。
      • WF\_Script\_dataspace
      • WF\_Script\_dataset
      • WF\_Script\_table
      • WF\_Script\_requestXPath
  5. ワークスペースの下部にある をクリックします。
  6. タブでワークフロースクリプトタスクのロジックを記述します。
    1. 次のように、インポートを追加します。
      このスクリプトは、EBX® スクリプト言語 (ESL) ユニットに含まれる事前構築済み関数 (core.data、core.complex、および core.log) を活用します。ユニットを宣言する構文は、uses core.<unit_name>; です。データモデルへの参照も、このワークフロー例のデータコンテキストの必須部分です。モデルを参照する構文は、references model <data_model_name>; です。次の例は、インポートを示しています。
      uses core.data as data;
      uses core.complex as complex;
      uses core.log as log;

      references model docPerson;
    2. ユーザーの選択に基づいて値を保持する定数を作成します。
      ユーザーがレコードを選択し、テーブルの アクション メニューからワークフローを開始すると、選択されたレコードに関する情報がワークフロー スクリプトの入力パラメーターに渡されます。定数には、データスペース、データセット、テーブル、および選択されたレコードが含まれている必要があります。親子関係として考えてください。データスペースから始めて親を宣言し、子を宣言すると、親が入力として渡されます。次のコードは、executeScriptTask() プロシージャの begin ステートメントの後に追加されます。
      // Create constants to hold the dataspace, dataset, and table
          const dataspace := data.findDataspace(_ebx.parameters.WF_Script_dataspace);
          const dataset := data.findDataset(dataspace, _ebx.parameters.WF_Script_dataset);
          const table := data.findTable<docPerson.person>(dataset);
    3. トランザクションを使用して、選択したデータに対してアクションを実行します。
      コンテキスト依存データを操作する場合は、トランザクションを使用する必要があります。トランザクションは、影響を受けるデータを分離し、トランザクションが完了した場合にのみ変更を行うことで、データの一貫性を保証します。ESL では、トランザクションはデータスペースで実行され、構文: execute transaction <transaction_name> on <dataspace> を使用します。ここで、<transaction\_name> はトランザクションに割り当てられた変数名、<dataspace> はトランザクションが発生するデータスペース名です。トランザクションを開始した後、サンプルコードは次のようになります。
      • XPath を使用して現在のレコードを取得します。
      • 選択したレコードの主キーを格納するための複合オブジェクトを作成します。
      • 現在選択されているレコードの ID を PK の id 属性に割り当てます。
        // Initiate transaction
            execute transaction tr on dataspace
            begin
                // Get current record using XPath
                var currRecord := data.lookupRecordByFullXPathForUpdate(tr, table, _ebx.parameters.WF_Script_requestXPath);
                // Create 'primary key' object
                var pk := complex.primaryKeyOf<docPerson.person>();
                // assign the value from the currently selected record's 'id' field to the objects 'id' parameter
                pk.id := currRecord.id;
            end
    4. ユーザーのステータスをチェックし、レコードを削除するか、ログにメッセージを書き込むロジックを記述します。
      この例では、if then else ステートメントが、選択したレコードの status フィールドを渡します。ステータス false は、ユーザーが非アクティブであり、deleteRecordByPrimaryKey() 関数を呼び出して削除できることを意味します。else は、ユーザーがアクティブで、情報タイプのログ メッセージを送信する場合にのみ実行されます。EBX® スクリプト ログ メッセージを表示するには、管理 > スクリプト管理 > スクリプト ログに移動します。
      // If the user is considered 'not active', then delete
      // If they are active write an info message instead
      if currRecord.status = false then
      begin
           data.deleteRecordByPrimaryKey(tr, table, pk);
      end
      else
      log.info('Active users cannot be deleted.');
      完全なワークフロースクリプトタスクの例は、次のとおりです。
      uses core.data as data;
      uses core.complex as complex;
      uses core.log as log;

      references model docPerson;

      export procedure executeScriptTask()
      begin
      // Create constants to hold the dataspace, dataset, and table
      const dataspace := data.findDataspace(_ebx.parameters.WF_Script_dataspace);
      const dataset := data.findDataset(dataspace, _ebx.parameters.WF_Script_dataset);
      const table := data.findTable<docPerson.person>(dataset);

          // Initiate transaction
          execute transaction tr on dataspace
          begin
          // Get current record using XPath
          var currRecord := data.lookupRecordByFullXPathForUpdate(tr, table, _ebx.parameters.WF_Script_requestXPath);
          // Create 'primary key' object
          var pk := complex.primaryKeyOf<docPerson.person>();
              // assign the value from the currently selected record's 'id' field to the objects 'id' parameter
              pk.id := currRecord.id;

              // If the user is considered 'not active', then delete
              // If they are active write an info message instead
              if currRecord.status = false then
              begin
              data.deleteRecordByPrimaryKey(tr, table, pk);
              end
              else
              log.info('Active users cannot be deleted.');

              end
              end
  7. タブ の下部にある ボタンを使用してスクリプトを公開し、ワークフローモデルで使用できるようにします。
    次のステップ:上記の手順で作成したスクリプトを使用する ワークフローモデル を作成します。

ステップ 2: ワークフローモデルの作成

ワークフローモデル定義には、ステップとその実行順序が含まれます。これらのモデルは汎用性が高く、単純な単一ステップのプロセスから複雑な多層シーケンスまで多岐にわたります。このチュートリアルでは、IDE で記述されたスクリプトとワークフローモデル間の相互作用に焦点を当てます。これを実現するために、単純なワークフローモデルの例を使用します。
ワークフローモデルを作成するには、次の手順を実行します。
  1. メインの EBX® ツールバーで、 を選択し、 をクリックします。
  2. スペースや特殊文字を含まない一意の名前を指定します。この例に従うには、deletePerson を使用します。
  3. データコンテキストを作成します。
    データコンテキストは、選択したレコードの ID など、コンテキストに依存するデータ値をキャプチャするために使用されます。
    1. > > に移動します。
    2. アイコンをクリックして次の変数のリストを追加し、各変数の を に設定します。
      • WF\_Variable\_XPath
      • WF\_Variable\_dataspace
      • WF\_Variable\_dataset
      • WF\_Variable\_table
      各変数は、ワークフロースクリプトのパラメーターにマップされます。名前はスクリプトのパラメーター名に似たものにする必要がありますが、追加の説明情報を含めることをお勧めします。これにより、ワークフローモデル変数とスクリプトパラメーターを区別しやすくなります。
  4. ワークフロースクリプトタスクを実行するステップをワークフローモデルに追加します。
    1. > に移動し、ワークフローダイアグラムに移動します。
    2. と の間の線の上にマウスポインタを移動し、 アイコンをクリックします。
    3. タスク名として deletePersonScript と入力します。
    4. メニューから を選択し、 をクリックします。
    5. スクリプトを設定します。
      1. と はデフォルト値のままにします。
        グループの場合は、 を に設定します。
      2. メニューを使用して、statusBeforeDelete スクリプトを選択します。
        スクリプトの入力パラメーターのリストが表示されます。
    6. 杖アイコンを使用して、各入力パラメーター (ワークフロースクリプトから取得) を、手順 2 で作成したデータコンテキストの対応する変数にマップします。
    7. をクリックします。
    8. ステップを保存して閉じます。
    9. を選択して公開プロセスを開始し、表示される情報が適切であれば、ページの下部にある を選択します。

ステップ 3: ワークフローランチャーの作成とアクティベーション

ワークフローは、ワークフローランチャーによって開始される必要があります。ワークフローランチャーは、いくつかの方法で構成できます。簡潔にするために、この例では、ユーザーがテーブルの メニューから直接起動できるワークフローを作成する方法を示します。これには、ワークフローランチャーの作成とワークフローのアクティブ化が必要です。
ワークフローランチャーとアクティベーションを作成するには、次の手順を実行します。
  1. > > > に移動します。
  2. 新しいレコードを作成します。
    1. ランチャー名として、DeleteInactiveUser と入力します。
    2. メニューを使用して、deletePerson ワークフローモデルパブリケーションを選択します。
      グループが下に表示されます。
    3. の場合、テーブルメニューに表示される名前 Delete an inactive user を追加します。
    4. データコンテキスト変数を EBX® ビルトインデータコンテキストタイプにマップします。これらの値は、ユーザーが削除するデータを選択してワークフローを起動すると、アクティブなコンテキストに基づいて自動的に入力されます。
    5. 保存しますが、レコードを閉じないでください。
      セクションが表示されます。
  3. ワークフローランチャーのアクティベーションの作成
    ワークフローランチャーのアクティブ化により、ワークフローランチャーのアクセシビリティが決まります。ランチャーは、指定されたテーブルを表示しているときに、選択されたプロファイルで使用できます。
    1. をクリックして、新しいランチャーのアクティベーションを作成します。
    2. docPerson データモデルを選択します。
    3. Person テーブルを選択します。
    4. の場合は、プロファイルが追加されていることを確認します。
    5. 保存して閉じます。
  4. レコードを保存して閉じます。
    作成したスクリプトを使用するワークフローは、Person テーブルの メニューから起動できるようになりました。