OData Binding将参数扩展为一对多关系

时间:2017-12-19 09:22:58

标签: odata sapui5

在此处阅读有关此问题的多个问题,但这些问题都没有帮助。

我有下表:

<Table id="table"
  width="auto"
  items="{
    path: '/Master',
    sorter: {
      path: 'id',
      descending: false
    },
    parameters: {
      expand: 'ToB'
    }
  }"
>

如何在表格中显示ToB的属性? 由于ToBMaster之间存在一对多关系,因此这不起作用(我猜这就是原因):

    <cells>
      <Text text="{ToB/name1}" />
    </cells>

虽然这有效:

    <cells>
      <VBox items="{ToB}">
        <Text text="{name1}"/>
      </VBox>
    </cells>

ToB有一个属性&#34;已选中&#34;可以是01Master表格中只有一个ID条目可以是1,因此我认为这是一种将1转换为1关系的方式。 但我无法解决,如何做到这一点,已经尝试过表达式绑定:

<Text text="{= ${ToB/selected} === 1 ? ${ToB/name1} : 'No Entry'}"/>

但它始终显示&#34; No Entry&#34;在我的桌子里。

编辑:用于测试目的:

<Text text="{= ${ToB/selected} === 1 ? ${ToB/name1} : ${ToB/name1}}"/>

但它只是让我的表格的列空了,所以我猜测绑定是不正确的。

编辑2:以澄清我的问题,我使用VBox工作,但我希望每行有1个条目,即名称为Peter,Paul和Mary的特定ID,只有彼得有选择&#34;&#34;值1,所以我想在这个表格行中只有Peter。

1 个答案:

答案 0 :(得分:0)

问题

text="{ToB/name1}"不起作用的原因是因为解析路径ToB会返回集合,因为“很多” - 基数不适用于< em>属性绑定。

另一方面,这也意味着它适用于聚合绑定,因为您已经可以使用<VBox items="{ToB}"/>进行观察。

替代

  

我希望每行有1个条目,即特定ID的名称为Peter,Paul和Mary,只有Peter的“已选择”值为1,所以我只希望Peter在此表格行中。

如果您只想在ToB中显示<VBox>中的某个实体,则可以直接在视图中分别定义过滤器。在您的情况下,按"selected" === 1

<Table items="{
  path: '/Master',
  parameters: {
    expand: 'ToB'
  }
}">
  <items>
    <ColumnListItem>
      <VBox items="{
        path: 'ToB',
        filters: [
          {
            path: 'selected',
            operator: 'EQ',
            value1: 1
          }
        ]
      }">
        <Text text="{name1}"/>
      </VBox>
      <!-- ... -->
    </ColumnListItem>
  </items>
  <!-- ... -->
</Table>