2017-02-24 98 views
0

我有一個在SAP HANA上運行的後端,它使用xsodata服務與前端(使用SAP UI5編碼)進行通信。在下面的格式xsodata勞務輸出數據:與SAP UI5上的xsodata進行數據綁定

{ 
    "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" 
    } 
} 

在我manifest.json文件這個信息我加載到一個模型:

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

在XML視圖我試圖傳遞一個參數來篩選頂部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'")將被忽略。有什麼辦法可以做到這一點?

在一個側面節點,我不設置上manifest.json文件"$top : '5'"參數,因爲我也希望能夠使用與其他xsodata參數相同的模型。

編輯:控制器的代碼:在綁定參數

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被忽略。另外該文件沒有指定這種參數的實際情況。然而似乎有一個無證材料'長度',它可以在綁定字符串中提供。

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

此外,由於您使用OData服務,這是理想的使用OData的模型,而不是JSON模式。服務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時,出現「無法讀取屬性'indexOf'未定義」的錯誤。我想知道是否有參數的選項,如$ orderby,$ expand或$ filter,或者如果在URL中使用它們是唯一的方法。 – fc67