Как использовать свойство навигации? - PullRequest
0 голосов
/ 24 сентября 2018

Служба OData (V2) содержит несколько свойств навигации следующим образом:

ClassNum: "ZPM_TEST_01"
ClassNumDescr: "ZPM_TEST_01"
ClassType: "001"
InternalClass: "0000000130"
ValidFrom: Tue Sep 04 2018 02:00:00 GMT+0200 (Central European Summer Time) {}
ValidUntil: Fri Dec 31 9999 01:00:00 GMT+0100 (Central European Standard Time) {}
to_IClassHeaderVh: {__deferred: {…}}
to_IClassVh: {__deferred: {…}}

Как вы можете видеть выше, to_IClassHeaderVh и to_IClassVh являются свойствами навигации.
Код, который запрашивал службу OData:

oModel.read(sUri, {
  success: function (oData) {
  },
  error: Util.showErrorClassNotFound
});

Как я могу получить URL из свойства навигации через код?Я мог бы получить его через объект следующим образом:

oData.to_IClassVh.__deferred.uri 

Но я не знаю, правильный ли это путь или нет.

1 Ответ

0 голосов
/ 28 сентября 2018

Свойства навигации, как следует из названия, - это свойства, с помощью которых вы можете переходить к связанным типам сущностей ( spec ).Платформа UI5 также поддерживает эту функцию, поэтому разработчикам приложений не нужно извлекать URL-адреса вручную.На самом деле, вам даже не нужно звонить read.Давайте возьмем этот EDM [1] , например:

Клиент
Nav: «Заказы»
1 ___ n Заказ
Nav: «Клиент»

... из этого Служба северного ветра (метаданные)

Переход от одного объекта к коллекции :

<Page binding="{/Customers('ALFKI')}">
  <List items="{Orders}">
    <StandardListItem title="{OrderID}" />
  </List>
</Page>

Переход от один объект к другому один объект :

<Page binding="{/Orders(10643)}">
  <Panel binding="{Customer}" headerText="{ContactName}" />
</Page>

Вот пример использования свойств навигации: https://embed.plnkr.co/F3t6gI8TPUZwCOnA

В вашем случае выиспользуйте to_IClassHeaderVh или to_IClassVh вместо Customer или Orders.UI5 будет отправлять запросы для вас соответственно.Имейте в виду, что только контекстные и агрегатные привязки обрабатывают отправку запросов.Привязка свойства не .

На случай, если вас интересует атрибут binding в XML;это просто один из способов связать одну сущность (контекст) .Если вам нужно динамически указывать ключи сущностей (ID), как это обычно бывает, вместо этого вам придется использовать API bindElement [API] в JS.Я здесь жестко кодирую ключи только для примера.

Кроме того, вы также можете добавить обязательный параметр expand, который ожидает имена (и) свойств навигации.

<Page binding="{
  path: '/Orders(10643)',
  parameters: {
    expand: 'Customer'
  }
}" >
  <!-- ... -->
</Page>

Ответ: https://services.odata.org/V2/Northwind/Northwind.svc/Orders(10643)?$expand=Customer&$format=json

Вот пример использования расширения: https://embed.plnkr.co/wAlrHB


[1]: «Модель данных объекта» - модель E / R, специфичная для OData

...