2012-07-16 60 views
2

我的程序可以通过两种方式启动:如何获取ABAP中的程序调用堆栈跟踪?

START OF SELECTION事件调用了我的一个本地类中的MAIN函数。 ZAVGTTA4事务调用了相同的方法。

at PAI对于BACK事件,当调用LEAVE TO SCREEN '0'.时,根据它的启动方式,我的程序有两种行为。我想回到选择屏幕(1000)。

我想过要查询堆栈,在那里我一定会找到我的程序是如何被调用的。我可以看到堆栈跟踪是不同的,但我不知道如何从程序中访问我的堆栈。我听说过我认为可以帮助我的RTTI。

回答

4

您可以试试SYSTEM_CALLSTACK

DATA: 
    abap_callstack_line TYPE abap_callstack_line, 
    callstack TYPE abap_callstack. 


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

但在你的情况下,我宁愿一个额外的参数和调用的地方可以填写此条目。我不会拨打参数called_by,但可以拨打behaviourmode

+0

Thx。它做到了。顺便说一句,你的解释是,你的意思是在'DATA'部分中声明了一个名为“behavior”的数据对象,并且实现了一些逻辑?因为我是这么做的。但是,如果你和别的东西不同(你认为解释它非常好,P),请提供一些更多细节。无论如何thx很多! – 2012-07-16 11:06:50

+0

我有一些问题要给出一个正确的例子,因为我不太明白,你怎么称呼什么。有什么方法可以调用你的程序?通过提交和交易'ZAVGTTA4'?系统字段SY-TCODE包含实际的事务。如果'SY-TCODE ='ZAVGTTA4',那么你的程序被调用事务'ZAVGTTA4'。 – knut 2012-07-16 20:38:28

+0

我知道它已经回答了,但是我想知道变量SY-CPROG的值是多少(这就是调用程序名)。 – Jorg 2012-07-17 07:18:26