如何在SAPUI5 OData请求中设置`search` URL参数?

时间:2018-03-22 12:48:53

标签: odata sapui5

我希望我的SAPUI5 ODataModel发送格式为

的OData请求
https://<my-server>/<my-service>/<my-resource>?search='lalaland'

有大量示例如何使用model.filter(new Filter(...));添加过滤器,但这不是我想要的。过滤意味着我用某个比较器直接处理某个属性。搜索意味着我总体上处理资源,让OData服务决定要搜索哪些属性,以及如何进行搜索。

似乎可能的一件事是:

model.bindRows(..., { "customData": {"search": "lalaland"}});

但这也不是我想要的,因为它在创建模型时设置了一次搜索项,但在用户输入时无法在以后更新。

有趣的是,SAPUI5自己的SmartTable实现完全可以实现我想要的那种查询 - 但是没有显示出如何在没有SmartTable的情况下做到这一点的可能性。

3 个答案:

答案 0 :(得分:0)

找到一个解决方案:

oList = this.byId("list"); // or oTable
oBindingInfo = oList.getBindingInfo("items"); // or "rows"
if (!oBindingInfo.parameters) {
  oBindingInfo.parameters = {};
}
if (!oBindingInfo.parameters.custom) {
  oBindingInfo.parameters.custom = {};
}
oBindingInfo.parameters.custom.search = sValue;
oList.bindItems(oBindingInfo);

但是,我并不特别喜欢bindItems部分。看起来有点过分要求它一次又一次地重新绑定整个实体集。所以请保持这个问题,以防有人有更好的想法。

答案 1 :(得分:0)

您可以在bindItems或bindRows上使用,具体取决于控件是什么,如下所示:

oList = this.byId("list"); 
oList.bindItems({path: '/XXXX', parameters : {custom: {'search':'searchstring'}}})

答案 2 :(得分:0)

为什么必须是$ search而不是$ filter?

SAPUI5演示工具包中的OData V4 Tutorial使用

onSearch : function () {
            var oView = this.getView(),
                sValue = oView.byId("searchField").getValue(),
                oFilter = new Filter("LastName", FilterOperator.Contains, sValue);

            oView.byId("peopleList").getBinding("items").filter(oFilter, FilterType.Application);
        },