Abap 从PyRFC调用中获取错误跟踪?

Abap 从PyRFC调用中获取错误跟踪?,abap,sentry,saprfc,pyrfc,Abap,Sentry,Saprfc,Pyrfc,到目前为止,如果我的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函数的堆栈跟踪,将会大大提高开发速度。有没有一种方法可以像Py

到目前为止,如果我的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中那样获取堆栈跟踪

相关的:


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

可以调用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时,表示不允许您以任何方式调用功能模块

ABAP753版本引入了EPP-ExtendedPassport等结构

它似乎在做您想要的事情,即显示被调用系统的跟踪。我之所以说“似乎是”,是因为我手上没有753+系统,所以无法在实践中进行检查

它应该做你想做的:

扩展Passport(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( ) ).

我对此表示怀疑。至少不需要访问SAP系统本身。向我们展示您的Python代码以及您正在调用的函数模块。这会很有帮助。@Jagger我有权访问ABAP代码并可以对其进行修改。消息上显示“无授权”,因此看起来您没有权限执行此特定RFC功能模块。如果您使用对话框用户通过RFC进行身份验证,那么您可以尝试事务
SU53
,查看哪个授权检查失败。唯一的方法是在发生“ABAPRUNTIMERROR”后从st22查询短转储(您必须创建RFC以读取表快照并包装功能模块RS_st22_GET_FT)。请注意只发送调用堆栈,而不发送其他可能敏感的数据(如内存内容)。@Jagger“No auth”消息来自RFC FM。我敢肯定。