我希望我的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的情况下做到这一点的可能性。
答案 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);
},