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

MuleSoft DataWeave遍历订单行异常:仅插入一条订单行求助

排查DataWeave遍历XML订单行仅返回一条的问题

我刚看了你的问题和代码,问题出在遍历的节点层级不对,导致只处理了第一个订单行。咱们一步步来理清楚:

问题分析

你的输入XML里,<product-lineitems>是一个包含多个<product-lineitem>的父节点,而你的代码里是对payload.*ns0#order.ns0#"product-lineitems"做map遍历——但这个节点本身只有一个,所以map只会执行一次。然后你在map里取e.ns0#"product-lineitem".ns0#"product-id",当有多个<product-lineitem>时,这个表达式默认只会取第一个节点的值,所以最终只生成了一条订单行记录。

修正后的DataWeave代码

%dw 2.0
output application/java
ns ns0 http://www.demandware.com/xml/impex/order/2006-10-31
---
[
    {
        Order_Confirmation_Number__c: payload.ns0#order.ns0#"order-no", // 原代码里的current-order-no在输入XML里是order-no,这里顺手修正
        "attributes": {
            "type": "PBSI__PBSI_Sales_Order__c",
            "referenceId": "SO"
        },
        "PBSI__Sales_Order_Lines__r": {
            "records": payload.ns0#order.ns0#"product-lineitems".*ns0#"product-lineitem" map((lineItem, index) -> {
                "attributes": {
                    "type": "PBSI__PBSI_Sales_Order_Line__c",
                    "referenceId": "SOL_$(index)" // 给referenceId加索引,避免重复
                },
                "PBSI__Item__c": "a0a1x000001PfWa",
                "PBSI__ItemDescription__c": lineItem.ns0#"product-id"
            })
        }
    }
]

关键修改点

  1. 遍历节点调整:把原来遍历product-lineitems改成直接遍历product-lineitems下的所有product-lineitem节点,用.*ns0#"product-lineitem"来获取这个节点集合,这样每个订单行都会被处理。
  2. referenceId优化:给销售订单行的referenceId加上索引$(index),避免多个行的referenceId重复(这可能会导致后续对接系统的异常)。
  3. 订单编号修正:原代码里的current-order-no在你的输入XML里实际是order-no,这里也一起修正了,避免取值为空。

验证要点

运行修正后的代码后,应该能生成两条PBSI__Sales_Order_Line__c类型的记录,分别对应输入XML里的两个product-lineitem节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:48:13