乐趣区

关于sap:一行代码将SAP-CDS-view数据以ALV的方式输出

因为国情起因,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 的原创文章,请关注公众号 ” 汪子熙 ”:

退出移动版