BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA
 ドキュメントのダウンロード   サイト マップ   用語集 
検索

BPM ユーザーズ ガイド

 前 次 目次 PDFで表示  

ワークフローのノードの定義

注意: Worklist クライアント アプリケーションは WebLogic Integration リリース 7.0 より非推奨となりました。代替機能に関する詳細については、『WebLogic Integration リリース ノート』を参照してください。

この章では、ワークフローのノードの詳しい概要に続いて、Order Processing ワークフローの各ワークフロー オブジェクトを定義するための手順をノードごとに説明します。この章の手順に従えば、次の操作方法が習得できます。

この章で説明する手順を行う前に、以下のことが完了していることを確認してください。

 


Order Processing ワークフロー ノードの概要

このワークフローの詳細を、次の図に示します。図中で番号が振られている手順については、図の下にある表で説明します。この図では、実際のプロセスをワークフロー 実装にマップしています。

図4-1 Order Processing のノード : 詳細表示


 

表4-1 Order Processing ワークフローの概要

プロセス

実装

処理システムによってデータが読み取られ、ID 番号が付けられて受理されます。

実際の実装では、イベント型の開始ノードは、サーブレットが外部 JMS キューにポストした XML メッセージに反応するように設定されている。

1. イベントトリガ開始ノードは、Order Processing Trigger ワークフローによって内部 JMS に送信された <neworder> XML メッセージをリスンするよう設定される。XPath 文は XML ドキュメントからデータを抽出し、ワークフロー変数を登録する。

その受注はカスタマサービスに転送され、顧客の信用情報がチェックされます。


2. 信用チェックの合否確認(はい または いいえ)を担当者に求める XML メッセージが admin ユーザに送信される。応答は XML メッセージで返され、XPath 文によってワークフロー変数に読み込まれる。

3. 分岐ノードで、応答が はい か いいえ のいずれであるかを評価する。

信用チェックができなかった場合、顧客サービス担当者は顧客に通知して、正しい信用情報を取得する。これ以降のプロセスは手動で行う。

4. 顧客との連絡タスクが CustomerService ロールに割り当てられ、ワークフローは [完了] ノードに進む。

信用チェックが通ると、商品 ID を基に受注商品の現在の目録がデータベースでチェックされ、出荷可能な商品の数量と受注数量が比較されます。


5. 商品 ID が EJB 内のメソッドに渡される。EJB 内のメソッドによってデータベースがチェックされ、受注商品の現在の在庫が変数に返される。

6. 分岐によって、返された在庫の値が、受注数量以上あるかどうかが評価される。受注数量に足りない場合は、受注ステータスは待機に設定される。

在庫が十分ではない場合は、次の新規入庫の到着までその受注は保留されます。新規入庫の在庫表が受領されると、その在庫が受注に対応可能であると確認できるまで、手順 5 が繰り返されます。

実際の実装においては、イベントは、在庫報告アプリケーションから外部 JMS キューにポストされる XML メッセージに反応するように設定される。

7. イベントとイベント キーは、該当する商品 ID を含む仮想の XML <checkinventory> メッセージに反応するように設定される。イベントがトリガされると、フローは在庫チェック タスク ノードにループバックされる。

在庫が十分な場合は、受注が 2 人の担当者に同時に転送される。担当者の 1 人は出荷を担当し、もう 1 人は受注に対する請求書生成をシステムに指示する。

8. Order Fulfillment ワークフローが呼び出され、変数が渡される。次にそのワークフロー内で実行された演算結果が返される。

次に、受注品が出荷されたことがシステムで確認され、顧客に 電子メールで通知されます。

9. Order Fulfillment ワークフローの終了時、および Watch for Cancellation イベントのキャンセル時には、受注ステータスが完了に設定される。また、電子メールが顧客に送信される場合もある。

10. ワークフローが終了する。

出荷前のトランザクションにおけるどの時点でも、顧客からの通知により受注をキャンセルできます。

実際の実装においては、イベントは、サーブレットが外部 JMS キューにポストした XML ドキュメントに反応するように設定される。

11. イベントとイベント キーは、関連する受注 ID を含む仮想の <cancelledotder> XML メッセージに反応するように設定される。イベントがトリガされると、ワークフローは完了ノードに進み、終了する。


 

 


イベントトリガによる開始の作成

Order Processing ワークフローは、Order Processing Trigger ワークフローがポストした XML イベントによってトリガされます。ワークフローが開始すると、まず、ワークフロー変数を Order Processing Trigger ワークフローがポストした XML ドキュメントの値に初期化します。

そのため、ノードの作成には、次の作業が必要になります。

変数を作成する

開始ノードによって XML ドキュメントから値が抽出されます。そのため、対応する変数を設定して抽出した値をその中に格納できるようにする必要があります。変数、ワークフロー内での用法、対応する XML 要素を次の表に示します。変数の値をほかのワークフロー渡すときには、input パラメータを使用します。一方、output パラメータは、現在のワークフローが他のワークフローから変数の値を受け取るときに使用します。

表4-2 開始ノード変数

変数

データ型

パラメータ タイプ

ワークフローでの使い方

対応する XML 要素

OrderStatus

文字列

Input

ワークフローのさまざまなポイントで変更できる。

<status>

OrderID

整数

Input

Worklist 内にワークフロー ラベルとして表示し、ワークフローの実行のたびに加算する。

<id>

ShipToState

文字列

Input、Output

Order Fulfillment ワークフローによって POBeancalculate() メソッドに渡される。初期値は例外ハンドラが検出し、修正のため Worklist ユーザに渡される。

ユーザから取得した修正後の値が Order Processing ワークフローに返される。

<shiptostate>

CustomerID

文字列

なし

Worklist ユーザが信用チェック タスクで顧客を識別するために使用する。

<customer>

<id>

CustomerName

文字列

Input

Worklist ユーザが顧客通知 タスクで顧客を識別するために使用する。

出荷タスク用に Order Fulfillment ワークフローに渡される。

<customer>

<name>


CustomerAddress

文字列

Input

出荷タスク用に Order Fulfillment ワークフローに渡される。

<customer>

<address>

CustomerPhone

文字列

なし

Worklist ユーザへ顧客の連絡情報を提供する顧客通知タスクで使用される。

<customer>

<phone>

CustomerEmail

文字列

なし

受注確認タスクで使用される。

<customer>

<email>

ItemID

整数

Input

checkInventory() メソッドと calculate() メソッドに渡される。

<item>

<id>

ItemName

文字列

なし

使用されない。

<item>

<name>

ItemQuantity

整数

Input

CheckInventory() メソッドの結果と比較するために分岐ノードで使用され、Order Fulfillment ワークフローによって calculate() メソッドに渡される。

<item>

<quantity>


 

変数を作成する手順は、次のとおりです。

  1. Order Processing のテンプレート定義フォルダを展開し、[変数] を右クリックして、表示されるポップアップ メニューから 変数を作成 を選択します。[変数プロパティ] ダイアログ ボックスが表示されます。

    図4-2 [変数プロパティ] ダイアログ ボックス


     

  2. 表 4-2 に従って [名前] フィールドに変数名を入力します。

    注意: 変数名にはスペースは入れません。

  3. 表 4-2 に従って、[タイプ] ドロップダウン リストから変数に対応するデータ型を選択します。

  4. 表 4-2 に従って、必要な [パラメータ] のチェック ボックスをチェックします。

  5. [OK] をクリックします。新しい変数がフォルダ ツリーの [変数] フォルダ内に表示されます。

  6. 表 4-2 にリストした変数をすべて作成するまで、手順 1 から 5 までを繰り返す。

    注意: OrderID 変数は、ワークフロー ラベルの追加ですでに作成済みのため、ここで作成する必要はありません。

終了すると、[変数] フォルダ ツリーは次のようになります。


 

開始ノード イベントを定義する

正しい XML ドキュメントによって確実にワークフローをトリガするには、Order Processing Trigger にポストされた XML ドキュメントのルート要素、つまり <neworder> に対応する開始ノードのルート要素を指定します。

開始ノードは、XML ドキュメントの特定のインスタンスに関連付けられるのではなく、ルート要素 <neworder> を持つすべての受信 XML ドキュメントによりトリガされるため、ワークフロー内で定義する他のイベントの場合のようにイベント キーを設定する必要はありません (イベントの作成 : Watch for Cancellation イベントの定義に例がありますので、参照してください)。

イベントをセットアップする手順は、次のとおりです。

  1. Order Processing ワークフロー図で開始ノードをダブルクリックして [開始のプロパティ] ダイアログ ボックスを表示します。

  2. [イベント] オプションを選択して、ドロップダウンリストから [XML イベント] を選択します。

    図4-3 [開始のプロパティ] ダイアログ ボックスの イベント


     

  3. [ドキュメント タイプ/ルート要素] フィールドに neworder と入力します。

  4. [開始オーガニゼーション] ドロップダウン リストから、「CDExpress」を選択します。

