2012-07-16 3 views
2

내 프로그램은 두 가지 방법으로 시작할 수 있습니다.ABAP에서 프로그램 호출 스택 추적을 얻는 방법은 무엇입니까?

START OF SELECTION 내 로컬 클래스 중 하나에서 MAIN 함수를 호출하는 이벤트. ZAVGTTA4 동일한 메소드를 호출하는 트랜잭션.

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이라는 매개 변수를 호출하지 않지만 behaviour 또는 mode과 같은 것입니다.

+0

Thx. 그게 그랬어. Btw, 귀하의 설명과 함께, 당신은 "데이터"섹션에서 선언 된 "행동"이라는 일부 데이터 객체가 있다는 것을 의미합니까? 그리고 일부 논리가 구현됩니까? 사촌 그게 내가 한 짓이야. 그러나 만약 당신이 나와 다른 것을 (그리고 당신이 정말로 설명하는 것이 좋다고 생각 : P) 좀 더 자세한 내용을 제공해주십시오. 어쨌든 많이! –

+0

올바른 예를 들어야 할 몇 가지 문제가 있습니다. 왜냐하면 제가 정말로 이해하지 못했기 때문에 당신이 어떻게 부르는지를 알기 때문입니다. 당신의 프로그래머를 호출하는 두 가지 방법은 무엇입니까? 'ZAVGTTA4'트랜잭션을 통해 제출? 시스템 필드'SY-TCODE'는 실제 트랜잭션을 포함합니다. 'SY-TCODE = 'ZAVGTTA4'' 인 경우, 프로그램은 트랜잭션'ZAVGTTA4'로 호출됩니다. – knut

+0

나는 이미 답을 알고 있지만 변수'SY-CPROG'의 값이 너무 (프로그램 이름을 호출하고있다) 궁금합니다. – Jorg

관련 문제