2017-06-11 8 views
0

私の会社のSAPUI5アプリケーションを開発していますが、XMLベースのビューでOData(ナビゲーション付き)を使用することに問題があります。それについていくつかの記事がありましたが、私はそれを展開プロパティで動作させることができません。 (私はのJsベースのビューでそれをしようとした場合、それが動作)SAPUI5 XMLビューとVizFrameのOData(ナビゲーション付き)グラフナビゲーション

のmetadata.xml

<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx"> 
 
    <edmx:DataServices m:DataServiceVersion="1.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
 

 
    <Schema Namespace="TEST_SRV" xmlns="http://schemas.microsoft.com/ado/2008/09/edm"> 
 

 

 
     <EntityType Name="ISSUE_B"> 
 
     <Key> 
 
      <PropertyRef Name="B" /> 
 

 
     </Key> 
 
     <Property Name="B" Type="Edm.String" Nullable="false" MaxLength="40" FixedLength="false" Unicode="true" /> 
 
     <Property Name="NbI" Type="Edm.Int32" Nullable="false" /> 
 
     <Property Name="K1" Type="Edm.String" Nullable="false" MaxLength="40" FixedLength="false" Unicode="true" /> 
 
     <Property Name="I1" Type="Edm.Int32" Nullable="false" /> 
 
     <Property Name="K2" Type="Edm.String" Nullable="false" MaxLength="40" FixedLength="false" Unicode="true" /> 
 
     <Property Name="I2" Type="Edm.Int32" Nullable="false" /> 
 

 

 
     <NavigationProperty Name="B2AB_NAV" Relationship="TEST_SRV.B2AB_ASS" FromRole="FromRole_B2AB_ASS" ToRole="ToRole_B2AB_ASS" /> 
 

 
     </EntityType> 
 

 
     <EntityType Name="ISSUE_AB"> 
 
     <Key> 
 
      <PropertyRef Name="CId" /> 
 
      <PropertyRef Name="B" /> 
 
     </Key> 
 
     <Property Name="B" Type="Edm.String" Nullable="false" MaxLength="40" FixedLength="false" Unicode="true" /> 
 
     <Property Name="CId" Type="Edm.String" Nullable="false" Unicode="true" /> 
 
     <Property Name="Open" Type="Edm.Int32" Nullable="false" Unicode="true" /> 
 
     <Property Name="Closed" Type="Edm.Int32" Nullable="false" Unicode="true" /> 
 

 
     </EntityType> 
 

 
     <Association Name="B2AB_ASS"> 
 
     <End Type="TEST_SRV.ISSUE_B" Multiplicity="0..1" Role="FromRole_B2AB_ASS" /> 
 
     <End Type="TEST_SRV.ISSUE_AB" Multiplicity="*" Role="ToRole_B2AB_ASS" /> 
 
     <ReferentialConstraint> 
 
      <Principal Role="FromRole_B2AB_ASS"> 
 
      <PropertyRef Name="B" /> 
 
      </Principal> 
 
      <Dependent Role="ToRole_B2AB_ASS"> 
 
      <PropertyRef Name="B" /> 
 
      </Dependent> 
 
     </ReferentialConstraint> 
 
     </Association> 
 
    </Schema> 
 
    <Schema Namespace="ODataWebV2.My.Model" xmlns="http://schemas.microsoft.com/ado/2008/09/edm"> 
 
     <EntityContainer Name="TEST_SRV_Entities" m:IsDefaultEntityContainer="true" p6:LazyLoadingEnabled="true" xmlns:p6="http://schemas.microsoft.com/ado/2009/02/edm/annotation"> 
 

 

 
     <EntitySet Name="ISSUE_BSet" EntityType="TEST_SRV.ISSUE_B" /> 
 
     <EntitySet Name="ISSUE_ABSet" EntityType="TEST_SRV.ISSUE_AB" /> 
 

 
     <AssociationSet Name="B2AB_ASSSet" Association="TEST_SRV.B2AB_ASS"> 
 
      <End EntitySet="ISSUE_BSet" Role="FromRole_B2AB_ASS" /> 
 
      <End EntitySet="ISSUE_ABSet" Role="ToRole_B2AB_ASS" /> 
 
     </AssociationSet> 
 
     </EntityContainer> 
 
    </Schema> 
 
    </edmx:DataServices> 
 
</edmx:Edmx>

ビュー( 'マイデータ' はマニフェストで定義されている私のODataのモデルである)