XPath 文を定義する

XML ドキュメントから値を抽出し、その値をワークフローの変数に挿入するには、データベース上のクエリ言語の文と同じように機能する XPath 言語の文を使用します。XPath は多くの機能を実現する多彩な言語ですが、もっともよく使用する関数は、要素または属性の値を返す text() です。ここで使用する XPath の text() 関数文の一般的形式は、次のとおりです。

XML ドキュメントから値を抽出するには、次の表に示すような XPath 文の設定が必要です。

表4-3 開始ノード : XPath 式

変数

対応する XML 要素

値の抽出に必要な XPath 式

OrderStatus

<status>

XPath("/neworder/status/text()")

OrderID

<id>

XPath("/neworder/id/text()")

ShipToState

<shiptostate>

XPath("/neworder/shiptostate/text()")

CustomerID

<customer>

<id>

XPath("/neworder/customer/id/text()")


CustomerName

<customer>

<name>

XPath("/neworder/customer/name/text()")


CustomerAddress

<customer>

<address>

XPath("/neworder/customer/address/text()")


CustomerPhone

<customer>

<phone>

XPath("/neworder/customer/phone/text()")


CustomerEmail

<customer>

<email>

XPath("/neworder/customer/email/text()")


ItemID

<item>

<id>

XPath("/neworder/item/id/text()")


ItemName

<item>

<name>

XPath("/neworder/item/name/text()")


ItemQuantity

<item>

<quantity>

XPath("/neworder/item/quantity/text()")



 

Studio 内で XPath 文を作成するには、以下の 3 つのいずれかの方法を使用します。順に有効性が高くなります。

次の手順では、XPath Wizard を使用して、XML リポジトリの使い方 : Neworder XML ドキュメントのエクスポートでエクスポートした Neworder ドキュメントをロードします。

XPath Wizard を使用して XPath 式を定義する手順は、次のとおりです。

  1. [開始のプロパティ] ダイアログ ボックス下部の [変数] タブを選択し、[追加] ボタンをクリックします。[ワークフロー変数の割り当て] ダイアログ ボックスが表示されます。

  2. [式] フィールドの隣にある ボタンをクリックします。[Expression Builder] ダイアログ ボックスが表示されます。

  3. [XPath Wizard] をクリックします。XPath Wizard が表示されます。

  4. [サンプル] タブを選択します。

  5. [XML、DTD、XSD、XSL、または MFL ドキュメントを開く] ボタン をクリックします。[XML ファインダ] ダイアログ ボックスが表示されます。

  6. [リポジトリ] タブを選択します。

  7. XML リポジトリの使い方 : Neworder XML ドキュメントのエクスポートで XML エンティティを保存したフォルダ(たとえば、Tutorial)をダブルクリックします。

    図4-4 [XML ファインダ] ダイアログ ボックス : [リポジトリ] タブ


     

  8. [Neworder] ドキュメントを選択し、[プレビュー] をクリックして、ドキュメントのプレビューを表示します。[ドキュメントのプレビュー] ウィンドウが表示され、XML リポジトリの使い方 : Neworder XML ドキュメントのエクスポートで保存した XML ドキュメントの実際のテキスト バージョンが表示されます。

    図4-5 [ドキュメントのプレビュー] ウィンドウ


     

  9. [OK] をクリックして [ドキュメントのプレビュー] ウィンドウを閉じます。

  10. [OK] をクリックし、XML Finder を終了します。XML ドキュメントが、XPath Wizard の [サンプル] ウィンドウに表示されます。

    図4-6 XPath Wizard の [サンプル] タブ


     

  11. 次のいずれかの方法を行います。

  12. [ワークスペースに式を固定] ボタン をクリックします。[ワークスペース] 内に式が表示されます([ワークスペース] タブを選択して表示)。

    図4-7 XPath Wizard の [ワークスペース] タブ


     

  13. 表 4-3 内の XML 要素全部に対して手順 10 と 11 を繰り返します。すべて終了すると、[ワークスペース] は次のようになります。


     

  14. [OK] をクリックして、XPath Wizard を終了します。Expression Builder を終了するには [OK] をクリックし、[ワークフロー変数の割り当て] ダイアログ ボックスを終了するには [取消し] をクリックします。

XPath 式を [開始のプロパティ] ダイアログ ボックスの 変数 リストに追加する手順は、次のとおりです。

  1. [開始のプロパティ] ダイアログ ボックス下部の [変数] タブを選択し、[追加] ボタンをクリックします。[ワークフロー変数の割り当て] ダイアログ ボックスが表示されます。

    図4-8 [ワークフロー変数の割り当て] ダイアログ ボックス


     

  2. [変数] ドロップダウン リストから、変数を選択します。

  3. ボタンをクリックし、[Expression Builder] ダイアログ ボックスを開きます。

  4. [XPath Wizard] をクリックします。

  5. [XPath Wizard] ダイアログ ボックスで、[ワークスペース] タブを選択します。


     

  6. 表 4-3 内のリストから変数に対応する XPath 式を選択し、[OK] をクリックします。これで、[Expression Builder] ダイアログ ボックスの [式] ウィンドウに、この式が表示されます。

    図4-9 [Expression Builder] ダイアログ ボックス


     

  7. [OK] をクリックします。[ワークフロー変数の割り当て] ダイアログ ボックスの [式] フィールドにこの式が表示されます。


     

  8. [OK] をクリックします。新しい XPath 式が [開始のプロパティ] ダイアログ ボックスの [変数] タブに表示されます。

    図4-10 [開始のプロパティ] ダイアログ ボックスの [変数] タブ


     

  9. 表 4-3 にある変数と式のすべてに対して、手順 1 から 8 までを繰り返します。

  10. すべて終了したら、[OK] をクリックして [開始のプロパティ] ダイアログ ボックスを終了します。

 


XML メッセージの Worklist ユーザへの送信 : Check Customer Credit タスクの定義

このタスクによって、顧客の信用チェック作業を Worklist 内のユーザ admin に割り当てられ、次に XML メッセージがユーザ admin に送信されて、承認の確認が求められます。

タスクの割り当てに必要な作業は、次のとおりです。

タスクをユーザに割り当てる

ここでは、Check Customer Credit タスクを、ユーザ admin に割り当てる方法を説明します。

このノードにアクションを追加する前に、テンプレート定義を作成したときにすべての T1 タスク ノードに定義した、デフォルトのアクションとパーミッションを削除する必要があります。

デフォルトのアクションを削除する手順は、次のとおりです。

  1. ワークフロー設計領域で、[Check Customer Credit] タスク ノードをダブルクリックして、[タスク プロパティ] ダイアログ ボックスを表示します。

  2. [アクティブ時] タブを選択し、デフォルトの ("Initiator")タスクをユーザ WorkflowAttribute ("Initiator") に割り当てアクションを選択して [削除] ボタンをクリックします。確認を求めるダイアログ ボックスが表示されたら、[はい] をクリックします。

  3. [実行時] タブを選択し、デフォルトの タスクに完了マークを付ける アクションを選択して [削除] ボタンをクリックします。確認を求めるダイアログ ボックスが表示されたら、[はい] をクリックします。

