Опция $expand: использование вложенных oData запросов в SAPUI5
Опция запроса $expand очень эффективна и позволяет нам предоставлять несколько entity types (cущностей) и / или entity sets (наборов сущностей) в одном вызове oData службы. Параметр $expand позволяет приложению читать связанные объекты с их навигационными свойствами. Это вместо того, чтобы выполнять несколько вызовов впоследствии.
Предварительные подготовки:
- Рабочий oData сервис. Для работы запроса $expand необходимы ассоциации или навигации. Метод get_expanded_entityset переопределять не будем, можно оставить унаследованный метод.
Здесь можно посмотреть все шаги создания oData сервиса SAP. - Созданный SAPUI5 проект.
Для примера будем использовать элемент управления sap.m.List внутри другого sap.m.List в SAPUI5 проекте.
Откроем View в проекте и вставим такой код:
<mvc:View controllerName="odataaaa.controller.View1" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:f="sap.ui.layout.form" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m"> <App> <pages> <Page title="{i18n>title}"> <content> <List items="{path : '/GroupSet' , parameters:{expand : 'GroupProgram'} }"> <items> <CustomListItem> <content> <Title text="Группа программ: {GroupName}"></Title> <List items="{GroupProgram}"> <items> <ObjectListItem title="Программа: {ProgramName}" intro="Стоимость программы:{Tval09}"> </ObjectListItem> </items> </List> </content> </CustomListItem> </items> </List> </content> </Page> </pages> </App> </mvc:View>
Первый <List items=”{path : ‘/GroupSet’ , parameters:{expand : ‘GroupProgram’} }”>
указали элемент (items) GroupSet – набор сущностей (Entity Set) по группам программ нашего oData сервиса. Указали в протоколе oData параметр Expand, который позволяет приложению читать связанные объекты с их навигационными свойствами: навигацию GroupProgram, который связывает наборы сущностей GroupSet и ProgramSet.
Второй <List items=”{GroupProgram}”>
указали навигацию GroupProgram, как привязку (bind) к элементу . Будет выводить все программы, относящиеся одной группе.
Запускаем приложение. И получаем вообще без кодирования (программирования) в контроллере (controller) отличный результат в виде вложенных элементов:
Параметр $expand работает.
Также можно тестировать работу параметра $expand во фронтэнд системе, в Sap Gateway Client (транзакция /IWFND/GW_CLIENT). Запишем в Request URI следующую строку:
/sap/opu/odata/sap/ZCO_BUDGETFS_SRV/GroupSet?$expand=GroupProgram&$format=json
Результат работы:
Вот инетересно, лучше в сдс сделать ассоциацию, и потом в проекте сделать $expand или если одата реализована через SEGW то может в нем создать энтитиСэт, переопределить метод и добавить в нем реализацию?