Создание oData сервиса. Часть 3. Ассоциации и навигация

В предыдущих частях(раз, два) был создан сервис. При помощи него мы можем получить запись по ключу или набор записей фильтру. В реальной жизни чаще приходится работать с более сложными структурами. Ассоциации - позволяют указать отношения между ключами таблиц. Кардинальность показывает как таблицы относятся одна к другой

Например, то, что касается таблиц SPFLI и SFLIGHT Если у нас есть кодами рейсов и их расписанием. Мы можем по ключу получить или не получить код рейса, и расписание к нему из нескольких записей

Создадим новую ассоциацию

Укажем кардинальность. От этого будут зависеть вызываемые методы класса DPC_EXT

Указываем ключевые поля

После вызова согласно указанной кардинальности "1" для SPFLI и "n" для SPFLIGHT произойдет вызов методов *GET_ENTYTY и *GET_ENTITYSET, соответственно. В ответе получим данные по обоим сущностям.
/sap/opu/odata/sap/ZZ_TEST_SERVICE_SRV/EntitySpfliSet(Mandt='100',Carrid='AA',Connid='0017')?$expand=EntitySflightSet&$format=json
После "expand" указываем имя из Navigation Properties

Чуть чуть изменим код, т.к. в текущем случае мы будем получать на вход ключ, а не фильтр. Запись SPFLI мы берем по ключу, а записи SPFLIGHT зависят от нее по нему же.

Также мы можем получить зависимый объект по навигации. При этом вызова корневой сущности происходить не будет. Только конечная. Разница в синтаксисе в том, что Свойство навигации отделяется "/". Можно задавать целый цепочки таких связей.
Пример вызова:

/sap/opu/odata/sap/ZZ_TEST_SERVICE_SRV/EntitySpfliSet(Mandt='100',Carrid='AA',Connid='0017')/EntitySflightSet&$format=json

Т.е. в данном случае сущность *GET_ENTITY для SPFLI вызвана не будет, только *GET_ENTITYSET для SFLIGHT

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

Ваш адрес email не будет опубликован.