Внедрение Association и Navigation в SAP oData сервис

Ассоциирование и Навигация – это два важных свойства, доступных в SAP Netweaver Gateway для связывания двух типов сущностей.
Ассоциация устанавливает отношения между значениями в ключевых полях в обеих структурах типов сущностей. Ассоциация назначает связи между сущностями и может иметь различную множественность (один ко многим, многие ко многим, один к одному).

Навигация создается в основном типе сущности при создании ассоциации. Свойства навигации описывают путь между связанными объектами, предоставляет ссылку от основного объекта к связанным объектам.

Должны быть переопределены методы чтения для GET_ENTITYSET и GET_ENTITY для всех сущностей oData сервиса. Пусть даже с пустой логикой выбора данных.

GET_ENTITYSET и GET_ENTITY

Рассмотрим структуру oData сервиса в нашем примере. Наборы сущностей:
1. GroupSet – группа программ бюджета. Ключевое поле GroupId.
2. ProgramSet – программы бюджета. Ключевые поля GroupId, ProgramId.
3. EventsSet – мероприятия программы бюджета. Ключевые поля GroupId, ProgramId, Funcarea.
Создаем ассоциации – связываем наши внутренние таблицы по ключевым полям:
1. GroupSet <-> ProgramSet: ассоциация один ко многим.
2. ProgramSet <-> EventsSet: ассоциация один ко многим.
Создаем навигации:
1. GroupProgram – навигация к программам бюджета по коду группы программ.

Синтаксис:

 
 
  1. /sap/opu/odata/sap/ZCO_BUDGETFS1_SRV/GroupSet('100')/GroupProgram

2. ProgramEvent – навигация к мероприятиям по коду программы.
Синтаксис:

 
 
  1. /sap/opu/odata/sap/ZCO_BUDGETFS1_SRV/ ProgramSet(GroupId='100',ProgramId='01')/ProgramEvent

В Back-End системе, в транзакции SEGW создадим ассоциацию. При создании ассоциации метод навигации также сгенерируется.

Create Association oData

Правой кнопкой мыши кликаем на Association (1), выбираем пункт Create (2). Заполняем поля в диалоговом окне (3) и нажимаем кнопку Next (4).

Создание Ассосиации

В следующем шаге визарда указываем ключевое поле (1) для связи двух внутренних таблиц. Нажимаем на Next (2).

Create Association Set

В следующем шаге ничего не меняем, нажимаем на Finish.

создали ассоциацию между двумя типами сущеости

Мы создали ассоциацию между двумя типами сущностей и сгенерировали навигацию между внутренними таблицами. Не забудем сгенерировать сервис oData для принятия изменении.
Запустим транзакцию /IWFND/GW_CLIENT в фронтэнд системе. Посмотрим данные для

 
 
  1. /sap/opu/odata/sap/ZCO_BUDGETFS1_SRV/GroupSet('100')

sap gateway client

В ответе сервиса увидим, что появилась навигация. По ссылке GroupSet(‘100’)/GroupProgram вернется внутренняя таблица ProgramSet отфильтрованная по ключу GroupId=’100’.

Навигация oData сервиса

Успешный, пустой ответ сервиса. Остается добавить логику выбора данных в метод PROGRAMSET_GET_ENTITYSET. Например, такой:

 
 
  1. data: ls_key_tab LIKE LINE OF it_key_tab,
  2. lv_fs type SETID.
  3. *Если есть ключи выбора во внутреннюю таблицу, то считываем их для фильтрации данных
  4. read table it_key_tab with key name = 'GroupId' into ls_key_tab.
  5. lv_fs = ls_key_tab-value.
  6. if lv_fs is not initial.
  7. select GroupId ProgramId ProgramName Tval01 Tval02 Tval03 from zfmbl
  8.       into corresponding fields of table et_entityset
  9.       where Groupid = lv_fs.
  10. else.
  11. select GroupId ProgramId ProgramName Tval01 Tval02 Tval03 from zfmbl
  12.       into corresponding fields of table et_entityset.
  13. endif.

Сгенерируем сервис и запустим транзакцию /IWFND/GW_CLIENT в фронтэнд системе. Посмотрим данные для URI в формате json

 
 
  1. /sap/opu/odata/sap/ZCO_BUDGETFS1_SRV/GroupSet('100')/GroupProgram ?$format=json

транзакция /IWFND/GW_CLIENT в фронтэнд системе

Сервис успешно предоставил данные из внутренней таблицы ProgramSet по ключу GroupId = ‘100’.

Возникли проблемы с пониманием OData или SAP Netweaver Gateway? Хотите поделиться любыми вопросами по реальным проектам или решениям? Пожалуйста, не стесняйтесь. Оставьте свои сообщения в разделе комментариев.

Предыдущий шаг: Методы исполнения oData сервиса | Service Implementation CRUD

 

Создание SAP Gateway oData Service (SEGW):

Шаг №1. Определение модели данных. Entity Type. Entity Sets.

Шаг №2. oData: структура типов сущностей на основе ABAP структур (DDIC Structure)

Шаг №3. Внедрение / регистрация сервиса SAP Gateway oData servise ( SEGW)

Шаг №4. Методы исполнения oData сервиса | Service Implementation CRUD

Шаг №5. Внедрение Association и Navigation в SAP oData сервис

3 комментариев для “Внедрение Association и Navigation в SAP oData сервис”

  1. Много текста и картинок – мало информации. Вместо того, чтобы дать объяснения по сути (например, что такое Data provider и Model provider, зачем нужны и чем отличаются; зачем генерируется базовый и класс-наследник) привели пошаговую инструкцию для “обезьянок”, после которой понимания не появляется. Даже в реализации GET методов захардкодили какую-то ерунду, пояснений к параметрам метода не дали. Нужно продолжение!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.