每次汇总

时间:2018-07-26 08:32:38

标签: foreach mule mule-esb

我正在使用每个处理器。作为此过程的一部分,我需要汇总每次迭代的响应。为此,我使用以下表达式:

第1步:创建一个名称为“ aggregator”,值为值“#[[]]”的flowVar。在For-Each之前初始化 第2步:处理完成后,在每个处理器中。我使用以下表达式进行汇总:'#[flowVars.aggregation.add(message.payload)]'。

我在每次迭代中获得的有效载荷是

[{
"Transactions": [
  {
    "Id": "",
    "CompanyId": "123",
    "ContractId": "777"
  },
  {
    "Id": "",
    "CompanyId": "123",
    "ContractId": "777"
  }
]

聚合的结果是:

[{  
"Transactions": [
{
  "Id": "",
  "CompanyId": "123",
  "ContractId": "777"
},
{
  "Id": "",
  "CompanyId": "123",
  "ContractId": "777"
}
]
}, {
"Transactions": [
{
  "Id": "",
  "CompanyId": "555",
  "ContractId": "2345"
},
{
  "Id": "",
  "CompanyId": "7777",
  "ContractId": "2389"
}
  ]
}]

我想将数据合并为一个“事务”作为JSON输出。我无法实现这一目标。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用拆分器聚合器。拆分器拆分消息时,它将三个新的出站变量添加到每个输出片段中。聚合器随后使用这三个变量来重组消息:

MULE_CORRELATION_GROUP_SIZE:原始邮件被分割成的片段数

MULE_CORRELATION_SEQUENCE:片段在组中的位置

MULE_CORRELATION_ID:整个组的单个ID(同一原始消息的所有输出片段共享相同的值)。

当聚合器收到单个片段时,它知道将其放入哪个组以及该组应该有多大。一旦所有片段都到达,它将作为单个消息传递完整的组。'

可以参考mule doc了解详情。

例如: enter image description here

答案 1 :(得分:0)

使用当前方法,您可以在聚合后添加以下数据编织:

%dw 1.0
%output application/json
---
{
    Transactions: flatten payload.Transactions
}

如果此转换的输入是您在问题中描述的聚合的输出,则输出为:

{
  "Transactions": [
    {
      "Id": "",
      "CompanyId": "123",
      "ContractId": "777"
    },
    {
      "Id": "",
      "CompanyId": "123",
      "ContractId": "777"
    },
    {
      "Id": "",
      "CompanyId": "555",
      "ContractId": "2345"
    },
    {
      "Id": "",
      "CompanyId": "7777",
      "ContractId": "2389"
    }
  ]
}