在上一步中,创建了一个有主从表关系的BOPF,在此使用上一步创建的BOPF,再创建CDS并生成ODATA
1.创建两个有主从关系的CDS
在HANA Studio中创建两个CDS,如下内容。
并同时激活,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
@AbapCatalog.sqlViewName: 'ZUSER_C_USER2V' @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Outbound item' @ObjectModel.semanticKey: ['bname'] @ObjectModel.transactionalProcessingDelegated:true @ObjectModel.createEnabled: true @ObjectModel.deleteEnabled: true @ObjectModel.updateEnabled: true @OData.publish: true define view ZUSER_C_USER2 as select from ZUSER_I_USER2 as user association [0..*] to ZUSER_C_USER_MENU2 as _menu on $projection.bname = _menu.bname { key user.bname, user.name_text, user.zpwod, user.ztel, user.zutyp, user.zstcod, user.menue, user.spld, user.hdest, user.hname, user.langu, user.zlaip, user.crea_date_time, user.crea_uname, user.lchg_date_time, user.lchg_uname, @ObjectModel.association.type: #TO_COMPOSITION_CHILD _menu } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@AbapCatalog.sqlViewName: 'ZUSER_C_UMENU2V' @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Outbound item' @ObjectModel.semanticKey: ['bname'] @ObjectModel.transactionalProcessingDelegated:true @ObjectModel.createEnabled: true @ObjectModel.deleteEnabled: true @ObjectModel.updateEnabled: true @OData.publish: true define view ZUSER_C_USER_MENU2 as select from ZUSER_I_USER_MENU2 as menu association [1..1] to ZUSER_C_USER2 as _user on $projection.bname = _user.bname { key menu.bname, key menu.zstcod, menu.zkcde, menu.zauth, @ObjectModel.association.type: [#TO_COMPOSITION_ROOT,#TO_COMPOSITION_PARENT] _user } |
2.在ODATA中使用
1.当激活时就会生成对应的ODATA了,但此时ODATA is not active,可以使用事务码/IWFND/MAINT_SERVICE激活ODATA服务,但现实中我们不会一个CDS一个ODATA服务,所以我们需要会在统一的ODATA服务中引用此两个ODATA服务。
1.在SAP GUI中使用事务码:SEGW,打开ODATA服务,我使用ZUSER_TEST来测试
2.引入CDS到新的ODATA中。

3.输入主CDS并,选择所有相关的子CDS,结果如图,图中第2步,激活。

4.把生成ODATA服务,此步骤如在之前已生成后可以不在生成。

此时ODATA就创建完成了。
3.测试ODATA
点击上图中的第3步中的SAP Gateway Client,不可打开测试
1.使用GET
/sap/opu/odata/SAP/ZUSER_TEST_SRV/ZUSER_C_USER2?$format=json
可得到当前主表的数据,
2.使用POST ,可创建新的数据
/sap/opu/odata/SAP/ZUSER_TEST_SRV/ZUSER_C_USER2
1 2 3 4 5 6 7 8 9 |
{ "bname" : "BBB", "name_text" : "AAB", "zpwod" : "", "ztel" : "", "zutyp" : "", "zstcod" : "", "menue" : "" } |
3.使用PUT时为修改,相当于在使用MODIFY,把数据修改为传入的数据,没传入的数据就相当于是传入了“”空值。所以使用时要注意,
/sap/opu/odata/SAP/ZUSER_TEST_SRV/ZUSER_C_USER2(‘BBB’)
4.使用PATCH时,只会修改报文中指定了的值,相当于是UPDATA更新报文中的值,所以大部份时候来说,我们可能所需要的更新应该是PATCH,而不是PUT.
/sap/opu/odata/SAP/ZUSER_TEST_SRV/ZUSER_C_USER2(‘BBB’)
5.在使用PUT,PATCH,DELETE时,URI中需要指定修改的主键,当只有一个字段时,可以直接如上连接(‘BBB’),也可以写为(bname=’BBB’)
4.多表关联导航
一下步为多表关联的CDS学习,使用EKKO,EKPO,KONV说明。