2016-06-24 1 views
2

В представлении мастер-детали у меня есть список рабочих центров как основная часть и календарь планирования как деталь детали.Фильтр в контроллере с свойством расширенного объекта

<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}) 

не работают.

+0

Возможный дубликат [Фильтровать расширенный запрос OData] (https://stackoverflow.com/questions/48115183/filter-expanded-odata-request) – boghyon

ответ

0

Как указано in this answer, вы можете предварять имя свойства навигации для фильтра пути:.

new Filter({ 
    path: "EmployeeWorkCenter/WorkCntr", // "EmployeeWorkCenter" === navigation property from Employee 
    operator: FilterOperator.StartsWith, 
    value1: sWorkCntr 
}); 

(я предполагаю, что решения навигации свойства EmployeeWorkCenter возвращает объект вместо другого коллекции В противном случае, это не будет работать в V2)

 Смежные вопросы

  • Нет связанных вопросов^_^