5.6.3 商品手配ビジネスプロセスの定義

商品手配サンプルプログラムの商品手配ビジネスプロセスでは,次のようなプロセスで処理します。

  1. 商品手配ビジネスプロセスは,サービスリクエスタから入力された商品名と個数の情報を受け取ります。
  2. 在庫管理サービスアダプタを介して在庫管理サービスを呼び出します。
  3. 在庫管理サービスを呼び出した結果,在庫がない場合は,「*」(在庫無し)をサービスリクエスタに返します。
  4. 在庫がある場合は,配送受付サービスアダプタを介して配送受付サービスを呼び出し,配送番号を取得します。
  5. サービスリクエスタに,取得した配送番号を返します。

なお,商品手配ビジネスプロセスはユーザ定義受付を利用して呼び出すため,WSDL(ArrangementService.wsdl)を使用してユーザ定義受付を作成します。

商品手配サンプルプログラムのビジネスプロセスは,次の流れで定義します。

  1. 新規ビジネスプロセスを追加します。
  2. ユーザ定義受付を追加します。
  3. 変数を設定します。
  4. アクティビティを配置します。
  5. アクティビティを定義します。
  6. ビジネスプロセスの定義を終了します。
<この項の構成>
(1) ビジネスプロセスの追加
(2) ユーザ定義受付の追加
(3) 変数の設定
(4) アクティビティの配置
(5) アクティビティの定義

(1) ビジネスプロセスの追加

商品手配ビジネスプロセスを追加するときに設定する値を次の表に示します。

表5-7 商品手配ビジネスプロセスを追加するときに設定する値

項目名設定する値説明
ビジネスプロセス名商品手配ビジネスプロセスの名称を指定します。
ステータスの永続化yesデータベースに記録を残すかどうかを指定します。記録をとると,プロセスの進捗状況などを把握できます。このサンプルプログラムでは,データベースに記録を残すため,「yes」を選択します。
[BPELファイル]-[インポートする]チェックを外します上流工程でツールを使って作成したBPELをインポートする場合は,チェックを入れます。インポートすると,ビジネスプロセスに必要なアクティビティが自動的に表示されます。このサンプルプログラムでは,インポートしないので,チェックを外します。
サービスIDArrBPビジネスプロセスのIDを指定します。

商品手配ビジネスプロセスの追加手順を次に示します。

  1. ツリービューの[サービス定義一覧]を選択し,右クリックして,[ビジネスプロセス追加]を選択します。
    ビジネスプロセス定義を追加するためのダイアログが表示されます。
  2. [ビジネスプロセス名]に「商品手配」を入力し,[ステータスの永続化]で「yes」を選択します。[BPELファイル]の[インポートする]はチェックを外します。

    [図データ]

  3. [終了]ボタンをクリックします。
    ビジネスプロセス「商品手配」が作成され,ビジネスプロセス定義画面が表示されます。
  4. ツリービューで「商品手配」を選択します。
    プロパティービューに商品手配のプロパティ一覧が表示されます。
  5. プロパティービューで,サービスIDの値のセルをクリックします。
    入力できる状態になります。
  6. 「ArrBP」に変更し,[Enter]を押します。

    [図データ]

  7. 変更してよいかどうかを確認するメッセージが表示されるので,[OK]をクリックします。

(2) ユーザ定義受付の追加

商品手配サンプルプログラムでは,サービス部品に合わせた受付を使用して,サービスリクエスタからの要求を受け付けます。そのため,ユーザ定義受付が必要になります。ユーザ定義受付を追加するときに設定する値を次の表に示します。

表5-8 ユーザ定義受付を追加するときに設定する値

項目名設定する値説明
受付種別SOAP受付受付種別を選択します。
受付名サービス受付ユーザ定義受付の名称を指定します。
WSDLファイルArrangementService.wsdl使用するWSDLファイル名を指定します。
ポート名Arrangementポート名を指定します。

