揭开SAP Fiori编程模型规范里注解的神秘面纱

摘要:
今天是2020年2月1日的鼠年初八,这是杰瑞的鼠年第八篇文章,也是王子熙公众号的207篇原创文章。今天我们将继续研究另一个注释@OData。publish在SAP官方网站上的ABAPProgrammingModelforSAPFiori帮助文档中,ODataAnnotations目录中介绍了此注释:https://help.sap.com/viewer/cc0c305d2fab47bd808adcad3ca7ee9d/1709000/en-US/ccdb054e4ecf4573829d4ba258cafa72.html激活带有此注释的CDSview后,将自动生成OData服务。我创建了一个名为zjerrytest20160311的视图,然后添加了这个注释来激活它。根据我的经验,根据SAP实践,自动生成的OData服务名称也应该包含字符串0311。

今天是2020年2月1日鼠年大年初八,这是Jerry鼠年的第8篇文章,也是汪子熙公众号总共第207篇原创文章。

Jerry的前一篇文章 揭开SAP Fiori编程模型规范里注解的神秘面纱 - @ObjectModel.readOnly工作原理解析,给大家分享了@ObjectModel.readOnly这个注解对应的Fiori UI和ABAP后台的工作原理。

今天我们继续研究另一个注解@OData.publish.

在SAP官网的ABAP Programming Model for SAP Fiori的帮助文档里,在OData Annotations目录下有对这个注解的介绍:

https://help.sap.com/viewer/cc0c305d2fab47bd808adcad3ca7ee9d/1709 000/en-US/ccdb054e4ecf4573829d4ba258cafa72.html

揭开SAP Fiori编程模型规范里注解的神秘面纱第1张

一旦加上了这个注解的CDS view激活时,会自动生成一个OData服务。

揭开SAP Fiori编程模型规范里注解的神秘面纱第2张

这个OData服务是如何自动生成的?这就是本文所要分享的内容。

假设我们对加了这个注解的CDS view激活后自动生成的OData服务的明细一无所知,从何处开始入手进行研究呢?

我创建了一个名为zjerrytest20160311的view,然后加上这个注解,激活。根据我的经验,按照SAP惯例,自动生成的OData服务的名称应该也会包含0311这个字符串。

揭开SAP Fiori编程模型规范里注解的神秘面纱第3张

激活之后,我试着用0311作为关键字在OData服务的注册事务码/IWFND/MAINT_SERVICE里搜索,果然搜到了对应生成的OData服务:

揭开SAP Fiori编程模型规范里注解的神秘面纱第4张

在Jerry之前的文章 ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼 曾经提到ABAP Netweaver的注册表TADIR,按照0311进行查询,发现CDS view激活之后,除了OData服务本身,还自动生成了下列这些对象:

揭开SAP Fiori编程模型规范里注解的神秘面纱第5张

IWMO: SAP Gateway Business Suite Enablement对应的模型
IWSV: SAP Gateway Business Suite Enablement对应的服务
CLAS: OData服务的实现类ZCL_ZJERRYTEST20160311

做个实验,当我把OData.publish的值设置为false,再次激活,发现类型为IWMO和IWSV的对象从注册表TADIR中消失了,这再次印证了二者是注解OData.publish设置为true之后激活CDS view生成的。

揭开SAP Fiori编程模型规范里注解的神秘面纱第6张

那么如何研究CDS view激活时,这两个对象的自动生成逻辑呢?

使用Jerry文章 SAP错误消息调试之七种武器:让所有的错误消息都能被定位 里介绍的第六种武器,离别钩之ST05.

打开ST05跟踪模式,激活CDS view,在数据库跟踪结果里果然发现了将自动生成的对象名称插入到注册表TADIR的OPEN SQL语句。

揭开SAP Fiori编程模型规范里注解的神秘面纱第7张

《神雕侠侣》天竺僧去绝情谷给杨过找情花毒解药时,说过一句话:毒蛇出没之处,七步之内必有解药。

揭开SAP Fiori编程模型规范里注解的神秘面纱第8张

同样,在ABAP里,在插入数据库表的OPEN SQL语句之前,必定有待插入数据的生成逻辑。

点击ST05里蓝色的眼镜图标,自动跳转到OPEN SQL语句里。设置断点,激活CDS view,断点触发:

揭开SAP Fiori编程模型规范里注解的神秘面纱第9张

从当前的调用栈往外追溯,发现在第21个调用栈帧,正是自动生成OData服务的地方:

