cl_salv_bs_runtime_info=>get_data_ref() returns 无数据

cl_salv_bs_runtime_info=>get_data_ref() returns no data

我有这段代码,它对很多报告都很有效:

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=======

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

  • 有些报告根本不调用 ALV 网格:对于这些报告,该方法不会提供任何结果数据。
  • 有一些报告(如 ABAP 查询),用户自己可以确定如何显示数据 - 使用 ALV 网格控件,或作为 ALV 列表,或作为经典列表,甚至以其他方式。如果用户选择了 "ALV grid" 以外的其他显示方法,cl_salv_bs_runtime_info=>get_data_ref 方法将不会为您提供任何数据。
  • 如果没有 select 任何结果数据,则可能会出现基本上应该显示 ALV 网格的报告不显示网格的情况。在这些情况下,cl_salv_bs_runtime_info=>get_data_ref 方法不会给您任何数据。
  • 有些报告一次显示的不是一个而是多个 ALV 网格控件,数据不同。在这种情况下,方法 cl_salv_bs_runtime_info=>get_data_ref 将从最后显示的 ALV 网格控件(调用方法 SET_TABLE_FOR_FIRST_DISPLAY 的最后一个网格)检索数据。