ユーザにタスクを割り当て アクションの追加と定義の手順は、次のとおりです。

  1. [タスク プロパティ] ダイアログ ボックスで、[アクティブ時] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを開きます。

  2. [タスク アクション] フォルダを展開し、ユーザにタスクを割り当て を選択して [OK] をクリックします。[ユーザにタスクを割り当て] ダイアログ ボックスが表示されます。

    図4-11 [ユーザにタスクを割り当て] ダイアログ ボックス


     

  3. ダイアログボックスの [割り当てるタスク] リストから [Check Customer Credit] タスクを選択します。

  4. [ユーザ] ドロップダウン リストから [admin] を選択し、[OK] をクリックします。タスクをユーザに割り当て が [タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

XML メッセージをクライアントに送信する

クライアント アプリケーションのユーザと対話する方法の 1 つは、クライアント アプリケーションに送信する XML ドキュメントを定義することです。この XML ドキュメントを識別して適切に応答し、またワークフロー変数の登録に必要な情報と共に XML ドキュメントをサーバに送信するよう、アプリケーションをプログラムする必要があります。

デフォルトでは、Worklist アプリケーションは、8 タイプの要求および応答 Document Type Definitions (DTD) からなるデフォルト セットの DTD を認識します。このセットは、WebLogic Integration のインストール ディレクトリの WLI_HOME/docs/apidocs/com/bea/wlpi/common/doc-files で表示できます。デフォルト セットは次の表のとおりです。

注意: クライアント アプリケーションによって認識される XML ドキュメントのタイプを拡張するカスタム コードや、API を通じてクライアント アプリケーションと通信するカスタム コードを開発することもできます。詳細については、『BPM クライアント アプリケーション プログラミング ガイド』を参照してください。

表4-4 Worklist の DTD

要求 DTD

説明

対応する応答 DTD

ClientMsgBoxReq.dtd

ユーザ向けのボタン付きのメッセージ ボックスを表示する。

ClientMsgBoxResp.dtd

ClientSetVarsReq.dtd

ユーザ向けのデータ入力フィールド付きのメッセージ ボックスを表示する。

ClientSetVarsResp.dtd

ClientCallPgmReq.dtd

クライアント コンピュータのプログラムを呼び出す

ClientCallPgmResp.dtd

ClientCallAddInReq.dtd

Worklist アプリケーションに対するカスタム アドインを呼び出す。

ClientCallAddInResp.dtd


 

ここで使用する Check Customer Credit タスクには、[はい] ボタン、[いいえ] ボタンのついたメッセージ ボックスを送信する ClientMsgBoxReq.dtd を使用します。DTD の構造は次のとおりです。

コード リスト 4-1 ClientMsgBoxReq XML ドキュメントの構造

<message-box title="text"
style="{plain|information|question|warning|error}"
options="{ok|ok_cancel|yes_no|yes_no_cancel}">
text
<actionid> provided by default </actionid>
</message-box>

注意: アクション ID の要素と値は、XML をクライアントに送信 アクションの作成時に、システムによって指定されます。

送信されるメッセージ ボックスに対応するタグと値を次の図に示します。

図4-12 [Credit Check] メッセージ ボックス


 

ここでは送信メッセージのテキストで顧客 ID を使用するため、実行時に対応する値を渡す CustomerID 変数を使用します。

ユーザのボタン選択の結果を取り込むには、リスト4-2 で示すように、ClientMsgBoxResp.dtd から、特に <message-box option> 属性から、データを抽出する必要があります。

コード リスト 4-2 ClientMsgBoxReq XML ドキュメントの構造

<message-box option="{ok|yes|no|cancel}" /> 

そのため、アクション全体を定義するには、次の操作が必要です。

XML をクライアントに送信 アクションを追加する

Check Credit タスクへのユーザの入力結果を格納するために、CreditCheck 変数を作成する必要があります。

変数は [XML をクライアントに送信] ダイアログ ボックスで作成できるため、XML をクライアントに送信 アクションを追加し、同時に CreditCheck 変数を作成します。

XML をクライアントに送信 アクションを追加し、CreditCheck 変数を作成する手順は次のとおりです。

  1. [タスク プロパティ] ダイアログ ボックスで、[実行時] タブを選択し、[追加] をクリックします。[アクションを追加] ダイアログ ボックスが表示されます。

  2. [統合アクション] フォルダを展開し、[XML をクライアントに送信] を選択して [OK] をクリックします。デフォルトのルートと actionid 要素が表示された [XML をクライアントに送信] ダイアログ ボックスが表示されます。


     

  3. ルート要素の隣の値フィールドをダブルクリックして、[式] ボタン を表示します。

  4. [式] ボタンをクリックし、Expression Builder を起動します。

  5. Expression Builder の中で、[変数] オプションを選択します。

  6. 変数リストをスクロールして New を表示し、New をダブルクリックして [変数プロパティ] ダイアログ ボックスを開きます。

  7. 変数を次の表に従って作成します。[OK] をクリックし、[変数プロパティ] ダイアログ ボックスを終了します。


     

  8. [OK] をクリックし、[Expression Builder] を終了します。

XML ドキュメント構造体を定義する

message-box XML ドキュメント構造体を定義する手順は、次のとおりです。

  1. [XML をクライアントに送信] ダイアログ ボックスで、ルート要素を展開します。

    警告: actionid 要素、その名前および値を、編集、削除または移動しないでください。アクション ID は、実行時にアクション インスタンスを識別するために使用されます。

  2. XML ドキュメントの作成を始めるには、ルート要素をダブルクリックし、既存のテキストに上書きして message-box と入力します。〔Enter〕を押します。

    注意: アイコンが表示されている場合は、フィールド内に有効な式が入力されていないことを示します。フィールドに値を入力すると、このアイコンは消えます。

  3. [message-box] 要素の隣の値フィールドをダブルクリックして、タイプするか、Expression Builder を使用して次のように入力します。

    "Does customer " + $CustomerID + " pass credit check?"

    文字列リテラルと変数を分離するために、必ず引用符の内部にスペースを挿入してください。

  4. [message-box] 要素を選択し、[属性を追加(Ctrl+A)] ボタン をクリックして最初の属性を追加します。

  5. [属性] フィールドで、既存のテキストをダブルクリックし、属性名 options を上書きして追加します。

  6. [オプション] 属性の隣の値フィールドで、既存のテキストをダブルクリックして、テキストに上書きして "yes_no" と入力します。

  7. [message-box] 要素を選択し、[属性を追加(Ctrl+A)] ボタンをクリックして 2 番目の属性を追加します。

  8. [属性] フィールドで、テキストをダブルクリックして属性名 style をテキストに上書きして追加します。

  9. [オプション] 属性の隣の値フィールドで、テキストをダブルクリックして "question" とテキストに上書きして入力します。

  10. [message-box] 要素を選択し、[属性を追加(Ctrl+A)] ボタンをクリックして 3 番目の属性を追加します。

  11. [属性] フィールドで、テキストをダブルクリックして属性名 title とテキストに上書きして追加します。〔Enter〕を押します。

  12. [style] 属性の隣の値フィールドで、テキストをダブルクリックして属性名 "Credit Check" を上書きして入力し、〔Enter〕を押します。

    これで、完成した XML ドキュメント構造体は、次のようになります。


     

コールバック変数を割り当てる

message box に対するユーザの応答結果を、Worklist アプリケーションによって返された XML ドキュメントから抽出するには、XPath 式をセットアップして CreditCheck 変数を登録する必要があります。

コールバック変数を割り当てる手順は、次のとおりです。

  1. [XML をクライアントに送信] ダイアログ ボックス下部の [コールバック変数] タブを選択します。

  2. [追加] ボタンをクリックします。[ワークフロー変数の割り当て] ダイアログ ボックスが表示されます。

  3. [変数] ドロップダウン リストから [CreditCheck] を選択します。

  4. [Event Expression] フィールドに次の表の XPath 文を入力します。


     

  5. [OK] をクリックして終了します。[ コールバック変数] タブに新しい変数割り当て文が表示されます。

参考 : また、ClientMsgBoxResp.dtd ファイルを XPath Wizard にロードしても、XPath 式をビルドする XML ドキュメントを自動的に生成できます。XPath Wizard を使用する手順については、XPath 文を定義するを参照してください。

タスク終了をマークする

タスク ノードが message box に対するユーザの応答を確実に待ってから次のノードに移行するようにするので、コールバック アクションとしての タスクに完了マークを付ける を、[タスク プロパティ] ダイアログ ボックスに追加するのではなく、[XML をクライアントに送信] ダイアログ ボックスに指定します。タスクに完了マークを付ける アクションをここに配置することで、ワークフローは Worklist クライアントからの応答を待って、次のノードに進むようになります。

タスクに完了マークを付ける コールバック アクションを追加する手順は、次のとおりです。

  1. [XML をクライアントに送信] ダイアログ ボックス下部の [コールバック アクション] タブを選択します。

  2. [追加] ボタンをクリックして [アクションを追加] ダイアログ ボックスを表示します。

  3. [タスク アクション] フォルダを展開し、[タスクに完了マークを付ける] を選択して [OK] をクリックします。[タスクに完了マークを付ける] ダイアログ ボックスが表示されます。

    図4-13 [タスクに完了マークを付ける] ダイアログ ボックス


     

  4. [完了マークを付けるタスク] リストから [Check Customer Credit] を選択し、[OK] をクリックします。タスクに完了マークを付ける アクションが [コールバック アクション] タブに表示されます。

  5. [OK] をクリックし、[XML をクライアントに送信] ダイアログ ボックスを終了します。XML をクライアントに送信 アクションが [タスク プロパティ] ダイアログ ボックスの [実行時] タブに表示されます。

  6. [OK] をクリックし、[タスク プロパティ] ダイアログ ボックスを終了します。

 


等価テスト : Check Credit 分岐の定義

サンプル ワークフローにおける最初の分岐では、Check Credit タスクでの Worklist ユーザの応答が はい か いいえ のどちらであるかによって、顧客が信用チェックに合格したかどうかをチェックします。

分岐ノードの名前は、評価する条件によって決まり、この条件を式として指定する必要があります。一般的に、条件は、変数の値を定数や別の変数などのほかの要素と比較します。デフォルトでは、分岐には 1=1 の条件(常に true)が割り当てられています。

信用チェックの問い合わせに対する Worklist ユーザの応答をチェックするために、定数との等価テストを作成します。つまり、変数 CreditCheck に格納されたユーザからの応答が、"yes" と等価かどうかをテストします。条件によって true と評価された場合、フローは Check Inventory タスクに進み、false と評価された場合は、Contact Customer タスクに進みます。

C1 分岐ノードを定義する手順は、次のとおりです。

  1. [ワークフロー設計] ウィンドウ内で、[C1] 分岐シェイプをダブルクリックして [分岐のプロパティ] ダイアログ ボックスを表示します。

  2. [条件] フィールドに $CreditCheck="yes" と入力します。

  3. [OK] をクリックして、ダイアログ ボックスを閉じます。

 


タスクとワークフローのコメントの追加 : Contact Customer タスクの定義

信用チェックの分岐が false となった場合、フローは Contact Customer タスクに進んで終了します。このノードは、変数 OrderStatus を 取消し に設定し、それを表すワークフロー コメントを追加します。ワークフローが実行されると、このコメントが実行中のアプリケーションに表示されます。

顧客への連絡タスクは特定のユーザではなく、CustomerService ロールに割り当てられます。このため、そのロールに関連付けられているすべてのユーザが、そのタスクを実行できます。また、XML メッセージを通じて Worklist ユーザと通信するのではなく、実行時に [Worklist] ウィンドウにタスクと共に表示されるタスク コメントを設定します。

注意: ワークフローおよびタスクのコメントは最大 254 文字まで。式の変数の長さにより、コメントの長さは実行時に決まる。254 文字の限度を超えるコメントは超過部分が実行時に警告無く短縮される。

[Contact Customer] タスク ノードを定義する手順は、次のとおりです。

ワークフローの変数を設定する

ワークフロー変数を設定 アクションの追加と定義の手順は、次のとおりです。

  1. [Contact Customer] タスク ノードをダブルクリックして、[タスク プロパティ] ダイアログ ボックスを開きます。

  2. [アクティブ時] タブを選択し、[追加] ボタンをクリックして [アクションを追加] ダイアログ ボックスを開きます。

  3. [ワークフロー アクション] フォルダを展開し [ワークフロー変数を設定] を選択して [OK] をクリックします。[ワークフロー変数を設定] ダイアログ ボックスが表示されます。

    図4-14 [ワークフロー変数を設定] ダイアログ ボックス


     

  4. [設定する変数] ドロップダウン リストから "OrderStatus" を選択します。

  5. [式] オプションを選択し、フィールド内に "cancelled" と入力します。

  6. [OK] をクリックします。ワークフロー変数を設定 アクションが、[タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

ワークフローのコメントを設定する

OrderStatus 変数を設定しておけば、ビルドする式でこの変数を利用して、ワークフローのコメントを指定できます。コメントは、実行中のアプリケーションに [Order cancelled] と表示されます。

ワークフロー コメントを設定 アクションの追加と定義の手順は、次のとおりです。

  1. [Contact Customer Task Properties] ダイアログ ボックスで、[アクティブ時] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを開きます。

  2. [ワークフロー アクション] フォルダを展開し、ワークフロー コメントを設定 を選択して [OK] をクリックします。[ワークフロー コメントを設定] ダイアログ ボックスが表示されます。

    図4-15 [ワークフロー コメントを設定] ダイアログ ボックス


     

  3. [コメント] フィールドで直接入力するか、Expression Builder を使用して式 "Order" + $OrderStatus を入力します。

  4. [OK] をクリックして、ダイアログ ボックスを終了します。ワークフロー コメントを設定 アクションが、[タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

タスクのコメントを設定する

Workflow ユーザに対して次のコメントを表示します。

Please contact John Doe at 408 534 9567

実行時にワークフローから変数の値を取得するため CustomerName と CustomerPhone の 2 つの変数を使用します。サンプルの式は次のようになります。

コード リスト 4-3 Contact Customer タスク : タスクのコメント

"please contact"+ $CustomerName + "at"+ $CustomerPhone

プラス記号は文字列リテラルと変数を連結し、スペースは変数の値とリテラル テキストの間の最後のメッセージにスペースが表示されるようにする使い方ができます。

タスク コメントを設定 アクションの追加と定義の手順は、次のとおりです。

  1. [Contact Customer Task Properties] ダイアログ ボックスで、[アクティブ時] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを呼び出します。

  2. [タスク アクション] フォルダを展開し、タスク コメントを設定 を選択して [OK] をクリックします。[タスク コメントを設定] ダイアログ ボックスが表示されます。

    図4-16 [タスク コメントを設定] ダイアログ ボックス


     

  3. [コメントを設定するタスク] リストから Contact Customer を選択します。

  4. [コメント] フィールドに直接入力するか、Expression Builder を起動する [式] ボタンをクリックしてリスト4-3 にあるテキストを入力します。

  5. [OK] をクリックし、[タスク コメントを設定] ダイアログ ボックスを終了します。タスク コメントを設定 アクションが [タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

タスクをロールに割り当てる

タスクはユーザ名で識別されるユーザ に割り当てるほか、関連付けられたすべてのユーザが実行できるロール に割り当てることもできます。

また、タスクをロール内のユーザ に割り当てることもできます。このアクションは、ロール名に関連付けられたユーザのうち、実行時に割り当てられたタスクが最も少ないユーザにタスクを割り当てます。ただし、このサンプルでは限られたユーザとタスクしか使用しないため、タスクをロール名に直接割り当てます。

ここでは、CustomerService ロールにタスクを割り当てます。タスクを割り当てられたユーザ(この場合は ユーザ admin のみ)は、タスク コメントを見て、タスクの実行前にそのコメントに対して応答します。

タスクにロールを割り当て アクションの追加と定義の手順は、次のとおりです。

  1. [Contact Customer タスク プロパティ] ダイアログ ボックスで、[アクティブ時] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを呼び出します。

  2. [タスク アクション] フォルダを展開し、[タスクにロールを割り当て] を選択して [OK] をクリックします。[タスクにロールを割り当て] ダイアログ ボックスが表示されます。

    図4-17 [タスクにロールを割り当て] ダイアログ ボックス


     

  3. [割り当てるタスク] リストから Contact Customer を選択します。

  4. [ロール] ドロップダウン リストから CustomerService を選択します。

  5. [OK] をクリックして、ダイアログ ボックスを終了します。タスクにロールを割り当て が [タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

タスク終了をマークする

このタスクは 1 人のエンド ユーザに割り当てられるタスクなので、タスクに完了マークを付ける アクションを [タスク プロパティ] ダイアログ ボックスの [実行時] タブに追加します。タスクに完了マークを付ける アクションの割り当てがないと、フローはこのノードから先に進めません。

タスクに完了マークを付ける アクションの追加と定義の手順は、次のとおりです。

  1. [Contact Customer Task Properties] ダイアログ ボックスで [実行時] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを呼び出します。

  2. [タスク アクション] フォルダを展開し [タスクに完了マークを付ける] を選択して [OK] をクリックし、[タスクに完了マークを付ける] ダイアログ ボックスを開きます。

  3. [完了マークを付けるタスク] リストから [Contact Customer] を選択し、[OK] をクリックします。タスクに完了マークを付ける が [タスク プロパティ] ダイアログ ボックス内の [実行時] タブに表示されます。

  4. [OK] をクリックし、[タスク プロパティ] ダイアログ ボックスを終了します。

 


ビジネス オペレーションの作成と実行 : Check Inventory タスクの定義

信用チェック分岐で true と評価されると、フローは Inventory Check タスクに進みます。このタスクは、POBean EJB 上の checkInventory() メソッドを呼び出し、受注品の在庫をチェックし、その結果をワークフローに返します。checkInventory() メソッドは、1 個のパラメータ、すなわち商品 ID を受け取り、在庫数を返します。

注意: POBean.jar EJB の詳細は、『BEA WebLogic Integration Javadoc』を参照してください。

EJB メソッドを呼び出すためには、次の 2 つを実行する必要があります。

checkInventory() メソッドは値、つまり該当する商品の在庫数を返すので、その結果を格納するワークフロー変数の作成も必要です。

ただし、EJB 上のメソッドを呼び出す前に、まず WebLogic Integration サーバ上に EJB のインスタンスを作成する Bean の create() メソッドを呼び出す必要があります。create() メソッドはまた、EJB インスタンスへの参照も返します。この参照を、インスタンス変数と呼ばれるワークフロー変数に格納することによって、EJB 上で複数のメソッドを呼び出せるようになります。

したがって、ここで使用する Check Inventory タスクを定義するには、次の作業が必要です。

注意: WebLogic Integration にバンドルされているサンプル プラグインには、プラグイン アクションの Check Inventory が含まれており、このアクションを使用すると、上記の最初の 4 つの手順を 1 つの定義済みのアクションで実行できます。このアクションは、対応する POBean メソッドを呼び出すカスタム コードを作成し、ワークフローとの間でパラメータの受け渡しを行います。一方、入力と出力のパラメータとして機能するワークフロー変数だけは、指定する必要があります。このアクションのダイアログ ボックスを表示するには、[アクション] ダイアログ ボックスで、[Sample Actions] フォルダを展開し [Check inventory for an available item] をダブルクリックします。このアクションとその他のサンプル プラグインの詳細は、『WebLogic Integration BPM プラグイン プログラミング ガイド』を参照してください。

ビジネス オペレーションを作成する

ビジネス オペレーションを作成する場合、汎用的なコンフィグレーション、つまり、あらゆるオーガニゼーションのすべてのワークフローで使用可能なコンフィグレーションを行います。ビジネス オペレーションは、基本的に Java クラスや EJB 上のメソッド呼び出しに便利なエリアスです。メソッドが受け取るパラメータに説明的な名前を付けることもできます。そうすれば、ほかのユーザが同じビジネス オペレーションを呼び出そうとする場合に、メソッドに入力が必要なパラメータの内容、およびパラメータの順序を直ちに知ることができます。

Create OrderBean ビジネス オペレーションを作成する必要はありません。ワークフロー オブジェクトのインポート : チュートリアル パッケージ ファイルのインポートのインポート手順によってインポートしてあります(Order Fulfillment ワークフローもこのビジネス オペレーションを使用しますが、インポート時にそのワークフロー内で未解決の参照が生じないようにしました)。Create OrderBean ビジネス オペレーションは表示だけにとどめます。

ただし、POBeans EJB 上で checkInventory() メソッドを呼び出す Check Inventory ビジネス オペレーションを作成し、この Check Inventory タスクで起動できるようにします。

Create OrderBean ビジネス オペレーションを表示する

Create OrderBean ビジネス オペレーションの定義を表示する手順は、次のとおりです。

  1. [コンフィグレーション|ビジネス オペレーション] を選択します。[ビジネス オペレーション] ダイアログ ボックスが現れ、すでにその中に ワークフロー オブジェクトのインポート : チュートリアル パッケージ ファイルのインポートでインポートした 2 つのビジネス オペレーション Create OrderBean と Calculate Total Price が表示されています。

    図4-18 [ビジネス オペレーション] ダイアログ ボックス


     

  2. ビジネス オペレーションのリストで、Create OrderBean の説明をダブルクリックします。[ビジネス オペレーションを定義] ダイアログ ボックスが表示されます。

    図4-19 Create OrderBean : [ビジネス オペレーションを定義] ダイアログ ボックス


     

    ダイアログ ボックスは、create() メソッドにパラメータがなく、その戻りタイプが POBean EJB のリモート インタフェースへの参照であることを示しています。

  3. [取消し] をクリックして、[ビジネス オペレーションを定義] ダイアログ ボックスを終了します。

Check Inventory ビジネス オペレーションを作成する

Check Inventory ビジネス オペレーションを作成する手順は、次のとおりです。

  1. [ビジネス オペレーション] ダイアログ ボックスで、[追加] ボタンをクリックします。[ビジネス オペレーションを定義] ダイアログ ボックスが表示されます。

  2. [セッション EJB] オプションを選択します。現在デプロイされている Session EJB はすべて [セッション EJB の JNDI 名] のドロップダウン リストから選択できるようになりました。

  3. [セッション EJB の JNDI 名] ドロップダウン リストから、wlpi.tour.POBean を選択します。この EJB のメソッドが、[呼び出すメソッド] ドロップダウン リストから選択できるようになりました。

  4. [呼び出すメソッド] ドロップダウン リストから、[int checkInventory(int p0)] を選択します。パラメータと戻りタイプがダイアログ ボックスに表示されます。

    図4-20 Check Inventory : [ビジネス オペレーションを定義] ダイアログ ボックス


     

  5. [ビジネス オペレーション名] フィールドに、Check Inventory と入力します。

  6. (省略可能)[パラメータ] リスト内で、パラメータを 1 つダブルクリックして、そのパラメータの名前を変更します。[パラメータ] ダイアログ ボックスが表示されます。

    図4-21 [パラメータ] ダイアログ ボックス


     

  7. このメソッドはパラメータとして商品 ID を受け取るため、[名前] フィールドに ItemID と入力します。

    注意: ビジネス オペレーションのパラメータ名にはスペースを入れることはできません。

  8. [OK] をクリックします。[ビジネス オペレーションを定義] ダイアログ ボックスの [パラメータ] リストに、新しいパラメータ名が表示されます。

  9. [OK] をクリックして [ビジネス オペレーションを定義] ダイアログ ボックスを終了します。新しいビジネス オペレーションが、[ビジネス オペレーション] ダイアログ ボックスに表示されます。

  10. [閉じる] をクリックして [ビジネス オペレーション] ダイアログ ボックスを終了します。

ビジネス オペレーションを実行する

必要なメソッドを OrderBean から呼び出すために必要な、ビジネス オペレーションの作成は終わりました。次に、それらをタスク内から開始するアクションを定義する必要があります。

ビジネス オペレーションを開始するアクションを定義するには、以下の変数とパラメータを指定する必要があります。

2 つのビジネス オペレーションに必要なパラメータの関係を次の表にまとめて示します。

表4-7 Create OrderBean および Check Inventory ビジネス オペレーション : [パラメータ]

ビジネス オペレーション

インスタンス変数

入力パラメータ

結果変数

Create OrderBean

なし

なし

OrderBeanReference

Check Inventory

OrderBeanReference

ItemID

Inventory


 

このビジネス オペレーションで使用できるようにするには、OrderBeanReference と Inventory 変数の作成が必要です。ビジネス オペレーションで使用する変数は、[ビジネス オペレーションを実行] アクション ダイアログ ボックスで作成できるので、以下の節で、変数の作成手順をアクションの追加と定義の手順と併せて説明します。

Create OrderBean ビジネス オペレーションを実行する

アクションの追加と定義を行う場合は、次の表の変数も作成します。

表4-8 Create OrderBean ビジネス オペレーション : 結果変数

変数

データ型

パラメータ タイプ

ワークフローでの使い方

OrderBeanReference

セッション EJB

なし。

POBean セッション EJB のインスタンスの参照を格納


 

Create OrderBean の ビジネス オペレーションを実行 アクションの追加と定義の手順は、次のとおりです。

  1. [ワークフロー設計] ウィンドウ内で、Check Inventory タスクをダブルクリックして [タスク プロパティ] ダイアログ ボックスを表示します。

  2. [アクティブ時] タブを選択し、[追加] ボタンをクリックして [アクションを追加] ダイアログ ボックスを表示します。

  3. [統合アクション] フォルダを展開し [ビジネス オペレーションを実行] アクションを選択して [OK] をクリックします。[ビジネス オペレーションを実行] ダイアログ ボックスが表示されます。

  4. [オペレーション] ドロップダウン リストから、[Create OrderBean] を選択します。

  5. [結果の割り当て先] フィールドの隣の [追加] ボタンをクリックします。[変数プロパティ] ダイアログ ボックスが表示されます。

  6. [名前] フィールドに、OrderBeanReference と入力します。

  7. [タイプ] ドロップダウン リストから、[セッション EJB] を選択します。

  8. [入力] チェック ボックスをチェックします (この変数は Order Fulfillment ワークフローでも使用します)。

  9. [OK] をクリックします。[結果の割り当て先] フィールドに、変数名とタイプが表示されます。

    図4-22 Create OrderBean : [ビジネス オペレーションを実行] ダイアログ ボックス


     

  10. [OK] をクリックして、ダイアログ ボックスを終了します。Perform Business Operation Create OrderBean アクションが、[タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

Check Inventory ビジネス オペレーションを実行する

アクションの追加と定義を行う場合は、次の表の変数も作成します。

表4-9 Check Inventory ビジネス オペレーション の 結果変数

変数

データ型

パラメータ タイプ

ワークフローでの使い方

Inventory

Integer

なし。

在庫チェック結果の格納


 

Check Inventory の ビジネス オペレーションを実行 アクションの追加と定義の手順は、次のとおりです。

  1. [Check Inventory タスク プロパティ] ダイアログ ボックスで [アクティブ時] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを表示します。

  2. [統合アクション] フォルダを展開し [ビジネス オペレーションを実行] アクションを選択して [OK] をクリックします。[ビジネス オペレーションを実行] ダイアログ ボックスが表示されます。

  3. [オペレーション] ドロップダウン リストから [Check Inventory] を選択します。[インスタンス変数] フィールドに、自動的に OrderBeanReference 変数が組み込まれます。

  4. [パラメータ] リストで [ItemID] パラメータをダブルクリックします。[Expression Builder] が表示されます。

  5. [変数] オプションを選択し、リスト内の [ItemID] をダブルクリックして [式] フィールドに配置します。

  6. [OK] をクリックします。ItemID 変数が [パラメータ] リストの [値] セクションに表示されます。

  7. [結果の割り当て先] フィールドの隣の [追加] ボタンをクリックします。[変数プロパティ] ダイアログ ボックスが表示されます。

  8. [名前] フィールドに、Inventory と入力します。

  9. [タイプ] ドロップダウン リストから [Integer] を選択します。

  10. [OK] をクリックします。[結果の割り当て先] フィールドに、変数名とタイプが表示されます。

    図4-23 Check Inventory : [ビジネス オペレーションを実行] ダイアログ ボックス


     

  11. [OK] をクリックして、ダイアログ ボックスを終了します。Perform Business Operation Check Inventory アクションが、[タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

タスク終了をマークする

このタスクには、タスクを実行するアクション(たとえば、実行を担当する Worklist ユーザへのタスクの割り当て)が含まれていないため、タスクに完了マークを付ける アクションを [タスク プロパティ] ダイアログ ボックスの [実行時] タブではなく [アクティブ時] タブに追加する必要があります。

タスクに完了マークを付ける アクションの追加と定義の手順は、次のとおりです。

  1. [タスク プロパティ] ダイアログ ボックスで、[アクティブ時] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを開きます。

  2. [タスク アクション] フォルダを展開し [タスクに完了マークを付ける] を選択して [OK] をクリックし、[タスクに完了マークを付ける] ダイアログ ボックスを開きます。

  3. [完了マークを付けるタスク] リストから [Check Inventory] を選択し、[OK] をクリックします。タスクに完了マークを付ける アクションが [タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

  4. [OK] をクリックし、[タスク プロパティ] ダイアログ ボックスを終了します。

 


不等価のテスト : Check Inventory 分岐の定義

このワークフローの 2 番目の分岐では、Check Inventory ビジネス オペレーションから返された在庫値と顧客の受注品の数量(ワークフロー開始時に Neworder XML ドキュメントで指定され、ItemQuantity 変数に格納された数量)とを比較して、在庫が十分かどうかをチェックします。

在庫が十分かどうかチェックするために、2 つの変数を対象とする不等価テストを作成します。変数 Inventory の値が、変数 ItemQuantity の値以上であるかをテストするわけです。条件によって true と分岐された場合、フローは Start Order Fulfillment タスクに進み、false と分岐された場合、受注は "waiting" に設定され、フローは Wait for Inventory タスクに進みます。

C2 分岐ノードを定義する手順は、次のとおりです。

  1. [ワークフロー設計] ウィンドウ内で、[C2] 分岐シェイプをダブルクリックして [分岐のプロパティ] ダイアログ ボックスを表示します。

    図4-24 Check Inventory 分岐


     

  2. [条件] フィールドに、$Inventory>=$ItemQuantity と入力します。

  3. [False] タブを選択し、[追加] ボタンをクリックして [アクションを追加] ダイアログ ボックスを開きます。

  4. [ワークフロー アクション] フォルダを展開し [ワークフロー変数を設定] を選択して [OK] をクリックし、[ワークフロー変数を設定] ダイアログ ボックスを表示します。

  5. [変数] ドロップダウン リストから [OrderStatus] を選択します。

  6. [式] オプションを選択し、フィールド内に "waiting" と入力します。

  7. [OK] をクリックして [ワークフロー変数を設定] を終了します。ワークフロー変数を設定 アクションが [False] タブに表示されます。

  8. [追加] ボタンをクリックして [アクションを追加] ダイアログ ボックスを表示します。

  9. [ワークフロー アクション] フォルダを展開し、ワークフロー コメントを設定 を選択して [OK] をクリックし、[ワークフロー コメントを設定] ダイアログ ボックスを表示します。

  10. [コメント] フィールドに、式 "Order"+ $OrderStatus を入力します。

  11. [OK] をクリックし、[ワークフロー コメントを設定] ダイアログ ボックスを終了します。ワークフロー コメントを設定 アクションが [False] タブに表示されます。

  12. [OK] をクリックし、[分岐のプロパティ] ダイアログ ボックスを終了します。

 


イベントの作成 : Wait for New Inventory イベントの定義

在庫チェック分岐が、false となった場合、フローは [Wait for New Inventory] イベントに進みます。このイベントは、たとえば、該当する XML メッセージが在庫報告アプリケーションから JMS キューに到着することによってトリガされます。ノードはメイン フローに埋め込まれているので、フローは先に進まず、ノードがトリガされるまで待機状態に置かれます。ノードがトリガされると、フローは Inventory Check タスクにループバックし、現在の在庫が受注の処理に十分かどうかをチェックします。

実際の XML ドキュメントを使用していないので、このイベントがサンプル ワークフロー内で実際にトリガされることはありません。しかし、次のドキュメントのような仮の XML ドキュメントをイメージすることができます。

コード リスト 4-4 Newinventory XML ドキュメント

<newinventory>
<date> June 18 2001 </date>
.
.
.
<item>
<id>236</id>
<name>CD storage rack</name>
<item>
</newinventory>

実行時に、該当する商品の情報を含む <newinventory> ドキュメント(このサンプルの最初の XML ドキュメントでは CD 収納ラック)のインスタンスによってのみイベントがトリガされるようにするため、イベント プロセッサの監視対象の要素(この場合は商品 ID)をメッセージ ドキュメントで指定するイベント キーを定義します。イベント キーの式を、XML ドキュメント内の対象要素から値を抽出する XPath 文として指定します。

次に、イベント プロセッサが<newiventory> ドキュメントを参照するイベントを含むすべてのワークフロー インスタンスを検索しなくても済むように、イベント ノードそのものが、イベント キーで抽出された値と一致するようにキー値の式を定義します。2 つの値が一致すると、イベントがトリガされます。そのメカニズムを次の図に示します。

図4-25 受信 XML ドキュメント、イベント キーの式、キー値の式の関係


 

リスト4-4 の例では、当初の商品 ID が 236 だったのでイベントがトリガされます。

受信 XML ドキュメントの要素値、イベント キーのコンフィグレーション式、イベント ノードのキー値式が、[Wait for Inventory] ノード用にどのように互いに対応するかを次の表に示します。

表4-10 Wait for Inventory イベント : イベント キーとイベント ノード式の関係

要素

XML ドキュメント

イベント キー コンフィグレーション

イベント ノード

ルート要素/文書型

<newinventory>

newinventory

newinventory

イベント キー式/キー値式

<item>

<id>

ToInteger(ToString(XPath("/newinventory/item/id/text()")))

$ItemID


 

イベント キーのコンフィグレーション式では、開始ノードまたはイベント ノード内のキー値式と同じデータ型で評価する必要があります。XPath 式はノード リストのタイプを返すため、通常、正しいデータ型を返すには、ワークフロー式の言語で記述される型キャストを実行する関数を使用する必要があります。この例では、変数が整数で保存されているため、最初にノード リストを文字列に変換し、次に文字列を整数に変換する必要があります。型キャストその他のワークフロー関数の詳細は、『WebLogic Integration Studio ユーザーズ ガイド』の「ワークフロー式の使用」の「関数を使用する」を参照してください。

ここで使用するイベントを作成するには、次の作業を行う必要があります。

イベント キーをコンフィグレーションする

イベント キーをコンフィグレーションする場合は、XML ドキュメント、および抽出対象の特定の要素の値を探すためにドキュメントを解析する式の文書型またはルート要素を指定します。イベント キーをコンフィグレーションすると、すべてのワークフローのテンプレートで使用できます。

[newinventory] イベント キーを定義する手順は、次のとおりです。

  1. [コンフィグレーションを選択|イベント] を選択します。WebLogic Integration Studio 入門でインポートした [cancelledorder] イベント キーが表示されている、[イベント キー] ダイアログ ボックスが表示されます。

    図4-26 [イベント キー] ダイアログ ボックス


     

  2. [追加] ボタンをクリックします。[イベント キーを定義 ] ダイアログ ボックスが表示されます。

    図4-27 [イベント キーを定義 ] ダイアログ ボックス


     

  3. [イベント記述子] フィールドに、newinventory と入力します。

  4. [式] フィールドに、直接入力するか、Expression Builder を起動する [式] ボタンをクリックして、表 4-10 の XPath 式を入力します。

  5. [OK] をクリックします。[イベント キー] ダイアログ ボックスに、新しいイベント キーが表示されます。


     

  6. [閉じる] ボタンをクリックして、[イベント キー] ダイアログ ボックスを終了します。

イベントを定義する

イベント ノードに、受信 XML ドキュメントのルート要素と、XML ドキュメントにより提示される値と一致させたいキー値の式を指定します。各イベント ノードで使用するキー値の式は、それぞれユニークである必要があります。条件を追加して受信ドキュメントをフィルタ処理できますが、このサンプルでは使用しません。

注意: イベント キー機能はパフォーマンスがよいため、常にイベント条件よりも優先してイベント キーを使用する必要があります。イベントをトリガする XML ドキュメントのインスタンスをより厳密に制限したい場合、かならずイベント キーに追加するかたちで条件を使用します。

Wait for Inventory イベントを定義する手順は、次のとおりです。

  1. [ワークフロー設計] ウィンドウで、[Wait for Inventory] イベント ノードをダブルクリックします。[イベントのプロパティ] ダイアログ ボックスが表示されます。

    図4-28 Wait for Inventory イベントの [イベントのプロパティ] ダイアログ ボックス


     

  2. [タイプ] ドロップダウン リストから [XML イベント] を選択します。

  3. [ドキュメント タイプ/ルート要素] フィールドに newinventory と入力します。

  4. [キー値の式] フィールドに、直接入力するか、Expression Builder を起動する [式] ボタンをクリックして、$ItemID と入力します。

  5. [OK] をクリックし、[イベントのプロパティ] ダイアログ ボックスを終了します。

 


サブワークフローの呼び出し : Start Order Fulfillment タスクの定義

在庫チェックの分岐が true となった場合、ワークフローは Start Order Fulfillment タスクに進み、Order Fulfillment ワークフローを呼び出します。サブワークフローが実行を終了すると、コントロールは Start order Fulfillment タスクに戻り、そのタスクに完了マークが付くと、フローはメイン ワークフローの次のノード、すなわち、Confirm Order Fulfillment タスクに進みます。

サブフローを呼び出す場合は、メイン ワークフローの実行中に収集または設定された値を、サブフローの input 変数に渡す必要があります。たとえば、出荷タスクに必要な顧客の住所、請求書生成タスクによって呼び出される POBean calculate() メソッドに必要なパラメータなどの値を渡します (インポートされた Order Fulfillment ワークフローに定義済みの変数リストは、テンプレート定義を開いてフォルダ ツリーの [変数] フォルダを展開すると表示できます。変数が input、output のどちらに定義されているかを知るには、変数を右クリックし、表示されるポップアップ メニューから [プロパティ] を選択して、変数の [プロパティ] ダイアログ ボックスを表示します)。

また、calculate() メソッドが提出する注文合計金額など、サブワークフローから返される値を格納する変数を作成し、指定する必要もあります。

Start Order Fulfillment タスクを定義するには、次の作業が必要です。

OrderTotalPrice 変数を作成する

calculate() メソッド(Order Fulfillment ワークフローによって呼び出される)から返される結果を格納するために、次の表で説明する OrderTotalPrice 変数を作成する必要があります。必要に応じて、次の表から値を代入し、変数を作成するで説明する手順を参照してください。

表4-11 Start Order Fulfillment タスクの変数

変数

データ型

パラメータ タイプ

ワークフローでの使い方

OrderTotalPrice

Double

Input

Order Fulfillment ワークフローで呼び出された calculate() メソッドの結果の格納する。


 

呼び出しワークフローを開始する

サブワークフローを開始するには、サブワークフローの開始ノードが [呼び出し] と定義されており、さらにワークフローがアクティブである必要があります。この例では、ワークフロー オブジェクトのインポート : チュートリアル パッケージ ファイルのインポートで Order Fulfillment ワークフローをインポートしたときに、このワークフローをアクティブにしています。

ワークフローを開始 アクションの追加と定義の手順は、次のとおりです。

  1. [ワークフロー設計] ウィンドウ内で、[Start Order Fulfillment] タスク ノードをダブルクリックして [タスク プロパティ] ダイアログ ボックスを表示します。

  2. [アクティブ時] タブを選択し、[追加] ボタンをクリックして [アクションを追加] ダイアログ ボックスを表示します。

  3. [ワークフロー アクション] フォルダを展開し [ワークフローを開始] を選択して [OK] をクリックします。[ワークフローを開始] ダイアログ ボックスが表示されます。

  4. [開始するワークフロー] ウィンドウで [Order Fulfillment] を選択します。

    図4-29 [ワークフローを開始] ダイアログ ボックス


     

  5. [オーガニゼーション内での開始] 領域で、[現在のオーガニゼーション] を選択します。

入力パラメータを定義する

[ワークフローを開始] ダイアログ ボックスで呼び出すサブワークフローを選択する場合、サブワークフロー内で input と定義されている変数がダイアログ ボックス下部の [パラメータ] タブに表示されます。

図4-30 Start Order Fulfillment ワークフロー : 入力パラメータ


 

ここで、パラメータの値を設定する必要があります。値を定義する式を使用できますが、このサンプルでは現在の変数の値を単純に渡すだけなので、変数名をパラメータ式として指定できます。

Start Order Fulfillment ワークフローの入力パラメータを定義する手順は、次のとおりです。

  1. [ワークフローを開始] ダイアログ ボックス下部の [パラメータ] タブを選択します。

  2. リスト内のパラメータをダブルクリックします。[パラメータを設定] ダイアログ ボックスが表示されます。

    図4-31 [パラメータを設定] ダイアログ ボックス


     

  3. [式] フィールドで、パラメータに対応する変数名を先頭にドル記号を付けて入力し、[OK] をクリックします。

  4. 表の変数全部に対して、手順 1 から 3 までを繰り返します。

  5. 終了すると、次のようにリストが完成します。


     

結果変数を定義する

[ワークフローを開始] ダイアログ ボックスで、呼び出すワークフローを選択する場合、サブワークフロー内で output と定義されている変数が、ダイアログ ボックス下部の [結果] タブに表示されます。

図4-32 Start Order Fulfillment ワークフロー : [結果]


 

ここで、サブワークフローから返される結果が対応する変数に確実に格納されるようにします。このサンプルでは、すべての変数名が同じなので、それぞれの結果パラメータに対応する変数名だけを指定します。

Start Order Fulfillment ワークフローの結果パラメータを定義する手順は、次のとおりです。

  1. [ワークフローを開始] ダイアログ ボックス下部の [結果] タブを選択します。

  2. 結果リスト内の項目をダブルクリックします。[結果から変数を設定] ダイアログ ボックスが表示されます。

    図4-33 [結果から変数を設定] ダイアログ ボックス


     

  3. [変数] ドロップダウン リストから、結果の割り当て先とする変数を選択し、[OK] をクリックします。

  4. 両方の結果に対して、手順 1 から 3 を繰り返し行います。

  5. 終了すると、次のようにリストが完成します。


     

タスク終了をマークする

メイン ワークフローが、サブワークフローの終了を待ってから次に進むようにするため、ワークフローを開始 アクション内にサブアクションとして タスクに完了マークを付ける を追加します。

タスクに完了マークを付ける アクションの追加と定義の手順は、次のとおりです。

  1. [ワークフローを開始] ダイアログ ボックスの下部で、[アクション] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを開きます。

  2. [タスク アクション] フォルダを展開し [タスクに完了マークを付ける] を選択して [OK] をクリックし、[タスクに完了マークを付ける] ダイアログ ボックスを開きます。

  3. [完了マークを付けるタスク] リストから、Start Order Fulfillment を選択し、[OK] をクリックします。タスクに完了マークを付ける アクションが、[ワークフローを開始] ダイアログ ボックスの [アクション] タブに表示されます。

 


電子メール メッセージの送信 : Confirm Order Fulfillment タスクの定義

Order Fulfillment が実行された後は、Watch for Cancellation イベントがトリガされず、ワークフローを終了できないように設定します。Confirm Order Fulfillment タスクは Watch for Cancellation イベントをキャンセルし、受注ステータスを完了に設定し、その旨を記したワークフロー コメントを追加し、受注の完了を確認する 電子メールを顧客への送信(省略可能)を行います。

このタスクをセットアップする作業は、次のとおりです。

イベントをキャンセルする

Order Fulfillment ワークフローが実行されて受注品が出荷された後は、受注は取り消せなくなります。Watch for Cancellation イベントの受信メッセージに対するリスンを停止するには、イベントの取消し アクションを Confirm Order Fulfillment タスクに追加します。

イベントの取消し アクションの追加の手順は、次のとおりです。

  1. [ワークフロー設計] ウィンドウ内で、Confirm Order Fulfillment タスクをダブルクリックして [タスク プロパティ] ダイアログ ボックスを表示します。

  2. [アクティブ時] タブを選択し、[追加] ボタンをクリックして [アクションを追加] ダイアログ ボックスを開きます。続いて、[その他のアクション] フォルダを展開し、ワークフロー イベントを取消し を選択して [OK] をクリックします。[ワークフロー イベントを取消し] ダイアログ ボックスが表示されます。

    図4-34 [ワークフロー イベントを取消し] ダイアログ ボックス


     

  3. [取り消すイベント] リストから [Watch for Cancellation] を選択して [OK] をクリックします。ワークフロー イベントを取消し アクションが、[タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

ワークフロー変数を設定する

次の手順では、ワークフロー変数 OrderStatus に complete という値を設定する方法を説明します。

ワークフロー変数を設定 アクションを追加する手順は、次のとおりです。

  1. [アクティブ時] タブを選択し、[追加] ボタンをクリックして [アクションを追加] ダイアログ ボックスを開きます。次に、[ワークフロー アクション] フォルダを展開し、ワークフロー変数を設定 を選択し、[OK] をクリックして [ワークフロー変数を設定] ダイアログ ボックスを開きます。

  2. [設定する変数] ドロップダウン リストから [OrderStatus] を選択します。

  3. [式] オプションを選択し、フィールド内に "complete" と入力します。

  4. [OK] をクリックします。ワークフロー変数を設定 アクションが、[タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

ワークフローのコメントを設定する

OrderStatus 変数を complete に設定すれば、この変数をワークフローのコメント式で使用できます。Order complete に対するワークフロー コメントの設定方法を、以下の手順で説明します。

ワークフロー コメントを設定 アクションの追加と定義の手順は、次のとおりです。

  1. [タスク プロパティ] ダイアログ ボックスで、[アクティブ時] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを呼び出します。

  2. [ワークフロー アクション] フォルダを展開し、ワークフロー コメントを設定 を選択して [OK] をクリックし、[ワークフロー コメントを設定] ダイアログ ボックスを表示します。

  3. [コメント] フィールドで、直接入力するか Expression Builder を使用して、次の式を入力します。

    "Order "+ $OrderStatus

  4. [OK] をクリックして、ダイアログ ボックスを終了します。ワークフロー コメントを設定 アクションが、[タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

電子メール メッセージを送信する

受注を完了するために、受注の完了を確認する 電子メール メッセージを発注元の顧客に対して送信するワークフローを設定できます。

内部 XML イベントのポスティング : Neworder XML ドキュメントの編集で、ユーザの 電子メール アドレスとその他のデータを入力済みの場合は、サンプル ワークフローの実行とモニタでワークフローを実行すると 電子メールを受信します。

注意: tutorial.jar ファイルにある Order Processing テンプレート定義には、このアクションは含まれません。以下の文で説明するように、正しいサーバ コンフィグレーションが必要となるためです。

実行時に 電子メールを送信しようとする場合、以下の条件が前提となります。

前記の 2 つの条件に当てはまらない場合は、電子メール メッセージを送信 アクションを追加するこの手順を行わないでください。

電子メール送信 アクションの追加を選択した場合は、メッセージのコンテンツとして次に示すメッセージを使用できます。

Subject: Your order #order number
Your order for item (quantity) has been shipped. The total price for your order is amount. Thank you for your business.

電子メール メッセージを送信 アクションの追加と定義の手順は、次のとおりです。

  1. [タスク プロパティ] ダイアログ ボックスで、[アクティブ時] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを呼び出します。

  2. [その他のアクション] フォルダを展開し [電子メール メッセージを送信] を選択して [OK] をクリックします。[電子メール メッセージを送信] ダイアログ ボックスが表示されます。

    図4-35 [電子メール メッセージを送信] ダイアログ ボックス


     

  3. [件名] フィールドに、"Your order #" + $OrderID または任意のメッセージを入力します。

  4. [To] タブを選択し、[追加] ボタンをクリックします。[メールの宛先] ダイアログ ボックスが表示されます。

    図4-36 [メールの宛先] ダイアログ ボックス


     

  5. [アドレス] オプションを選択します。

  6. [式] チェック ボックスをチェックし、フィールド内に $CustomerEmail と入力します。

  7. [OK] をクリックします。CustomerEmail 変数が [宛先] リストに表示されます。


     

  8. [メッセージ] タブを選択し、任意の文を入力します。次の図のように入力すると、前に示したメッセージと同じような文になります。

    図4-37 [電子メール メッセージを送信] ダイアログ ボックス : 受注確認メッセージ


     

  9. 完了したら [OK] をクリックします。

  10. [電子メール送信] アクションが、[タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

タスク終了をマークする

このタスクは、タスクを実行するアクションを持たないため、タスクに完了マークを付ける アクションを [タスク プロパティ] ダイアログ ボックスの [アクティブ時] タブに追加する必要があります。

タスクに完了マークを付ける アクションの追加と定義の手順は、次のとおりです。

  1. [タスク プロパティ] ダイアログ ボックスで、[アクティブ時] タブを選択し、[追加] をクリックして [アクションを追加] ダイアログ ボックスを開きます。

  2. [タスク アクション] フォルダを展開し [タスクに完了マークを付ける] を選択して [OK] をクリックし、[タスクに完了マークを付ける] ダイアログ ボックスを開きます。

  3. [完了マークを付けるタスク] リストから [Confirm Order Fulfillment] を選択し、[OK] をクリックします。タスクに完了マークを付ける アクションが [タスク プロパティ] ダイアログ ボックス内の [アクティブ時] タブに表示されます。

  4. [OK] をクリックし、[タスク プロパティ] ダイアログ ボックスを終了します。

 


イベントの作成 : Watch for Cancellation イベントの定義

Order Fulfillment サブワークフローの [Ship Order] タスクが実行されるまでのプロセス全体の任意の時点で、たとえば、該当する XML メッセージが Web 層のアプリケーションから JMS キューに到着することによって、Watch for Cancellation イベントをトリガできます。ノードがフローの外に存在し、開始ノードと完了ノードに直接アタッチされているため、現在実行中のノードとは無関係にフローを中断できます。Order Fulfillment ワークフローの出荷タスクの実行前にノードがトリガされた場合、Order Processing ワークフローは完了ノードに進み終了します。

ここでは実際の XML ドキュメントを使用していないため、サンプル ワークフロー内でこのイベントは実際に開始されません。ただし、次のドキュメントのような仮の XML ドキュメントをイメージできます。

コード リスト 4-5 Cancellorder XML ドキュメント

<cancelledorder>
<date> June 18 2001 </date>
<order>
<id>9654</id>
</order>
<customer>
<id>232</id>
<name>Harold Jones</name>
</customer>
.
.
.
</cancelledorder>

受信 XML ドキュメント、イベント キーのコンフィグレーション式、イベント ノードのキー値式が、このノードに関して相互に対応する方法を次の表で示します。

表4-12 Watch for Cancellation イベント : イベント キーとイベント ノード式の関係

要素

XML ドキュメント

イベント キー コンフィグレーション

イベント ノード

ルート要素/文書型

<cancelledorder>

cancelledorder

cancelledorder

イベント キー式/キー値式

<order>

<id>


ToInteger(ToString(XPath

("cancelledorder/

order/id/text()")))

$OrderID


 

Order Fufillment ワークフロー(詳細は、Order Fulfillment ワークフローの概要を参照)にも使用される [cancelledorder] イベント キーは、すでにインポート済みのため、イベント キーを作成する必要はありません。イベントの定義だけが必要です。

イベントを定義する

Watch for Cancellation イベントを定義する手順は、次のとおりです。

  1. [ワークフロー設計] ウィンドウで、[Wait for Cancellation] イベント ノードをダブルクリックします。[イベントのプロパティ] ダイアログ ボックスが表示されます。

    図4-38 Watch for Cancellation イベント : [イベントのプロパティ] ダイアログ ボックス


     

  2. [タイプ] ドロップダウン リストから [XML イベント] を選択します。

  3. [ドキュメント タイプ/ルート要素] フィールドに cancelledorder と入力します。

  4. [キー値の式] フィールドに、直接入力するか、Expression Builder を起動する [式] ボタンをクリックして、$OrderID を入力します。

  5. (省略可能)OrderStatus 変数を次の手順に従って 取消し に設定します。

    1. [変数] タブを選択し、[追加] ボタンをクリックして [ワークフロー変数の割り当て] ダイアログ ボックスを開きます。

    2. [変数] ドロップダウン リストから [OrderStatus] を選択します。

    3. [式] フィールドに、"cancelled" を入力します。

    4. [OK] をクリックし、[ワークフロー変数の割り当て] ダイアログ ボックスを終了します。変数と式が [変数] タブに表示されます。

  6. (省略可能)ワークフローのコメントを次の手順に従って Order cancelled に設定します。

    1. [アクション] タブを選択し、[追加] ボタンをクリックして [アクションを追加] ダイアログ ボックスを開きます。

    2. [ワークフロー アクション] フォルダを展開し、ワークフロー コメントを設定 を選択して [OK] をクリックし、[ワークフロー コメントを設定] ダイアログ ボックスを表示します。

    3. [コメント] フィールドに、式 "Order"+ $OrderStatus を入力します。

    4. [OK] をクリックし、[ワークフロー コメントを設定] ダイアログ ボックスを終了します。ワークフロー コメントを設定 アクションが [アクション] タブに表示されます。

  7. [OK] をクリックし、[イベントのプロパティ] ダイアログ ボックスを終了します。

テンプレート定義を保存すると、実行準備は完了です。次の節では、Order Fulfillment ワークフローについて説明します。定義済みのワークフローがインポート済みです。

 

ページの先頭 前 次