如何在sap.m.SelectDialog中进行oData客户端过滤?

时间:2018-03-02 02:55:38

标签: sapui5

我将sap.m.SelectDialogsap.ui.model.odata.v2.ODataModel一起使用,SelectDialog中的搜索实现遵循the sample

    handleSearch: function(oEvent) {
        var sValue = oEvent.getParameter("value");
        var oFilter = new Filter("Name", sap.ui.model.FilterOperator.Contains, sValue);
        var oBinding = oEvent.getSource().getBinding("items");
        oBinding.filter([oFilter]);
    },

handleSearch将触发EntitySet的substringof方法,但我们的oData服务未实现substringofskiptop

所以我的问题是,因为前端已经获得了整个数据,我可以在客户端进行过滤吗?

我尝试在handleSearch中设置DefaultOperationMode:

this._oModel.sDefaultOperationMode = "Client";

不能正常工作。

还尝试直接在模型中操作数据,但是this._oModel.oData不返回整个数据。但是当我向下滚动时,会添加新项目而不会触发新的GET。对此感到非常困惑。

顺便说一句,如果可以这样做,如何隐藏SelectDialog中的搜索框,似乎没有提供相应的方法。

1 个答案:

答案 0 :(得分:2)

感谢@Medera,找到了一个优雅的方式:

    items="{
        path: '/PackageSet',
        parameters: {operationMode: 'Client'}
    }">

同时将我的问题标记为重复。

@Not Recommended

感谢@Jorg,通过将oData模型更改为JSON模型来修复此问题:

this._oModel.read("/PackageSet", {
    success: this.successGetPackgeCallback.bind(this), 
    error: this.errorCallback.bind(this)
});

successGetPackgeCallback: function(oResult) {
    var oModel = new JSONModel(oResult.results);

    this.selectDialog.setModel(oModel);
},
  

OData模型是服务器端模型,这意味着数据集仅在服务器上可用,客户端只知道当前可见(请求)的数据。排序和过滤等操作在服务器上完成。

     

JSON模型是客户端模型,因此适用于客户端完全可用的小型数据集。