ABAP - 你如何检查从哪里调用方法
ABAP - How do you check where a method is called from
我在 ABAP 中有一个自定义方法 class。
我使用 'Where used' 工具来显示 class 是从哪里调用的,但事实证明,它是从我没想到的其他地方调用的。
那么显示所有调用该方法的完整列表的最佳方式是什么?
由于 object-oriented 编程的神奇之处,class 的实例可以隐藏在对其基础 class 或它实现的接口之一的引用后面。例如:
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
也可能是对任何其他 [=37= 的实例的引用] 实现了 z_my_interface
。但是,如果您不只是查看方法的 where-used 列表,而是查看整个 class 的 where-used 列表或接口/基础 class 声明方法。
然后有像这样的邪恶动态编程技巧,它在 运行 时间确定方法和 classes:
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-used 工具无法找到this。但是如果 class- and/or 方法名称确实出现在代码中(它可能不会,例如,如果它们是从自定义 table 中读取的),那么您可以使用报告 RS_ABAP_SOURCE_SCAN
。这个方便的小工具允许您 select 一组 ABAP 程序并在其源代码中搜索字符串(甚至正则表达式)。
但是,如果您知道当您以用户身份执行特定操作时调用该方法并且只想知道在哪里,那么设置调试器断点会更容易在方法中,运行 进入它并检查调用堆栈。
使用 code_scanner 事务排序。
我在 ABAP 中有一个自定义方法 class。
我使用 'Where used' 工具来显示 class 是从哪里调用的,但事实证明,它是从我没想到的其他地方调用的。
那么显示所有调用该方法的完整列表的最佳方式是什么?
由于 object-oriented 编程的神奇之处,class 的实例可以隐藏在对其基础 class 或它实现的接口之一的引用后面。例如:
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
也可能是对任何其他 [=37= 的实例的引用] 实现了 z_my_interface
。但是,如果您不只是查看方法的 where-used 列表,而是查看整个 class 的 where-used 列表或接口/基础 class 声明方法。
然后有像这样的邪恶动态编程技巧,它在 运行 时间确定方法和 classes:
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-used 工具无法找到this。但是如果 class- and/or 方法名称确实出现在代码中(它可能不会,例如,如果它们是从自定义 table 中读取的),那么您可以使用报告 RS_ABAP_SOURCE_SCAN
。这个方便的小工具允许您 select 一组 ABAP 程序并在其源代码中搜索字符串(甚至正则表达式)。
但是,如果您知道当您以用户身份执行特定操作时调用该方法并且只想知道在哪里,那么设置调试器断点会更容易在方法中,运行 进入它并检查调用堆栈。
使用 code_scanner 事务排序。