2017-05-23 18 views
0

私のミュールコードは2つのテーブルをヒットし、いくつかの詳細を取得しています。 最初に注文の詳細がフロー変数に格納されます。つまりの注文と、別のデータベースが、orderitemという変数に格納されている注文明細の詳細を返しています。Mule ESBに2つのペイロードを集約

1つの条件に基づいて両方のペイロードを集計する必要があります。すべてのorderIdにはorderアイテム(flowVars.orderItemに格納されています)があり、これらのorderアイテムをそれぞれのorderIDにマップします。

[{productCode=ELT-LP-ICND1-020067, orderId=12345, quantity=10, id=14}, {productCode=ELT-IP-ICND1-1.0, orderId=12345, quantity=11, id=15}, {productCode=ELT-LP-ICND1-020067, orderId=123456, quantity=12, id=16}, {productCode=ELT-IP-ICND1-1.0, orderId=123456, quantity=13, id=17}, {productCode=ELT-LP-ICND1-020067, orderId=11111, quantity=14, id=18}, {productCode=ELT-IP-ICND1-1.0, orderId=11111, quantity=15, id=19}, {productCode=ELT-LP-ICND2-020067, orderId=321123, quantity=5, id=20}] 

予想される出力以下の通りです

[{partnerId=e83185e9f33e4234ba9eaa81dba515ad, orderId=12345, orderDate=2017-02-28 16:41:41.0, id=22}, {partnerId=e83185e9f33e4234ba9eaa81dba515ad, orderId=123456, orderDate=2017-02-28 16:41:41.0, id=23}, {partnerId=e83185e9f33e4234ba9eaa81dba515ad, orderId=11111, orderDate=2017-02-28 16:41:41.0, id=24}, {partnerId=e83185e9f33e4234ba9eaa81dba515ad, orderId=321123, orderDate=2017-05-19 15:25:41.0, id=26}] 

flowVars.orderitem値以下のよう

flowVars.order値がある。ここ

[ 
    { 
    "orderId": "12345", 
    "orderDate": "2017-02-28T16:41:41", 
    "partnerId": "e83185e9f33e4234ba9eaa81dba515ad", 
    "orderItems": [ 
     { 
      "productCode": "ELT-LP-ICND1-020067", 
      "quantity": "10" 
     }, 
     { 
      "productCode": "ELT-IP-ICND1-1.0", 
      "quantity": "11" 
     } 
    ] 
    }, 
    { 
    "orderId": "123456", 
    "orderDate": "2017-02-28T16:41:41", 
    "partnerId": "e83185e9f33e4234ba9eaa81dba515ad", 
    "orderItems": [ 
     { 
      "productCode": "ELT-LP-ICND1-020067", 
      "quantity": "12" 
     }, 
     { 
      "productCode": "ELT-IP-ICND1-1.0", 
      "quantity": "13" 
     } 
    ] 
    }, 
    { 
    "orderId": "11111", 
    "orderDate": "2017-02-28T16:41:41", 
    "partnerId": "e83185e9f33e4234ba9eaa81dba515ad", 
    "orderItems": [ 
     { 
      "productCode": "ELT-LP-ICND1-020067", 
      "quantity": "14" 
     }, 
     { 
      "productCode": "ELT-IP-ICND1-1.0", 
      "quantity": "15" 
     } 
    ] 
    }, 
    { 
    "orderId": "321123", 
    "orderDate": "2017-05-19T15:25:41", 
    "partnerId": "e83185e9f33e4234ba9eaa81dba515ad", 
    "orderItems": [ 
     { 
      "productCode": "ELT-LP-ICND1-020067", 
      "quantity": "5" 
     } 
    ] 
    } 
] 

私がする必要が翔注文の各注文項目の詳細。だから基本的に私は両方のペイロードを結合する必要があります。

私はデータウェイを使用しようとしましたが、運はありませんでした。変換後の

%dw 1.0 
%output application/json 
%var mergeddata = flowVars.orderitem groupBy $.orderId 
--- 
flowVars.order map ((data,index) -> 
    { 
    orderid: data.orderId, 
    partnerid: data.partnerId, 
    orderdate: data.orderDate, 
    order: flowVars.orderitem default [] map ((data1 ,indexOf) -> 
      { 
      (productcode: data1.productCode) when (data1.orderId == data.orderId),  
      (quantity: data1.quantity) when (data1.orderId == data.orderId) , 
      (id: data1.id) when (data1.orderId == data.orderId) 
      } 

      )}) 

そして出力:

Dataweaveコード

{ 
    "orderid": "12345", 
    "partnerid": "e83185e9f33e4234ba9eaa81dba515ad", 
    "orderdate": "2017-02-28T16:41:41", 
    "order": [ 
     { 
     "productcode": "ELT-LP-ICND1-020067", 
     "quantity": 10, 
     "id": 14 
     }, 
     { 
     "productcode": "ELT-IP-ICND1-1.0", 
     "quantity": 11, 
     "id": 15 
     }, 
     { 

     }, 
     { 

     }, 
     { 

     }, 
     { 

     }, 
     { 

     } 
    ] 
    }, 
    { 
    "orderid": "123456", 
    "partnerid": "e83185e9f33e4234ba9eaa81dba515ad", 
    "orderdate": "2017-02-28T16:41:41", 
    "order": [ 
     { 

     }, 
     { 

     }, 
     { 
     "productcode": "ELT-LP-ICND1-020067", 
     "quantity": 12, 
     "id": 16 
     }, 
     { 
     "productcode": "ELT-IP-ICND1-1.0", 
     "quantity": 13, 
     "id": 17 
     }, 
     { 

     }, 
     { 

     }, 
     { 

     } 
    ] 
    }, 
    { 
    "orderid": "11111", 
    "partnerid": "e83185e9f33e4234ba9eaa81dba515ad", 
    "orderdate": "2017-02-28T16:41:41", 
    "order": [ 
     { 

     }, 
     { 

     }, 
     { 

     }, 
     { 

     }, 
     { 
     "productcode": "ELT-LP-ICND1-020067", 
     "quantity": 14, 
     "id": 18 
     }, 
     { 
     "productcode": "ELT-IP-ICND1-1.0", 
     "quantity": 15, 
     "id": 19 
     }, 
     { 

     } 
    ] 
    }, 
    { 
    "orderid": "321123", 
    "partnerid": "e83185e9f33e4234ba9eaa81dba515ad", 
    "orderdate": "2017-05-19T15:25:41", 
    "order": [ 
     { 

     }, 
     { 

     }, 
     { 

     }, 
     { 

     }, 
     { 

     }, 
     { 

     }, 
     { 
     "productcode": "ELT-LP-ICND2-020067", 
     "quantity": 5, 
     "id": 20 
     } 
    ] 
    } 
] 

あなたは、私はほとんどそこにそれぞれの注文IDとオーダーアイテムの詳細をマッピングすることができますが、まだ私だということを見ることができるように変換後に空白の値を取得しています。

誰も私が期待する出力を達成するのを助けることができます。前もって感謝します!!!

+0

** ** order **と** orderitem **テーブルは同じデータベーススキーマに存在しますか? –

答えて

0

flowVars.orderitemマップを完全に反復するのではなく、orderIdが一致したときにのみ値を出力するのではなく、フィルタリングする必要があります。

order: ((flowVars.orderitem default []) filter (data.orderId == $.orderId)) map ((data1 ,indexOf) -> { 
      productcode: data1.productCode,  
      quantity: data1.quantity 
      id: data1.id 
    }) 

「when」ステートメントもすべて削除できます。

関連する問題