В представлении мастер-детали у меня есть список рабочих центров как основная часть и календарь планирования как деталь детали.Фильтр в контроллере с свойством расширенного объекта
<mvc:View controllerName="sap.ui.demo.wt.controller.Overview"
xmlns="sap.m"
xmlns:mvc="sap.ui.core.mvc"
xmlns:semantic="sap.m.semantic"
xmlns:unified="sap.ui.unified"
xmlns:core="sap.ui.core" displayBlock="true"
>
<Page title="{i18n>overviewPageTitle}">
<SplitContainer>
<masterPages>
<semantic:MasterPage title="{i18n>overviewMasterTitle}">
<List items="{data>/WorkCenterSet}">
<ObjectListItem
title="{data>WorkCntr}"
type="Active"
press="onWorkCtrPressed"
/>
</List>
</semantic:MasterPage>
</masterPages>
<detailPages>
<semantic:DetailPage title="{i18n>overviewDetailTitle}">
<VBox>
<PlanningCalendar id="PC"
startDate="{/StartDate}"
rows="{
path : 'data>/EmployeeSet',
parameters : {
expand : 'OrderOperation, EmployeeWorkCenter'
}
}"
>
<rows>
<PlanningCalendarRow
title="{data>UserFullname}"
appointments="{
templateShareable : true,
path : 'data>OrderOperation'
}"
>
<appointments>
<unified:CalendarAppointment
startDate="{data>EarlSchedStartdate}"
endDate="{data>EarlSchedFindate}"
title="{data>Description}"
/>
</appointments>
</PlanningCalendarRow>
</rows>
</PlanningCalendar>
</VBox>
</semantic:DetailPage>
</detailPages>
</SplitContainer>
</Page>
</mvc:View>
Я хочу отфильтровать календарь планирования в соответствии с рабочим центром, к которому принадлежит сотрудник.
Вот контроллер:
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
"sap/ui/model/odata/v2/ODataModel",
"sap/ui/model/Filter",
"sap/ui/model/FilterOperator"
], function(Controller,JSONModel,ODataModel,Filter,FilterOperator) {
"use strict";
return Controller.extend("sap.ui.demo.wt.controller.Overview", {
onInit: function(){
this.getView().setModel(new JSONModel({
"StartDate" : new Date("2016-06-12T08:00:00Z")
}));
},
onWorkCtrPressed: function(oEvent) {
var oContext = oEvent.getSource().getBindingContext("data");
var sWorkCntr = oContext.getPath().split("'")[1]; //get the work center's name
//What I tried first
//var aFilter = [];
//aFilter.push(new Filter("WorkCntr",FilterOperator.StartsWith,sWorkCntr))
//this.getView().byId("PC").getBinding("rows").filter(aFilter);
sap.m.MessageToast.show("Selected Work Center : " + sWorkCntr);
}
});
});
То, что я пытался первым не работает из-за внешний вид запроса для свойства "WorkCntr"
в сущности набор "EmployeeSet"
. Но это свойство существует только в объекте "EmployeeWorkCenterSet"
, который я расширил в представлении. Проблема в том, что я даже не знаю, что мне нужно использовать ... Не могли бы вы помочь?
PS: Моя служба OData в версии 2. Запросы, как
EmployeeSet?$expand=EmployeeWorkCenter($filter={any filter})
не работают.
Возможный дубликат [Фильтровать расширенный запрос OData] (https://stackoverflow.com/questions/48115183/filter-expanded-odata-request) – boghyon