Получить трассировку стека ошибок из 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( ) ).
Другие вопросы по тегам