Json 在Mule ESB中聚合两个有效负载

Json 在Mule ESB中聚合两个有效负载,json,mule,dataweave,mule-esb,Json,Mule,Dataweave,Mule Esb,我的mule代码击中了两个表并获得了一些细节。 第一个是订单详细信息,我将其存储在一个流变量中,即订单,另一个数据库将返回订单项目详细信息,我将其存储在订单项目变量中 我想基于一个条件聚合两个有效负载。每个orderId都有订单项(存储在flowVars.orderitem中),并将这些订单项映射到各自的orderId flowVars.order值如下所示 [{partnerId=e83185e9f33e4234ba9eaa81dba515ad, orderId=12345, orderDat

我的mule代码击中了两个表并获得了一些细节。 第一个是订单详细信息,我将其存储在一个流变量中,即订单,另一个数据库将返回订单项目详细信息,我将其存储在订单项目变量中

我想基于一个条件聚合两个有效负载。每个orderId都有订单项(存储在flowVars.orderitem中),并将这些订单项映射到各自的orderId

flowVars.order值如下所示

[{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}]
 [{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}]
flowVars.orderitem值如下所示

[{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}]
 [{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}]
预期产量

[
  {
    "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"
        }
    ]
  }
]
在这里,我需要显示订单的各个订单项目详细信息。所以基本上我需要结合两种有效载荷

我尝试使用dataweave,但没有运气

数据编织代码:

%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) 
            }

            )})  
改造后的产量:

{
    "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
      }
    ]
  }
]
正如您所看到的,我几乎就到了,并且能够将订单项目详细信息映射到相应的orderId,但在转换之后,我仍然得到一些空白值


有人能帮我实现预期的产出吗。提前感谢

您需要过滤flowVars.orderitem映射,而不是在orderId匹配时完整地迭代它并仅打印值

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

然后,您也可以删除所有这些“when”语句。

order和orderitem表是否存在于同一个数据库架构中?嗨,克林顿,请您看看,这是一个类似的问题,但我无法解决