cl_salv_bs_runtime_info => get_data_ref()不返回任何数据

时间:2019-04-03 15:08:16

标签: sap abap alv

我有这段代码,对于许多报告来说,它都非常有用:

if IV_SELECTION_SET_VARIANT is INITIAL.
  SUBMIT (IV_REPORT_NAME)
     WITH SELECTION-TABLE selection_table
    AND RETURN.
ELSE.
  SUBMIT (IV_REPORT_NAME)
     WITH SELECTION-TABLE selection_table
     USING SELECTION-SET IV_SELECTION_SET_VARIANT
    AND RETURN.
endif.


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.

但是对于AdHoc查询,行IF lr_data_descr IS NOT BOUND.为真,行ev_result_json为空。

这可能是什么原因?

报告的名称为AQZZZMM=========ZME80FN=======

1 个答案:

答案 0 :(得分:3)

方法cl_salv_bs_runtime_info=>get_data_ref仅在您的先例SUBMIT中调用了ALV网格控件,并且之前(内部提交的报告或显式地)请求写入数据时才提供数据,通过预先调用方法cl_salv_bs_runtime_info=>set)。

  • 有些报告根本不调用ALV网格:对于这些报告,该方法将不提供任何结果数据。
  • 有些报告(例如ABAP查询),用户自己可以在其中确定如何显示数据-使用ALV网格控件,ALV列表,经典列表或其他方式。如果用户选择了“ ALV网格”以外的其他显示方法,则方法cl_salv_bs_runtime_info=>get_data_ref将不提供任何数据。
  • 可能会发生这样的情况:如果报告未选择任何结果数据,则基本上应显示ALV网格的报告不会显示网格。在这些情况下,方法cl_salv_bs_runtime_info=>get_data_ref将不提供任何数据。
  • 有些报告不显示一个,而是同时显示多个具有不同数据的ALV网格控件。在这种情况下,方法cl_salv_bs_runtime_info=>get_data_ref将从最后显示的ALV网格控件(已调用方法SET_TABLE_FOR_FIRST_DISPLAY的最后一个网格)中检索数据。