2017-02-24 3 views
0

SAP HANA上で実行されるバックエンドは、xsodataサービスを使用してフロントエンド(SAP UI5でコード化)と通信します。次の形式でxsodataサービスデータを出力する:私はトップをフィルタリングするためのパラメータを渡すためにしようとXMLビューでSAP UI5のxsodataによるデータバインディング

"sap.app": { 
    ... 
    "dataSources": { 
    "topmusics": { 
     "uri": "/path/to/odata/music.xsodata/Music_info", 
     "type": "JSON" 
    } 
    } 
}, 
"sap.ui5": { 
    ... 
    "models": { 
    "topmusics": { 
     "dataSource": "topmusics" 
    } 
    } 
} 

:私はモデルにこの情報をロード私のmanifest.jsonファイルで

{ 
    "d": { 
    "results": [ 
     { 
     "__metadata": { 
      "type": "music.Music_infoType", 
      "uri": "***/odata/music.xsodata/Music_info('10020')" 
     }, 
     "ID": "10020", 
     "TITLE": "Music 1" 
     }, 
     { 
     "__metadata": { 
      "type": "music.Music_infoType", 
      "uri": "***/odata/music.xsodata/Music_info('10026')" 
     }, 
    "ID": "10026", 
    "TITLE": "Music 2" 
    } 
} 

5曲を選択し、リストにデータをロードします。しかし、データはファイルの "ルート"から始まらず、 "d/results"(jsonスニペットを参照)で始まるので、次のコードに渡す必要があります。

<List headerText="Top 5 Musics" 
    items="{ 
    path : 'topmusics>/d/results', 
    parameters : { 
     $top : '5' 
    }}" 
    class="sapUiResponsiveMargin"> 
    <CustomListItem type="Navigation" press="onClick"> 
     <Link text="{topmusics>TITLE}" 
      press="onClick" /> 
    </CustomListItem> 
</List> 

しかし、このコードではトップ5だけでなく完全な音楽リストが得られます。/d/resultsを渡さなければならないので、xsodataパラメータ("$top : '5'")は無視されます。私はこれを達成できる方法はありますか?

サイドノードでは、同じモデルを他のxsodataパラメータとともに使用できるようにするため、manifest.jsonファイルに"$top : '5'"パラメータを設定しません。

編集:コントローラーのコード:

onClick: function(oEvent) { 
    var oItem = oEvent.getSource(); 
    var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
    oRouter.navTo("musicDetails", { 
     musicPath: oItem.getBindingContext("topmusics").getPath().substr(11) 
    }); 
} 

答えて

1

結合パラメータで$トップパラメータはUI5によって無視されるようです。また、ドキュメンテーションはそのようなパラメータの存在を特定しない。しかし、バインディング文字列には文書化されていないプロパティ 'length'があるようです。

{ path : '/Collection', length: 5 }

また、ODataサービスを使用しているので、JSONモデルではなくODataモデルを使用するのが理想的です。サービスURLは、EntitySet(/ Music_info)を除く.xsodataパスまででなければなりません。

だからあなたのマニフェストは次のようになります。

"topmusics": { 
    "uri": "/path/to/odata/music.xsodata", 
    "type": "OData" 
} 

そして、あなたのXMLがこの

<List headerText="Top 5 Musics" 
    items="{ 
    path : 'topmusics>/Music_info', 
    length : 5 
    }" 
class="sapUiResponsiveMargin"> 
<CustomListItem type="Navigation" press="onClick"> 
    <Link text="{topmusics>TITLE}" 
      press="onClick" /> 
</CustomListItem> 
</List> 
+0

のように設定されます。私はこれを使用しようとしています。https://openui5.hana.ondemand .com /#docs/guide/54e0ddf695af4a6c978472cecb01c64d.html このようにバインディングを設定すると、コードにあるようにodataパラメータを設定できます。 – fc67

+0

これはODataモデルのV4構文であり、下位のOData V2モデルには適用されません。あなたはあなたの場合に使用しなければなりません。 –

+0

私は、これらのパラメータがURL内を渡されたときに機能することが奇妙であると感じましたが、参照してください。とにかく、私はあなたの提案を適用しましたが、リストの要素をクリックすると別のページへのナビゲーションが実行されているので、モデルをODataに変更すると "undefinedのプロパティ 'indexOf'を読み取れません。 $ orderby、$ expand、$ filterなどのパラメータのオプションがあるのか​​、それともURLでの使用が唯一の方法であるのだろうかと思います。 – fc67

関連する問題