与SAP UI5上的Xsodata结合数据



我有一个在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>

最新更新