为什么没有绑定cl_salv_bs_runtime_info => get_data_ref()的r_data_line_descr?

时间:2019-04-25 08:35:32

标签: sap abap

我有这段代码,它已经运行了好几个月了:

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


FIELD-SYMBOLS <lt_data>             TYPE ANY TABLE.
FIELD-SYMBOLS <lt_data_line>        TYPE ANY TABLE.

DATA          lr_data               TYPE REF TO data.
DATA          lr_data_line          TYPE REF TO data.
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(
     IMPORTING 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.

....

但是对于一个报告,lr_data_descr如果是通过rfc调用的,则表示“不受限制”。

如果我通过se80中的“测试”运行功能模块,则它可以工作。但是,如果我通过rfc调用它,则它没有绑定。我对RFC和SE80使用相同的用户(“服务”类型)。

换句话说:相同的输入和相同的代码。它适用于普通调试,但无法(不受限制)进行远程调试。

为什么有区别?

有没有办法得到一些错误消息?

如果我能知道它没有被绑定的原因,这真的很有帮助。

我调试到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.

如果我在se80 sy-subrc中测试功能模块为0。如果我进行外部调试(同一用户),则sys-subrc为4

是临时报告。名称:AQZZZMM ========= ZME80FN =======

1 个答案:

答案 0 :(得分:1)

r_data_line_descr中的cl_salv_bs_runtime_info=>get_data_ref()没有绑定的唯一情况是:

  • 未称为ALV

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

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

enter image description here