Записать любой стандартный отчет в JSON или XML?

Я знаю, что могу использовать LIST_TO_ASCI для преобразования отчета в ASCII, но мне хотелось бы иметь формат данных более высокого уровня, такой как JSON, XML, CSV.

Есть ли способ получить что-то, что легче обрабатывать, чем ASCII?

Вот отчет, который я хотел бы преобразовать:

введите здесь описание изображения

Преобразование должно быть выполнено в ABAP для результата, который был выполнен следующим образом:

SUBMIT <REPORT_NAME> ... EXPORTING LIST TO MEMORY AND RETURN.

person guettli    schedule 02.08.2018    source источник
comment
более высокоуровневые данные, можете ли вы объяснить?   -  person Sandra Rossi    schedule 02.08.2018
comment
@SandraRossi с форматом данных высокого уровня2 Я имею в виду, например, CSV, json, XML, yaml, proto-buf.   -  person guettli    schedule 02.08.2018
comment
И отчет означает itab, верно?   -  person Florian    schedule 02.08.2018
comment
ALV имеет встроенную функцию Экспорт в электронную таблицу, где вы можете найти как формат SAP XLM, так и Excel XML. . Также вы можете использовать ссылку Сохранить в локальный файл, который позволяет экспортировать в файл с разделителями табуляции, который легко конвертируется в CSV.   -  person Suncatcher    schedule 02.08.2018
comment
@Suncatcher это нужно выполнить в ABAP. Я обновил вопрос.   -  person guettli    schedule 02.08.2018
comment
Для этого нет функции, вы должны кодировать сами. Существует только функция для преобразования LIST/SPOOL в PDF/HTML/TEXT   -  person I.B.N.    schedule 02.08.2018
comment
Итак, это выход ALV. Фактическая тенденция заключается в перехвате выходной таблицы до отображения списка ABAP с помощью класса CL_SALV_BS_RUNTIME_INFO (до и после вашего SUBMIT). Найдите дополнительную информацию.   -  person Sandra Rossi    schedule 03.08.2018


Ответы (2)


Вы можете получить доступ к списку SUBMIT в памяти следующим образом:

call function 'LIST_FROM_MEMORY'
  TABLES
   listobject       = t_list
  EXCEPTIONS
   not_found        = 1
   others           = 2.

if sy-subrc <> 0.
  message 'Unable to get list from memory' type 'E'.
endif.

call function 'WRITE_LIST'
  TABLES
   listobject       = t_list
  EXCEPTIONS
   EMPTY_LIST       = 1
   OTHERS           = 2
        .
 if sy-subrc <> 0.
  message 'Unable to write list' type 'E'.
 endif.

И на последний шаг решения (преобразование таблицы результатов в JSON) вам уже ответили в вашем вопросе.

person Suncatcher    schedule 02.08.2018
comment
Вы говорите, что на последний шаг решения (преобразование таблицы результатов в JSON) вам уже ответили в вашем вопросе. Я не могу следовать за тобой. Другой вопрос в другом. Другой вопрос касается запроса к базе данных. Вышеупомянутый вопрос касается вывода списка. Насколько мне известно, ответы на другой вопрос здесь неприменимы, поскольку тип входных данных другой. - person guettli; 08.08.2018
comment
Ввод данных не имеет значения. И фрагмент SUBMIT, и результат запроса к базе данных во внутреннюю таблицу, преобразование которой в JSON тривиально. - person Suncatcher; 08.08.2018

Я нашел решение здесь: http://zevolving.com/2015/07/salv-table-22-get-data-directly-after-submit/

Это код:

DATA: lt_outtab TYPE STANDARD TABLE OF alv_t_t2.
FIELD-SYMBOLS: <lt_outtab> like lt_outtab.
DATA lo_data TYPE REF TO data.

" Let know the model
 cl_salv_bs_runtime_info=>set(
  EXPORTING
    display  = abap_false
    metadata = abap_false
    data     = abap_true
).


SUBMIT salv_demo_table_simple
  AND RETURN.

TRY.
    " get data from SALV model
    cl_salv_bs_runtime_info=>get_data_ref(
          IMPORTING
            r_data = lo_data
    ).
    ASSIGN lo_data->* to <lt_outtab>.
    BREAK-POINT.    

  CATCH cx_salv_bs_sc_runtime_info.
ENDTRY.

Большое спасибо Сандре Росси, она подсказала мне cx_salv_bs_sc_runtime_info.

Связанный ответ: https://stackoverflow.com/a/52834118/633961

person guettli    schedule 20.08.2018