<core:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" xmlns:semantic="sap.m.semantic" xmlns:footerbar="sap.ushell.ui.footerbar" xmlns:viz="sap.viz.ui5.controls" xmlns:viz.data="sap.viz.ui5.data" xmlns:viz.feeds="sap.viz.ui5.controls.common.feeds" 
 
    xmlns:suite="sap.suite.ui.commons" controllerName="test.controller.DetailView" xmlns:html="http://www.w3.org/1999/xhtml" height="100%"> 
 

 
    <Page id="detail1" title="{i18n>detailTitle}" showFooter="true" enableScrolling="false" showNavButton="true" navButtonPress="onNavBack"> 
 
    <content> 
 

 
     <ObjectHeader title="{myData>B}" number="{myData>NbI}" numberUnit="{i18n>numberUnit}" /> 
 

 

 
     <suite:ChartContainer id="idChartContainer" showFullScreen="true" showPersonalization="false" autoAdjustHeight="false" showLegend="true"> 
 

 
     <suite:toolbar> 
 
      <OverflowToolbar id="appToolbar"> 
 
      <suite:ChartContainerToolbarPlaceholder/> 
 
      </OverflowToolbar> 
 
     </suite:toolbar> 
 
     <suite:content> 
 
      <suite:ChartContainerContent icon="sap-icon://bar-chart" title="Column Chart"> 
 
      <suite:content> 
 
       <viz:VizFrame uiConfig="{applicationSet:'fiori'}" id="oVizFrame1" vizType="column" width="100%" selectData="onClickVizFrame"> 
 
       <viz:dataset> 
 
        <viz.data:FlattenedDataset data="{ 
 
       path:'myData>/ISSUE_BSet', 
 
       parameters: {expand: 'B2AB_NAV'} 
 
       }"> 
 
        <viz.data:dimensions> 
 
         <viz.data:DimensionDefinition name="Customer" value="{myData>B2AB_NAV/CId}" /> 
 
        </viz.data:dimensions> 
 
        <viz.data:measures> 
 
         <viz.data:MeasureDefinition name="Closed" value="{myData>B2AB_NAV/Closed}" /> 
 
         <viz.data:MeasureDefinition name="Open" value="{myData>B2AB_NAV/Open}" /> 
 
        </viz.data:measures> 
 
        </viz.data:FlattenedDataset> 
 
       </viz:dataset> 
 
       <viz:feeds> 
 
        <viz.feeds:FeedItem uid="valueAxis" type="Measure" values="Open" /> 
 
        <viz.feeds:FeedItem uid="valueAxis" type="Measure" values="Closed" /> 
 
        <viz.feeds:FeedItem uid="categoryAxis" type="Dimension" values="Customer" /> 
 
       </viz:feeds> 
 
       </viz:VizFrame> 
 

 
      </suite:content> 
 
      </suite:ChartContainerContent> 
 
     </suite:content> 
 
     </suite:ChartContainer> 
 

 
    </content> 
 
    <footer> 
 
     <Toolbar> 
 
     <content> 
 
      <ToolbarSpacer> 
 
      </ToolbarSpacer> 
 
      <Button id="__button1" icon="sap-icon://action" press="handlePopoverShare" /> 
 
     </content> 
 
     </Toolbar> 
 
    </footer> 
 

 
    </Page> 
 
</core:View>

コントローラ

