SAP小技巧 CL_DEMO_OUTPUT优化_ALV输出

前言

前文提到对CL_DEMO_OUTPUT的优化

详见链接

无峰,公众号:ABAP 技巧与实战SAP小技巧 CL_DEMO_OUTPUT优化-输出屏幕控制

随后发现CL_DEMO_OUTPUT输出多表内容的一个最大的问题. 当内表条目数比较大时. 屏幕显示内容过多,只能在知道内表名的情况下通过搜索功能定位内表, 只能查看内表内容,无法分析内表内容(排序,过滤,合计等等)

针对这个问题, 改进了类ZCL_DEMO_OUTPUT功能. 提供分屏ALV显示

本文主要介绍ZCL_DEMO_OUTPUT通过分屏ALV的方式呈现程序的内表变量

使用方式

对于需要输出的变量:

  • 字段

  • 工作区

  • 内表

  • 嵌套内表的工作区

  • 嵌套内表的内表

使用 zcl_demo_output=>write 记录内容.

方法通过如下参数写入一些辅助信息

  • IV_DESC  字段名 'X' 字段描述

  • IT_FCAT   特定字段的描述

  • NAME       内表名称

通过 zcl_demo_output=>display 显示内表内容

通过 is_para 结构传递控制参数

  • ALV_DISP = 'X'

  • ALV_MODE = 'H'  'H' 上下分屏  'V' 左右分屏

14f0abe21466d66e61edbe8b8a0543bb.png

420efa3679a33629d3acef78e97638bb.png

显示效果

抬头显示显示如下结构中的字段,其中runtime 大致可以判断中内表内容获取占用的时间(通过当前时间点-上个序号的时间点获取微秒)

52990427343ed2c05bc308d474d185ec.png

显示效果如下图

e5b9a02f16280261f8c216de8fc261e6.png

对于变量, 直接显示内容,对于简单工作区和内表 , 允许通过ALV显示明细, 所有类型都支持用网页显示明细. 通过链接内容跳转到分屏的下方显示ALV内容. 或弹窗显示网页内容

e0b6c6429d7105f4b77e3fa3b9cec6bb.png

其中变量类型区分如下:  z 类型是增强的一个类型. 因为ALV只能显示扁平内表(没有嵌套的内表). 所以需要进一步识别内表的工作区类型 如果工作区是嵌套结构 , 则内表类型识别为 z

d8ed88ce39f1bcfd6c141e25c847f63a.png

比较

ALV显示VS网页显示

ALV仅支持简单内表的显示.可以利用ALV的功能对数据进行各种分析及下载.

网页显示支持嵌套内表(多级嵌套)的显示. 对于ALV不支持的类型,只能使用网页方式显示

ea161350fecfd26aa647a3c2cf322dde.png

实现

类ZCL_DEMO_OUTPUT 的 WRITE方法记录待显示的变量信息及内容

d717a66c5e16435997425057d2c7f2d4.png

DISPLAY 则根据传入的控制参数 is_para-alv_disp 确定显示方式

c5bf3056e0bd0b2c25cc1ad77825fc3f.png

其中ALV显示通过函数Z_BC_DEMO_OUTPUT_ALV 中的屏幕实现

f91f9dab56d3a2592a5cabd09287e448.png

函数中再调用 ZCL_DEMO_OUTPUT=>MAIN方法 实现ALV对象数据内容的分屏呈现

c7371f1c2cba6e9e6489545249bb7fa9.png

实际应用

如下的差异分摊程序.

提供测试运行按钮. 把分摊的内容 及分摊的结果都呈现在ALV中. 用户通过点击查看特定内表内容. 检查获取数据的正确性. 有利于用户通过呈现的数据分析呈现结果的正确性.

ALV的切换: 使用类cl_salv_table很难做到多个ALV内容在下方屏幕切换显示(容器刷新的问题) . 但是用类CL_GUI_ALV_GRID则可以比较方便实现ALV内容的切换. 因为ALV对象附加到容器上一次即可, 后续可以通过方法set_table_for_first_display切换要显示的内容. 但整个ALV对象似乎无法在底层的容器中实现切换.(无法实现定义多个ALV对象,在底层容器中切换ALV对象--或者是我用的方法不正确.

这个问题有点困扰我,如果你有相关经验,欢迎指正)

219794615b151fcc85adb1ceb7f9c9d9.png

e8bf844e5da675eb34e42bdeb38b8fcf.png

总结

通过ZCL_DEMO_OUTPUT 可以很方便的把程序的执行过程变量最终呈现出来. 有利于通过显示的数据分析程序的执行逻辑. 方便对逻辑复杂程序的测试,验证.

后续可以考虑把获取的内表内容记录在程序的日志中,方便对历史执行程序的结果正确性分析.

程序执行日志详见链接

无峰,公众号:ABAP 技巧与实战SAP小技巧 记录报表程序的执行日志

相比 SBAL 函数组的系统日志功能,ZCL_DEMO_OUTPUT可以记录并显示更加详细的过程数据

fdea8195678c8e5c55910adf0e58f4b4.png

THE

END

约定

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.       

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

申请进入公众号讨论群提问或者参与话题讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值