cl_salv_bs_runtime_info=>get_data_ref() 不返回数据

gue*_*tli 1 abap alv sap-query

我有这个代码,它适用于很多报告:

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.
Run Code Online (Sandbox Code Playgroud)

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

这可能是什么原因?

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

rpl*_*iko 5

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已调用该方法的最后一个网格)检索数据。