2016-06-24 4 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サービスは

EmployeeSet?$expand=EmployeeWorkCenter($filter={any filter}) 

のような2.クエリが動作しないバージョンです。

+0

[Filter expanded OData request]の可能な複製(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で動作しません)

関連する問題