扫描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),逐行读取其输出,查找调用某些内容并递归执行此操作的地方。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...