Abap CL_SALV_BS_RUNTIME_INFO通过RFC返回空引用

Abap CL_SALV_BS_RUNTIME_INFO通过RFC返回空引用,abap,saprfc,Abap,Saprfc,这段代码已经运行了好几个月了: SUBMIT (IV_REPORT_NAME) WITH SELECTION-TABLE selection_table USING SELECTION-SET IV_SELECTION_SET_VARIANT AND RETURN. DATA lr_data_descr TYPE REF TO cl_abap_datadescr. DATA lr_data_line_descr TYPE R

这段代码已经运行了好几个月了:

SUBMIT (IV_REPORT_NAME)
   WITH SELECTION-TABLE selection_table
   USING SELECTION-SET IV_SELECTION_SET_VARIANT
AND RETURN.

DATA          lr_data_descr         TYPE REF TO cl_abap_datadescr.
DATA          lr_data_line_descr    TYPE REF TO cl_abap_datadescr.

cl_salv_bs_runtime_info=>get_data_ref( r_data_descr      = lr_data_descr
                                       r_data_line_descr = lr_data_line_descr ).

IF lr_data_descr IS NOT BOUND.
  ev_result_json = '[]'.
  EXIT.
ENDIF.
但在其中一种情况下,它通过RFC调用并抛出

lr_数据描述未绑定

它可以通过SE37正常工作,但是如果通过RFC执行,就会抛出错误,尽管我对RFC和SE37使用了非常相同的用户(类型“service”),相同的输入和相同的代码

为什么会有区别?有没有办法获取一些错误消息

如果我能找到它不受约束的原因,这将非常有帮助。我调试到get_data_ref(),发现这行的行为不同:

import t_component to lt_component from memory id
cl_salv_bs_runtime_info=>c_memid_data_def.
if sy-subrc eq 0.
如果我在se37中测试功能模块,则
sy subrc
为0,如果我与同一用户进行外部调试,则
sy subrc
为4


这是一份临时报告,其名称为
AQZZZMM=================

唯一未绑定
cl\u salv\u bs\u runtime\u info=>get\u data\u ref()
r\u data\u line\u descr
的情况是:

  • ALV不被称为
使用SAPQERY查询时,如果没有提取数据,则会发生这种情况(在查询程序中,变量
%runmode-show\u on
为空,如果没有数据,则不会显示ALV,参见下面的屏幕截图)

因此,您的问题可能是由于您的pyRFC程序传递的选择值不对应于任何内容。从SAP调用查询时,这些值不同并返回一些数据(通过调试进行检查以验证哪些值不同)


SALV与对话框处理紧密耦合。如果您通过RFC调用代码,则没有连接到服务器的GUI。也许这就是原因?贾格尔。如果我通过se80测试它,它将以非交互方式运行并工作。我有两个问题:第一:如何让通过se80进行的调试像在没有gui的情况下运行一样?第二个问题:有没有办法提供一个虚拟GUI来假装有一个GUI?可以把你的这个功能模块放在一个程序中,然后在后台启动它(F9而不是F8),看看它是否崩溃(或者传递这个空json表)?然后,您可以确定问题出在流程类型对话框与后台之间。您是否可以通过SE37与同一用户运行RFC案例并输入RFC目的地
NONE
(参数上方的屏幕字段)来尝试RFC案例?PS:“服务”用户能够进行对话,OP说他用同一个用户调试了这两个案例,所以我认为这不是用户问题;此外,如果您在打开RFC连接(SAP默认激活)时选择RFC,则RFC具有GUI功能@SandraRossi其他报告/程序可通过pyRFC正常工作。仅这些以AQ开头并包含大量===符号的报告不起作用。