商品手配のユーザ定義受付の追加手順を次に示します。

  1. ツリービューのサービス定義一覧からビジネスプロセス名[商品手配]を選択し,右クリックして,[ユーザ定義受付追加]を選択します。

    [図データ]

    受付種別を選択するためのダイアログが表示されます。
  2. [受付種別]のドロップダウンリストから,[SOAP受付]を選択します。

    [図データ]

  3. [次へ]ボタンをクリックします。
    ユーザ定義受付を追加するためのダイアログが表示されます。
  4. 受付名に「サービス受付」を入力し,WSDLファイルに「ArrangementService.wsdl」を入力します。

    [図データ]

  5. [次へ]ボタンをクリックします。
  6. ドロップダウンリストでポート「Arrangement」を選択して,[終了]ボタンをクリックします。

    [図データ]

    ユーザ定義受付がビジネスプロセスに追加され,ユーザ定義受付定義画面が表示されます。

    [図データ]

(3) 変数の設定

ビジネスプロセスでは,アクティビティを定義するときに変数を使用します。そのため,使用する変数をあらかじめ設定してから,アクティビティを定義します。商品手配ビジネスプロセスで使用する変数を次の表に示します。

表5-9 商品手配ビジネスプロセスで使用する変数

変数名種別xsdファイル
入力データXML入力データ.xsd
出力データXML出力データ.xsd
在庫引当入力データXML在庫引当入力データ.xsd
在庫引当出力データXML在庫引当出力データ.xsd
配送手配入力データXML配送手配入力データ.xsd
配送手配出力データXML配送手配出力データ.xsd

商品手配ビジネスプロセスで使用する変数の設定手順を次に示します。

  1. ビジネスプロセス定義画面のキャンバス上の[変数・相関セット]アイコンをダブルクリックします。
    [変数・相関セット一覧]ダイアログが表示されます。
  2. [変数一覧]を選択します。変数名に「入力データ」を入力し,種別は,ドロップダウンリストから「XML」を選択します。
  3. [取込]ボタンをクリックします。
    [電文フォーマットの取込]ダイアログが表示されます。
  4. [受付名]を選択して,ドロップダウンリストから「サービス受付」を選択します。
  5. [オペレーション名]はドロップダウンリストから「arrangeItem」を,[電文種別]はドロップダウンリストから「要求電文(ボディ)」を選択します。[電文フォーマット]に「入力データ」を入力します。

    [図データ]

  6. [OK]ボタンをクリックします。
    [電文フォーマットの取込]ダイアログが閉じます。
  7. [変数・相関セット一覧]ダイアログの[追加]ボタンをクリックします。
    変数一覧に変数「入力データ」が追加されます。
  8. 変数「出力データ」,「在庫引当入力データ」,「在庫引当出力データ」,「配送手配入力データ」および「配送手配出力データ」についても,操作2.~7.と同様の操作で設定します。
    設定値は次のとおりです。
    [変数・相関セット一覧]ダイアログで設定する種別はすべて[XML]です。また,[電文フォーマットの取込]ダイアログでの設定値は次のとおりです。
    項目名変数名
    出力データ在庫引当
    入力データ
    在庫引当
    出力データ
    配送手配
    入力データ
    配送手配
    出力データ
    サービス/受付受付名サービス名サービス名サービス名サービス名
    サービス/受付の名称サービス受付在庫管理在庫管理配送受付配送受付
    オペレーション名arrangeItemreserveItemreserveItemdeliverItemdeliverItem
    電文種別応答電文(ボディ)要求電文(ボディ)応答電文(ボディ)要求電文(ボディ)応答電文(ボディ)
    電文フォーマット出力データ在庫引当入力データ在庫引当出力データ配送手配入力データ配送手配出力データ
  9. [変数・相関セット一覧]ダイアログの[OK]ボタンをクリックします。
    これで変数が設定できました。

    [図データ]

(4) アクティビティの配置

商品手配サンプルプログラムのビジネスプロセスに必要なアクティビティを次の表に示します。

表5-10 商品手配サンプルプログラムのビジネスプロセスに必要なアクティビティ

設定する値説明
受付アクティビティサービスリクエスタからの応答を受け付けます。
データ変換アクティビティ入力時,出力時,在庫引当時,および配送手配時のデータを編集します。
サービス呼出アクティビティ在庫管理サービスまたは配送受付サービスを呼び出します。
分岐開始アクティビティ条件(在庫の有無)による処理をします。
応答アクティビティ処理結果をサービスリクエスタへ返します。
分岐終了アクティビティ条件(在庫の有無)による処理を終了します。

