如何使用Filterbar控件中的多个过滤器输入值过滤odata服务并将过滤的结果集绑定到Table 控制器代码查看控制台日志过滤器片段

问题描述

我需要使用多个过滤器项过滤odata服务并将结果集绑定到表。这整个动作将在单击搜索按钮时发生。下面是我的Onsearch事件代码,该代码无法读取功能,并且不返回结果,也无法将其绑定到表。有人可以请我帮忙吗?

控制器代码

onFinalFilter: function (oEvent) {

debugger; 
var oPlant = this.getView().byId("plant").getValue();

var oName1 = this.getView().byId("name1").getValue();

var oName2 = this.getView().byId("name2").getValue();

var oState = this.getView().byId("State").getValue();

var oCity = this.getView().byId("city").getValue();

var oZip = this.getView().byId("zip").getValue();

var oCompanyCode = this.getView().byId("companyCode").getValue();

var p = new Filter("WERKS",FilterOperator.EQ,oPlant);

var n1 = new Filter("NAME1",oName1);

var n2 = new Filter("NAME2",oName2);

var s = new Filter("STATE",oState);

var c = new Filter("CITY",oCity);

var cc = new Filter("BUKRS",oCompanyCode);

var zip = new Filter("PSTCODE",oZip);

var finalFilter = new Filter({filters:[p,n1,n2,c,s,zip,cc],and:true});

var oModel = new sap.ui.model.odata.v2.ODataModel("/sap/opu/odata/sap/ZSM_PLANTSRCH_SRV/"); sap.ui.getCore().setModel(oModel);

var oModel2 = new sap.ui.model.json.JSONModel();

oModel.read("/PLANTSRCHSet",{

filters: finalFilter,success: function (oData,oResponse)

{ var data = oData; oModel2.setData(data); this.getView().byId("table1").setModel(oModel2,"key2"); },error: function (oError) { //alert("error"); } });

}

查看

view

控制台日志

Console Log:

过滤器片段

Filterbar Fragment

解决方法

1.View.xml

    <fb:FilterGroupItem  name="Name of the Property" label="Company">
                    <fb:control>
                        <Input type="Text"/>
                    </fb:control>               
                </fb:FilterGroupItem>
  • 名称应为oData服务的EntitySet的对应属性
  1. Controller.js-准备过滤器
        _search: function (oEvt) {
            // All your filters of the filterbar
            var aSelectionSet = oEvt.getParameter("selectionSet");
            //Loop through them all
            var aFilters = aSelectionSet.reduce(function (aResult,oControl) {
                //Check via oControl.getValue() || oControl.getSelectedKey() || oControl.getMetadata().getName() what to do
                if (oControl.getValue()) { //sap.m.Input - single filter
                    aResult.push(new Filter({
                        path: oControl.getName(),operator: FilterOperator.EQ,value1: oControl.getValue()
                    }));
                } else if (oControl.getMetadata().getName() === "sap.m.MultiInput") { // sap.m.MultiInput - multiple Filter
                    var aTokens = oControl.getTokens();
                    var aTokenFilter = [];
                    for (var i = 0; i < aTokens.length; i++) {
                        aTokenFilter.push(new Filter({
                            path: oControl.getName(),value1: aTokens[i].getProperty("key")
                        }));
                    }
                    if (aTokenFilter.length > 0) {
                        aResult.push(new Filter({
                            filters: aTokenFilter,and: false
                        }));
                    }
                }
                return aResult;
            },[]);
            if (aFilters.length > 0) {
                this._filterTable(new Filter({
                    filters: aFilters,and: true
                }));
            } else {
                this._filterTable();
            }
        },
  • sap.m.ComboBox 还没有逻辑
  1. Controller.js-过滤器
        _filterTable: function (oFilter) {
        this._oTable.getBinding("items").filter(oFilter);
        }

Example