Events 如何获取程序调用堆栈跟踪?

Events 如何获取程序调用堆栈跟踪?,events,abap,Events,Abap,我的程序可以通过两种方式启动: 选择的开始事件,从我的一个本地类调用MAIN函数。 调用相同方法的ZAVGTTA4事务 在PAI处,对于BACK事件,当调用LEAVE TO SCREEN“0”时。我的程序根据启动方式以两种方式运行。我想回到选择屏幕(1000) 我考虑过查询堆栈,在那里我肯定能找到我的程序是如何被调用的。我可以看到堆栈跟踪是不同的,但我不知道如何从程序中访问我的堆栈。我听说了RTTI,我想它可能会对我有所帮助。你可以试试SYSTEM\u CALLSTACK DATA: ab

我的程序可以通过两种方式启动:

选择的
开始
事件,从我的一个本地类调用
MAIN
函数。 调用相同方法的
ZAVGTTA4
事务

PAI
处,对于BACK事件,当调用
LEAVE TO SCREEN“0”时。
我的程序根据启动方式以两种方式运行。我想回到选择屏幕(1000)


我考虑过查询堆栈,在那里我肯定能找到我的程序是如何被调用的。我可以看到堆栈跟踪是不同的,但我不知道如何从程序中访问我的堆栈。我听说了RTTI,我想它可能会对我有所帮助。

你可以试试
SYSTEM\u CALLSTACK

DATA:
   abap_callstack_line TYPE abap_callstack_line,
   callstack TYPE  abap_callstack.


  CALL FUNCTION 'SYSTEM_CALLSTACK'
    EXPORTING
      max_level          = 4
    IMPORTING
      callstack          = callstack.

但在您的情况下,我希望有一个额外的参数,呼叫地点可以填写此条目。我不会调用被调用的参数
,而是类似于
行为
模式

Thx的东西。成功了。顺便说一句,根据您的解释,您的意思是在“数据”部分声明一些称为“行为”的数据对象,并实现一些逻辑吗?因为我就是这么做的。但是如果你的意思不同(并且你认为解释:P真的很好),请提供更多的细节。无论如何,谢谢!我有一些问题要举个正确的例子,因为我不太明白,你怎么称呼什么。调用程序的两种方式是什么?通过提交和交易
ZAVGTTA4
?系统字段
SY-TCODE
包含实际事务。如果
SY-TCODE='ZAVGTTA4'
,则会使用事务
ZAVGTTA4
调用您的程序。我知道它已经得到了回答,但我想知道变量
SY-CPROG
的值也是多少(即调用程序名)。还有
SY-REPID
-程序名。我没有可用的SAP系统,因此无法检查它,但我认为
SY-REPID
是实际报告(由
SA38
或直接每笔交易调用)。如果进行提交,
SY-CPROG
是“低一级”报告,
SY-REPID
是第一份报告。