UI5-技术篇-Implementing Expand Entity/Entity Set
转载:https://blogs.sap.com/2014/07/18/implementing-expand-entityentity-set/
Requirement
Considering a basic scenario where i am using BAPI_PO_GETDETAIL which has multiple output tables and input is PO number

Now we shall start with SAP Gateway
Create Project in SEGW
Create three entity types and Entity Sets
Entity Type-1- Header
Entity Type-2- Item
Entity Type-3- Schedule

Entity Set-1- HeaderSet
Entity Set-2- ItemSet
Entity Set-3- ScheduleSet

Create Association
Association-1 – AssItem (Without key fields mapping)
Association-2 – AssSchedule (Without key fields mapping)

Create Navigation
Navigation-1 – NavItem
Navigation-2 – NavSchedule

Let’s generate runtime artifacts. Click on generate runtime objects button. It will display
popup . Keep the default class names as-is and click on enter button.
Once generation is successful, you will get 4 classes. 2 for Data provider and 2 for Model provider.

we have to Redefine the method/IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITYSET

Code Snippet
METHOD /iwbep/if_mgw_appl_srv_runtime~get_expanded_entityset.
*————————————————————————-*
* Deep Structure
*————————————————————————-*
DATA: BEGIN OF ls_order_items.
INCLUDE TYPE zcl_zproj_982_mpc=>ts_header.
DATA: navitem TYPE STANDARD TABLE OF zcl_zproj_982_mpc=>ts_item WITH DEFAULTKEY.
DATA: navschedule TYPE STANDARD TABLE OF zcl_zproj_982_mpc=>ts_schedule WITHDEFAULT KEY,
END OF ls_order_items,
ls_item1 TYPE zcl_zproj_982_mpc=>ts_item,
ls_schedle1 TYPE zcl_zproj_982_mpc=>ts_schedule.
*————————————————————————-*
* Data Declarations
*————————————————————————-*
DATA : ls_item TYPE zcl_zproj_982_mpc_ext=>ts_item,
lt_item TYPE TABLE OF zcl_zproj_982_mpc_ext=>ts_item,
ls_sch TYPE zcl_zproj_982_mpc_ext=>ts_schedule,
lt_sch TYPE TABLE OF zcl_zproj_982_mpc_ext=>ts_schedule,
ls_header TYPE zcl_zproj_982_mpc_ext=>ty_header,
lthead TYPE STANDARD TABLE OF bapiekkol,
lshead TYPE bapiekkol,
lsitem TYPE bapiekpo,
ltitem TYPE STANDARD TABLE OF bapiekpo,
lv_filter_str TYPE string,
lt_filter_select_options TYPE /iwbep/t_mgw_select_option,
ls_filter TYPE /iwbep/s_mgw_select_option,
ls_filter_range TYPE /iwbep/s_cod_select_option,
ls_expanded_clause1 LIKE LINE OF et_expanded_tech_clauses,
ls_expanded_clause2 LIKE LINE OF et_expanded_tech_clauses,
lv_ebeln TYPE ebeln,
lt_order_items LIKE TABLE OF ls_order_items,
ltsch TYPE STANDARD TABLE OF bapieket,
lssch TYPE bapieket.
*————————————————————————-*
* Entity Set – HeaderSet
*————————————————————————-*
CASE iv_entity_set_name.
WHEN ‘HeaderSet’.
LOOP AT it_filter_select_options INTO ls_filter.
LOOP AT ls_filter–select_options INTO ls_filter_range.
TRANSLATE ls_filter–property TO UPPER CASE.
CASE ls_filter–property.
WHEN ‘PONUMBER’.
lv_ebeln = ls_filter_range–low.
WHEN OTHERS.
” Log message in the application log
me->/iwbep/if_sb_dpc_comm_services~log_message(
EXPORTING
iv_msg_type = ‘E’
iv_msg_id = ‘/IWBEP/MC_SB_DPC_ADM’
iv_msg_number = 020
iv_msg_v1 = ls_filter–property ).
” Raise Exception
RAISE EXCEPTION TYPE /iwbep/cx_mgw_tech_exception
EXPORTING
textid = /iwbep/cx_mgw_tech_exception=>internal_error.
ENDCASE.
ENDLOOP.
ENDLOOP.
*————————————————————————-*
* Call Method-BAPI_PO_GETDETAIL
*————————————————————————-*
CALL FUNCTION ‘BAPI_PO_GETDETAIL’
EXPORTING
purchaseorder = lv_ebeln
items = ‘X’
schedules = ‘X’
IMPORTING
po_header = lshead
* PO_ADDRESS =
TABLES
* PO_HEADER_TEXTS =
po_items = ltitem
po_item_schedules = ltsch.
*————————————————————————-*
* Fill Header Values to Deep Structure
*————————————————————————-*
ls_order_items–ponumber = lshead–po_number.
ls_order_items–ccode = lshead–co_code.
ls_order_items–doctype = lshead–doc_type.
*————————————————————————-*
* Fill Item values to Deep Structure
*————————————————————————-*
LOOP AT ltitem INTO lsitem.
CLEAR ls_item1.
ls_item1–ponumber = lsitem–po_number.
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’
EXPORTING
input = ls_item1–ponumber
IMPORTING
output = ls_item1–ponumber.
ls_item1–poitem = lsitem–po_item.
ls_item1–material = lsitem–material.
APPEND ls_item1 TO ls_order_items–navitem.
ENDLOOP.
*————————————————————————-*
* Fill Schedule values to Deep Strcture
*————————————————————————-*
LOOP AT ltsch INTO lssch.
CLEAR ls_item1.
* ls_item1-ponumber = lsitem-po_number.
ls_schedle1–poitem = lssch–po_item.
ls_schedle1–serial = lssch–serial_no.
APPEND ls_schedle1 TO ls_order_items–navschedule.
ENDLOOP.
*————————————————————————-*
* Assign the Navigation Proprties name to Expanded Tech clauses
*————————————————————————-*
ls_expanded_clause1 = ‘NAVITEM’.
ls_expanded_clause2 = ‘NAVSCHEDULE’.
APPEND ls_expanded_clause1 TO et_expanded_tech_clauses.
APPEND ls_expanded_clause2 TO et_expanded_tech_clauses.
*————————————————————————-*
* Append Deep Strcture Values to Final Internal Table
*————————————————————————-*
APPEND ls_order_items TO lt_order_items.
*————————————————————————-*
* Send back Response to Consumer
*————————————————————————-*
copy_data_to_ref(
EXPORTING
is_data = lt_order_items
CHANGING
cr_data = er_entityset ).
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
Coding Part Done….Lets move to Testing
Test Case 1:
URI : /sap/opu/odata/sap/ZPROJ_982_SRV/HeaderSet?$filter=PoNumber eq ‘4500000163’&$expand=NavItem