アクティビティの配置手順を次に示します。

  1. パレットから次のアクティビティをクリックし,キャンバス上の適当な位置にクリックして配置します。
    • 受付アクティビティ
    • データ変換アクティビティ
    • サービス呼出アクティビティ
    • 分岐開始アクティビティ
    • データ変換アクティビティ
    • 応答アクティビティ
    • データ変換アクティビティ
    • サービス呼出アクティビティ
    • データ変換アクティビティ
    • 応答アクティビティ
    • 分岐終了アクティビティ
  2. アクティビティを連結するために,パレットの[コネクション]をクリックします。
  3. 連結元である開始アクティビティをクリックします。
  4. 連結先である受付アクティビティをクリックします。
    これで開始アクティビティと受付アクティビティを連結できました。
  5. 受付アクティビティから終了アクティビティまでを操作2.~4.と同様の操作で一つずつ連結します。
    次のようなフローになるよう,アクティビティを連結してください。

    [図データ]

(5) アクティビティの定義

キャンバスへ配置した各アクティビティの内容を定義します。

(a) 受付アクティビティ
  1. キャンバスの受付アクティビティをダブルクリックします。
    [受付アクティビティ]ダイアログが表示されます。
  2. 次の内容を入力します。

    [図データ]

    項目名設定する値説明
    アクティビティ名受付アクティビティの名称を入力します。
    オペレーション名arrangeItemサービスリクエスタから在庫管理サービスを呼び出すときに利用するオペレーションの名称を入力します。
    ボディ割当変数入力データビジネスプロセスの要求電文のボディに割り当てる変数をドロップダウンリストから選択します。
    ヘッダ割当変数設定なしビジネスプロセスの要求電文のヘッダに変数を割り当てる場合に設定します。このサンプルプログラムでは使用しないため,設定しません。
    割当相関セット群設定なし相関セットグループをアクティビティに割り当てる場合に設定します。このサンプルプログラムでは使用しないため,設定しません。
    通信モデル同期オペレーションの通信モデルを指定します。このサンプルプログラムで使用する商品手配サービスは,Webサービスのため,「同期」を設定します。
    インスタンス生成yes要求電文を受け付けたときに,プロセスを初期化するかどうかを選択します。このサンプルプログラムでは,初期化するため「yes」を設定します。
  3. [OK]ボタンをクリックします。
(b) データ変換アクティビティ(在庫引当の前処理の場合)
  1. キャンバスのデータ変換アクティビティをダブルクリックします。
    [データ変換アクティビティ]ダイアログが表示されます。
  2. 次の内容を入力します。

    [図データ]

    項目名設定する値説明
    アクティビティ名在庫引当前処理アクティビティの名称を入力します。
    変数(変換元変数)入力データデータの変換元になる変数をドロップダウンリストから選択し,[追加]ボタンをクリックします。
    変数(変換先変数)在庫引当入力データデータの変換先になる変数をドロップダウンリストから選択します。
    データ変換定義在庫引当前処理変数の変換に使うデータ変換定義ファイルの名称を入力します。
  3. [OK]ボタンをクリックします。
  4. キャンバスのデータ変換アクティビティを右クリックして,[マッピング定義起動]を選択します。
    [ルート要素選択]ダイアログが表示されます。
  5. 変換元のスキーマ論理名「入力データ」のルート要素をクリックして,ドロップダウンリストから「ars:arrangeItem」を選択します。
  6. 変換先のスキーマ論理名「在庫引当入力データ」のルート要素をクリックして,ドロップダウンリストから「ims:reserveItem」を選択します。

    [図データ]

  7. [OK]ボタンをクリックします。
    データ変換定義画面が表示されます。
  8. データ変換定義画面のパレットから「マッピング」を選択します。

    [図データ]

  9. マッピング元となる変換元ノードのノードアダプタをクリックします。
  10. マッピング先となる変換先ノードのノードアダプタをクリックします。
    マッピング線が設定されます。マッピング元のノードアダプタとマッピング先のノードアダプタとの対応は次のとおりです。

    [図データ]

