Иногда при разработке расширений или использовании отладочных скриптов, возникает необходимость в получении определенного уровня в стеке вызовов. В основном для этого используется 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. |
Добрый день!
А возможно ли получить доступ( на чтение и изменения ) к данным вышестоящего уровня стека?
К примеру
Программа ->
Подпрограмма в которой есть переменная X
Подпрограмма вызывает -> глобальный класс
И вот из этого метода хочу считать то что было в вышестоящей подпрограмме в переменной Х и изменить его
Возможно?
Добрый день! Ну разве что через ASSIGN (‘(ИмяПрограммы)ГлобальнаяПеременная’) TO…
Так только к глобальным переменным.
А что насчет локальных?
Если в отладчике выйти на уровень выше то все переменные доступны, значит наверняка есть способ к ним получить доступ
Они для того и локальные, чтобы никто их не трогал, наверное и не стоит пытаться 🙂
Бейлак, привет!
Скажи, какой смысл в этом финте ушами? Динамический доступ к глобальным переменным стараются не использовать по ряду причин (Михаил ранее привел цитату). А уж к локальным — ни разу в практике не встречал такой необходимости.