问题描述
我使用“在哪里使用”工具显示了从何处调用该类,但事实证明,它是在我没想到的其他地方调用的。
解决方法
由于面向对象编程的奇迹,类的实例可以隐藏在对其实现的基类或接口之一的引用的后面。例如:
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
的引用,因为在该代码位置foo
也可能是对实现{{1 }}。但是,如果您不只是查看方法的使用列表,而是查看整个类或声明该方法的接口/基类的使用列表,那么您也许可以找到此方法。
然后有像这样的邪恶的动态编程技巧,它们会在运行时确定方法和类:
z_my_interface
没有机会通过使用工具找到此。但是,如果类和/或方法名确实出现在代码中(例如,如果从定制表中读取它们,则可能不会出现),则可以使用报告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).
。这个方便的小工具可让您选择一组ABAP程序,并在其源代码中搜索字符串(甚至正则表达式)。
但是,如果您知道,当您以用户的身份执行特定操作并且只想知道在哪里时,该方法就被调用,那么只需在该方法中设置调试器断点即可运行并检查调用堆栈。
,使用code_scanner事务排序。