You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mulesoft中将3个Salesforce查询结果按关联字段合并为一个Payload

Mule AnyPoint Studio Salesforce多表合并方案

场景说明

你通过Scatter Gather组件并行查询得到了三类Salesforce表数据:

  • payload[0]:父表数组,核心匹配字段为ParentId
  • payload[1]:关系表数组,核心匹配字段为ParentId、ChildId
  • payload[2]:子表数组,核心匹配字段为ChildId
    需合并为同层级结构,且支持一个父级对应多个子级的场景。

实现代码(Transform Message组件使用,DataWeave 2.0语法)

%dw 2.0
output application/json
---
// 先构建匹配用的映射表,提高查询效率
var relationByParentId = payload[1] groupBy ((item) -> item.ParentId as String) // 统一转字符串避免类型匹配问题
var childByChildId = payload[2] groupBy ((item) -> item.ChildId as String) mapObject ((value, key) -> (key): value[0]) // 一个ChildId对应一条子表记录

// 遍历父表,关联关系和子表数据
payload[0] flatMap ((parentItem) -> 
    // 取当前父ID对应的所有关系记录
    (relationByParentId[parentItem.ParentId] default []) map ((relationItem) -> 
        // 匹配关系对应的子表记录
        var childItem = childByChildId[relationItem.ChildId as String] default {}
        // 合并三个表的所有字段,同名字段默认后面的覆盖前面的,可按需调整顺序
        parentItem ++ relationItem ++ childItem
    )
)

代码说明

  • 提前将关系表按ParentId分组、子表按ChildId做索引,避免嵌套遍历导致的性能问题,数据量大时也可正常运行
  • 用flatMap处理1父多子的场景,会自动将同一个父级对应的多个子级合并结果展开为平级数组
  • 匹配时增加了default []/default {}的兼容逻辑,无匹配关系/子表数据的父级记录不会报错,可按需调整过滤逻辑
  • 字段合并顺序为父表字段>关系表字段>子表字段,如果有同名字段要保留特定表的内容,调整++前后的顺序即可

示例输出

输入你提供的三条测试数据,运行后得到的结果符合预期:

[
  {
    "ParentId": "0cE3S0000000HVGUA2",
    "Name": "job's Pharmacy",
    "Address": "123 4th Ave",
    "ParentLicense": "PHARM.PF.12345678",
    "ChildId": "0cE3S0000000GscUAE",
    "RelationStatus": "Site Branch",
    "ChildLicense": "PHRM.PF.98765432-MHOUT",
    "ExpirationDate": "2019-02-28",
    "PublicStatusDescription": "Closed"
  }
]

内容的提问来源于stack exchange,提问作者robbins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:24:03