この例では、相関設定によって 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
このワークフロー定義を何度か保存および転送して Web Services ステップを定義しますが、場合によっては、Web サービスのパラメーターの変更が必要になることもあります。
名前: ReceiveInquiry 実行: このチェック・ボックスをクリアします。受信/応答: このチェック・ボックスを選択します。プロセス・ポート・タイプ: RecInquiryPort
名前: ReceiveOrder 実行: このチェック・ボックスをクリアします。受信/応答: このチェック・ボックスを選択します。プロセス・ポート・タイプ: RecOrderPort
受注 | 承諾メッセージ |
---|---|
名前: OrderEntrySchema スキーマ定義: テキストを表示するには、ここをクリックしてください。 | 名前: OrderAckSchema スキーマ定義: テキストを表示するには、ここをクリックしてください。 |
ヒント: テキストがスキーマ定義で別個の行として表示されない場合は、「確認」をクリックします。
名前: XMLOrderField スキーマ: OrderEntrySchema エレメント: OrderEntry
Web Services Palette からワークフロー・マップ上に、Receive ステップをドラッグします。
「プロパティー」タブの「General」タブで、次のように入力します。
ステップ名: ReceiveInquiry パートナー・リンク: ReceiveInquiry オペレーション: RecInquiryOp メッセージ・タイプ: パラメーター オペレーション・パラメーター:
名前 | タイプ | オプション |
---|---|---|
名前 CustomerName ItemName | 型 文字列 文字列 | フィールド名 <Create> CustomerName <Create> ItemName |
注: 別のワークフローでこの Web Service の実行要求が出された場合、それに応じてこのワークフローを自動的に起動するには、Receive ステップを Launch ステップの後の最初のステップにしておく必要があります。
「ワークフローのプロパティー」の「データ・フィールド」をクリックし、下記のデータ・フィールドすべてを指定します。
ワークフローのプロパティー |
---|
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 オペレーション・パラメーター:
名前 | タイプ | オプション |
---|---|---|
名前 CustomerName ItemName InStock Price OrderNum | 型 文字列 文字列 ブール 浮動小数点 整数 | 式 CustomerName ItemName InStock Price OrderNum |
名前: AssignF_Corr
このステップには、参加者やキューを指定しないでください。
次のステップで相関設定を定義した後に、このステップに戻ります。
バイヤーが注文を続ける場合に、このステップで実際の注文に関する情報を受け取ります。(この例では、バイヤーは必ず注文を続けます。)
名前: ReceiveOrder パートナー・リンク: ReceiveOrder オペレーション: RecOrderOp メッセージ・タイプ: XML 受信 XML データ・フィールド: XMLOrderField スキーマ: OrderEntrySchema エレメント: OrderEntry
着信メッセージでは XML モードを使用します。そのため、相関データを指定するには XPath を使用する必要があります。
名前: OrderCorrelation
プロパティー/名前: xpathCustomerName XPath 照会ストリング: /*[local-name()="OrderEntry"]/*[local-name()="CustomerName"]
プロパティー/名前: xpathOrderNum XPath 照会ストリング: /*[local-name()="OrderEntry"]/*[local-name()="OrderNum"]
「割り当て」タブの「完了後」を選択します。「フィールド割り当て」で次のように入力します。
フィールド名: F_CorrOrderCorrelation 式: CustomerName + convert(OrderNum,string)
ステップ名: ReplyAckOrder パートナー・リンク: ReceiveOrder オペレーション: RecOrderOp メッセージ・タイプ: メッセージ (既にメッセージを選択している場合でも「メッセージ」をクリックしてください。)スキーマ: OrderAckSchema エレメント: OrderAck
"<OrderAck xmlns=""http://www.filenet.com/ns/fnpe/2004/06/po/schema/OrderAckSchema"">" + "<CustomerName>" + CustomerName +"</CustomerName>" + "<OrderNum>" + convert(OrderNum,string) + "</OrderNum>" +"</OrderAck>"
BPM Palette からワークフロー・マップ上に、Activity ステップをドラッグします。
ステップ名: FillOrder 参加者: 特定のユーザー (自分自身を割り当てられます) をステップの参加者として選択します。
「パラメーター」タブ: OrderNum Shipped
ここで、このドキュメントの「OrderItems ワークフローの作成」にスキップします。この SupplyItems ワークフロー定義はまだ完成ではありません。「商品出荷済み」メッセージをもう一方のワークフローに送るための Invoke ステップが必要ですが、その Invoke ステップは、もう一方のワークフローに Web サービス (Receive ステップ) を定義してからでないと作成することができません。
OrderItems ワークフローを完成してから、残りのステップを SupplyItems ワークフローに追加します。
名前: InvShip 実行: このチェック・ボックスを選択します。受信/応答: このチェック・ボックスをクリアします。
「WSDL URL」で、「Web Services Explorer」をクリックします。
同じく「パートナー・リンク」タブで「ポート・タイプ」を選択します。RecStatusPort
その後、このステップは、商品受領を示すメッセージがバイヤーから返されるまで待機します。
名前: InvShipNotice パートナー・リンク: InvShip オペレーション: RecStatusOp
BPM Palette からワークフロー・マップ上に、Activity ステップをドラッグします。
ステップ名: ShipComplete 参加者: 特定のユーザー (F_Originator でない) をそのステップの参加者として選択します。
「パラメーター」タブ: すべてのデータ・フィールド
OrderItems ワークフローの作成
「Process Designer」の「ワークフローのプロパティー」タブの「General」タブで、ワークフロー定義を特定します。
名前: OrderItems 件名: OrderItems
名前: InquireItem 実行: このチェック・ボックスを選択します。受信/応答: このチェック・ボックスをクリアします。
「WSDL URL」で、「Web Services Explorer」をクリックします。
同じく「パートナー・リンク」タブで「ポート・タイプ」を選択します。RecInquiryPort
名前: InvOrder 実行: このチェック・ボックスを選択します。受信/応答: このチェック・ボックスをクリアします。
「WSDL URL」で、「Web Services Explorer」をクリックします。Web Services ワークフローのリストから、SupplyItems を選択します。
「パートナー・リンク」タブで「ポート・タイプ」を選択します。RecOrderPort
ステップ名: InquireItem パートナー・リンク: InquireItem オペレーション: RecInquiryOp
パラメーター: CustomerName ItemName
BPM Palette からワークフロー・マップ上に、Activity ステップをドラッグします。
名前: Order? 参加者: F_Originator (要求を提出するバイヤー) パラメーター タブ: CustomerName (読み取り専用) ItemName (読み取り専用) InStock (読み取り専用) OrderNum (読み取り専用) Price (読み取り専用)
名前: InvOrder パートナー・リンク: InvOrder オペレーション: RecOrderOp
注文する場合と、注文承諾の応答を受け取る場合の必須パラメーターであることに注意してください。新しい Web サービスの場合、既存フィールドのほかに、「連絡」と「住所」のデータ・フィールドが追加で必要になります。
名前: RecItemStatus 受信/応答: このチェック・ボックスを選択します。実行: このチェック・ボックスをクリアします。プロセス・ポート・タイプ: RecStatusPort
名前: RecShip パートナー・リンク: RecItemStatus オペレーション: RecStatusOp メッセージ・タイプ: Parameters オペレーション・パラメーター:
名前 | 型 | フィールド名 |
---|---|---|
OrderNum Shipped | 整数 文字列 | OrderNum Shipped |
パラメーター | 説明 |
---|---|
オペレーション・パラメーターに相関が含まれています: OrderNum | (着信メッセージで確認される値) |
相関式: convert(OrderNum,string) | (現在のワークフロー内で一致する値が指定されているデータ・フィールド) |
データ・フィールドの OrderNum がストリングである場合、そのフィールドを選択するだけで済みますが、この場合は整数なので、着信メッセージに明記されている値と比較するにはそれをストリングに変換する必要があります。
BPM Palette からワークフロー・マップ上に、Activity ステップをドラッグします。
名前: OrderComplete 参加者: F_Originator (要求を提出するユーザー) パラメーター タブ: CustomerName (読み取り専用) ItemName (読み取り専用) OrderNum (読み取り専用) Shipped (読み取り専用)
Web Services Palette からワークフロー・マップ上に、Reply ステップをドラッグします。
ステップ名: RepShip パートナー・リンク: RecItemStatus オペレーション: RecStatusOp メッセージ・タイプ: Message オペレーション・パラメーター:
名前 | タイプ | オプション |
---|---|---|
名前 OrderCompleteMsg | 型 ストリング | 式 CustomerName + " " + Shipped + " " + convert(systemtime(),string) |
このオプションによって、このワークフローに用意されている Web サービス (Receive 関数) に関して、入力パラメーターと出力パラメーターの整合性が保たれるようになります。このワークフロー定義をいったん転送してしまうと、入力パラメーターも出力パラメーターも変更できなくなります。また、このオプションを使用することで、どの実行プロセスでも、このワークフローの最新バージョン (またはすべてのバージョン) を実行できるようになります。これは、2 つのワークフローが相互に Web サービスを実行するような状態の場合に必要不可欠な条件となります。
現在、このワークフローの最初の 2 つのパートナー・リンクで SupplyItems ワークフローの特定バージョンを実行しているので、これは必要な処置です。WSDL URL には、ワークフローの名前の後、?wsdl の前にワークスペース識別番号が指定されています。 SupplyItems ワークフローは変更し、再度転送しているため、最新バージョンを実行することが推奨されます。
ヒント: このパートナー・リンクは、SupplyItems ワークフローの最新バージョンを実行するので、WSDL URL にワークスペース識別番号は指定されません。
この例の冒頭に示されている図を見れば、受注から発送までのプロセスに関与するユーザー・ステップの流れがよく理解できます。
サプライヤーは、この注文の管理番号になる 1234 などの注文番号を入力します。その後に価格を入力して、このステップを完了します。
ヒント: このワークフローを何回か実行する場合は、起動するたびに別の顧客名および注文番号を入力してください。これによって、相関設定をワークフロー間の適切な両方向対話と一致させることができます。