如何解决扫描ABAP报告以获取展开方法调用直至N级的字符串?
有时我需要搜索一个字符串模式,这很容易在单个程序单元中完成,但是有时我还需要在该单元内部搜索其他方法调用。甚至可以在这些方法调用内的其他方法中进行搜索,即在调用堆栈的第二个深度级别上进行搜索。
我总是开始这样搜索报告:
READ REPORT lr_dummy_repo INTO lv_src.
FIND FIRST OCCURRENCE OF 'select abc' IN TABLE lv_src IGNORING CASE.
在此报告中,我也有要搜索的方法调用。
是否有一种有效的方法可以自动搜索字符串,至少可以进行2级方法嵌套?
解决方法
通常,您无法在程序中找到指定的字符串,包括所有向上的调用堆栈。原因是:
- ABAP具有许多动态调用程序元素的能力:例如,
CALL METHOD (name)
和PERFORM (sname) IN PROGRAM (pname)
允许动态方法名称和动态子例程名称以及程序名称,CALL FUNCTION '<funcname>'
和{{1 }}默认情况下假定动态函数名称和事务名称。因此,直到运行时,您才能获得代码单元。 - ABAP支持面向对象的方法,即对象的单个实例仅应实现某些接口,而无需知道将被调用的确切代码。
- ABAP允许您动态构建程序并使用
CALL TRANSACTION ta
运行它们,在这里您也无法在直接运行程序之前知道代码。
因此最好描述您需要完成的确切任务,也许有更简单的方法可以做到这一点。
通常,您可以使用不同的FM来读取源代码(例如GENERATE SUBROUTINE POOL
),逐行读取其输出,查找调用某些内容并递归执行此操作的地方。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。