SCP,CDS视图中的ABAP,在服务绑定中生成导航属性/关联

2020-08-24 21:08发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)您好社区,您好专家。 我正...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好社区,您好专家。

我正在遵循ABAP RESTful编程模型来在两个实体之间创建简单的关系。

我正在使用以下文档( https://help .sap.com/viewer/923180ddb98240829d935862025004d6/Cloud/en-US/ffef7e02127e442793f24e3dc902c824.html ),位于"开发">"托管交易方案"下。

在以前的技术中,这可以通过@ObjectModel批注在SAP Gateway的SEGW或Premise的ABAP CDS内实现。 在SCP的ABAP中,我创建了两个CDS视图,类似于在Premise上进行的操作,但是现在在父CDS视图中使用了 Composition ,在子级中使用了 Association To Parent CDS视图。 在服务定义和服务绑定时,我没有看到生成的关联(to_Child),这对于我们拥有的UX需求是必需的。

我将附上审核步骤:

父表:

 @ EndUserText.label:" SDR条目"
 @ AbapCatalog.enhancementCategory:#NOT_EXTENSIBLE
 @ AbapCatalog.tableCategory:#透明
 @ AbapCatalog.deliveryClass:#A
 @ AbapCatalog.dataMaintenance:#LIMITED
 定义表zsdr_entry {
   关键客户端:abap.clnt不为null;
   RiceFW关键字:zricefw不为null;
   exttype:abap.char(10)不为null;
 }
 

子表:

 @ EndUserText.label:" SDR环境"
 @ AbapCatalog.enhancementCategory:#NOT_EXTENSIBLE
 @ AbapCatalog.tableCategory:#透明
 @ AbapCatalog.deliveryClass:#A
 @ AbapCatalog.dataMaintenance:#LIMITED
 定义表zsdr_env {
   关键客户端:abap.clnt不为null;
   @ AbapCatalog.foreignKey.screenCheck:否
   关键ricefw:zricefw不为空
     使用外键[0 .. *,1] zsdr_entry
       其中ricefw = zsdr_env.ricefw;
   键值:abap.char(3)不为null;
   环境:abap.char(20);
 }
 
 zricefw预定义类型CHAR LENGTH 11 

父界面CDS视图

 @ AbapCatalog.sqlViewName:'ZSDRIENTRY'
 @ AbapCatalog.compiler.compareFilter:是
 @ AbapCatalog.preserveKey:是
 @ AccessControl.authorizationCheck:#NOT_REQUIRED
 @ EndUserText.label:" SDR条目的接口"
 定义根视图ZSDR_I_ENTRY
   从zsdr_entry中选择
     ZSDR_I_ENV的组成[0 .. *]作为_Environment {
       关键Ricefw,
       exttype,
     /*关联*/
       _环境
 }
 

子界面CDS视图

 @ AbapCatalog.sqlViewName:'ZSDRIENV'
 @ AbapCatalog.compiler.compareFilter:是
 @ AbapCatalog.preserveKey:是
 @ AccessControl.authorizationCheck:#NOT_REQUIRED
 @ EndUserText.label:" SDR环境接口"
 定义视图ZSDR_I_ENV
   从zsdr_env中选择
     在$ projection.ricefw = _Entry.ricefw上作为_Entry与父ZSDR_I_ENTRY关联
       关键Ricefw,
       关键证据
       环境
     /*关联*/
       _条目
 }
 

父母消费CDS视图

 @ EndUserText.label:" SDR条目的消耗"
 @ AccessControl.authorizationCheck:#NOT_REQUIRED
 定义根视图实体ZSDR_C_ENTRY
   作为ZSDR_I_ENTRY {
     键Ricefw为RicefwId,
     exttype作为ExtType,
   /*关联*/
     _环境
 }
 

儿童消费CDS视图

 @ EndUserText.label:" SDR环境的消耗"
 @ AccessControl.authorizationCheck:#NOT_REQUIRED
 定义视图实体ZSDR_C_ENV
   作为ZSDR_I_ENV {
     键Ricefw为RicefwId,
     键为EnvId,
     作为环境
   /*关联*/
     _条目
 }
 

服务定义:

 @ EndUserText.label:"服务定义PoC"
 定义服务ZSDR_POC {
   将ZSDR_C_ENTRY公开为条目;
   将ZSDR_C_ENV暴露为环境;
 }
 

服务绑定:

服务元数据中的实体:为简洁起见,删除了一些信息。

 
   
     
       <键>
         
       
       
       <属性名称=" ExtType"类型=" Edm.String" MaxLength =" 10"/>
     
     
       <键>
         
         
       
       
       
       
     
     
       
       
     
     
     
   
 
 

如果需要进一步澄清,请提出问题。

请注意,目前没有语法错误,所有对象均已激活。 尚未开始的部分是行为定义/实现。

感谢您的协助! 谢谢您的时间。

(14.9 kB)
4条回答
粗暴的香蕉
2020-08-24 21:41

更新到相关的上一篇文章:

我为父母(消费和界面)创建了行为定义,并为服务添加了注释。 遗憾的是,我仍然无法访问OData v2 UI服务中的"关联/导航"属性。

父母行为定义(界面)

托管; //在zbp_sdr_i_entry类中的实现是唯一的;
 定义ZSDR_I_ENTRY的行为//别名
 永久表ZSDR_ENTRY
 锁大师
//授权主控(实例)
//标记主
 {
   创造;
   更新
   删除;
   关联_Environment {创建;  }
 }
 定义ZSDR_I_ENV的行为//别名
 持久表ZSDR_ENV
 依赖于锁(ricefw = ricefw)
//取决于授权( = )
//标记主
 {
   更新
   删除;
 }
 

父母行为定义(消费)

投影;
 定义ZSDR_C_ENTRY的行为//别名
 {
   使用创建;
   使用更新;
   使用删除
   使用关联_Environment {创建;  }
 } 

一周热门 更多>