一
前言
前文提到对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' 左右分屏


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

显示效果如下图

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

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

四
比较
ALV显示VS网页显示
ALV仅支持简单内表的显示.可以利用ALV的功能对数据进行各种分析及下载.
网页显示支持嵌套内表(多级嵌套)的显示. 对于ALV不支持的类型,只能使用网页方式显示

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

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

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

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

六
实际应用
如下的差异分摊程序.
提供测试运行按钮. 把分摊的内容 及分摊的结果都呈现在ALV中. 用户通过点击查看特定内表内容. 检查获取数据的正确性. 有利于用户通过呈现的数据分析呈现结果的正确性.
ALV的切换: 使用类cl_salv_table很难做到多个ALV内容在下方屏幕切换显示(容器刷新的问题) . 但是用类CL_GUI_ALV_GRID则可以比较方便实现ALV内容的切换. 因为ALV对象附加到容器上一次即可, 后续可以通过方法set_table_for_first_display切换要显示的内容. 但整个ALV对象似乎无法在底层的容器中实现切换.(无法实现定义多个ALV对象,在底层容器中切换ALV对象--或者是我用的方法不正确.
这个问题有点困扰我,如果你有相关经验,欢迎指正)


七
总结
通过ZCL_DEMO_OUTPUT 可以很方便的把程序的执行过程变量最终呈现出来. 有利于通过显示的数据分析程序的执行逻辑. 方便对逻辑复杂程序的测试,验证.
后续可以考虑把获取的内表内容记录在程序的日志中,方便对历史执行程序的结果正确性分析.
程序执行日志详见链接
无峰,公众号:ABAP 技巧与实战SAP小技巧 记录报表程序的执行日志
相比 SBAL 函数组的系统日志功能,ZCL_DEMO_OUTPUT可以记录并显示更加详细的过程数据

THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论

1194

被折叠的 条评论
为什么被折叠?



