首页 > 解决方案 > CL_SALV_BS_RUNTIME_INFO 通过 RFC 返回空引用

问题描述

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

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_data_descr 未绑定

它通过 SE37 工作正常,但如果通过 RFC 执行,尽管我对 RFC 和 SE37 使用相同的用户(类型“服务”)、相同的输入和相同的代码,但会引发错误。

为什么有区别?有没有办法得到一些错误信息?

如果我能得到它不受约束的原因,这真的会有所帮助。我调试到 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-subrc0,如果我与同一用户进行外部调试,sy-subrc则为 4。

这是一份临时报告,它的名字是AQZZZMM=========ZME80FN=======

标签: abapsaprfc

解决方案


唯一不受约束的情况是r_data_line_descrcl_salv_bs_runtime_info=>get_data_ref()

  • 不调用 ALV

对于 SAPquery 查询,当没有提取数据时会发生这种情况(在查询程序中,%runmode-show_on没有数据时变量为空,不显示 ALV,参见下面的屏幕截图)。

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

在此处输入图像描述


推荐阅读