(c) データ変換アクティビティ(在庫なしの場合)
  1. キャンバスのデータ変換アクティビティをダブルクリックします。
    [データ変換アクティビティ]ダイアログが表示されます。
  2. 次の内容を入力します。

    [図データ]

    項目名設定する値説明
    アクティビティ名在庫なし設定アクティビティの名称を入力します。
    変数(変換元変数)在庫引当出力データデータの変換元になる変数をドロップダウンリストから選択し,[追加]ボタンをクリックします。
    変数(変換先変数)出力データデータの変換先になる変数をドロップダウンリストから選択します。
    データ変換定義在庫なし設定変数の変換に使うデータ変換定義ファイルの名称を入力します。
  3. [OK]ボタンをクリックします。
  4. キャンバスのデータ変換アクティビティを右クリックして,[マッピング定義起動]を選択します。
    [ルート要素選択]ダイアログが表示されます。
  5. 変換元のスキーマ論理名「在庫引当出力データ」のルート要素をクリックして,ドロップダウンリストから「ims:reserveItemResponse」を選択します。
  6. 変換先のスキーマ論理名「出力データ」のルート要素をクリックして,ドロップダウンリストから「ars:arrangeItemResponse」を選択します。

    [図データ]

  7. [OK]ボタンをクリックします。
    データ変換定義画面が表示されます。
  8. データ変換定義画面のパレットから[マッピング]を選択します。

    [図データ]

  9. マッピング元となる変換元ノードのノードアダプタをクリックします。
  10. マッピング先となる変換先ノードのノードアダプタをクリックします。
    マッピング線が設定されます。マッピング元のノードアダプタとマッピング先のノードアダプタとの対応は次のとおりです。

    [図データ]

(d) データ変換アクティビティ(配送手配の前処理の場合)
  1. キャンバスのデータ変換アクティビティをダブルクリックします。
    [データ変換アクティビティ]ダイアログが表示されます。
  2. 次の内容を入力します。

    [図データ]

    項目名設定する値説明
    アクティビティ名配送手配前処理アクティビティの名称を入力します。
    変数(変換元変数)在庫引当出力データデータの変換元になる変数をドロップダウンリストから選択し,[追加]ボタンをクリックします。
    変数(変換先変数)配送手配入力データデータの変換先になる変数をドロップダウンリストから選択します。
    データ変換定義配送手配前処理変数の変換に使うデータ変換定義ファイルの名称を入力します。
  3. [OK]ボタンをクリックします。
  4. キャンバスのデータ変換アクティビティを右クリックして,[マッピング定義起動]を選択します。
    [ルート要素選択]ダイアログが表示されます。
  5. 変換元のスキーマ論理名「在庫引当出力データ」のルート要素をクリックして,ドロップダウンリストから「ims:reserveItemResponse」を選択します。
  6. 変換先のスキーマ論理名「配送手配入力データ」のルート要素をクリックして,ドロップダウンリストから「dls:deliverItem」を選択します。

    [図データ]

  7. [OK]ボタンをクリックします。
    データ変換定義画面が表示されます。
  8. データ変換定義画面のパレットから「マッピング」を選択します。

    [図データ]

  9. マッピング元となる変換元ノードのノードアダプタをクリックします。
  10. マッピング先となる変換先ノードのノードアダプタをクリックします。
    マッピング線が設定されます。マッピング元のノードアダプタとマッピング先のノードアダプタとの対応は次のとおりです。

    [図データ]