揭开SAP Fiori编程模型规范里注解的神秘面纱第10张

CL_WB_DDLS_SECOBJ_HNDLR_SINGLE->IF_DDIC_WB_DDLS_SECOBJ_HANDLER~ON_ACTIVATION

这个方法首先根据delta_state判断出需要删除,新增或者更新的对象清单,分别存储在下图12到14行三个输出参数里。

揭开SAP Fiori编程模型规范里注解的神秘面纱第11张

举个例子,当我在一个已经激活过后的CDS view源代码里添加@OData.publish:true的注解,然后激活,此时该注解对于的EDIT_STATE为N(New), 而其他的注解因为没有任何变化,被标记为U(Unchanged).

揭开SAP Fiori编程模型规范里注解的神秘面纱第12张

此处会根据EDIT_STATE的值,进入对应的分支。

揭开SAP Fiori编程模型规范里注解的神秘面纱第13张

EDIT_STATE值为N的分支,则执行OData服务的创建,通过CL_SADL_GTK_ODATA_SERVICE_GEN完成,后缀GEN代表Generation.

揭开SAP Fiori编程模型规范里注解的神秘面纱第14张

从调试器里能看出,名称为ZJERRYTEST20160311的OData服务通过create_via_exposure方法被创建。

完整的调用栈:

揭开SAP Fiori编程模型规范里注解的神秘面纱第15张

本文其实也是另一个具体的例子,在不了解一段逻辑(无论框架层面或者应用层面)的情况下,如何使用ST05这个工具来找到设置断点的代码位置,从而找到问题分析的突破口。

感谢阅读。

更多阅读

要获取更多Jerry的原创文章,请关注公众号"汪子熙":
揭开SAP Fiori编程模型规范里注解的神秘面纱第16张

免责声明:文章转载自《揭开SAP Fiori编程模型规范里注解的神秘面纱》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Winform中实现更改DevExpress的RadioGroup的选项时更改其他控件(TextEdit、ColorPickEdit)的值Linux操作系统的curl命令的基本使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ODATA WEB API(二)----ODATA服务与客户端

一、概述   ODATA不经可以作为WebAPI建立相应的WEBAPI控制器,还可以建立ODataControl控制器,能够通过插件建立第三方ODataClinet类库;调用和使用数据变得简单可行。 二、建立OData Web API 服务端 1、通过NuGet添加第三方Microsoft.AspNet.OData; 2、建立相应的Model:Person...

SAP UB类型的STO能自动创建交货单?

SAP UB类型的STO能自动创建交货单?   SAP系统里,对于Stock Transfer Order这种单据,是支持其outbound delivery自动创建的。 当然这种功能比较少用。项目实践中,业务人员创建好了STO单据后,多会以手工方式执行事务代码VL10B等为STO单据创建一个外向交货单。 本文就是讲解SAP标准系统如何为STO单据自动创建...

SAP 关于贸易伙伴(Trading Partner)区分关联方/非关联方/子公司/第三方

SAP 关于贸易伙伴(Trading Partner) Trading partner(贸易伙伴)即CompanyID(后台定义的公司),用于合并报表抵消,也就是说,通过这个字段来标识公司间的关联交易。可以维护在会计科目、客户主数据、供应商主数据中。如下图: 科目主数据中的“贸易伙伴”字段: 客户主数据中的“贸易伙伴”字段: 供应商主数据中的“贸易伙伴...

ABAP锁、数据库锁

ABAP数据锁定... 338 SM12锁查看与维护... 344 通用加锁与解锁函数... 344 ABAP程序锁定... 345 数据库锁... 347 锁的分类和兼容性... 347 并发性与锁的权衡... 348 数据库的事务隔离级别... 348 在JDBC应用程序中设置隔离级别... 349 在应用程序中采用悲观锁和乐观锁... 349 由数...

ABAP术语-Connection Type

Connection Type 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/17/1042479.html A connection type is a relationship type whose occurrences are visible connections (lines) be...

SAP MRP的计算步骤

      SAP MRP的计算步骤,物料需求计划(简称为MRP)与主生产计划一样属于ERP计划管理体系,它主要解决企业生产中的物料需求与供给之间的关系,即无论是对独立需求的物料,还是相关需求的物料,物料需求计划都要解决“需求什么?现有什么?还缺什么?什么时候需要?”等几个问题。它是一个时段优先计划系统,其主要对象是决定制造与采购的净需求计划。它是由主生...