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

53次阅读

共计 4197 个字符,预计需要花费 11 分钟才能阅读完成。

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

正文完
 0