(e) データ変換アクティビティ(配送番号の設定の場合)
  1. キャンバスのデータ変換アクティビティをダブルクリックします。
    [データ変換アクティビティ]ダイアログが表示されます。
  2. 次の内容を入力します。

    [図データ]

    項目名設定する値説明
    アクティビティ名配送番号設定アクティビティの名称を入力します。
    変数(変換元変数)配送手配出力データデータの変換元になる変数をドロップダウンリストから選択し,[追加]ボタンをクリックします。
    変数(変換先変数)出力データデータの変換先になる変数をドロップダウンリストから選択します。
    データ変換定義配送番号設定変数の変換に使うデータ変換定義ファイルの名称を入力します。
  3. [OK]ボタンをクリックします。
  4. キャンバスのデータ変換アクティビティを右クリックして,[マッピング定義起動]を選択します。
    [ルート要素選択]ダイアログが表示されます。
  5. 変換元のスキーマ論理名「配送手配出力データ」のルート要素をクリックして,ドロップダウンリストから「dls:deliverItemResponse」を選択します。
  6. 変換先のスキーマ論理名「出力データ」のルート要素をクリックして,ドロップダウンリストから「ars:arrangeItemResponse」を選択します。

    [図データ]

  7. [OK]ボタンをクリックします。
    データ変換定義画面が表示されます。
  8. データ変換定義画面のパレットから[マッピング]を選択します。

    [図データ]

  9. マッピング元となる変換元ノードのノードアダプタをクリックします。
  10. マッピング先となる変換先ノードのノードアダプタをクリックします。
    マッピング線が設定されます。マッピング元のノードアダプタとマッピング先のノードアダプタとの対応は次のとおりです。

    [図データ]

(f) サービス呼出アクティビティ(在庫を引き当てる場合)
  1. キャンバスのサービス呼出アクティビティをダブルクリックします。
    [サービス呼出アクティビティ]ダイアログが表示されます。
  2. 次の内容を入力します。

    [図データ]

    項目名設定する値説明
    アクティビティ名在庫引当アクティビティの名称を入力します。
    サービス名在庫管理要求電文を送信して呼び出すサービス部品の名称をドロップダウンリストから選択します。
    オペレーション名reserveItem[サービス名]で指定したサービス部品(在庫管理)のオペレーションのうち,実際に呼び出すオペレーションの名称を指定します。
    通信モデル同期[オペレーション名]で指定したオペレーションに設定されている通信モデルが表示されます。
    ボディ割当変数(要求電文)在庫引当入力データ在庫管理サービスを呼び出す要求電文のボディに割り当てる変数をドロップダウンリストから選択します。
    ヘッダ割当変数(要求電文)設定なし在庫管理サービスを呼び出す要求電文のヘッダに変数を割り当てる場合に設定します。このサンプルプログラムでは使用しないため,設定しません。
    ボディ割当変数(応答電文)在庫引当出力データ同期オペレーションから受け取る応答電文のボディに割り当てる変数をドロップダウンリストから選択します。
    ヘッダ割当変数(応答電文)設定なし同期オペレーションから受け取る応答電文のヘッダに変数を割り当てる場合に設定します。このサンプルプログラムでは使用しないため,設定しません。
    割当相関セット群設定なし相関セットグループをアクティビティに割り当てる場合に設定します。このサンプルプログラムでは使用しないため,設定しません。
(g) サービス呼出アクティビティ(配送を手配する場合)
  1. キャンバスのサービス呼出アクティビティをダブルクリックします。
    [サービス呼出アクティビティ]ダイアログが表示されます。
  2. 次の内容を入力します。

    [図データ]

    項目名設定する値説明
    アクティビティ名配送手配アクティビティの名称を入力します。
    サービス名配送受付要求電文を送信して呼び出すサービス部品の名称をドロップダウンリストから選択します。
    オペレーション名deliverItem[サービス名]で指定したサービス部品(配送手配)のオペレーションのうち,実際に呼び出すオペレーションの名称を指定します。
    通信モデル同期[オペレーション名]で指定したオペレーションに設定されている通信モデルが表示されます。
    ボディ割当変数(要求電文)配送手配入力データ配送手配サービスを呼び出す要求電文のボディに割り当てる変数をドロップダウンリストから選択します。
    ヘッダ割当変数(要求電文)設定なし配送手配サービスを呼び出す要求電文のヘッダに変数を割り当てる場合に設定します。このサンプルプログラムでは使用しないため,設定しません。
    ボディ割当変数(応答電文)配送手配出力データ同期オペレーションから受け取る応答電文のボディに割り当てる変数をドロップダウンリストから選択します。
    ヘッダ割当変数(応答電文)設定なし同期オペレーションから受け取る応答電文のヘッダに変数を割り当てる場合に設定します。このサンプルプログラムでは使用しないため,設定しません。
    割当相関セット群設定なし相関セットグループをアクティビティに割り当てる場合に設定します。このサンプルプログラムでは使用しないため,設定しません。
