ForEach 聚合

ForEach Aggregation

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

第 1 步:创建名称为 'aggregator' 且值为“#[[]]”的 flowVar。这是在 For-Each 之前初始化的 Step2:处理完成后,在 For-Each Processor 中。我使用以下表达式进行聚合:'#[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"
}
  ]
}]

我想合并单个 "Transactions" 中的数据作为 JSON 输出。我无法做到这一点。

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

MULE_CORRELATION_GROUP_SIZE: 原始消息被拆分成的片段数

MULE_CORRELATION_SEQUENCE: 片段在组中的位置

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

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

详情可参考mule doc

例如:

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

%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"
    }
  ]
}