BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
|
e-docs > WebLogic Integration > BPM トピック > BPM ユーザーズ ガイド > ワークフローのノードの定義 |
BPM ユーザーズ ガイド |
ワークフローのノードの定義
注意: Worklist クライアント アプリケーションは WebLogic Integration リリース 7.0 より非推奨となりました。代替機能に関する詳細については、『WebLogic Integration リリース ノート』を参照してください。
この章では、ワークフローのノードの詳しい概要に続いて、Order Processing ワークフローの各ワークフロー オブジェクトを定義するための手順をノードごとに説明します。この章の手順に従えば、次の操作方法が習得できます。
この章で説明する手順を行う前に、以下のことが完了していることを確認してください。
Order Processing ワークフロー ノードの概要
このワークフローの詳細を、次の図に示します。図中で番号が振られている手順については、図の下にある表で説明します。この図では、実際のプロセスをワークフロー 実装にマップしています。
図4-1 Order Processing のノード : 詳細表示
イベントトリガによる開始の作成
Order Processing ワークフローは、Order Processing Trigger ワークフローがポストした XML イベントによってトリガされます。ワークフローが開始すると、まず、ワークフロー変数を Order Processing Trigger ワークフローがポストした XML ドキュメントの値に初期化します。
そのため、ノードの作成には、次の作業が必要になります。
変数を作成する
開始ノードによって XML ドキュメントから値が抽出されます。そのため、対応する変数を設定して抽出した値をその中に格納できるようにする必要があります。変数、ワークフロー内での用法、対応する XML 要素を次の表に示します。変数の値をほかのワークフローに渡すときには、input パラメータを使用します。一方、output パラメータは、現在のワークフローが他のワークフローから変数の値を受け取るときに使用します。
変数を作成する手順は、次のとおりです。
図4-2 [変数プロパティ] ダイアログ ボックス
終了すると、[変数] フォルダ ツリーは次のようになります。
開始ノード イベントを定義する 正しい XML ドキュメントによって確実にワークフローをトリガするには、Order Processing Trigger にポストされた XML ドキュメントのルート要素、つまり <neworder> に対応する開始ノードのルート要素を指定します。 開始ノードは、XML ドキュメントの特定のインスタンスに関連付けられるのではなく、ルート要素 <neworder> を持つすべての受信 XML ドキュメントによりトリガされるため、ワークフロー内で定義する他のイベントの場合のようにイベント キーを設定する必要はありません (イベントの作成 : Watch for Cancellation イベントの定義に例がありますので、参照してください)。 イベントをセットアップする手順は、次のとおりです。
図4-3 [開始のプロパティ] ダイアログ ボックスの イベント
XPath 文を定義する
XML ドキュメントから値を抽出し、その値をワークフローの変数に挿入するには、データベース上のクエリ言語の文と同じように機能する XPath 言語の文を使用します。XPath は多くの機能を実現する多彩な言語ですが、もっともよく使用する関数は、要素または属性の値を返す text() です。ここで使用する XPath の text() 関数文の一般的形式は、次のとおりです。
XPath("/root element/child element/text()")
XPath("/root element/@attribute/text()")
XML ドキュメントから値を抽出するには、次の表に示すような XPath 文の設定が必要です。
Studio 内で XPath 文を作成するには、以下の 3 つのいずれかの方法を使用します。順に有効性が高くなります。
次の手順では、XPath Wizard を使用して、XML リポジトリの使い方 : Neworder XML ドキュメントのエクスポートでエクスポートした Neworder ドキュメントをロードします。
XPath Wizard を使用して XPath 式を定義する手順は、次のとおりです。
図4-4 [XML ファインダ] ダイアログ ボックス : [リポジトリ] タブ
図4-5 [ドキュメントのプレビュー] ウィンドウ
図4-6 XPath Wizard の [サンプル] タブ
図4-7 XPath Wizard の [ワークスペース] タブ
XPath 式を [開始のプロパティ] ダイアログ ボックスの 変数 リストに追加する手順は、次のとおりです。
図4-8 [ワークフロー変数の割り当て] ダイアログ ボックス
図4-9 [Expression Builder] ダイアログ ボックス
図4-10 [開始のプロパティ] ダイアログ ボックスの [変数] タブ
XML メッセージの Worklist ユーザへの送信 : Check Customer Credit タスクの定義
このタスクによって、顧客の信用チェック作業を Worklist 内のユーザ admin に割り当てられ、次に XML メッセージがユーザ admin に送信されて、承認の確認が求められます。
タスクの割り当てに必要な作業は、次のとおりです。
タスクをユーザに割り当てる
ここでは、Check Customer Credit タスクを、ユーザ admin に割り当てる方法を説明します。
このノードにアクションを追加する前に、テンプレート定義を作成したときにすべての T1 タスク ノードに定義した、デフォルトのアクションとパーミッションを削除する必要があります。
デフォルトのアクションを削除する手順は、次のとおりです。
ユーザにタスクを割り当て アクションの追加と定義の手順は、次のとおりです。
図4-11 [ユーザにタスクを割り当て] ダイアログ ボックス
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 クライアント アプリケーション プログラミング ガイド』を参照してください。
ここで使用する Check Customer Credit タスクには、[はい] ボタン、[いいえ] ボタンのついたメッセージ ボックスを送信する ClientMsgBoxReq.dtd を使用します。DTD の構造は次のとおりです。 コード リスト 4-1 ClientMsgBoxReq XML ドキュメントの構造 注意: アクション ID の要素と値は、XML をクライアントに送信 アクションの作成時に、システムによって指定されます。 送信されるメッセージ ボックスに対応するタグと値を次の図に示します。 図4-12 [Credit Check] メッセージ ボックス
<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 を使用するため、実行時に対応する値を渡す 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 変数を作成する手順は次のとおりです。
XML ドキュメント構造体を定義する
message-box XML ドキュメント構造体を定義する手順は、次のとおりです。
コールバック変数を割り当てる
message box に対するユーザの応答結果を、Worklist アプリケーションによって返された XML ドキュメントから抽出するには、XPath 式をセットアップして CreditCheck 変数を登録する必要があります。
コールバック変数を割り当てる手順は、次のとおりです。
参考 : また、ClientMsgBoxResp.dtd ファイルを XPath Wizard にロードしても、XPath 式をビルドする XML ドキュメントを自動的に生成できます。XPath Wizard を使用する手順については、XPath 文を定義するを参照してください。
タスク終了をマークする
タスク ノードが message box に対するユーザの応答を確実に待ってから次のノードに移行するようにするので、コールバック アクションとしての タスクに完了マークを付ける を、[タスク プロパティ] ダイアログ ボックスに追加するのではなく、[XML をクライアントに送信] ダイアログ ボックスに指定します。タスクに完了マークを付ける アクションをここに配置することで、ワークフローは Worklist クライアントからの応答を待って、次のノードに進むようになります。
タスクに完了マークを付ける コールバック アクションを追加する手順は、次のとおりです。
図4-13 [タスクに完了マークを付ける] ダイアログ ボックス
等価テスト : Check Credit 分岐の定義
サンプル ワークフローにおける最初の分岐では、Check Credit タスクでの Worklist ユーザの応答が はい か いいえ のどちらであるかによって、顧客が信用チェックに合格したかどうかをチェックします。
分岐ノードの名前は、評価する条件によって決まり、この条件を式として指定する必要があります。一般的に、条件は、変数の値を定数や別の変数などのほかの要素と比較します。デフォルトでは、分岐には 1=1 の条件(常に true)が割り当てられています。
信用チェックの問い合わせに対する Worklist ユーザの応答をチェックするために、定数との等価テストを作成します。つまり、変数 CreditCheck に格納されたユーザからの応答が、"yes" と等価かどうかをテストします。条件によって true と評価された場合、フローは Check Inventory タスクに進み、false と評価された場合は、Contact Customer タスクに進みます。
C1 分岐ノードを定義する手順は、次のとおりです。
タスクとワークフローのコメントの追加 : Contact Customer タスクの定義
信用チェックの分岐が false となった場合、フローは Contact Customer タスクに進んで終了します。このノードは、変数 OrderStatus を 取消し に設定し、それを表すワークフロー コメントを追加します。ワークフローが実行されると、このコメントが実行中のアプリケーションに表示されます。
顧客への連絡タスクは特定のユーザではなく、CustomerService ロールに割り当てられます。このため、そのロールに関連付けられているすべてのユーザが、そのタスクを実行できます。また、XML メッセージを通じて Worklist ユーザと通信するのではなく、実行時に [Worklist] ウィンドウにタスクと共に表示されるタスク コメントを設定します。
注意: ワークフローおよびタスクのコメントは最大 254 文字まで。式の変数の長さにより、コメントの長さは実行時に決まる。254 文字の限度を超えるコメントは超過部分が実行時に警告無く短縮される。
[Contact Customer] タスク ノードを定義する手順は、次のとおりです。
ワークフローの変数を設定する
ワークフロー変数を設定 アクションの追加と定義の手順は、次のとおりです。
図4-14 [ワークフロー変数を設定] ダイアログ ボックス
ワークフローのコメントを設定する
OrderStatus 変数を設定しておけば、ビルドする式でこの変数を利用して、ワークフローのコメントを指定できます。コメントは、実行中のアプリケーションに [Order cancelled] と表示されます。
ワークフロー コメントを設定 アクションの追加と定義の手順は、次のとおりです。
図4-15 [ワークフロー コメントを設定] ダイアログ ボックス
タスクのコメントを設定する
Workflow ユーザに対して次のコメントを表示します。
Please contact John Doe at 408 534 9567
実行時にワークフローから変数の値を取得するため CustomerName と CustomerPhone の 2 つの変数を使用します。サンプルの式は次のようになります。
コード リスト 4-3 Contact Customer タスク : タスクのコメント
"please contact"+ $CustomerName + "at"+ $CustomerPhone
プラス記号は文字列リテラルと変数を連結し、スペースは変数の値とリテラル テキストの間の最後のメッセージにスペースが表示されるようにする使い方ができます。
タスク コメントを設定 アクションの追加と定義の手順は、次のとおりです。
図4-16 [タスク コメントを設定] ダイアログ ボックス
タスクをロールに割り当てる
タスクはユーザ名で識別されるユーザ に割り当てるほか、関連付けられたすべてのユーザが実行できるロール に割り当てることもできます。
また、タスクをロール内のユーザ に割り当てることもできます。このアクションは、ロール名に関連付けられたユーザのうち、実行時に割り当てられたタスクが最も少ないユーザにタスクを割り当てます。ただし、このサンプルでは限られたユーザとタスクしか使用しないため、タスクをロール名に直接割り当てます。
ここでは、CustomerService ロールにタスクを割り当てます。タスクを割り当てられたユーザ(この場合は ユーザ admin のみ)は、タスク コメントを見て、タスクの実行前にそのコメントに対して応答します。
タスクにロールを割り当て アクションの追加と定義の手順は、次のとおりです。
図4-17 [タスクにロールを割り当て] ダイアログ ボックス
タスク終了をマークする
このタスクは 1 人のエンド ユーザに割り当てられるタスクなので、タスクに完了マークを付ける アクションを [タスク プロパティ] ダイアログ ボックスの [実行時] タブに追加します。タスクに完了マークを付ける アクションの割り当てがないと、フローはこのノードから先に進めません。
タスクに完了マークを付ける アクションの追加と定義の手順は、次のとおりです。
ビジネス オペレーションの作成と実行 : 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 ビジネス オペレーションの定義を表示する手順は、次のとおりです。
図4-18 [ビジネス オペレーション] ダイアログ ボックス
図4-19 Create OrderBean : [ビジネス オペレーションを定義] ダイアログ ボックス
Check Inventory ビジネス オペレーションを作成する
Check Inventory ビジネス オペレーションを作成する手順は、次のとおりです。
図4-20 Check Inventory : [ビジネス オペレーションを定義] ダイアログ ボックス
図4-21 [パラメータ] ダイアログ ボックス
ビジネス オペレーションを実行する
必要なメソッドを OrderBean から呼び出すために必要な、ビジネス オペレーションの作成は終わりました。次に、それらをタスク内から開始するアクションを定義する必要があります。
ビジネス オペレーションを開始するアクションを定義するには、以下の変数とパラメータを指定する必要があります。
2 つのビジネス オペレーションに必要なパラメータの関係を次の表にまとめて示します。
このビジネス オペレーションで使用できるようにするには、OrderBeanReference と Inventory 変数の作成が必要です。ビジネス オペレーションで使用する変数は、[ビジネス オペレーションを実行] アクション ダイアログ ボックスで作成できるので、以下の節で、変数の作成手順をアクションの追加と定義の手順と併せて説明します。 Create OrderBean ビジネス オペレーションを実行する アクションの追加と定義を行う場合は、次の表の変数も作成します。
Create OrderBean の ビジネス オペレーションを実行 アクションの追加と定義の手順は、次のとおりです。
図4-22 Create OrderBean : [ビジネス オペレーションを実行] ダイアログ ボックス
Check Inventory ビジネス オペレーションを実行する
アクションの追加と定義を行う場合は、次の表の変数も作成します。
Check Inventory の ビジネス オペレーションを実行 アクションの追加と定義の手順は、次のとおりです。
図4-23 Check Inventory : [ビジネス オペレーションを実行] ダイアログ ボックス
タスク終了をマークする
このタスクには、タスクを実行するアクション(たとえば、実行を担当する Worklist ユーザへのタスクの割り当て)が含まれていないため、タスクに完了マークを付ける アクションを [タスク プロパティ] ダイアログ ボックスの [実行時] タブではなく [アクティブ時] タブに追加する必要があります。
タスクに完了マークを付ける アクションの追加と定義の手順は、次のとおりです。
不等価のテスト : Check Inventory 分岐の定義
このワークフローの 2 番目の分岐では、Check Inventory ビジネス オペレーションから返された在庫値と顧客の受注品の数量(ワークフロー開始時に Neworder XML ドキュメントで指定され、ItemQuantity 変数に格納された数量)とを比較して、在庫が十分かどうかをチェックします。
在庫が十分かどうかチェックするために、2 つの変数を対象とする不等価テストを作成します。変数 Inventory の値が、変数 ItemQuantity の値以上であるかをテストするわけです。条件によって true と分岐された場合、フローは Start Order Fulfillment タスクに進み、false と分岐された場合、受注は "waiting" に設定され、フローは Wait for Inventory タスクに進みます。
C2 分岐ノードを定義する手順は、次のとおりです。
図4-24 Check Inventory 分岐
イベントの作成 : 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] ノード用にどのように互いに対応するかを次の表に示します。
イベント キーのコンフィグレーション式では、開始ノードまたはイベント ノード内のキー値式と同じデータ型で評価する必要があります。XPath 式はノード リストのタイプを返すため、通常、正しいデータ型を返すには、ワークフロー式の言語で記述される型キャストを実行する関数を使用する必要があります。この例では、変数が整数で保存されているため、最初にノード リストを文字列に変換し、次に文字列を整数に変換する必要があります。型キャストその他のワークフロー関数の詳細は、『WebLogic Integration Studio ユーザーズ ガイド』の「ワークフロー式の使用」の「関数を使用する」を参照してください。 ここで使用するイベントを作成するには、次の作業を行う必要があります。
イベント キーをコンフィグレーションする
イベント キーをコンフィグレーションする場合は、XML ドキュメント、および抽出対象の特定の要素の値を探すためにドキュメントを解析する式の文書型またはルート要素を指定します。イベント キーをコンフィグレーションすると、すべてのワークフローのテンプレートで使用できます。
[newinventory] イベント キーを定義する手順は、次のとおりです。
図4-26 [イベント キー] ダイアログ ボックス
図4-27 [イベント キーを定義 ] ダイアログ ボックス
イベントを定義する
イベント ノードに、受信 XML ドキュメントのルート要素と、XML ドキュメントにより提示される値と一致させたいキー値の式を指定します。各イベント ノードで使用するキー値の式は、それぞれユニークである必要があります。条件を追加して受信ドキュメントをフィルタ処理できますが、このサンプルでは使用しません。
注意: イベント キー機能はパフォーマンスがよいため、常にイベント条件よりも優先してイベント キーを使用する必要があります。イベントをトリガする XML ドキュメントのインスタンスをより厳密に制限したい場合、かならずイベント キーに追加するかたちで条件を使用します。
Wait for Inventory イベントを定義する手順は、次のとおりです。
図4-28 Wait for Inventory イベントの [イベントのプロパティ] ダイアログ ボックス
サブワークフローの呼び出し : 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 変数を作成する必要があります。必要に応じて、次の表から値を代入し、変数を作成するで説明する手順を参照してください。
呼び出しワークフローを開始する サブワークフローを開始するには、サブワークフローの開始ノードが [呼び出し] と定義されており、さらにワークフローがアクティブである必要があります。この例では、ワークフロー オブジェクトのインポート : チュートリアル パッケージ ファイルのインポートで Order Fulfillment ワークフローをインポートしたときに、このワークフローをアクティブにしています。 ワークフローを開始 アクションの追加と定義の手順は、次のとおりです。
図4-29 [ワークフローを開始] ダイアログ ボックス
入力パラメータを定義する
[ワークフローを開始] ダイアログ ボックスで呼び出すサブワークフローを選択する場合、サブワークフロー内で input と定義されている変数がダイアログ ボックス下部の [パラメータ] タブに表示されます。
図4-30 Start Order Fulfillment ワークフロー : 入力パラメータ
ここで、パラメータの値を設定する必要があります。値を定義する式を使用できますが、このサンプルでは現在の変数の値を単純に渡すだけなので、変数名をパラメータ式として指定できます。 Start Order Fulfillment ワークフローの入力パラメータを定義する手順は、次のとおりです。
図4-31 [パラメータを設定] ダイアログ ボックス
結果変数を定義する
[ワークフローを開始] ダイアログ ボックスで、呼び出すワークフローを選択する場合、サブワークフロー内で output と定義されている変数が、ダイアログ ボックス下部の [結果] タブに表示されます。
図4-32 Start Order Fulfillment ワークフロー : [結果]
ここで、サブワークフローから返される結果が対応する変数に確実に格納されるようにします。このサンプルでは、すべての変数名が同じなので、それぞれの結果パラメータに対応する変数名だけを指定します。 Start Order Fulfillment ワークフローの結果パラメータを定義する手順は、次のとおりです。
図4-33 [結果から変数を設定] ダイアログ ボックス
タスク終了をマークする
メイン ワークフローが、サブワークフローの終了を待ってから次に進むようにするため、ワークフローを開始 アクション内にサブアクションとして タスクに完了マークを付ける を追加します。
タスクに完了マークを付ける アクションの追加と定義の手順は、次のとおりです。
電子メール メッセージの送信 : Confirm Order Fulfillment タスクの定義
Order Fulfillment が実行された後は、Watch for Cancellation イベントがトリガされず、ワークフローを終了できないように設定します。Confirm Order Fulfillment タスクは Watch for Cancellation イベントをキャンセルし、受注ステータスを完了に設定し、その旨を記したワークフロー コメントを追加し、受注の完了を確認する 電子メールを顧客への送信(省略可能)を行います。
このタスクをセットアップする作業は、次のとおりです。
イベントをキャンセルする
Order Fulfillment ワークフローが実行されて受注品が出荷された後は、受注は取り消せなくなります。Watch for Cancellation イベントの受信メッセージに対するリスンを停止するには、イベントの取消し アクションを Confirm Order Fulfillment タスクに追加します。
イベントの取消し アクションの追加の手順は、次のとおりです。
図4-34 [ワークフロー イベントを取消し] ダイアログ ボックス
ワークフロー変数を設定する
次の手順では、ワークフロー変数 OrderStatus に complete という値を設定する方法を説明します。
ワークフロー変数を設定 アクションを追加する手順は、次のとおりです。
ワークフローのコメントを設定する
OrderStatus 変数を complete に設定すれば、この変数をワークフローのコメント式で使用できます。Order complete に対するワークフロー コメントの設定方法を、以下の手順で説明します。
ワークフロー コメントを設定 アクションの追加と定義の手順は、次のとおりです。
電子メール メッセージを送信する
受注を完了するために、受注の完了を確認する 電子メール メッセージを発注元の顧客に対して送信するワークフローを設定できます。
内部 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.
電子メール メッセージを送信 アクションの追加と定義の手順は、次のとおりです。
図4-35 [電子メール メッセージを送信] ダイアログ ボックス
図4-36 [メールの宛先] ダイアログ ボックス
図4-37 [電子メール メッセージを送信] ダイアログ ボックス : 受注確認メッセージ
タスク終了をマークする
このタスクは、タスクを実行するアクションを持たないため、タスクに完了マークを付ける アクションを [タスク プロパティ] ダイアログ ボックスの [アクティブ時] タブに追加する必要があります。
タスクに完了マークを付ける アクションの追加と定義の手順は、次のとおりです。
イベントの作成 : 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 ドキュメント、イベント キーのコンフィグレーション式、イベント ノードのキー値式が、このノードに関して相互に対応する方法を次の表で示します。
Order Fufillment ワークフロー(詳細は、Order Fulfillment ワークフローの概要を参照)にも使用される [cancelledorder] イベント キーは、すでにインポート済みのため、イベント キーを作成する必要はありません。イベントの定義だけが必要です。 イベントを定義する Watch for Cancellation イベントを定義する手順は、次のとおりです。
図4-38 Watch for Cancellation イベント : [イベントのプロパティ] ダイアログ ボックス
テンプレート定義を保存すると、実行準備は完了です。次の節では、Order Fulfillment ワークフローについて説明します。定義済みのワークフローがインポート済みです。