シナリオ は、特定の受信ビジネス・オブジェクトまたはビジネス・オブジェクトの集合を処理するコラボレーション・テンプレート・コードです。
このビジネス・オブジェクトには、イベント (コネクターからのもの) とアクセス呼び出し (アクセス・クライアントからのもの) があります。シナリオは、コラボレーション・テンプレート・クラスのイベント処理メソッドであるとみなすことができます。アクティビティー・ダイアグラムには、イベントの処理方法を示すコードが含まれます。
シナリオを使用して、コラボレーションが解決するビジネス上の問題を区分します。コラボレーションのすべてのロジックを 1 つのシナリオにグループ化したり、複数のシナリオを作成してその 1 つのシナリオが問題の 1 つの局面を扱うようにすることができます。すべてのコラボレーション・ロジックを 1 つのシナリオにグループ化するのは、すべてのロジックが main() 関数に含まれるプログラムに似ています。一方、複数のシナリオを使用するのは、機能を分割して構築されたプログラムに似ています。
コラボレーションに複数のシナリオがあり、各シナリオが 1 つのタイプのビジネス・オブジェクトを処理する場合、処理するビジネス・オブジェクトに応じて各シナリオに名前を付けることができます。例えば、コラボレーションが複数の動詞を持つ 1 つのタイプのビジネス・オブジェクトを処理する場合、Create、Update および Delete シナリオを開発できます。
さまざまなタイプのビジネス・オブジェクトをコラボレーションが処理する場合は、各ビジネス・オブジェクト定義に対してシナリオを開発できます。
シナリオは、1 回の実行につき 1 つのトリガー・フロー (トリガー・イベントまたはトリガー・アクセス呼び出し) のみを処理します。ただし、同じシナリオが複数のトリガー・フローを処理することもあります。例えば、同じシナリオが Create、Update、または Delete フローを処理することがあります。
通常、同じロジックがさまざまなタイプのビジネス・オブジェクトを処理する場合、これらのビジネス・オブジェクトに対して 1 つのシナリオを使用する方が効率的です。これにより、複数のコード・フラグメントをテストおよびデバッグする必要がなくなります。
新しいシナリオを作成する手順は、以下のとおりです。
特定の動詞を持つイベントをシナリオが処理する場合は、この動詞をシナリオ名に入れると役に立ちます。
シナリオへのトリガー・イベントの割り当ては、「ポートおよびトリガー・イベント」タブの「ポートおよびトリガー・イベント」テーブルで行います。作成する各シナリオには、そのトリガー・イベントを割り当てる必要があります。トリガー・イベントは、ビジネス・オブジェクトおよび動詞によって示されます。
フロー・トリガーがコネクターから送信されたものである場合、このフロー・トリガーはトリガー・イベントと呼ばれます。フロー・トリガーがアクセス・クライアントから送信されたものである場合、このフロー・トリガーはトリガー・アクセス・メソッドと呼ばれます。
「ポートおよびトリガー・イベント」タブでは、フロー・トリガーがトリガー・イベントとトリガー・アクセス・メソッドのいずれであるかにかかわらず、フロー・トリガーをシナリオに割り当てることができます。このセクションでは、「トリガー・イベント」と「イベント」という用語を使用します。これは、コネクターから受信したフロー・トリガーの方がはるかに一般的であるためです。
コラボレーションのポート定義により、コラボレーションが送受信できるビジネス・オブジェクトのタイプを指定します。コラボレーションのポートおよびシナリオを定義したら、以下を定義する必要があります。
「ポートおよびトリガー・イベント」タブでは、トリガー・イベントが入力されるポート名と、イベントを示すビジネス・オブジェクト名に相当するテーブル内の行を選択します。
フロー・トリガーは、ポート・ビジネス・オブジェクトと動詞 (business-object.verb の組み合わせ) によって示されます。
フロー・トリガーを定義するポートおよびビジネス・オブジェクトの行で、その動詞を選択してフロー・トリガーを指定します。
図 30 は、ポート From がビジネス・オブジェクト・タイプ Widget をサポートしているコラボレーション・テンプレートにおける関連状況を示します。Create シナリオはトリガー・イベント Widget.Create を処理し、Delete シナリオはトリガー・イベント Widget.Delete を処理します。
図 30. ポート、トリガー・イベント、およびシナリオの関係
各フロー・トリガーに対してシナリオを指定する手順は、以下のとおりです。
シナリオの作成が完了すると、シナリオ固有の変数を「シナリオ定義」ダイアログ・ボックスに追加できるようになります (図 31 を参照)。
シナリオ変数 は、単一シナリオ内のすべてのアクションおよびリンクを範囲とするコラボレーション変数です。
(シナリオ変数は、Java プログラム言語のクラス変数に相当します。) シナリオ変数は、コラボレーション・テンプレート開発中にいつでも設定できます。
変数をシナリオ定義に追加する手順は、以下のとおりです。
シナリオ変数は、長期存続ビジネス・プロセスのイベント・フロー・コンテキストの一部として自動的に永続されるわけではありません。長期存続ビジネス・プロセス・コラボレーション内でシナリオ変数を使用する場合には、サービス呼び出しの前にシナリオ変数を手動で null に設定し、サービス呼び出しの完了後にシナリオ変数を再初期化する必要があります。これらの作業は、サービス呼び出しを実行するアクション・ノードで実行します。
以下に示す例では、アクション・ノードでシナリオ変数 poolName が null に設定されてから、サービス呼び出しが実行されます。
String poolName; poolName = null;
サービス呼び出しの完了後、poolName はアクション・ノードで以下のように再初期化されます。
poolName = getConfigProperty("Pool_A");
シナリオは、Process Designer Express を使用して削除できます。削除したシナリオを元に戻すことはできません。
シナリオ定義を削除する手順は、以下のとおりです。