ABAP-如何检查从何处调用方法

ABAP-如何检查从何处调用方法,abap,Abap,我在ABAP类中有一个自定义方法 我使用了“Where used”工具来显示从何处调用该类,但事实证明,它是从我没有预料到的其他地方调用的 那么,显示调用该方法的所有内容的完整列表的最佳方式是什么呢?由于面向对象编程的奇妙之处,类的实例可以隐藏在对其实现的基类或接口的引用后面。例如: DATA foo TYPE REF TO z_my_interface. CREATE OBJECT foo TYPE z_my_class. " lots of more code foo-

我在ABAP类中有一个自定义方法

我使用了“Where used”工具来显示从何处调用该类,但事实证明,它是从我没有预料到的其他地方调用的


那么,显示调用该方法的所有内容的完整列表的最佳方式是什么呢?

由于面向对象编程的奇妙之处,类的实例可以隐藏在对其实现的基类或接口的引用后面。例如:

DATA foo TYPE REF TO z_my_interface.    
CREATE OBJECT foo TYPE z_my_class.  
" lots of more code
foo->bar( ).
您无法找到对
z_my_class->foo
及其“Where Used”列表的引用,因为在该代码位置
foo
也可以是对实现
z_my_接口的任何其他类的实例的引用。但是,如果您不只是查看方法的where used列表,而是查看整个类或声明方法的接口/基类的where used列表,您可能会发现这一点


还有一些邪恶的动态编程技巧,比如在运行时确定方法和类:

DATA foo TYPE REF TO object.
CONSTANTS: classname TYPE string VALUE 'Z_MY_CLASS',
           methodname TYPE string VALUE 'BAR'.

CREATE OBJECT foo TYPE (classname).
CALL METHOD foo->(methodname).

用where-use工具找不到这个。但如果类和/或方法名称确实出现在代码中(例如,如果它们是从自定义表中读取的,则可能不会出现),则可以使用报告
RS\u ABAP\u SOURCE\u SCAN
。这个方便的小工具允许您选择一组ABAP程序,并在其源代码中搜索字符串(甚至正则表达式)



但是,如果您知道该方法在您作为用户执行特定操作时被调用,并且只想知道在何处调用,那么只需在该方法中设置调试器断点就更容易了,运行它并检查调用堆栈。

使用代码扫描事务进行排序。

对于同一个问题,已经有一些非常有趣的答案。这是否回答了您的问题
RS\u ABAP\u SOURCE\u SCAN
更适合使用,因为它有更多的搜索选项,更标准
code\u scanner
在引擎盖下使用
AFX\u code\u scanner
prog,它位于
AFX\u框架
包中,似乎是特定于财务的,可能无法在所有系统上使用。