因为国情起因,ABAP ALV相干的报表开发在国内泛滥SAP技术交换群里永远都是一个热门话题。
最近Jerry和敌人的技术交换群里,郭爷向大家介绍了ALV Integrated Data Access,可能轻松实现以ALV格局展现CDS view的数据。
感激郭爷的介绍,Jerry因为工作起因不会进行SAP Dynpro的编程,所以也不晓得这个ALV IDA的存在。网上搜了一下,发现早在2018年就有SAP从业者写过介绍它的博客了:
因为应用的确非常简单,Jerry不会反复博客里的内容,对其具体用法感兴趣的敌人,请移步这篇SAP社区博客: SAP List Viewer with integrated Data Access ALV with IDA.
如下图所示,我在SAPGUI里写了一个报表,只用一行语句就能实现一个名叫ZFAT_INTERFACE这个CDS view的ALV展现工作。
cl_salv_gui_table_ida=>create_for_cds_view( iv_cds_view_name = 'ZFAT_INTERFACE' )->fullscreen( )->display( ).
这个CDS view显示的数据,是以后ABAP零碎里所有的接口(SE24里查看的interface)和接口上定义的办法个数。
CDS view实现源码如下:
为什么要搞这样一个CDS view进去?Jerry已经给SAP成都研究院的共事们做过一个面向对象程序设计的培训,外面讲到了一个准则:
Interface Segregation Principle(接口拆散/隔离准则).
接口隔离准则冀望达到的成果是,客户类不应被强制依赖于那些它们理论并不需要的接口。相同地,一个接口定义的办法数量越多,其实现类越容易受制于该接口。例如,一个客户类A实现了一个接口,该接口蕴含了客户类不须要的办法,但这些办法是其余客户类所须要的,那么当其余客户类因为某种原因须要对接口进行批改时,这个批改也将影响客户类A。通过接口隔离准则,咱们尽可能地防止这种不必要的耦合,比方上图中把蕴含了Print,Staple, Copy和Fax四个办法的胖接口Job,拆分成了四个各自只蕴含一个独立办法的接口。
讲完了接口隔离准则之后,我突然有了一个想法,SAP ABAP零碎里大量的历史遗留代码里,是否存在着定义了大量办法的胖接口呢?于是就开发了上述的CDS view一探到底。
从应用ALV IDA显示CDS view ZFAT_INTERFACE的后果看,办法数量排名第一的胖接口IFUR_NW7__ALL,其上定义了755个办法……
再回到ALV IDA,它可能显示CDS view数据的原理是什么?
应用Jerry之前文章:
SAP谬误音讯调试之七种武器:让所有的谬误音讯都能被定位 里介绍的第五种方法,孔雀翎之SAT,即应用SAT运行之前编写的ALV程序,在SAT跟踪后果里,就能找到cl_salv_gui_table_ida最初是如何从CDS view里取值的:
CL_SQL_STATEMENT->EXECUTE_QUERY
在该办法里设置断点, 执行报表,断点会触发两次:
断点第一次触发,执行的SQL表达式:
SELECT COUNT( * ) AS "COUNT" FROM "ZFATINF" AS "ZFAT_INTERFACE" WITH PARAMETERS( 'LOCALE' = 'EN' )
断点第二次触发,执行的SQL表达式:
SELECT "ZFAT_INTERFACE"."CLSNAME" AS "CLSNAME", "ZFAT_INTERFACE"."METHOD_COUNT" AS "METHOD_COUNT" FROM "ZFATINF" AS "ZFAT_INTERFACE" ORDER BY "ZFAT_INTERFACE"."CLSNAME" ASC LIMIT ? OFFSET ? WITH PARAMETERS( 'LOCALE' = 'CASE_INSENSITIVE' )
一旦指向后果集(result set)的援用lo_result在1049行代码调用next_package办法,CDS view的前1000条数据就被赋值到了ABAP内表lr_data里:
这种不采纳ABAP OPEN SQL,而用CL_SQL_STATEMENT,CL_SQL_CONNECTION等系列工具类的数据库拜访形式,称为ADBC – ABAP Database Connectivity.
ADBC是一套API的汇合,能容许ABAP开发人员应用ABAP面向对象编程的形式,同ABAP服务器的原生SQL接口进行交互。
Jerry之前的文章汇合 Jerry的ABAP, Java和JavaScript乱炖,外面有一篇将ADBC和Java的JDBC做了比照:
ADBC vs JDBC
下图右边是用ADBC读取数据库的代码,左边是Java的JDBC代码,大家能够简略比照一下语法:
最初,在哪些版本的ABAP服务器上能应用ALV IDA?
无需查阅文档,间接查看源代码,在CL_SALV_GUI_TABLE_IDA有个DB_CAPABILITIES办法:
进而查看该办法实现里的CL_SALV_IDA_CAPABILITY_SERVICE:
以后DB是否反对指定的个性,通过这些IS办法返回的布尔值决定。
从源代码看,很多个性须要ABAP 740 SP4之后的版本能力反对。
感激浏览。
ABAP专题
- Jerry的ABAP, Java和JavaScript乱炖
- ABAP开发人员将来应该学些什么
- Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现
- Jerry的ABAP原创技术文章合集
- 300行ABAP代码实现一个最简略的区块链原型
- 应用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise零碎里的函数
- 在SAP云平台的CloudFoundry环境下生产ABAP On-Premise OData服务
- ABAP vs Java, 蛙泳 vs 自由泳
- 聊聊C语言和ABAP
- 入手应用ABAP Channel开发一些小工具,晋升日常工作效率
- 我用ABAP做过的那些无聊的事件
- 不喜爱SAP GUI?那试试用Eclipse进行ABAP开发吧
- 应用Visual Studio Code编写和激活ABAP代码
- 你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
- 在SAP云平台ABAP编程环境上编写第一段ABAP程序
- SAP官网公布的ABAP编程标准
- ABAP Code Inspector那些暗藏的性能,您都晓得吗?
- 还在用ABAP进行SAP产品的二次开发?来理解下这种全新的二次开发理念吧
- ABAP Netweaver体内的那些寄生式编程语言
- 从SAP社区上的一篇博客开始,聊聊SAP产品命名背地的那份情怀
- 云端的ABAP Restful服务开发
- 如何在SAP云平台ABAP编程环境里把CDS view裸露成OData服务
- 应用abapGit在ABAP On-Premises零碎和SAP云平台ABAP环境之间进行代码传输
- 30分钟用Restful ABAP Programming模型开发一个反对增删改查的Fiori利用
- Jerry带您理解Restful ABAP Programming模型系列之二:Action和Validation的实现
- Jerry带您理解Restful ABAP Programming模型系列之三:云端ABAP利用调试
- SAP云平台上的ABAP编程环境里如何生产第三方服务
- ABAP开发者上云的时候到了 – 当初大家能够收费应用SAP云平台ABAP环境的试用版了
- 学而不思则罔 – SAP云平台ABAP编程环境的由来和实用场景
- SAP云平台里的三叉戟利用
- 如何基于Restful ABAP Programming模型开发并部署一个反对增删改查的Fiori利用
- SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?
- 有哪些ABAP关键字和语法,到了ABAP云环境上就没方法用了?
- ABAP开发环境终于反对以驼峰命名法主动格式化ABAP变量名了
- 利用ABAP 740的新关键字REDUCE实现一个理论工作工作
- 一段让人瑟瑟发抖的ABAP代码
- 昨日万圣节ABAP怪兽级代码谜团,颁布答案啦
- 介绍一种在ABAP内核态进行内表高效拷贝的办法
- 应用SAP Cloud Application Programming模型开发OData的一个理论例子
- 当ABAP遇见普罗米修斯
- 应用ABAP绘制可伸缩矢量图
- ABAP开发环境语法高亮的那些事儿
- SAP谬误音讯调试之七种武器:让所有的谬误音讯都能被定位
- 应用ABAP操作Excel的几种办法
- SAP GUI里的收藏夹事务码管理工具
- SAP GUI和Windows注册表
- 有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中
- ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼
- 实现ABAP条件断点的三种形式
- 应用SAT跟踪监控从浏览器关上的SAP利用的性能和调用栈
- 一个13年ABAP老兵的倡议:理解这些基础知识,对ABAP开发有百利而无一害
- SAP ABAP Netweaver容器化, 不可能实现的工作吗?
- SAP产品加强技术回顾
- SAP API开发方法大全
- 浅谈Java和SAP ABAP的动态代理和动静代理,以及ABAP面向切面编程的尝试
- SAP ABAP应用服务器的HTTP响应状态码(Status Code)
- SAP ABAP里存在Java List这种汇合工具类么?CL_OBJECT_COLLECTION理解一下
- ABAP面试题系列:写一组会呈现死锁(Deadlock)的ABAP程序
- SAP ABAP Netweaver服务器的规范登录形式解说
- SAP ABAP关键字语法图和ABAP代码主动生成工具Code Composer
- SAP ABAP SM50的另类用处 – ABAP工作过程对数据库表读取操作的检测
- 对于SAP ABAP字符变量和字符串变量字符个数的一个知识点,和一个血案
- SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析
- SAP ABAP和Java里的弱援用(WeakReference)和软援用(SoftReference)
- SAP AMDP介绍 – ABAP托管的HANA数据库过程
- 给你的ABAP对象打上标签(Tag)
要获取更多Jerry的原创文章,请关注公众号”汪子熙”: