揭开SAP Fiori编程模型规范里注解的神秘面纱 - @OData.publish

今天是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%20000/en-US/ccdb054e4ecf4573829d4ba258cafa72.html

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

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

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

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

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

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

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生成的。

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

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

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

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

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

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

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

CL_WB_DDLS_SECOBJ_HNDLR_SINGLE->IF_DDIC_WB_DDLS_SECOBJ_HANDLER~ON_ACTIVATION

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

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

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

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

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

完整的调用栈:

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

感谢阅读。

更多阅读

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

原文地址:https://www.cnblogs.com/sap-jerry/p/12251415.html

时间: 2024-08-25 12:55:12

揭开SAP Fiori编程模型规范里注解的神秘面纱 - @OData.publish的相关文章

Fiori编程模型规范里注解 - @ObjectModel.readOnly工作原理解析

今天是农历鼠年大年初五,本文是鼠年第5篇文章,也是汪子熙公众号第204篇原创文章. 最近大家真是谈蝙蝠色变呀! SAP官网的ABAP Programming Model for Fiori帮助文档里,定义了很多注解(Annotation): https://help.sap.com/viewer/cc0c305d2fab47bd808adcad3ca7ee9d/1709%20000/en-US/896496ecfe4f4f8b857c6d93d4489841.html 对于这些注解,我们可以从其

揭开智能配置上网(微信Airkiss)的神秘面纱

本文介绍微信利用Airkiss技术对wifi设备进行智能配置上网的场景,并分析其实现的原理.这里再次说明,Airkiss只是用于配置上网,其跟微信硬件平台的通信流程和接入协议规范完全没有关系.一个wifi设备并不一定要通过Airkiss技术来配置上网,它也可以利用传统的方法来配置,也可以利用其它厂商的智能配置技术来完成配置.所有的wifi智能配置上网技术的原理基本上都是一致的,其开山鼻祖应该是TIsmartConfig. 目前几乎所有的主流wifi厂商都提供了Airkiss的接口库,但并没有说明

一步步把SAP GUI的事务码配置到SAP Fiori Launchpad里

今天是2020年1月31日鼠年大年初七,这是Jerry鼠年的第7篇文章,也是汪子熙公众号总共第206篇原创文章. Jerry之前的文章 为什么SAP GUI里的传统事务码能通过Fiori Launchpad启动 介绍了SAP GUI的事务码能够运行在SAP Fiori Launchpad里的原理,今天我们就来实际动手做一做,将SE80配置到SAP Fiori里并在浏览器里使用它. Jerry上高中时,正是暴雪公司发布即时战略神作<星际争霸>的时候,当时课堂上,下课后,教室里,操场上,同学们几乎

SAP Fiori和UI5的初学者导航

你是UI5和Fiori的新手?来对地方了. 对我来说,今年是不得不“跟上时代”去提升自己ABAP世界以外的技术技能的困难的一年.幸运的是,有很多可免费获得的信息和课程可以帮你实现这个跳跃.不要等着别人送你去训练——自己花时间提高技能! (译者注:原作者使用了大量的“great”作为形容词,我根据情景翻译为“好”.“优秀”.“很好”等,尽管如此,我还是感觉到了自己用词上的贫乏,有些地方可能无法尽达其意) 学习web技术技能 了解UI5的基础部分HTML, CSS, Javascript和JQuer

JAVA语言编程格式规范

目   录 1. 前言 2. 试用范围 3. JAVA命名规范-- 3.1 公共约定 3.2 Java文件.包 3.3 类.接口命名规范 3.4 方法命名规范 3.5 常量 3.6 变量和参数 3.7 组件/部件 3.8 集合 3.9 神秘的数 3.10 其他 3.11 Java异常 3.12 数组命名 3.13 数据库表命名规则 3.14 数据库字段命名规则 3.15 JSP文件命名 3.16 Servlet类命名 4. 书写格式规范 4.1 缩进 4.2 空格 4.3 对齐 4.4 空行 4

Atitit.web三大编程模型 Web Page Web Forms 和 MVC

Atitit.web三大编程模型 Web Page    Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. Web编程模型?在这里我们定义Web编程模型为如何编写代码生成html返回给最终用户的方法. 它包括两部分,一个是如何编写Web应用程序的规范,另一个则是实现这一规范的Web编程框架, 3. Web Pages 是最简单的 ASP.NET 网页开发编程模型.它提供了一种简单的方法将 HTML.CSS

Java编程风格规范(Google )

Google Java编程风格指南 前言 这份文档是Google Java编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格. 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准.然而,这份文档主要侧重于我们所普遍遵循的规则, 对于那些不是明确强制要求的,我们尽量避免提供意见. 1.1 术语说明 在本文档中,除非另有说明: 术语class可表示一个普通类,枚举类,接口或是anno

基于页面的编程模型

两个实例 这两天写WinForm程序和Android程序. 我发现这两者的开发有很多相似之处. 他们都是基于页面的编程模型. WinForm程序,前端是.desinger.cs文件,后端是.cs文件.他们两个文件实际上是同一个类.这个类继承于Form类. Android程序,前端是.layout的一个xml文件,后端是.cs文件(用的Xamarin.Android).其中的类继承于Activity类. 都是前置代码管界面,后置代码管功能.没有前后端分离. Form和Activity都是页面. 一

浅谈SAP Fiori的设计美感与发展历程

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[Fiori系列]浅谈SAP Fiori的设计美感与发展历程 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 最近一段时间比较忙,有很多读者的消息没有及时回复,公众号里消息回复有时长限制,而且超过时间就不能回复了,大家也可以选择在文章末尾留言,这样就不会有时间限制. 我在之前的文章推送里写了关于SAP Fiori的文