Test Case 2:
URI : /sap/opu/odata/sap/ZPROJ_982_SRV/HeaderSet?$filter=PoNumber eq ‘4500000163’&$expand=NavItem,NavSchedule

For Expand Entity :-
From the modelling point of view there wont be any changes
but in DPC we need to Redefine the method /iwbep/if_mgw_appl_srv_runtime~get_expanded_entity.
Also there would be a small change in Code , Like Below
*————————————————————————-*
* Deep Structure
*————————————————————————-*
DATA: BEGIN OF ls_order_items.
INCLUDE TYPE zcl_zproj_982_mpc=>ts_header.
DATA: navitem TYPE STANDARD TABLE OF zcl_zproj_982_mpc=>ts_item WITH DEFAULTKEY.
DATA: navschedule TYPE STANDARD TABLE OF zcl_zproj_982_mpc=>ts_schedule WITHDEFAULT KEY,
END OF ls_order_items,
ls_item1 TYPE zcl_zproj_982_mpc=>ts_item,
ls_schedle1 TYPE zcl_zproj_982_mpc=>ts_schedule.
copy_data_to_ref(
EXPORTING
is_data = ls_order_items
CHANGING
cr_data = er_entity ).
Hope this Blog now helps you to implement Expand Entity/Entityset
Waiting for your feed back and suggestions and more questions
UI5-技术篇-Implementing Expand Entity/Entity Set的更多相关文章
- Entity Framework 与 面向对象
说要分享,我了个*,写了一半放草稿箱了两个星期都快发霉了,趁着周末写完发出来吧. 文章分为五部分: 基础.类讲述的是用到的一些EF与面向对象的基础: 业务是讲怎么划分设计业务: 设计模式和工作模式讲述 ...
- ABP源码分析十四:Entity的设计
IEntity<TPrimaryKey>: 封装了PrimaryKey:Id,这是一个泛型类型 IEntity: 封装了PrimaryKey:Id,这是一个int类型 Entity< ...
- Cesium原理篇:7最长的一帧之Entity(上)
之前的最长的一帧系列,我们主要集中在地形和影像服务方面.简单说,之前我们都集中在地球是怎么造出来的,从这一系列开始,我们的目光从GLOBE上解放出来,看看球面上的地物是如何渲染的.本篇也是先开一个头, ...
- EF架构~linq to entity的随机排序问题
回到目录 对于从linq to sql迁移过来的开发者,对随机排序不会感到陌生,直接为datacontext添加一个方法再配合反射就可以实现随机排序了,代码如下: /// <summary> ...
- Entity Framework 实体框架的形成之旅--数据传输模型DTO和实体模型Entity的分离与联合
在使用Entity Framework 实体框架的时候,我们大多数时候操作的都是实体模型Entity,这个和数据库操作上下文结合,可以利用LINQ等各种方便手段,实现起来非常方便,一切看起来很美好.但 ...
- 基于DDD的.NET开发框架 - ABP的Entity设计思想
返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
- cocos2d-x开发: 场景实体(entity)管理
公司现在开新项目,主题的框架部分都是我自己在做,不用受到别人的牵制,所以还算是比较的自由,很好发挥. 游戏并不大,所以需要用到的地方并不多.今天花了一些时间写了场景entity管理的部分代码,还没有完 ...
- 【转】What is an entity system framework for game development?
What is an entity system framework for game development? Posted on 19 January 2012 Last week I relea ...
- Entity Framework 6新特性:全局性地自定义Code First约定
2012年12月11日,Entity Framework已经发布了Entity Framework 6 Alpha2,因项目需要,目前已使用了其中的两个特性,今天就来介绍一下第一个特性:全局性地自定义 ...
随机推荐
- JSOUP 爬虫
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.mavne 依赖: <!--html 解析 : jsoup HTML parser library @ ...
- 报错:Error starting Jetty. JSON Metrics may not be available.java.net.BindException:地址已在使用
报错背景: 刚在CDH中集成Flume插件,启动报错 报错现象: Error starting Jetty. JSON Metrics may not be available. java.net.B ...
- 怎么改变wampserver默认的网站目录
现在大家基本上开发php的有很大一部分都在用Wampserver,今天来讲讲怎么更改默认的www目录, 需要修改的文件有三个 apache2的配置文件 httpd.conf 和 Wampserver的 ...
- v-for key的作用
v-for中的key来给每个节点做一个唯一的标识,diff算法就可以正确的识别此节点,找到正确的位置区插入新的节点:key的主要作用是为了高效的更新虚拟dom,另外vue在使用相同标签名元素的过渡切换 ...
- python的网络工具scapy
文档 https://scapy.readthedocs.io/en/latest/api/scapy.sendrecv.html 阅读文档 https://blog.csdn.net/Al_xin/ ...
- 使用 LVS 实现负载均衡原理及安装配置详解(课堂随笔)
一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(r ...
- clang, gcc, gdb
Clang 比 GCC 编译器的优势: 1 编译速度更快 2 编译产出更小 3 出错提示更友好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 " 认为 " 正确 ...
- PHP与Memcached服务器交互的分布式实现源码分析
转自: http://blog.csdn.net/hguisu/article/details/7353595 前段时间,因为一个项目的关系,研究了php通过调用memcache和memcached ...
- 030 Android 第三方开源下拉框:NiceSpinner的使用+自定义Button样式+shape绘制控件背景图+图片选择器(selector)
1.NiceSpinner下拉框控件介绍 Android原生的下拉框Spinner基本上可以满足Android开发对于下拉选项的设计需求,但现在越来越流行的下拉框不满足于Android原生提供的下拉框 ...
- 【转帖】DevOps和SRE的区别
DevOps和SRE的区别 https://zhuanlan.zhihu.com/p/87598465 DevOps 和 SRE 最近有一位朋友和我聊职业发展方向问题,聊了不少 DevOps 和 SR ...