【问题标题】:Search field: Filtering nested object搜索字段:过滤嵌套对象
【发布时间】:2021-02-21 09:41:13
【问题描述】:

大家好,

我有以下数据结构:

[    {
        "supplierCode": "supplier1",
        "supplierDesc": "supplier1Desc",
        "pos": [ {
                "poNum": "11111",
                "materialNum": "matNum11",
                "materialDesc": "matDesc11"
            },
            {  "poNum": "11112",
                "materialNum": "matNum22",
                "materialDesc": "matDesc22"}            
]  },
    {"supplierCode": "supplier2",
        "supplierDesc": "supplier2Desc",
        "pos": [ {
                "poNum": "22222",
                "materialNum": "matNum11",
                "materialDesc": "matDesc11"},
            {"poNum": "22223",
                "materialNum": "matNum22",
                "materialDesc": "matDesc22"}]
    }
]

我的任务是通过 pos 数组中的属性过滤 JSON 模型中的数据。 我尝试了以下方法:

myList = this.getView().byId("myList");
var binding = myList.getBinding("items");
if (!query) {
binding.filter([]);
} else {
binding.filter([new sap.ui.model.Filter([
   new sap.ui.model.Filter("supplierCode", sap.ui.model.FilterOperator.Contains, query),
   new sap.ui.model.Filter("supplierDesc", sap.ui.model.FilterOperator.Contains, query),
   new sap.ui.model.Filter("pos/materialDesc", sap.ui.model.FilterOperator.Contains, query)
], false)]);
}

没有运气。

另外,我发现可以使用 ODataModel,但我没有找到任何关于 JSONModel 的信息。

这样的过滤可以做吗?

谢谢。

【问题讨论】:

标签: sapui5 filtering jsonmodel


【解决方案1】:

下面是 Filter 的构造函数下的测试函数示例: 过滤结果将返回一行列表,其中包含过滤器中引入的 materialDesc 描述:

onFilterInvoices: function(oEvent) {
            // build filter array
            var aFilter = [];
            var sQuery = oEvent.getParameter("query");
            if (sQuery) {
                aFilter.push(new sap.ui.model.Filter({
                    path: "pos",
                    test: function(oValue) {
                        var oMaterials = oValue;
                        for (var i in oMaterials) {
                            if (oMaterials[i].materialDesc === sQuery) {
                                return true;
                            }
                        }
                        return false;
                    }
                }));
            }

            // filter binding
            var oList = this.getView().byId("listapp");
            var oBinding = oList.getBinding("items");
            oBinding.filter(aFilter);
        }

【讨论】:

  • 此方案适用于过滤外部阵列(供应商)。是否也可以过滤内部数组? (采购订单?)
  • 它是根据我测试过的内部阵列 (Pos) 的 materialDesc 进行过滤的,它对我来说效果很好
猜你喜欢
  • 2017-06-04
  • 2018-01-16
  • 2012-02-24
  • 2018-06-05
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
相关资源
最近更新 更多