【问题标题】:Mulesoft combine 3 query results into one payloadMulesoft 将 3 个查询结果合并为一个有效载荷
【发布时间】:2021-11-20 00:24:35
【问题描述】:

我有来自父表、子表和关系表的结果。我需要使用“ParentId”和“ChildId”根据关系表中的值将三个表合并在一起。我尝试在 AnyPoint Studio 中使用 Scatter Gather 并且可以获得每个查询的结果,但是我无法将它们组合回一个有效负载,以便父、关系值和子都在同一行。 父母可以有多个孩子。

有效负载基于来自 Salesforce 表的查询 -

有效载荷对象 0:

Array<object>:
 [
{"ParentId": "0cE3S0000000HVGUA2", 
 "Name": "job's Pharmacy"
 "Address": "123 4th Ave", 
 "ParentLicense": "PHARM.PF.12345678"}
]

有效载荷对象 1:

Array<Object>:
[
{ "ChildId": "0cE3S0000000GscUAE", 
 "ParentId": 0cE3S0000000HVGUA2, 
 "RelationStatus":"Site Branch"}
]

有效载荷对象 2:

Array<Object>:
[
{ "ChildId": "0cE3S0000000GscUAE", 
 "ChildLicense": PHRM.PF.98765432-MHOUT, 
"ExpirationDate": "2019-02-28",
"PublicStatusDescription": "Closed"}
]

预期结果

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

【问题讨论】:

  • 表是否来自应用程序内部的数据库查询?
  • 请编辑问题以添加详细信息。
  • 您将这些对象放在应用程序的什么位置?有效载荷中的某些内容和变量中的其他两个内容?
  • 不太清楚你在问什么。有效负载来自分散收集子流查询,通过带有任意点项目的转换消息。
  • 好的,如果你想要一个字面的答案,一个简单的负载示例会很有用。

标签: transform anypoint-studio mulesoft payload


【解决方案1】:

如果数据来自同一个数据库和同一个应用程序中的 SQL 查询,最好使用 SQL 来获取已经连接的数据。 SQL 会更高效,它基本上就是这样设计的。

如果数据来自不同的来源,例如不同的 REST API,那么您可以使用 DataWeave 来连接数据。

请注意,为简单起见,我使用 JSON 作为输出格式,但如果您打算进行进一步的转换,则应使用 application/java。

这是一个例子。可能这不是最有效的方法:

%dw 2.0
output application/json
import * from dw::core::Arrays
var parents=payload."0"
var childs=payload."2"
var relation=payload."1"
var parentWithChildId=leftJoin(parents, relation, (p) -> p.ParentId, (r) -> r.ParentId)
    map((item, index) -> item.l ++ {ChildId: item.r.ChildId})
var parentWithChildValues=leftJoin(parentWithChildId, childs, (p) -> p.ChildId, (c) -> c.ChildId)
    map((item, index) -> item.l ++ (item.r - "ChildId"))
---
parentWithChildValues

输入:假设输入是 scatter-gather 的输出,我不得不猜测输入应该是什么样子。

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

输出:

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

【讨论】:

  • 数据在 salesforce 中,所以无法像 SQL 中那样合并表
  • 取决于你是否使用 SOQL,你可以做类似的事情,或者你可以使用类似于我提到的方法。
  • 我在问题中添加了上述数据名称的示例,您能否为我提供一个使用这些值的示例,我非常直白。谢谢
猜你喜欢
  • 2014-11-10
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多