Получить трассировку стека ошибок из PyRFC
До сих пор я получаю только сообщение об ошибке, если что-то внутри моей функции SAP неверно.
Я вызываю эту функцию через PyRFC.
Вот пример:
pyrfc._exception.ABAPRuntimeError: RFC_ABAP_MESSAGE (rc=4): key=No authorization,
message=No authorization [MSG: class=00, type=E, number=001, v1-4:=No authorization;;;]
Это значительно увеличило бы скорость разработки, если бы я мог получить трассировку стека sap/abap.
Есть ли способ получить трассировку стека, как, например, в Python?
У меня есть доступ к коду ABAP и я могу его изменить.
В ст22 я вижу гораздо больше ценной информации.
Мечта сбылась бы на странице, похожей на часовой / джанго:
(Stacktrace, включая локальные переменные)
Связанный: https://softwarerecs.stackexchange.com/questions/52350/sentry-event-from-exception-to-html
Sentry использует определенный JSON для представления трассировки стека и содержимого локальных переменных. Выше ссылка содержит пример.
0 ответов
Трассировку стека внутри ABAP можно вызвать с помощью класса cl_abap_get_call_stack. Локальные переменные не включаются в трассировку стека, возвращаемую классом cl_abap_get_call_stack. Но вы можете использовать точку журнала для отслеживания локальных переменных и трассировки стека. Точки журнала можно создавать, изменять и просматривать в транзакции saab. Пример фрагмента кода:
DATA(formatted_stack) =
cl_abap_get_call_stack=>format_call_stack_with_struct(
cl_abap_get_call_stack=>get_call_stack( ) ).
LOG-POINT ID my_log_point FIELDS formatted_stack
local_variable1 local_variable2.
На наличие ошибки авторизации проверьте транзакцию su53. Когда вы видите красный объект авторизации S_RFC, это означает, что вам не разрешено вызывать функциональный модуль каким-либо образом!
With ABAP 753 release there was introduced such structure as EPP - Extended Passport.
It seems to be doing something that you want, i.e. showing trace of the called system. I put "seems to be" because I have no 753+ system by my hands so I cannot check in practice.
From the description it should do what you want:
Расширенный паспорт (EPP) - это структура данных, которая может быть отправлена от клиента на сервер и используется для анализа стеков вызовов.
Extended Passport может использоваться структурами и инструментами анализа для отслеживания внешних стеков вызовов при обмене данными между клиентами и серверами за пределами системы. Значения компонентов EPP можно сохранять в файлы журнала и использовать для мониторинга. Одним из примеров этого являются короткие дампы, в которых отображаются наиболее важные компоненты EPP.
В
DEMO_EPP
дает следующий образец использования EPP:
cl_demo_epp=>init( ).
"this program
cl_demo_epp=>append( ).
"Calling RFC to remote instance
CALL FUNCTION 'DEMO_RFM_EPP_1' DESTINATION instance.
"New SAP LUW
CALL FUNCTION 'DEMO_UPDATE_DELETE' IN UPDATE TASK
EXPORTING
values = VALUE demo_update_tab( ).
COMMIT WORK.
cl_demo_epp=>append( ).
cl_demo_output=>new(
)->begin_section( `Extended Passport (EPP)`
)->display( name = 'EPP Trace'
data = cl_demo_epp=>get( ) ).