Иногда при разработке расширений или использовании отладочных скриптов, возникает необходимость в получении определенного уровня в стеке вызовов. В основном для этого используется FM SYSTEM_CALLSTACK, но как правило интересует не весь стек, а лишь определенный его уровень (обычно вызывающая программа или процедура), для получения данных стека относительно уровня можно воспользоваться классом: CL_RECA_SYSTEM_CALLSTACK и его статическим методом — GET_CURRENT_SOURCE_POS.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
REPORT zte_system_stack. DATA: lv_progname TYPE STRING, lv_eventname TYPE STRING, lv_eventtype TYPE STRING, lv_line_num TYPE I, lv_symsg1 TYPE symsgv, lv_symsg2 TYPE symsgv. START-OF-SELECTION. PERFORM get_stack. FORM get_stack. cl_reca_system_callstack=>get_current_source_pos( EXPORTING id_ignore_levels = 1 " Поднимаемся на 1 уровень вверх (start-of-selection) IMPORTING ed_progname = lv_progname " Имя программы ed_eventtype = lv_eventtype " Тип события ed_eventname = lv_eventname " Имя события ed_lineno = lv_line_num " Номер строки в исходном коде ed_formatted_var1 = lv_symsg1 " Сообщение из sy-msgvx ed_formatted_var2 = lv_symsg1 ). BREAK-POINT. ENDFORM. |