如何在SAP Gateway中实现CREATE_DEEP_ENTITY

标签:
create_deep_entity |
分类: SAP_Gateway |
标题中出现的CREATE_DEEP_ENTITY指XXX_DPC_EXT类中的继承方法名称,这个方法的主要用途是针对非扁平数据结构,即纵深数据结构进行数据的创建,修改,删除等。例如,对采购订单(PO)的抬头数据和行项目数据同时做创建,更新或者删除操作,此场景下,就需要对CREATE_DEEP_ENTITY方法进行重定义以实现对纵深结构数据的创建。
1.前提条件
1.1 能偶使用SEGW创建实体类型;
1.2 能够注册服务;
1.3 编写JavaScript代码调用后端发布的OData服务;
1.4 阅读历史文章;
a) 如何在SAP Gateway中通过导入DDIC结构创建简单实体类型【Entity Type】
b) 如何在SAP Gateway中注册OData服务
c) 如何在SAP Gateway中创建关联实体类型【Association Entity Type】
2. SE11创建如下抬头和行项目参考结构
2.1 Header结构
http://s1/mw690/0034z1Idzy7gi63uY7Kd0&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
2.2 Items结构
http://s7/mw690/0034z1Idzy7gi65eG6ac6&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
3. 使用SEGW创建实体类型Header,Item,HeaderToItems并生成运行对象
3.1 Header
http://s11/mw690/0034z1Idzy7gi66i80qca&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
3.2 Items
http://s9/mw690/0034z1Idzy7gi6blgJaf8&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
3.3 关联实体类型HeaderToItems
http://s10/mw690/0034z1Idzy7gi6ciWuZ59&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
http://s15/mw690/0034z1Idzy7gi6debJc3e&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
3.4 生成运行对象
http://s13/mw690/0034z1Idzy7gi6e3vFW2c&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
4. 注册OData服务
http://s5/mw690/0034z1Idzy7gi6fBQ8s64&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
5. 对XXX_MPC_EXT类做如下修改
5.1 创建纵深结构复杂类型
http://s7/mw690/0034z1Idzy7gi6gOTkif6&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
5.2 纵深结构中定义的Item名称必须与ItemsSet完全相同,即上图中itemsset必须与下图标记中的实体集合名称完全一样,ABAP代码中不区分大小写。
http://s5/mw690/0034z1Idzy7gi6ih9Mo34&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
5.3 重定义XXX_MPC_EXT~DEFINE方法,编写如下ABAP代码为Header实体类型设置之前新定义的纵深结构。
http://s16/mw690/0034z1Idzy7gi6kGGvBff&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
6. 对XXX_DPC_EXT类做如下修改
6.1 重定义XXX_DPC_EXT~CREATE_DEEP_ENTITY方法
a) 获得前段传输到后端的数据;
b) 进行数据处理【创建,修改或者删除】;
c) 将处理完的数据返回前端;
ABAP源码
METHOD
/iwbep/if_mgw_appl_srv_runtime~create_deep_entity.
*Data-action
here****************
*Data-action here****************
7. 编写前端JavaScript代码调用CREATE_DEEP_ENTITY
假设我们传入的纵深数据为
{
Id:"10001",
ItemsSet:[{Id:"10001",ItemNo:"10"},
}
即抬头数据Id=10001,当前此单号包含两个行项目“10”,“20”.
http://s2/mw690/0034z1Idzy7gi6rFYWt41&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
而ODataModel.create方法的第一个参数"/HeaderSet"为SEGW中我们创建的Header实体集合名称,请见下图
http://s2/mw690/0034z1Idzy7gi6t2tsBe1&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
8.在后端CREATE_DEEP_ENTITY设置外部断点.调试界面如下
http://s3/mw690/0034z1Idzy7gi6uZqca12&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
获得前端传递数据-抬头数据10001
http://s1/mw690/0034z1Idzy7gi6wMAFOf0&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
行项目数据{10001,10},{10001,20}
http://s6/mw690/0034z1Idzy7gi6yxAihd5&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
9.在前端设置断点,观察后端返回的数据
在后端的处理数据部分,我仅仅是简简单单的将每个行项目的行项目数值+10,所以我们预期得到的后端返回行项目数据为{10001,20},{10001,30}
http://s4/mw690/0034z1Idzy7gi6BqcaT13&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
oData为前端Create方法用以接收后端返回的数据内容
http://s13/mw690/0034z1Idzy7gi6CZMjWcc&690Gateway中实现CREATE_DEEP_ENTITY" TITLE="如何在SAP
由上图可以看出,行项目数据已经被分别更新为{10001,20}和{10001,30}.
本人所使用的SAPUI5开发IDE为SAP Web IDE个人版,以前也使用过Eclipse和HANA Studio作为SAPUI5的开发工具。至于使用哪种IDE开发SAPUI5程序,就个人使用习惯而定。后续会更新关于如何使用安装并使用SAP Web IDE开发SAPUI5应用的文章。