cl_salv_bs_runtime_info => get_data_ref () не возвращает данных - PullRequest
1 голос
/ 03 апреля 2019

У меня есть этот код, который очень хорошо работает для многих отчетов:

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 Queries строка IF lr_data_descr IS NOT BOUND. истинна, а ev_result_json пуста.

В чем может быть причина этого?

Название отчета: AQZZZMM=========ZME80FN=======.

1 Ответ

3 голосов
/ 04 апреля 2019

Метод 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 не даст вам никаких данных.
  • Может случиться, что отчет, который в основном должен отображать сетку ALV, не отображает сетку, если он не выбрал какие-либо данные результата. В этих случаях метод cl_salv_bs_runtime_info=>get_data_ref не даст вам никаких данных.
  • Существуют отчеты, которые отображают не один, а несколько элементов управления сеткой ALV одновременно с разными данными. В этом случае метод cl_salv_bs_runtime_info=>get_data_ref будет извлекать данные из последнего отображенного элемента управления сетки ALV (последней сетки, для которой был вызван метод SET_TABLE_FOR_FIRST_DISPLAY).
...