本教程前面有一篇文章,我们介绍了如何使用外部传入的字符串,动态生成 ABAP 报表实例,并执行的方法:
我们可以看到在第 120 个例子里,我们使用硬编码拼接起来的字符串,来模拟外部传入的 ABAP 程序的代码源头。
笔者的知识星球里,有朋友提问,能不能从本地 ABAP 系统,提取某个标准 ABAP 程序的代码源,然后基于这些代码源进行微调,动态生成新的 ABAP 报表并执行呢?
这个需求理论上可行。
<font color='red' size="3pt">注意:实际使用时,确保对标准代码源的替换,一定要处于可控状态,以免给系统留下安全隐患。</font>
下面是本解决方案详细的步骤。
我们先编写一个简单的 ABAP 报表,用于模拟 SAP 系统里标准的 ABAP 报表。
这个报表的内容,仍然围绕本教程之前介绍过的 ABAP 系统的注册表 TADIR 来展开:
源代码如下:
REPORT z.
DATA: lt_tadir TYPE TABLE OF tadir,
ls_tadir TYPE tadir.
SELECT * INTO TABLE lt_tadir FROM tadir
UP TO 3 ROWS
WHERE pgmid = 'R3TR' AND object = 'PROG' AND author = sy-uname.
LOOP AT lt_tadir INTO ls_tadir.
WRITE:/ ls_tadir-obj_name.
ENDLOOP.
这个报表的作用是,从注册表里,查询出当前执行报表用户创建的三个 ABAP 报表的名称。
报表在 SE38 里的名称为 ZST
.
执行之后,打印三条输出记录:
假设我的需求是,执行报表后,打印的记录条目数,改成10条
。
下面)是如何使用 ABAP 动态程序生成技术,实现的这个需求。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。