5

到目前为止,如果我的 SAP RFC 函数内部有问题,我只会收到一条错误消息

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;;;]

如果我能获得 ABAP 函数的堆栈跟踪,将会大大提高开发速度。有没有办法获得堆栈跟踪,例如在 Python 中?

堆栈跟踪包括局部变量

相关:https ://softwarerecs.stackexchange.com/questions/52350/sentry-event-from-exception-to-html

Sentry 使用特定的 JSON 来表示堆栈跟踪和局部变量的内容。上面的链接包含一个示例。

4

2 回答 2

1

可以使用类 cl_abap_get_call_stack 调用 ABAP 中的堆栈跟踪。局部变量不包含在类 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。当你看到红色的authorization-object S_RFC时,表示你不能以任何方式调用该功能模块!

于 2019-08-28T11:17:22.057 回答
1

随着 ABAP 753 的发布,引入了诸如 EPP - Extended Passport 之类的结构。

似乎在做一些你想做的事情,即显示被调用系统的踪迹。我输入“似乎是”是因为我手头没有 753+ 系统,所以我无法在实践中检查。

根据描述,它应该做你想做的事:

扩展通行证 (EPP) 是一种可以从客户端发送到服务器的数据结构,用于分析调用堆栈

框架和分析工具可以使用扩展 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( ) ).
于 2020-10-29T13:05:31.530 回答