Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerScatter-Gather カードを使用すると、同時に複数のカードセットを使用してメッセージを送信し、各セットから結果を収集して、結果を (元のメッセージと一緒に) フロー内の次のカードに渡すことができます。
1 | どのカードからでも Scatter-Gather カードにメッセージを渡すことができます。現在のフローのトリガーや、フロー内の他のいずれのカードでもメッセージを渡すことができます。 |
2 | Scatter-Gather カードは、大きな長方形内に表示されます。この長方形は、カードのスコープと呼ばれます。このスコープ内に 2 つ以上のカードのセットがあり、各セットはルートと呼ばれます。Scatter-Gather カードは、すべてのルートを同時に処理し、ルートはすべて互いに独立しています。各ルートには 1 つ以上のカードがあります。 |
3 | すべてのルートでデータの処理が完了すると、各ルートからの結果が元のメッセージのペイロードに含められます。更新されたメッセージは、フローの次のカードに渡されます。 |
フロー内を移動するメッセージの一般的な構造は次のとおりです。
payload attributes vars
2 つのルートを含む Scatter-Gather カードから渡されるメッセージには、各ルートからのサブペイロードが含まれます。
payload 0 payload 1 payload attributes vars
この例では、HTTP リスナーが要求を受け取ると、フローをトリガーします。Scatter-Gather カードは、2 つの Salesforce 組織から取引先責任者のリストを受け取るための 2 つのルートを開始します。Scatter-Gather カードは、Salesforce 用 Anypoint Connector (Salesforce Connector) の各インスタンスからのペイロードを 1 つのペイロードに組み合わせます。このペイロードは、2 つのクエリの結果を連結する変数に格納されます。最後に、連結された結果の項目がデータ型にマップされ、このデータ型から CSV ファイルが作成されます。
1 | フローをトリガーする HTTP リスナーカード。 |
2 | 各ルートが Salesforce Connector のインスタンスで構成される 2 つのルートを持つ Scatter-Gather カード。これらのインスタンスはそれぞれ異なる Salesforce 組織に対してクエリを実行します。 |
3 | Scatter-Gather カードからの連結されたクエリの結果を変数に格納する Set Variable カード。 |
4 | 変数の項目を CSV ファイルの項目にマップする Transform カード。 |
まず、カスタムデータ型を次のように作成します。
1 | [Format (形式)] 項目は [CSV] に設定します。 |
2 | [Type (方)] 項目は [From schema (スキーマから)] に設定します。 |
3 | スキーマは次のとおりです。 |
#%RAML 1.0 DataType type: array items: properties: Name: type: string ID: type: string Email: type: string
次に、[Path (パス)] 項目で指定したパスをリッスンする HTTP リスナーカードを追加します。パスの名前は、コンピューターにダウンロードされる CSV ファイルに付けられます。
この例では HTTP リスナーカードを使用していますが、Scatter-Gather カードにはどのカードからでもデータを送信できます。
次に、Scatter-Gather カードを追加して、2 つのルートのそれぞれに Salesforce Connector のインスタンスを配置します。Salesforce Connector のインスタンスは、異なる Salesforce 組織に接続するため、異なる設定を使用します。したがって、異なる接続情報が必要です。
このクエリは、各インスタンスの [Salesforce Query (Salesforce クエリ)] 項目に指定します。
Scatter-Gather カードから渡されるメッセージには、以下の部分が含まれます。
payload 0 payload Name ID Email 1 payload Name ID Email attributes vars
Scatter-Gather カードからのペイロードには、カードの各ルートからのペイロードが 1 つずつ、合計 2 つのサブペイロードがあります。0
の下にあるサブペイロードはカードの最初のルートからのペイロードで、1
の下にあるサブペイロードはカードの 2 番目のルートからのペイロードです。
フローのこの時点で、DataWeave スクリプトを使用して 2 つのサブペイロードを 1 つの CSV ファイルに組み合わせることができます。ただし、DataWeave スクリプトを作成しない場合は、2 つのサブペイロードを 1 つのペイロードに連結して変数に格納し、1 つのペイロードの項目を CSV ファイルの項目にマップできます。
Set Variable カードには 1) 変数名と 2) [Value (値)] 項目の式が含まれます。2 つのサブペイロードを連結するための (3 の) 式は次のようになります。
payload["0"]["payload"] ++ (payload["1"]["payload"])
この式を作成するには、カードの右側から [Custom Expression (カスタム式)] ピルを [Value (値)] 項目までドラッグし、ピル内の矢印をクリックしてから [Expand (展開)] をクリックします。その後、最初の [Payload (ペイロード)] ピルをテキストボックスまでドラッグし、2 つのプラス記号を入力してから、2 番目の [Payload (ペイロード)] ピルをテキストボックスまでドラッグします。
1 | 指定された変数名 |
2 | [Custom Expression (カスタム式)] を [Value (値)] 項目にドラッグすることで作成されるピル |
3 | クエリ結果を連結する式 |
Transform カードが Set Variable カードから受け取るメッセージには、次の部分が含まれています。
payload 0 payload Name ID Email 1 payload Name ID Email attributes vars SG_payload Name ID Email
変数 SG_payload
の項目は、CSV 形式を使用するカスタムデータ型の項目にマップできます。
1 | [Input (入力)] ペインでの変数の場所 |
2 | 変数の項目からカスタムデータ型の項目へのマッピング |
Name
項目を入力ペインから出力ペインの Name
項目までドラッグします。ID
項目と Email
項目についても同様の操作を行います。
結果は次のようになります。実際のコンテンツは、クエリを実行した Salesforce 組織によって異なります。最初の 12 件は組織 A からの取引先責任者で、ID はすべて 0036g000009C
で始まっています。残りは組織 B からの取引先責任者で、ID はすべて 0028t000001J
で始まっています。
Name,ID,Email
Rose Gonzalez,0036g000009C4WwAAK,rose@edge.com
Sean Forbes,0036g000009C4WxAAK,sean@edge.com
Lauren Boyle,0036g000009C4X4AAK,lboyle@uog.com
Babara Levy,0036g000009C4X5AAK,b.levy@expressl.net
Josh Davis,0036g000009C4X6AAK,j.davis@expressl.net
Jane Grey,0036g000009C4X7AAK,jane_gray@uoa.edu
Arthur Song,0036g000009C4X8AAK,asong@uog.com
Ashley James,0036g000009C4X9AAK,ajames@uog.com
Tom Ripley,0036g000009C4XAAA0,tripley@uog.com
Liz D'Cruz,0036g000009C4XBAA0,ldcruz@uog.com
Edna Frank,0036g000009C4XCAA0,efrank@genepoint.com
Avi Green,0036g000009C4XDAA0,agreen@uog.com
Alden Macfarlane,0028t000001J3BAB2,a.macfarlane@trundle.org
Tiffani Davalos,0028t000001J3FAH1,t.davalos@trundle.org
Elly Fenley,0028t000001J7JUp9,efenley@tripple.com
Richie Fore,0028t000001J3HKJ0,rfore@tripple.com
Ricarda Cieslak,0028t000001J3WLl9,rcieslak@tripple.com
Rosaria Jorgensen,0028t000001J3BNM0,rosaria.jorgensen@huttrick.com
Treasa Barbeau,0028t000001J3BNk3,treasa.barbeau@huttrick.com
Dwayne Sgro,0028t000001J3EPO2,dsgro@sgroflo.com
Maude Wilber,0028t000001J4UUy4,mwilber@zhipe.com
Lashell Rouleau,0028t000001J3NIK6,lrouleau@zhipe.com
Agnes Diehm,0028t000001J3TCX8,agnes.diehm@aipail.com
Pamella Fite,0028t000001J1LOQ3,pamella.fite@aipail.com
Kennith June,0028t000001J3POI0,kennith.june@aipail.com
Keiko Woods,0028t000001J3SIL1,k.woods@fiephdom.org
Natashia Horvat,0028t000001J3KSV0,n.horvat@fiephdom.org
Margarita Ptak,0028t000001J3VVe5,ptakm@greelo.com
Delena Hodgdon,0028t000001J3OSQ2,hodgdond@greelo.com
Britt Lafferty,0028t000001J6HUT7,britt.lafferty@redooler.com
Irving Bates,0028t000001J3IUe6,irving.bates@redooler.com
Merle Cater,0028t000001J3PPl0,merle.cater@redooler.com
ルートでメッセージの一部のみを処理したい場合には、メッセージが Scatter-Gather カードまたはルートの先端に達する前に、ルートで処理するデータのみを変数に格納できます。
変数を複数のルートで使用する必要がある場合には、以下の設定が便利です。
この場合は、各ルートの最初のカードが同じメッセージを受け取りますが、Scatter-Gather カードの前に 2 つの変数を作成してある場合には、メッセージには以下の部分が含まれることがあります。
payload attributes vars var1 var2
必要であれば、両方の変数を両方のルートで使用できます。
変数を 1 つのルートのみで使用する必要がある場合には、以下の設定が便利です。
最初のルートの先頭で var1
を作成し、2 番目のルートの先頭で var2
を作成するとします。そして、最初のルートの 2 番目のカードが、以下の部分を持つメッセージを受け取るとします。
payload attributes vars var1
さらに、2 番目のルートの 2 番目のカードが、以下の部分を持つメッセージを受け取るとします。
payload attributes vars var2
上のどちらの図でも、最後のカードが Transform カードであれば、DataWeave でのスクリプト作成が必要となる場合があります。最後のカードが別の Set Variable カードであれば、取引先責任者の集約の例で示したように、Scatter-Gather カードの各ルートからの結果を連結して、別のカード (Transform カードなど) に渡します。
For-Each は、1 つのルートで一度に 1 つの要素を処理しながら、要素のコレクションを反復処理します。
Parallel For-Each は、一度に複数の要素を処理しながら、要素のコレクションを n 回 (n はコレクションの要素数以下の値) 処理します。たとえば、要素数が 10 で最大処理回数が 2 に設定されていれば、Parallel For-Each カードは、一度に 2 つの要素を処理し、合計 5 回の処理を実行します。
Scatter Gather は、ルートと呼ばれる 2 つ以上の並列プロセスを実行します。すべてのルートが終了すると、各ルートからの結果が新しいペイロードにギャザーされます。
並列プロセスの結果が新しいペイロードにギャザーされて次のカードに送信されるまでの最大待ち時間 (ミリ秒)。0 または負の値は、タイムアウトが設定されていないことを意味します。デフォルト値は、64 ビット浮動小数点値の最大値である 9,223,372,036,854,776,000 ミリ秒です。
並列に処理される最大ルート数。デフォルトでは、Scatter-Gather カードのインスタンスで作成したすべてのルートが並列に実行されます。
カードに表示されるデフォルト値は 2,147,483,647 です。デフォルト値がこの値になっている理由については気にする必要はありません。単に、この値を Scatter-Gather カードのスコープに含まれるルート数に設定しないと、スコープ内のルート数が実効値となることだけを理解しておいてください。
この値を 1 に設定すると、Scatter-Gather カードはペイロードの最初の要素を取って、各ルートでセットアップされている条件に対して評価し、条件を満足したルートで要素を送信します。ルートが要素の処理を完了すると、Scatter-Gather カードは次の要素をルート条件に対して評価し、ペイロードのすべての要素が処理されるまで同じ処理を繰り返します。
Scatter-Gather カードを設定する場合は、以下の項目に値を指定することができます (必須ではありません)。
ギャザーされたペイロードを保存するために使用する変数を指定します。デフォルトでは、出力はフローのペイロードに保存されます。
操作の出力値に対して評価する式を指定します。この式の結果は対象変数に保存されます。デフォルトでは、これは操作の出力値と同じです。