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
的最后一个网格)检索数据。
我有这段代码,它对很多报告都很有效:
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
的最后一个网格)检索数据。