6.2.3 ProductStockビジネスプロセスの定義
商品手配システムのProductStockビジネスプロセスは,次のような処理を実現します。
-
ProductStockビジネスプロセスは,サービスリクエスタから入力された商品名と個数の情報を受け取ります。
-
InventoryManagementサービスアダプタを介して在庫管理サービスを呼び出します。
-
InventoryManagementサービスを呼び出した結果,在庫がない場合は,「*」(No Stock)をサービスリクエスタに返します。
-
在庫がある場合は,DeliveryReceiptサービスアダプタを介して配送受付サービスを呼び出し,配送番号を取得します。
-
サービスリクエスタに,取得した配送番号を返します。
また,商品手配システムのリクエスタにはサンプルプログラムと同じサービスリクエスタを使用します。そのため,ユーザ定義受付(SOAP受付)をビジネスプロセスに関連づけて定義して,サンプルプログラムと同様にSOAPプロトコルでリクエストを受付できるようにします。
商品手配システムのビジネスプロセスは,次の流れで定義します。
-
新規ビジネスプロセスを追加します。
-
ユーザ定義受付を追加します。
-
変数を設定します。
-
アクティビティを配置します。
-
アクティビティを定義します。
-
ビジネスプロセスの定義を終了します。
(1) ビジネスプロセスの追加
ProductStockビジネスプロセスを追加するときに設定する値を次の表に示します。
項目名 |
設定する値 |
説明 |
---|---|---|
ビジネスプロセス名 |
ProductStock |
ビジネスプロセスの名称を指定します。 |
ステータスの永続化 |
yes |
データベースに記録を残すかどうかを指定します。記録をとると,プロセスの進捗状況などを把握できます。この商品手配システムでは,データベースに記録を残すため,「yes」を選択します。 |
[BPELファイル] |
チェックを外します |
上流工程でツールを使って作成したBPELをインポートする場合は,チェックを入れます。インポートすると,ビジネスプロセスに必要なアクティビティが自動的に表示されます。この商品手配システムでは,インポートしないので,チェックを外します。 |
サービスID |
ArrBP |
ビジネスプロセスのIDを指定します。 |
ProductStockビジネスプロセスの追加手順を次に示します。
-
ツリービューの[サービス定義一覧]を選択し,右クリックして,[ビジネスプロセス追加]を選択します。
ビジネスプロセス定義を追加するためのダイアログが表示されます。
-
[ビジネスプロセス名]に「ProductStock」を入力し,[ステータスの永続化]で「yes」を選択します。[BPELファイル]の[インポートする]はチェックを外したままに設定してください。
-
[終了]ボタンをクリックします。
ビジネスプロセス「ProductStock」が作成され,ビジネスプロセス定義画面が表示されます。
-
ツリービューで「ProductStock」を選択します。
プロパティビューにProductStockのプロパティ一覧が表示されます。
-
プロパティビューで,サービスIDの値のセルをクリックします。
入力できる状態になります。
-
「ArrBP」に変更し,[Enter]キーを押します。
-
変更してよいかどうかを確認するメッセージが表示されるので,[OK]をクリックします。
(2) ユーザ定義受付の追加
ユーザ定義受付では,サービスリクエスタとのインターフェースをあらかじめ決める必要があります。商品手配システムでは,WSDLファイルを利用してサービスリクエスタとユーザ定義受付とのインターフェースを定義します。ユーザ定義受付を追加するときに設定する値を次の表に示します。
項目名 |
設定する値 |
説明 |
---|---|---|
受付種別 |
SOAP受付 |
受付種別を選択します。 |
受付名 |
サービス受付 |
ユーザ定義受付の名称を指定します。 |
WSDLファイル※ |
ArrangementService.wsdl |
使用するWSDLファイル名を指定します。 |
ポート名 |
Arrangement |
ポート名を指定します。 |
ProductStockのユーザ定義受付の追加手順を次に示します。
-
ツリービューのサービス定義一覧からビジネスプロセス名[ProductStock]を選択し,右クリックして,[ユーザ定義受付(呼出先固定)追加]を選択します。
受付種別を選択するためのダイアログが表示されます。
-
[受付種別]のドロップダウンリストから,「SOAP受付」を選択します。
-
[次へ]ボタンをクリックします。
SOAP受付を追加するためのダイアログが表示されます。
-
受付名に「ServiceReceipt」を入力し,WSDLファイルに「ArrangementService.wsdl」を指定します。
-
[次へ]ボタンをクリックします。
-
ドロップダウンリストからポート「Arrangement」を選択して,[終了]ボタンをクリックします。
SOAP受付がビジネスプロセスに追加され,ユーザ定義受付定義画面が表示されます。
(3) 変数の設定
ビジネスプロセスでは,アクティビティを定義するときに変数を使用します。そのため,使用する変数をあらかじめ定義しておく必要があります。ProductStockビジネスプロセスで使用する変数を次の表に示します。
変数名 |
種別 |
---|---|
InputData |
XML |
OutputData |
XML |
InventoryAllocationInputData |
XML |
InventoryAllocationOutputData |
XML |
DeliveryArrangementInputData |
XML |
DeliveryArrangementOutputData |
XML |
ProductStockビジネスプロセスで使用する変数の設定手順を次に示します。
-
ビジネスプロセス定義画面のキャンバス上の[変数・相関セット]アイコンをダブルクリックします。
[変数・相関セット一覧]ダイアログが表示されます。
-
[変数一覧]を選択します。変数名に「InputData」を入力し,種別は,ドロップダウンリストから「XML」を選択します。
-
[取込]ボタンをクリックします。
[電文フォーマットの取込]ダイアログが表示されます。
-
[受付名]を選択して,ドロップダウンリストから「ServiceReceipt」を選択します。
-
[オペレーション名]はドロップダウンリストから「arrangeItem」を,[電文種別]はドロップダウンリストから「要求電文(ボディ)」を選択します。[電文フォーマット]に「InputData」を入力します。
-
[OK]ボタンをクリックします。
[電文フォーマットの取込]ダイアログが閉じます。
-
[変数・相関セット一覧]ダイアログの[追加]ボタンをクリックします。
変数一覧に変数「InputData」が追加されます。
-
変数「OutputData」,「InventoryAllocationInputData」,「InventoryAllocationOutputData」,「DeliveryArrangementInputData」および「DeliveryArrangementOutputData」についても,手順2.〜7.と同様の手順で設定します。
設定値は次のとおりです。
[変数・相関セット一覧]ダイアログで設定する種別はすべて[XML]です。また,[電文フォーマットの取込]ダイアログでの設定値は次のとおりです。
項目名
変数名
OutputData
InventoryAllocationInputData
InventoryAllocationOutputData
DeliveryArrangementInputData
DeliveryArrangementOutputData
サービス/受付
受付名
サービス名
サービス名
サービス名
サービス名
サービス/受付の名称
ServiceReceipt
InventoryManagement
InventoryManagement
DeliveryReceipt
DeliveryReceipt
オペレーション名
arrangeItem
reserveItem
reserveItem
deliverItem
deliverItem
電文種別
応答電文(ボディ)
要求電文(ボディ)
応答電文(ボディ)
要求電文(ボディ)
応答電文(ボディ)
電文フォーマット
OutputData
InventoryAllocationInputData
InventoryAllocationOutputData
DeliveryArrangementInputData
DeliveryArrangementOutputData
-
[変数・相関セット一覧]ダイアログの[OK]ボタンをクリックします。
これで変数が設定できました。
(4) アクティビティの配置
ProductStockビジネスプロセスに必要なアクティビティを次の表に示します。
設定する値 |
説明 |
---|---|
受付アクティビティ |
サービスリクエスタからの応答を受け付けます。 |
データ変換アクティビティ |
入力時,出力時,在庫引当時,および配送手配時のデータを編集します。 |
サービス呼出アクティビティ |
在庫管理サービスまたは配送受付サービスを呼び出します。 |
分岐開始アクティビティ |
条件(在庫の有無)による処理をします。 |
応答アクティビティ |
処理結果をサービスリクエスタへ返します。 |
分岐終了アクティビティ |
条件(在庫の有無)による処理を終了します。 |
アクティビティの配置手順を次に示します。
-
パレットから[受付]をドラッグし,開始アクティビティの近くにドロップしてください。
開始アクティビティから受付アクティビティに連結されます。
-
手順1.と同様に,残りのアクティビティを配置・連結します。
次の図のフローになるよう,順番にパレットから連結元のアクティビティの近くにドロップしてください。
-
データ変換
-
サービス呼出
-
分岐開始
-
応答
-
分岐終了
- ポイント
-
-
配置後に,分岐終了アクティビティを終了アクティビティの近くに移動することで,分岐終了アクティビティから終了アクティビティに連結できます。
-
アクティビティ配置時に連結できなかった場合は,次の手順で連結してください。
-
アクティビティを連結するために,パレットの[コネクション]をクリックします。
-
連結元である開始アクティビティをクリックします。
-
連結先である受付アクティビティをクリックします。
-
受付アクティビティから終了アクティビティまでを手順1.〜3.と同様の手順で1つずつ連結します。
-
-
(5) アクティビティの定義
キャンバスへ配置した各アクティビティの内容を定義します。
(a) 受付アクティビティ
-
キャンバスの受付アクティビティ(受付1)をダブルクリックします。
[受付アクティビティ]ダイアログが表示されます。
-
次の内容を入力します。
項目名
設定する値
説明
アクティビティ名
Receive
アクティビティの名称を入力します。
オペレーション名
arrangeItem
サービスリクエスタから在庫管理サービスを呼び出すときに利用するオペレーションの名称を入力します。
ボディ割当変数
InputData
ビジネスプロセスの要求電文のボディに割り当てる変数をドロップダウンリストから選択します。
ヘッダ割当変数
設定なし
ビジネスプロセスの要求電文のヘッダに変数を割り当てる場合に設定します。この商品手配システムでは使用しないため,設定しません。
割当相関セット群
設定なし
相関セットグループをアクティビティに割り当てる場合に設定します。この商品手配システムでは使用しないため,設定しません。
通信モデル
同期
オペレーションの通信モデルを指定します。ProductStockは,各サービス部品の呼び出し結果から応答電文を作成するため,「同期」を設定します。
インスタンス生成
yes
要求電文を受け付けたときに,プロセスを初期化するかどうかを選択します。この商品手配システムでは,初期化するため「yes」を設定します。
-
[OK]ボタンをクリックします。
(b) データ変換アクティビティ(在庫引当の前処理の場合)
-
キャンバスのデータ変換アクティビティ(データ変換1)をダブルクリックします。
[データ変換アクティビティ]ダイアログが表示されます。
-
次の内容を入力します。
項目名
設定する値
説明
アクティビティ名
StockAllocationPre-processing
アクティビティの名称を入力します。
変数(変換元変数)
InputData
データの変換元になる変数をドロップダウンリストから選択し,[追加]ボタンをクリックします。
変数(変換先変数)
InventoryAllocationInputData
データの変換先になる変数をドロップダウンリストから選択します。
データ変換定義
StockAllocationPre-processing
変数の変換に使うデータ変換定義ファイルの名称を入力します。
-
[OK]ボタンをクリックします。
-
キャンバスのデータ変換アクティビティを右クリックして,[マッピング定義起動]を選択します。
[ルート要素選択]ダイアログが表示されます。
-
変換元のスキーマ論理名「InputData」のルート要素をクリックして,ドロップダウンリストから「ars:arrangeItem」を選択します。
-
変換先のスキーマ論理名「InventoryAllocationInputData」のルート要素をクリックして,ドロップダウンリストから「ims:reserveItem」を選択します。
-
[OK]ボタンをクリックします。
データ変換定義画面が表示されます。
-
データ変換定義画面のパレットから[マッピング]を選択します。
-
マッピング元となる変換元ノードのノードアダプタをクリックします。
-
マッピング先となる変換先ノードのノードアダプタをクリックします。
マッピング線が設定されます。マッピング元のノードアダプタとマッピング先のノードアダプタとの対応は次のとおりです。
(c) データ変換アクティビティ(在庫なしの場合)
-
キャンバスのデータ変換アクティビティ(データ変換2)をダブルクリックします。
[データ変換アクティビティ]ダイアログが表示されます。
-
次の内容を入力します。
項目名
設定する値
説明
アクティビティ名
NoStockArrangement
アクティビティの名称を入力します。
変数(変換元変数)
InventoryAllocationOutputData
データの変換元になる変数をドロップダウンリストから選択し,[追加]ボタンをクリックします。
変数(変換先変数)
OutputData
データの変換先になる変数をドロップダウンリストから選択します。
データ変換定義
NoStockArrangement
変数の変換に使うデータ変換定義ファイルの名称を入力します。
-
[OK]ボタンをクリックします。
-
キャンバスのデータ変換アクティビティを右クリックして,[マッピング定義起動]を選択します。
[ルート要素選択]ダイアログが表示されます。
-
変換元のスキーマ論理名「InventoryAllocationOutputData」のルート要素をクリックして,ドロップダウンリストから「ims:reserveItemResponse」を選択します。
-
変換先のスキーマ論理名「OutputData」のルート要素をクリックして,ドロップダウンリストから「ars:arrangeItemResponse」を選択します。
-
[OK]ボタンをクリックします。
データ変換定義画面が表示されます。
-
データ変換定義画面のパレットから[マッピング]を選択します。
-
マッピング元となる変換元ノードのノードアダプタをクリックします。
-
マッピング先となる変換先ノードのノードアダプタをクリックします。
マッピング線が設定されます。マッピング元のノードアダプタとマッピング先のノードアダプタとの対応は次のとおりです。
(d) データ変換アクティビティ(配送手配の前処理の場合)
-
キャンバスのデータ変換アクティビティ(データ変換3)をダブルクリックします。
[データ変換アクティビティ]ダイアログが表示されます。
-
次の内容を入力します。
項目名
設定する値
説明
アクティビティ名
DeliveryArrangementPre-processing
アクティビティの名称を入力します。
変数(変換元変数)
InventoryAllocationOutputData
データの変換元になる変数をドロップダウンリストから選択し,[追加]ボタンをクリックします。
変数(変換先変数)
DeliveryArrangementInputData
データの変換先になる変数をドロップダウンリストから選択します。
データ変換定義
DeliveryArrangementPre-processing
変数の変換に使うデータ変換定義ファイルの名称を入力します。
-
[OK]ボタンをクリックします。
-
キャンバスのデータ変換アクティビティを右クリックして,[マッピング定義起動]を選択します。
[ルート要素選択]ダイアログが表示されます。
-
変換元のスキーマ論理名「InventoryAllocationOutputData」のルート要素をクリックして,ドロップダウンリストから「ims:reserveItemResponse」を選択します。
-
変換先のスキーマ論理名「DeliveryArrangementInputData」のルート要素をクリックして,ドロップダウンリストから「dls:deliverItem」を選択します。
-
[OK]ボタンをクリックします。
データ変換定義画面が表示されます。
-
データ変換定義画面のパレットから[マッピング]を選択します。
-
マッピング元となる変換元ノードのノードアダプタをクリックします。
-
マッピング先となる変換先ノードのノードアダプタをクリックします。
マッピング線が設定されます。マッピング元のノードアダプタとマッピング先のノードアダプタとの対応は次のとおりです。
(e) データ変換アクティビティ(配送番号の設定の場合)
-
キャンバスのデータ変換アクティビティ(データ変換4)をダブルクリックします。
[データ変換アクティビティ]ダイアログが表示されます。
-
次の内容を入力します。
項目名
設定する値
説明
アクティビティ名
DeliveryNumberArrangement
アクティビティの名称を入力します。
変数(変換元変数)
DeliveryArrangementOutputData
データの変換元になる変数をドロップダウンリストから選択し,[追加]ボタンをクリックします。
変数(変換先変数)
OutputData
データの変換先になる変数をドロップダウンリストから選択します。
データ変換定義
DeliveryNumberArrangement
変数の変換に使うデータ変換定義ファイルの名称を入力します。
-
[OK]ボタンをクリックします。
-
キャンバスのデータ変換アクティビティを右クリックして,[マッピング定義起動]を選択します。
[ルート要素選択]ダイアログが表示されます。
-
変換元のスキーマ論理名「DeliveryArrangementOutputData」のルート要素をクリックして,ドロップダウンリストから「dls:deliverItemResponse」を選択します。
-
変換先のスキーマ論理名「OutputData」のルート要素をクリックして,ドロップダウンリストから「ars:arrangeItemResponse」を選択します。
-
[OK]ボタンをクリックします。
データ変換定義画面が表示されます。
-
データ変換定義画面のパレットから[マッピング]を選択します。
-
マッピング元となる変換元ノードのノードアダプタをクリックします。
-
マッピング先となる変換先ノードのノードアダプタをクリックします。
マッピング線が設定されます。マッピング元のノードアダプタとマッピング先のノードアダプタとの対応は次のとおりです。
(f) サービス呼出アクティビティ(在庫を引き当てる場合)
-
キャンバスのサービス呼出アクティビティ(サービス呼出1)をダブルクリックします。
[サービス呼出アクティビティ]ダイアログが表示されます。
-
次の内容を入力します。
項目名
設定する値
説明
アクティビティ名
StockAllocation
アクティビティの名称を入力します。
サービス名
InventoryManagement
要求電文を送信して呼び出すサービス部品の名称をドロップダウンリストから選択します。
オペレーション名
reserveItem
[サービス名]で指定したサービス部品(在庫管理)のオペレーションのうち,実際に呼び出すオペレーションの名称を指定します。
通信モデル
同期
[オペレーション名]で指定したオペレーションに設定されている通信モデルが表示されます。
ボディ割当変数(要求電文)
InventoryAllocationInputData
在庫管理サービスを呼び出す要求電文のボディに割り当てる変数をドロップダウンリストから選択します。
ヘッダ割当変数(要求電文)
設定なし
在庫管理サービスを呼び出す要求電文のヘッダに変数を割り当てる場合に設定します。この商品手配システムでは使用しないため,設定しません。
ボディ割当変数(応答電文)
InventoryAllocationOutputData
同期オペレーションから受け取る応答電文のボディに割り当てる変数をドロップダウンリストから選択します。
ヘッダ割当変数(応答電文)
設定なし
同期オペレーションから受け取る応答電文のヘッダに変数を割り当てる場合に設定します。この商品手配システムでは使用しないため,設定しません。
割当相関セット群
設定なし
相関セットグループをアクティビティに割り当てる場合に設定します。この商品手配システムでは使用しないため,設定しません。
-
[OK]ボタンをクリックします。
(g) サービス呼出アクティビティ(配送を手配する場合)
-
キャンバスのサービス呼出アクティビティ(サービス呼出2)をダブルクリックします。
[サービス呼出アクティビティ]ダイアログが表示されます。
-
次の内容を入力します。
項目名
設定する値
説明
アクティビティ名
DeliveryArrangement
アクティビティの名称を入力します。
サービス名
DeliveryReceipt
要求電文を送信して呼び出すサービス部品の名称をドロップダウンリストから選択します。
オペレーション名
deliverItem
[サービス名]で指定したサービス部品(配送手配)のオペレーションのうち,実際に呼び出すオペレーションの名称を指定します。
通信モデル
同期
[オペレーション名]で指定したオペレーションに設定されている通信モデルが表示されます。
ボディ割当変数(要求電文)
DeliveryArrangementInputData
配送手配サービスを呼び出す要求電文のボディに割り当てる変数をドロップダウンリストから選択します。
ヘッダ割当変数(要求電文)
設定なし
配送手配サービスを呼び出す要求電文のヘッダに変数を割り当てる場合に設定します。この商品手配システムでは使用しないため,設定しません。
ボディ割当変数(応答電文)
DeliveryArrangementOutputData
同期オペレーションから受け取る応答電文のボディに割り当てる変数をドロップダウンリストから選択します。
ヘッダ割当変数(応答電文)
設定なし
同期オペレーションから受け取る応答電文のヘッダに変数を割り当てる場合に設定します。この商品手配システムでは使用しないため,設定しません。
割当相関セット群
設定なし
相関セットグループをアクティビティに割り当てる場合に設定します。この商品手配システムでは使用しないため,設定しません。
-
[OK]ボタンをクリックします。
(h) 応答アクティビティ(在庫がない場合)
-
キャンバスの応答アクティビティ(応答1)をダブルクリックします。
[応答アクティビティ]ダイアログが表示されます。
-
次の内容を入力します。
項目名
設定する値
説明
アクティビティ名
Reply_NostockError
アクティビティの名称を入力します。
オペレーション名
arrangeItem
対応する受付アクティビティに指定したオペレーション名を入力します。
ボディ割当変数
OutputData
ビジネスプロセスの応答電文のボディに割り当てる変数をドロップダウンリストから選択します。
ヘッダ割当変数
設定なし
ビジネスプロセスの応答電文のヘッダに変数を割り当てる場合に設定します。この商品手配システムでは使用しないため,設定しません。
割当相関セット群
設定なし
相関セットグループをアクティビティに割り当てる場合に入力します。この商品手配システムでは使用しないため,設定しません。
フォルト名
設定なし
フォルト処理として応答アクティビティを定義して,サービスリクエスタにフォルトが発生したことを示す応答電文を送信する場合のフォルトの名称を入力します。この商品手配システムではフォルト処理を使用しないため,設定しません。
-
[OK]ボタンをクリックします。
(i) 応答アクティビティ(配送手配が成功した場合)
-
キャンバスの応答アクティビティ(応答2)をダブルクリックします。
[応答アクティビティ]ダイアログが表示されます。
-
次の内容を入力します。
項目名
設定する値
説明
アクティビティ名
Reply_ArrangementSuccess
アクティビティの名称を入力します。
オペレーション名
arrangeItem
対応する受付アクティビティに指定したオペレーション名を入力します。
ボディ割当変数
OutputData
ビジネスプロセスの応答電文のボディに割り当てる変数をドロップダウンリストから選択します。
ヘッダ割当変数
設定なし
ビジネスプロセスの応答電文のヘッダに変数を割り当てる場合に設定します。この商品手配システムでは使用しないため,設定しません。
割当相関セット群
設定なし
相関セットグループをアクティビティに割り当てる場合に入力します。この商品手配システムでは使用しないため,設定しません。
フォルト名
設定なし
フォルト処理として応答アクティビティを定義して,サービスリクエスタにフォルトが発生したことを示す応答電文を送信する場合のフォルトの名称を入力します。この商品手配システムではフォルト処理を使用しないため,設定しません。
-
[OK]ボタンをクリックします。
(j) 分岐開始アクティビティ
-
キャンバスの分岐開始アクティビティ(分岐開始1)をダブルクリックします。
[分岐アクティビティ]ダイアログが表示されます。
-
アクティビティ名に「StockAllocationResultCheck」を入力します。
-
[遷移先]が[NoStockArrangement]の行をクリックし,[上へ]ボタンをクリックして,いちばん上の行に移動します。
-
いちばん上の行を選択し,[条件設定]ボタンをクリックします。
[条件設定]ダイアログが表示されます。
-
次の内容を入力します。
項目名
設定する値
説明
条件名
No Stock
在庫引当チェックの結果,在庫がない場合の条件を指定します。
変数
InventoryAllocationOutputData
条件式で使用する変数をドロップダウンリストから選択します。
条件式※
csc:getVariableData("InventoryAllocationOutputData", "/*[local-name()='reserveItemResponse' and namespace-uri()='http://sample/InventoryManagementService']/*[local-name()='ReservationNumber' and namespace-uri()='http://sample/InventoryManagementService']")="*"
在庫がない場合の条件式をXPath式で指定します。
-
[OK]ボタンをクリックします。
[分岐アクティビティ]ダイアログに戻ります。
-
[遷移先]が[DeliveryArrangementPre-processing]の[優先順位]をクリックし,ドロップダウンリストから「Default」を選択します。
「Default」を選択すると,条件の設定は不要になります。
-
[OK]ボタンをクリックします。