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不被称为
%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开头并包含大量===符号的报告不起作用。