Web Services の使用: 相関の例
この例では、相関設定によって 2 つのプロセス間で対話がどのように識別されるかを示します。
2 つ (バイヤーとサプライヤー) のプロセス間で交わされる受注の対話では、XML モードおよびパラメーター・モードに対して相関設定がどのように定義されるかを示します。この例では、開始/受信/応答という 3 つの対話が使用されています。最初の対話では SupplyItems ワークフローが起動するので相関設定は不要です。
この例で示すプロセスは、相関設定を使用して 2 つのプロセス間での対話を可能にする方法を説明することだけを目的としています。これらのプロセスには、すべての生産プロセスで必要とされる判断やエラー処理はいっさい組み込まれていません。
OrderItems | SupplyItems |
---|---|
バイヤーは、OrderItems を起動し、顧客名 (CustomerName) と購入予定の商品名を入力します。 | |
InquireItem Invoke ステップを介して、ReceiveInquiry Web Service のサービスを要求します。 | |
InStock? ステップでサプライヤーは、顧客から要望のあった商品の在庫を調べ、その価格を入力したうえで、注文番号 (OrderNum) を割り当てます。この注文番号は、バイヤーが注文を続ける場合に、これら 2 つのプロセス間で交わされた対話を追跡するために使用されます。 | |
ReplyStockInfo ステップでは、在庫確認の結果 (在庫あり) と価格ならびに注文番号を明記したメッセージを InquireItem ステップに返します。 | |
Order? ステップでバイヤーは、届け先住所と連絡先を指定します。 | |
InvOrder ステップで、注文を特定するための OrderNum などの注文情報を追加で入力して ReceiveOrder Web Service を実行します。 | |
AssignF_Corr ステップで、CustomerName と OrderNum をシステム・フィールド (F_Corr<CorrelationSetName>) に割り当てます。このフィールドには、着信メッセージに示されている相関値との比較に使用される値が保持されます。 | |
ReceiveOrder ステップでは、XML スキーマを使用して入力を指定します。相関設定では、着信メッセージの中に、Web サービスの実行側との特定の対話を識別する値が指定されます。この例では、XML スキーマに対して XPath 照会を使用して相関設定を定義します。 | |
ReplyAckOrder で受注の承諾を返します。この応答メッセージでは別の XML スキーマを使用します。 | |
FillOrder (ユーザー・ステップ) は、注文の処理を代行します。サプライヤーは、いつ商品を出荷したかを伝えます。 | |
InvShipNotice は OrderItems の RecShip ステップを開始し、商品の出荷が完了したことをバイヤーに知らせます。 | |
RecShip では、OrderNum 相関設定を介して適切な出荷メッセージを受け取ります。 | |
バイヤーは、OrderComplete ステップで商品が届いたことを知らせます。RepShip は、InvShipNotice に応答を返します。 | |
サプライヤーは、ShipComplete で応答メッセージをチェックし、取引の完了を確認します。 |
SupplyItems ワークフローの作成
- サプライヤーが問い合わせへの応答と注文の処理に使用する、新規ワークフロー定義を開始します。
「Process Designer」の「ワークフローのプロパティー」タブの「General」タブで、ワークフロー定義を特定します。
名前: SupplyItems 件名: SupplyItems
- このワークフローで提供する 2 つの Web Service を定義します。
- 「Web Services」タブの「General」タブで、「既存の Web Services オペレーションを確定」がオフになっていることを確認してください。
このワークフロー定義を何度か保存および転送して Web Services ステップを定義しますが、場合によっては、Web サービスのパラメーターの変更が必要になることもあります。
- 「Web Services」の「パートナー・リンク」で、このワークフローで提供する Web Service ごとにパートナー・リンクを指定します。
名前: ReceiveInquiry 実行: このチェック・ボックスをクリアします。受信/応答: このチェック・ボックスを選択します。プロセス・ポート・タイプ: RecInquiryPort
名前: ReceiveOrder 実行: このチェック・ボックスをクリアします。受信/応答: このチェック・ボックスを選択します。プロセス・ポート・タイプ: RecOrderPort
- 「XML スキーマ」タブで、受注用と受注承諾用の 2 つのスキーマを定義します。
表 2. 「XML スキーマ」タブ 受注 承諾メッセージ 名前: OrderEntrySchema スキーマ定義: テキストを表示するには、ここをクリックしてください。 名前: OrderAckSchema スキーマ定義: テキストを表示するには、ここをクリックしてください。 ヒント: テキストがスキーマ定義で別個の行として表示されない場合は、「確認」をクリックします。
- 「XML データ・フィールド」タブで、受信した注文メッセージを保持するためのフィールドを指定します。
名前: XMLOrderField スキーマ: OrderEntrySchema エレメント: OrderEntry
- 「Web Services」タブの「General」タブで、「既存の Web Services オペレーションを確定」がオフになっていることを確認してください。
- 注文に関する問い合わせの Web Service を提供するステップを作成します。
Web Services Palette からワークフロー・マップ上に、Receive ステップをドラッグします。
「プロパティー」タブの「General」タブで、次のように入力します。
ステップ名: ReceiveInquiry パートナー・リンク: ReceiveInquiry オペレーション: RecInquiryOp メッセージ・タイプ: パラメーター オペレーション・パラメーター:
表 3. パラメーターの例 名前 タイプ オプション 名前 CustomerName ItemName 型 文字列 文字列 フィールド名 <Create> CustomerName <Create> ItemName 注: 別のワークフローでこの Web Service の実行要求が出された場合、それに応じてこのワークフローを自動的に起動するには、Receive ステップを Launch ステップの後の最初のステップにしておく必要があります。
- XML スキーマを (「Web Services」タブの「XML スキーマ」タブで) 調べれば、着信メッセージと発信メッセージに含まれているデータの保持に次のようなワークフロー・フィールドが必要であることがわかります。このほかに、現時点で、これ以降のステップで必要になると考えられるその他のデータ・フィールドも定義します。
「ワークフローのプロパティー」の「データ・フィールド」をクリックし、下記のデータ・フィールドすべてを指定します。
表 4. ワークフロー・フィールド ワークフローのプロパティー InStock (ブール値)Shipped (ストリング)OrderNum (整数)Price (浮動小数点)Contact (ストリング)Address (ストリング)OrderCompleteMsg (ストリング) - 在庫と価格を確認するプロセスを代行するステップを作成します。
BPM Palette からワークフロー・マップ上に、Activity ステップをドラッグします。
「プロパティー」タブの「General」タブで、次のように入力します。
ステップ名: InStock? 参加者: 特定のユーザー (自分自身を割り当てられます) をステップの参加者として選択します。
注: このワークフローの場合、システムによって起動されるため、どのステップにも F_Originator を割り当てないでください。
「パラメーター」タブ: CustomerName (読み取り専用 バイヤーから) ItemName (読み取り専用 バイヤーから) InStock: (読み取り/書き込み サプライヤーが入力) Price: (読み取り/書き込み サプライヤーが入力) OrderNum: (読み取り/書き込み サプライヤーが入力)
ヒント: この例では、代わりの方法として、BPM Palette から Activity ステップを追加し、その後で Web Services Palette からステップを追加します。これらのステップを「マイ・パレット」にコピーすると、パレットの切り替えを最小限できるため便利です。
- 在庫確認の結果 (在庫あり) と価格、ならびにバイヤーとの対話をトラッキングできるように注文番号を知らせるステップを作成します。
Web Services Palette からワークフロー・マップ上に、Reply ステップをドラッグします。「プロパティー」タブの「General」タブで、次のように入力します。
名前: ReplyStockInfo パートナー・リンク: ReceiveInquiry オペレーション: RecInquiryOp メッセージ・タイプ: Message オペレーション・パラメーター:
表 5. オペレーション・パラメーター 名前 タイプ オプション 名前 CustomerName ItemName InStock Price OrderNum 型 文字列 文字列 ブール 浮動小数点 整数 式 CustomerName ItemName InStock Price OrderNum - BPM Palette からワークフロー・マップ上に、Activity ステップをドラッグします。このステップでは、この後に続く Receive ステップ宛ての着信メッセージを特定する際に使用する相関値を割り当てます。
名前: AssignF_Corr
このステップには、参加者やキューを指定しないでください。
次のステップで相関設定を定義した後に、このステップに戻ります。
- Web Services Palette からワークフロー・マップ上に、Receive ステップをドラッグします。
バイヤーが注文を続ける場合に、このステップで実際の注文に関する情報を受け取ります。(この例では、バイヤーは必ず注文を続けます。)
- 「General」タブで、次のように入力します。
名前: ReceiveOrder パートナー・リンク: ReceiveOrder オペレーション: RecOrderOp メッセージ・タイプ: XML 受信 XML データ・フィールド: XMLOrderField スキーマ: OrderEntrySchema エレメント: OrderEntry
- 「相関設定」タブで、特定の (別のワークフローからの) 実行要求と、対応する Receive ステップのインスタンスを相互に関連付ける名前とプロパティーを指定します。該当の着信メッセージを特定するために、CustomerName と OrderNum を組み合わせます。
着信メッセージでは XML モードを使用します。そのため、相関データを指定するには XPath を使用する必要があります。
名前: OrderCorrelation
プロパティー/名前: xpathCustomerName XPath 照会ストリング: /*[local-name()="OrderEntry"]/*[local-name()="CustomerName"]
プロパティー/名前: xpathOrderNum XPath 照会ストリング: /*[local-name()="OrderEntry"]/*[local-name()="OrderNum"]
- 「General」タブで、次のように入力します。
- AssignF_Corr ステップを選択します。このステップでは相関値を割り当てます。この値は、着信メッセージの相関設定で指定されている値との比較に使用されます。
「割り当て」タブの「完了後」を選択します。「フィールド割り当て」で次のように入力します。
フィールド名: F_CorrOrderCorrelation 式: CustomerName + convert(OrderNum,string)
- 受注を承諾するステップを作成します。
- Web Services Palette からワークフロー・マップ上に、Reply ステップをドラッグします。
ステップ名: ReplyAckOrder パートナー・リンク: ReceiveOrder オペレーション: RecOrderOp メッセージ・タイプ: メッセージ (既にメッセージを選択している場合でも「メッセージ」をクリックしてください。)スキーマ: OrderAckSchema エレメント: OrderAck
- 「メッセージ・テンプレートの作成」ボタンをクリックして、発信メッセージのテンプレートを表示します。
- 「発信メッセージ」で変数を編集して、適切なデータ・フィールドを指定します。OrderNum は、ストリングに変換する必要があります。編集済みの発信メッセージは次のようになります。
"<OrderAck xmlns=""http://www.filenet.com/ns/fnpe/2004/06/po/schema/OrderAckSchema"">" + "<CustomerName>" + CustomerName +"</CustomerName>" + "<OrderNum>" + convert(OrderNum,string) + "</OrderNum>" +"</OrderAck>"
- Web Services Palette からワークフロー・マップ上に、Reply ステップをドラッグします。
- 注文の手続きを代行するステップを作成します。
BPM Palette からワークフロー・マップ上に、Activity ステップをドラッグします。
ステップ名: FillOrder 参加者: 特定のユーザー (自分自身を割り当てられます) をステップの参加者として選択します。
「パラメーター」タブ: OrderNum Shipped
- この例の始めに示している図にならって、ルートを追加します。
- このワークフロー定義の検証、転送、および追加をオブジェクト・ストアに対して行います。
ここで、このドキュメントの「OrderItems ワークフローの作成」にスキップします。この SupplyItems ワークフロー定義はまだ完成ではありません。「商品出荷済み」メッセージをもう一方のワークフローに送るための Invoke ステップが必要ですが、その Invoke ステップは、もう一方のワークフローに Web サービス (Receive ステップ) を定義してからでないと作成することができません。
OrderItems ワークフローを完成してから、残りのステップを SupplyItems ワークフローに追加します。
- 「ワークフローのプロパティー」、「Web Services」、「パートナー・リンク」の順にクリックし、Web Services に対して、商品が出荷されたことをバイヤーに通知するパートナー・リンクを作成します。
名前: InvShip 実行: このチェック・ボックスを選択します。受信/応答: このチェック・ボックスをクリアします。
「WSDL URL」で、「Web Services Explorer」をクリックします。
- 「Web Services Explorer」ダイアログ・ボックスの「Web Services ワークフロー」を選択してから、「実行」をクリックすると、ワークフロー・システムへ転送済みの、Receive システム関数を使用したワークフローが表示されます。
- 選択「OrderItems」を選択してから「OK」をクリックします。
同じく「パートナー・リンク」タブで「ポート・タイプ」を選択します。RecStatusPort
- 商品が出荷されたことをバイヤーに通知するステップを作成します。
その後、このステップは、商品受領を示すメッセージがバイヤーから返されるまで待機します。
- Web Services Palette から、Invoke ステップをワークフロー・マップ上にドラッグします。「プロパティー」タブの「General」タブで、次のように入力します。
名前: InvShipNotice パートナー・リンク: InvShip オペレーション: RecStatusOp
- 発信パラメーターと着信パラメーターに適したデータ・フィールドを指定します。
- Web Services Palette から、Invoke ステップをワークフロー・マップ上にドラッグします。「プロパティー」タブの「General」タブで、次のように入力します。
- Invoke ステップの完了 (応答の受信) の確認およびデータ・フィールドの表示を可能にするステップを作成します。
BPM Palette からワークフロー・マップ上に、Activity ステップをドラッグします。
ステップ名: ShipComplete 参加者: 特定のユーザー (F_Originator でない) をそのステップの参加者として選択します。
「パラメーター」タブ: すべてのデータ・フィールド
- このワークフロー定義を検証します。
- 「ワークフローのプロパティー」タブ、「Web Services」タブ、「General」タブの順にクリックし、「既存の Web Services オペレーションを確定」を選択します。
- このワークフロー定義の転送とチェックインを行います。
- 「ワークフローの実行」へ進んでください。
OrderItems ワークフローの作成
- バイヤーがサプライヤーに商品を注文する際に使用する、新しいワークフロー定義を作成します。
「Process Designer」の「ワークフローのプロパティー」タブの「General」タブで、ワークフロー定義を特定します。
名前: OrderItems 件名: OrderItems
- Web Services に対して、2 つの要求に対応するパートナー・リンクを定義します。
- 「Web Services」の「パートナー・リンク」で、サプライヤーによって提供される Web サービス、すなわち在庫確認の結果 (在庫あり) と商品の価格を知らせるサービスを実行するパートナー・リンクを指定します。
名前: InquireItem 実行: このチェック・ボックスを選択します。受信/応答: このチェック・ボックスをクリアします。
「WSDL URL」で、「Web Services Explorer」をクリックします。
- 「Web Services Explorer」ダイアログ・ボックスの「Web Services ワークフロー」を選択してから「実行」をクリックすると、ワークフロー・システムに転送済みの、Receive システム関数を使用したワークフローが表示されます。
- 選択「SupplyItems」を選択してから「OK」をクリックします。
同じく「パートナー・リンク」タブで「ポート・タイプ」を選択します。RecInquiryPort
- 「Web Services」の「パートナー・リンク」をクリックし、商品の在庫に関して問い合わせを行うパートナー・リンクをサプライヤーの Web サービスに対して作成します。
名前: InvOrder 実行: このチェック・ボックスを選択します。受信/応答: このチェック・ボックスをクリアします。
「WSDL URL」で、「Web Services Explorer」をクリックします。Web Services ワークフローのリストから、SupplyItems を選択します。
「パートナー・リンク」タブで「ポート・タイプ」を選択します。RecOrderPort
- 「Web Services」の「パートナー・リンク」で、サプライヤーによって提供される Web サービス、すなわち在庫確認の結果 (在庫あり) と商品の価格を知らせるサービスを実行するパートナー・リンクを指定します。
- SupplyItems ワークフローの ReceiveInquiry Web サービスを実行するステップを作成します。
- Web Services Palette からワークフロー・マップ上に、Invoke ステップをドラッグします。
ステップ名: InquireItem パートナー・リンク: InquireItem オペレーション: RecInquiryOp
- パラメーターを選択します。式フィールドで、発信パラメーターおよび着信パラメーターごとにデータ・フィールドを作成します。
- Web Services Palette からワークフロー・マップ上に、Invoke ステップをドラッグします。
- Launch ステップを選択します。「プロパティー」タブの「General」タブで、商品の在庫に関する問い合わせを行う際にバイヤーが入力するパラメーターを指定します。
パラメーター: CustomerName ItemName
- バイヤーが、注文の問い合わせに対して返された情報を評価し、商品の出荷に関する情報を追加で入力し、注文を続ける場合に使用できるステップを作成します。
BPM Palette からワークフロー・マップ上に、Activity ステップをドラッグします。
名前: Order? 参加者: F_Originator (要求を提出するバイヤー) パラメーター タブ: CustomerName (読み取り専用) ItemName (読み取り専用) InStock (読み取り専用) OrderNum (読み取り専用) Price (読み取り専用)
- SupplyItems ワークフロー内で RecOrder を実行して発注するためのステップを作成します。
- Web Services Palette から別の Invoke ステップをワークフロー・マップ上にドラッグします。
名前: InvOrder パートナー・リンク: InvOrder オペレーション: RecOrderOp
注文する場合と、注文承諾の応答を受け取る場合の必須パラメーターであることに注意してください。新しい Web サービスの場合、既存フィールドのほかに、「連絡」と「住所」のデータ・フィールドが追加で必要になります。
- 発信パラメーター式と着信パラメーター・フィールドのデータ・フィールドを必要に応じて作成します。
- 「Order?」ステップを選択し、「連絡先」および「住所」フィールドをパラメーターとして追加します。
- Web Services Palette から別の Invoke ステップをワークフロー・マップ上にドラッグします。
- 「ワークフローのプロパティー」、「Web Services」、「パートナー・リンク」の順にクリックし、サプライヤーから出荷の確認を受け取るためのパートナー・リンクを定義します。
名前: RecItemStatus 受信/応答: このチェック・ボックスを選択します。実行: このチェック・ボックスをクリアします。プロセス・ポート・タイプ: RecStatusPort
- 商品の出荷時に、SupplyItems ワークフローからメッセージを受け取るステップを作成します。(この例の当ステップでは、2 つのプロセス間で交わされる送受信両用の非同期の対話を示しています。)
- Web Services Palette からワークフロー・マップ上に、Receive ステップをドラッグします。
名前: RecShip パートナー・リンク: RecItemStatus オペレーション: RecStatusOp メッセージ・タイプ: Parameters オペレーション・パラメーター:
表 6. パラメーターの例 名前 型 フィールド名 OrderNum Shipped 整数 文字列 OrderNum Shipped - 「相関設定」タブで、相関パラメーターを選択します。
表 7. 相関パラメーター パラメーター 説明 オペレーション・パラメーターに相関が含まれています: OrderNum (着信メッセージで確認される値) 相関式: convert(OrderNum,string) (現在のワークフロー内で一致する値が指定されているデータ・フィールド) データ・フィールドの OrderNum がストリングである場合、そのフィールドを選択するだけで済みますが、この場合は整数なので、着信メッセージに明記されている値と比較するにはそれをストリングに変換する必要があります。
- Web Services Palette からワークフロー・マップ上に、Receive ステップをドラッグします。
- 出荷確認を表示し、それに対して受信確認を送るステップを作成します。
BPM Palette からワークフロー・マップ上に、Activity ステップをドラッグします。
名前: OrderComplete 参加者: F_Originator (要求を提出するユーザー) パラメーター タブ: CustomerName (読み取り専用) ItemName (読み取り専用) OrderNum (読み取り専用) Shipped (読み取り専用)
- 商品受領を知らせることでサプライヤーに返信するステップを作成します。
Web Services Palette からワークフロー・マップ上に、Reply ステップをドラッグします。
ステップ名: RepShip パートナー・リンク: RecItemStatus オペレーション: RecStatusOp メッセージ・タイプ: Message オペレーション・パラメーター:
表 8. サンプル・パラメーター 名前 タイプ オプション 名前 OrderCompleteMsg 型 ストリング 式 CustomerName + " " + Shipped + " " + convert(systemtime(),string) - ワークフロー定義を検証し、エラーがあればそれを修正します。
- 「ワークフローのプロパティー」タブ、「Web Services」タブ、「General」タブの順にクリックし、「既存の Web Services オペレーションを確定」を選択します。
このオプションによって、このワークフローに用意されている Web サービス (Receive 関数) に関して、入力パラメーターと出力パラメーターの整合性が保たれるようになります。このワークフロー定義をいったん転送してしまうと、入力パラメーターも出力パラメーターも変更できなくなります。また、このオプションを使用することで、どの実行プロセスでも、このワークフローの最新バージョン (またはすべてのバージョン) を実行できるようになります。これは、2 つのワークフローが相互に Web サービスを実行するような状態の場合に必要不可欠な条件となります。
- このワークフロー定義を転送してから、オブジェクト・ストアに追加してください。
- SupplyItems ワークフローを開き、「SupplyItems ワークフロー」の最終ステップを完成させます。
- OrderItems ワークフロー定義をチェックアウトします。
- 「ワークフローのプロパティー」タブ、「Web Services」タブ、「パートナー・リンク」タブの順にクリックし、次のステップを使用して 2 つの実行パートナー・リンクを更新します。
現在、このワークフローの最初の 2 つのパートナー・リンクで SupplyItems ワークフローの特定バージョンを実行しているので、これは必要な処置です。WSDL URL には、ワークフローの名前の後、?wsdl の前にワークスペース識別番号が指定されています。 SupplyItems ワークフローは変更し、再度転送しているため、最新バージョンを実行することが推奨されます。
- パートナー・リンク「InquireItem」を選択します。
- 「WSDL URL」で、「Web Services Explorer」をクリックします。
- 「Web Services Explorer」ダイアログ・ボックスの「Web Services ワークフロー」をダブルクリックしてリストを閉じてから「実行」をクリックすると、ワークフロー・システムへ転送済みの、Receive システム関数を使用したワークフローが表示されます。
- 選択「SupplyItems」を選択してから「OK」をクリックします。
- 「ポート・タイプ: RecInquiryPort」を選択します。
ヒント: このパートナー・リンクは、SupplyItems ワークフローの最新バージョンを実行するので、WSDL URL にワークスペース識別番号は指定されません。
- パートナー・リンク「InvOrder」を選択し、上記のステップを (RecOrder ポートを選択して) 繰り返してこのパートナー・リンクを更新します。
- OrderItems ワークフローを検証し、その後に起動します。
- Launch ステップで、名前 (CustomerName) および購入する商品の名前 (ItemName) を入力してから、「起動」をクリックします。
この例の冒頭に示されている図を見れば、受注から発送までのプロセスに関与するユーザー・ステップの流れがよく理解できます。
- Workplace のタスクの受信トレイで「InStock?」ステップを開きます。
サプライヤーは、この注文の管理番号になる 1234 などの注文番号を入力します。その後に価格を入力して、このステップを完了します。
ヒント: このワークフローを何回か実行する場合は、起動するたびに別の顧客名および注文番号を入力してください。これによって、相関設定をワークフロー間の適切な両方向対話と一致させることができます。
- Order? ステップで、バイヤーは価格を確認してから、届け先住所と連絡先を入力します。ステップを完了します。
- FillOrder ステップで、サプライヤーは、「本日出荷しました」などの出荷済みメッセージを入力し、このステップを完了します。
- OrderComplete ステップで、バイヤーは商品受領を知らせるメッセージを入力します。
- ShipComplete ステップで、この取引の完了がサプライヤーに通知されます。