sap.ui.define([ 
 
     "test/controller/BaseController", 
 
     "sap/ui/model/json/JSONModel", 
 
     "sap/ui/model/Filter", 
 
     "sap/ui/model/FilterOperator" 
 
    ], function(BaseController, JSONModel, Filter, FilterOperator) { 
 
     "use strict"; 
 

 
     return BaseController.extend("test.controller.DetailView", { 
 

 

 

 
      onInit: function() { 
 

 
      var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
 

 
      oRouter.getRoute("select").attachMatched(this._onRouteMatched, this); 
 

 
      }, 
 

 

 
      _onRouteMatched: function(oEvent) { 
 

 
      var oArgs = oEvent.getParameter("arguments"); 
 
      var oView = this.getView(); 
 
      var oChart = oView.byId("oVizFrame2"); 
 

 
      oChart.bindElement({ 
 
       path: "/" + oArgs.domain, 
 
       model: "myData", 
 
       expand: "B2AB_NAV" 
 
      }); 
 

 

 
      oView.bindElement({ 
 
       path: "/" + oArgs.domain, 
 
       model: "myData", 
 
       events: { 
 
       change: this._onBindingChange.bind(this), 
 
       dataRequested: function(oEvent) { 
 
        oView.setBusy(true); 
 
       }, 
 
       dataReceived: function(oEvent) { 
 
        oView.setBusy(false); 
 
       } 
 

 
       } 
 
      }); 
 

 

 

 
      }, 
 
      _onBindingChange: function(oEvent) { 
 

 
      // No data for the binding 
 
      if (!this.getView().getBindingContext("myData")) { 
 
       this.getRouter().getTargets().display("notFound"); 
 
      } 
 
      }, 
 

 

 

 
      onClickVizFrame: function(oEvent) { 
 

 

 
      var oItem = oEvent.getSource(); 
 

 
      // Get data \t 
 
      var clickedCol = oEvent.getSource().vizSelection()[0].data["_context_row_number"] 
 
      var oChart = this.getView().byId("oVizFrame1"); 
 
      var aContexts = oChart.getDataset().getBinding("data").getContexts(); 
 
      var sPath = aContexts[clickedCol].getPath().substr(1); //selected binding context 
 

 
      // Clear VizFrame Selection 
 
      var action = { 
 
       clearSelection: true 
 
      }; 
 
      oItem.vizSelection("", action); 
 

 
      var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
 
      oRouter.navTo("detail", { 
 
       data: sPath 
 
      }); 
 

 
      }, 
 
      onNavBack: function() { 
 
      var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
 
      oRouter.navTo("initial", true); 
 
      } 
 
     } 
 
     });

さらに私はVizFrameチャートを用いて詳細にナビゲートしたいと思いますが、私はBindingContextをパスを取得しようとするとクリックしたときに、それが唯一せずに私のナビゲーション・パスを提供します前のパス。助けを事前に

感謝:)

EDIT:あなたが最初のグラフが動作しない2ページ目(XML)が、第2に移動したときに

Working plunker example

を見ることができるように1(js)はそうです。 BindingContextが変更されているため、3番目のページへの移動は機能しません。私はあなたが直面する問題を固定し、ここで変更plunkerへのリンクになってきました

+0

私が見られるように、あなたはチュートリアルに精通していると仮定し、[ここ](https://sapui5.hana.ondemand.com/#docs/guide/44062441f3bd4c67a4f665ae362d1109.html) とは[こちら](HTTPS: //sapui5.hana.ondemand.com/explored.html#/sample/sap.m.tutorial.walkthrough.26/preview)? コンソールにエラーメッセージが表示されますか? plunkr(plnkr.co)のようなツールにサンプルを投稿して、デバッグを簡単にすることができれば助かります。 –

+0

はい私はウォークスルーチュートリアル全体を完了しました。私は "偽の" ODataサービスを使ってモックサーバーを作成しましたが、ナビゲーションは機能していないようです。 ViewをJSファイルとして実装すると、それも機能し、OData Navigationを使用しますが、XMLではexpandプロパティでは機能しません。私はいくつかの例では、plunkrの例を投稿します。返信ありがとう –

+0

例を追加しました:) –

答えて

0

:ここ

は(私はここでそれを残す「bindObject」メソッド呼び出しの一例である、becasue stackoverflowのは、することはできません。私にはかなり奇妙である、コーディングなしplnkrするリンクを投稿

oView.bindObject({ 
    path: "/" + oArgs.data, 
    model: "myData", 
    parameters: { 
     $expand: "B2AB_NAV" 
    } 
    }); 

https://plnkr.co/edit/hTSvXk1811MKdUxqfQJn

を一言で言えば:。

  1. 「拡張」パラメータは、ビュー内
  2. 結合経路結合要素(オブジェクト)に間違った方法で設定された
  3. 間違った経路を詳細&詳細2ためdefenitionたがされていない、同じパターンを有していました正しい、それがデフォルトでインスタンス化されたものが、(自分のmanifest.jsonをコンフィグに基づいて)複数のODataModel年代を作成する必要はありません

私はリファクタリングをしませんでした強大十分であるが、そこでありますこのコーディングを向上させる研磨用の部屋&言った、もう一度歩行のドキュメントを参照してください、様々なバインディングの種類の良い例があります..幸運:)

+0

ありがとうございました!私はそれがそれほど単純なものだとは信じられません。私は盲目だったと思う...:D –

関連する問題