(h) 応答アクティビティ(在庫がない場合)
  1. キャンバスの応答アクティビティをダブルクリックします。
    [応答アクティビティ]ダイアログが表示されます。
  2. 次の内容を入力します。

    [図データ]

    項目名設定する値説明
    アクティビティ名応答_在庫なしエラーアクティビティの名称を入力します。
    オペレーション名arrangeItem対応する受付アクティビティに指定したオペレーション名を入力します。
    ボディ割当変数出力データビジネスプロセスの応答電文のボディに割り当てる変数をドロップダウンリストから選択します。
    ヘッダ割当変数設定なしビジネスプロセスの応答電文のヘッダに変数を割り当てる場合に設定します。このサンプルプログラムでは使用しないため,設定しません。
    割当相関セット群設定なし相関セットグループをアクティビティに割り当てる場合に入力します。このサンプルプログラムでは使用しないため,設定しません。
    フォルト名設定なしフォルト処理として応答アクティビティを定義して,サービスリクエスタにフォルトが発生したことを示す応答電文を送信する場合のフォルトの名称を入力します。このサンプルプログラムではフォルト処理を使用しないため,設定しません。
(i) 応答アクティビティ(配送手配が成功した場合)
  1. キャンバスの応答アクティビティをダブルクリックします。
    [応答アクティビティ]ダイアログが表示されます。
  2. 次の内容を入力します。

    [図データ]

    項目名設定する値説明
    アクティビティ名応答_手配成功アクティビティの名称を入力します。
    オペレーション名arrangeItem対応する受付アクティビティに指定したオペレーション名を入力します。
    ボディ割当変数出力データビジネスプロセスの応答電文のボディに割り当てる変数をドロップダウンリストから選択します。
    ヘッダ割当変数設定なしビジネスプロセスの応答電文のヘッダに変数を割り当てる場合に設定します。このサンプルプログラムでは使用しないため,設定しません。
    割当相関セット群設定なし相関セットグループをアクティビティに割り当てる場合に入力します。このサンプルプログラムでは使用しないため,設定しません。
    フォルト名設定なしフォルト処理として応答アクティビティを定義して,サービスリクエスタにフォルトが発生したことを示す応答電文を送信する場合のフォルトの名称を入力します。このサンプルプログラムではフォルト処理を使用しないため,設定しません。
(j) 分岐開始アクティビティ
  1. キャンバスの分岐開始アクティビティをダブルクリックします。
    [分岐アクティビティ]ダイアログが表示されます。
  2. アクティビティ名に「在庫引当結果チェック」を入力します。
  3. [遷移先]が[在庫なし設定]の行をクリックし,[上へ]ボタンをクリックして,いちばん上の行に移動します。
  4. いちばん上の行を選択し,[条件設定]ボタンをクリックします。
    [条件設定]ダイアログが表示されます。
  5. 次の内容を入力します。

    [図データ]

    項目名設定する値説明
    条件名在庫なし在庫引当チェックの結果,在庫がない場合の条件を指定します。
    変数在庫引当出力データ条件式で使用する変数をドロップダウンリストから選択します。
    条件式csc:getVariableData("在庫引当出力データ", "/*[local-name()='reserveItemResponse' and namespace-uri()='http://sample/InventoryManagementService']/*[local-name()='ReservationNumber' and namespace-uri()='http://sample/InventoryManagementService']")="*"在庫がない場合の条件式をXPath式で指定します。
  6. [OK]ボタンをクリックします。
    [分岐アクティビティ]ダイアログに戻ります。
  7. [遷移先]が[配送手配前処理]の[優先順位]をクリックし,ドロップダウンリストから「Default」を選択します。
    「Default」を選択すると,条件の設定は不要になります。

    [図データ]

  8. [OK]ボタンをクリックします。
(k) 分岐終了アクティビティ
  1. キャンバスの分岐終了アクティビティをクリックします。
    プロパティービューに,分岐終了アクティビティの内容が表示されます。
  2. アクティビティ名に,「在庫引当結果チェック_終了」を入力します。

    [図データ]

  3. すべてのアクティビティを定義したら,メニューから[ファイル]-[保存]を選択して,ビジネスプロセスの定義を終了します。