【问题标题】:How to Check null condition in Data weaver : Mule如何在 Data weaver 中检查 null 条件:Mule
【发布时间】:2015-12-03 12:59:46
【问题描述】:

这是我的 xml,首先我需要检查 'RecordsEntries' 不应为 'null',然后 RecordEntry 不应为 null 后跟映射代码

<?xml version="1.0" encoding="UTF-8"?>
<Records>
  <storenumber />
  <calculated>false</calculated>
  <subTotal>12</subTotal>
 <RecordsEntries>
   <RecordEntry>
     <deliverycharge>30.0</deliverycharge>
     <entryNumber>8</entryNumber>
     <Value>true</Value>
  </RecordEntry>
  <RecordEntry>
    <deliverycharge>20.0</deliverycharge>
    <entryNumber>7</entryNumber>
    <Value>false</Value>
  </RecordEntry>
</RecordsEntries>
 <RecordsEntries>
    <RecordEntry>
      <deliverycharge>30.0</deliverycharge>
      <entryNumber>8</entryNumber>
      <Value>false</Value>
    </RecordEntry>
 </RecordsEntries>
</Records>

尝试了多个场景,也使用了when 条件检查,但某处缺少括号或格式正确

    orders: {
    order: {
  StoreID: payload.Records.storenumber,
  Total: payload.Records.calculated,
 (( payload.Records.RecordsEntries.*RecordEntry ) map {
    IndividualEntry: {
    Number:$.entryNumber,
    DeliverCharge:$.deliverycharge
    }
  } when ( payload.Records.RecordsEntries != null and payload.Records.RecordsEntries.*RecordEntry !=null))}
}

出现错误,例如缺少 )。通过直接检查第一个循环内的空条件来尝试其他方法,得到错误,如“无法将数组强制转换为布尔值”。请建议。谢谢。

【问题讨论】:

    标签: mule mule-studio mule-component mule-el


    【解决方案1】:

    如果您想根据 null 或 blank 跳过 dataweave 中的特定字段分配,可以使用下面提到的脚本。

    payload map ((payload01 , indexOfPayload01) -> { Name: payload01.Name, (LastName: payload01.LastName) when payload01.LastName !=null and payload01.LastName !='' })

    这将跳过 Name 的字段映射,如果 name 字段在传入有效负载中为 null 或空白。

    【讨论】:

    • 没有其他的时候不能使用
    • 在上述语法中,当输入端的值为 null 时,我会跳过 lastname 的字段分配。在这种情况下,可以在没有其他情况下使用。这个我用过很多次了。
    【解决方案2】:

    你可以这样做

    %dw 1.0
    %output application/xml
    ---
    orders: {
      order: {
      StoreID: payload.Records.storenumber,
      Total: payload.calculated,
     ((payload.Records.*RecordsEntries.*RecordEntry default []) map {
          IndividualEntry: {
            Number:$.entryNumber,
            DeliverCharge:$.deliverycharge
          }
        })
      }
    }
    

    DataWeave 对于像payload.Records.*RecordsEntries.*RecordEntry 这样的查询值是“null-safe”的,但在尝试使用 null 操作时会抛出错误(例如 null map {})。

    default 运算符将其左侧的值(如果是 null)替换为右侧的值。

    您还缺少*。每当您想要匹配所有重复元素时,您都需要在 xml 中使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 2014-09-12
      • 2020-08-29
      相关资源
      最近更新 更多