XMLView 绑定中的动态过滤器

Dynamic Filter in XMLView Binding

在我的应用程序中,我有一个 Microchart,它直接绑定到 XML 视图中的 OData-Entityset。

我现在想将过滤器传递给该请求。但是这个过滤器应该根据用户选择的设置是动态的。

用户选择一个时间范围,然后将此值存储在另一个视图本地 JSON 模型中。

是否可以基于该值构建 OData 绑定过滤器。

这里绑定的过滤器不起作用。

我尝试了各种组合:

<microchart:InteractiveDonutChart id="microDonutChart"
        segments="{path: '/BookingStOverviewSet', 
                   filters : [ 
                       { path : 'Txt04', 
                         operator : 'GE', 
                         value1 : {filterModel>/status} 
                       } 
                   ]
                  }">
    <microchart:segments>
     <microchart:InteractiveDonutChartSegment label="{Txt30}" value="{Count}"/>
    </microchart:segments>
</microchart:InteractiveDonutChart>

控制器中使用过滤器值构建 JSON 模型的逻辑:

onInit: function () {
    var filterModel = new sap.ui.model.json.JSONModel(
             {
               "startOfCal": new Date(),
               "endOfCal": new Date(), 
               "status": '0001'
            });

    this.getView().setModel(filterModel, 'filterModel');
}

遗憾的是,SAPUI5 不支持通过 XML 进行动态过滤,您需要在应用程序的 JS 部分解决这个问题。

解决方法可以这样开发:

var filters = [];
var myFilter= new sap.ui.model.Filter("Txt04", sap.ui.model.FilterOperator.EQ, filterModel.getProperty("/status"));
            filters.push(myFilter);
var microChart = this.getView().byId("microDonutChart") 
microChart.bindSegments({
                path: "/BookingStOverviewSet",
                filters: filters,
                template: microChart.getBindingInfo("items").template
            });