在嵌套列表中应用dataweave过滤器选项或条件检查 - Mule

时间:2016-05-24 14:16:02

标签: filter mule dataweave

我有一个类似结构的对象。我需要在开始日期和结束日期过滤ProductInfo个对象,即使任何一个修订日期都在该区间内,也可以选择它。我有用户输入,开始日期和结束日期作为哈希

{
productInfo : [
{
Id: XXX,
Revisions:[
{
startDate : yyyy
endDate : zzz
}
{
 startDate : yyyy
endDate : zzz
}
]
and more productInfo objects.....
]}

映射流变量。

我无法分享我的配置。任何人都可以帮助我使用上述方案的dataWeave语法。

由于

1 个答案:

答案 0 :(得分:0)

为此,我们可以在Header中声明函数并从DataWeave体中引用它。在这里,我使用以下JSON输入:

{
  "productInfo": [
    {
      "Id": "1",
      "Revisions": [
        {
          "startDate": "20160101",
          "endDate": "20160131"
        },
        {
          "startDate": "20160201",
          "endDate": "20160229"
        }
      ]
    },
    {
      "Id": "2",
      "Revisions": [
        {
          "startDate": "20160301",
          "endDate": "20160330"
        },
        {
          "startDate": "20160401",
          "endDate": "20160430"
        }
      ]
    }
  ]
}

使用此脚本测试它:

%dw 1.0
%output application/json
%var filterStartDate = "20160101" //flowVars.inputDate["startDate"]
%var filterEndDate = "20160130" //flowVars.inputDate["endDate"]
%function evaluateRevisions(revisions) (
    (revisions map {
        evaluated: ($.startDate <= filterStartDate) and ($.endDate >= filterEndDate)
    })
)
---
payload.productInfo map using (productInfo = $) {
    filteredProduct: productInfo,
    found: evaluateRevisions($.Revisions).evaluated contains true
} filter $.found

我可以根据输入日期(startDate和endDate)得到productInfo:

[
  {
    "filteredProduct": {
      "Id": "1",
      "Revisions": [
        {
          "startDate": "20160101",
          "endDate": "20160131"
        },
        {
          "startDate": "20160201",
          "endDate": "20160229"
        }
      ]
    },
    "found": true
  }
]