1

I have this code, which works very nice for a lot of reports:

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.

But for AdHoc Queries the line IF lr_data_descr IS NOT BOUND. is true and ev_result_json is empty.

What could be the reason for this?

The name of the report is AQZZZMM=========ZME80FN=======.

4

1 回答 1

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调用该方法的最后一个网格)中检索数据。
于 2019-04-04T11:49:34.397 回答