|
ビジネス プロセスで頻繁に設計されるパターンの 1 つは、XML ドキュメントから取得した XML 要素のシーケンスにより、フローの反復ごとに、一連のアクティビティのパフォーマンスを指定します。
For Each ノードは、リスト内の項目ごとに 1 回ずつ、一連のアクティビティを繰り返し実行するビジネス プロセス内のポイントを表します。For Each ノードには、イテレータ ノード (項目のリストを指定するノード) とループ (リスト内の項目ごとに実行するアクティビティを定義するノード) が含まれます。XML ドキュメント (またはその一部) が For Each ループのビジネス プロセス変数に渡されます。ループの期間中、For Each ループで処理されている現在の要素は、反復変数が保持します。
この節では、ループ ロジックをビジネス プロセスに追加する方法を説明します。内容は以下のとおりです。
デザイン ビューが更新されると、図 12-1 に示すように For Each ノードの画像表現が含まれます。
ビジネス プロセス内の一連の XML ノードを反復させるロジックを追加できるようにするには、反復するビジネス プロセスに対して XML または MFL 要素を繰り返すように定義した XML スキーマまたは MFL ファイルがプロジェクトに含まれている必要があります。XML スキーマや MFL ファイルをプロジェクトにインポートする方法については、「スキーマ ファイルのインポートと作成」を参照してください。
XML スキーマまたは MFL ファイルをプロジェクトにインポートしたら、For Each ノードの設計を完成できます。この手順で実行するタスクは次のとおりです。
For Each ノードは繰り返し要素だけを反復します。ノード ビルダでは、前の節で作成した変数から繰り返しノードを選択できます。
たとえば、プロジェクトに XML スキーマ (QuoteRequest.xsd
) をインポートし、quoteRequest
(QuoteRequest.xsd
スキーマに基づく) タイプのビジネス プロセス変数 (requestXML
) を作成する場合は、図 12-2 に示すように、requestXML
変数をビジネス プロセス変数のドロップダウン リストから入手できます。
注意 : | ビジネス プロセス変数の作成方法とスキーマのプロジェクトへのインポート方法については、「ビジネス プロセス変数とデータ型」を参照してください。 |
requestXML
変数における XML 表現が [ノードの選択] パネルに表示されます。図 12-3 を参照してください。
前の図に表示した QuoteRequest.xsd
スキーマには次の特徴があります。
QuoteRequest.xsd
) は quoteRequest
という名前のルート要素を指定します。customerName
、shipAddress
、および widgetRequest
が含まれている。 shipAddress
要素は次の属性を指定する : street
、city
、state
、zip
。widgetRequest
は繰り返し要素である。
widgetRequest
要素は関連付けられた XML ドキュメントに 1 回または複数回現れることができます。つまり、スキーマの GUI 表現の により表されます。一方、widgetRequest
要素には 2 つの要素として widgetId
と quantity
が含まれます。
注意 : 前の図の例では、繰り返し XML 要素 (1 回または複数回の出現) は、スキーマの GUI 表現の により表されます。0 回以上の出現を指定する繰り返し XML 要素は、 により表されます。
[繰り返し要素] と [反復変数] フィールドにデータが読み込まれます。
$requestXML/ns0:widgetRequest
が読み込まれます。この式は XML ドキュメントにあるすべての widgetRequest
要素を返します。iter_forEach1
という名前になります。[反復変数] フィールドに新しい名前を入力すると、名前を変更できます。
デザイン ビューでは、For Each ノードは次の画像で表示されます。
前の手順 (反復する XML または MFL の繰り返し要素を選択するには) で作成された、リスト内の項目ごとに実行されるアクティビティまたはアクティビティのセットを定義する必要があります。For Each ループの各反復は、ループのノード (または複数のノード) で指定したアクティビティまたは複数のアクティビティを実行します。
ノードを For Each ループにドラッグすると、ターゲット がループに表示され、ノードを配置できる For Each ループの有効な位置を表します。ノードをドラッグして有効な位置に近づけると、ターゲットはアクティブ になり、カーソルが矢印 に変わります。ここでマウス ボタンを放すと、ノードが For Each ループに吸着します。