我有一个在SAP HANA上运行的后端,该后端使用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>
但是,使用此代码,我获得了完整的音乐列表,而不仅仅是前五名,这使我相信,由于我必须通过" /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)
});
}
绑定参数中的$ top参数似乎被UI5忽略了。此外,文档并未指定此类参数的存在。但是,似乎有一个无证件的属性'长度',可以在绑定字符串中提供。
{路径:'/collection',长度:5}
同样,由于您使用的是ODATA服务,因此使用ODATA模型而不是JSON模型是理想的选择。服务URL应为.xsodata路径不包括EntitySet(/music_info)。
所以您的清单应该看起来像这样:
"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>