ABAP: в отчете есть столбец "farbe", содержащий информацию о цвете - PullRequest
0 голосов
/ 07 декабря 2018

Я экспортирую отчеты с этой функцией abap в формате json.

FUNCTION /MLK/GET_REPORT_DATA .
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(IV_REPORT_NAME) TYPE  PROGRAMM
*"     VALUE(IV_DYNAMIC_PARAMETER_LIST) TYPE  WDY_KEY_VALUE_LIST
*"       OPTIONAL
*"     VALUE(IV_SELECTION_SET_VARIANT) TYPE  RALDB_VARI OPTIONAL
*"  EXPORTING
*"     VALUE(EV_RESULT_JSON) TYPE  STRING
*"----------------------------------------------------------------------

cl_salv_bs_runtime_info=>set(
 EXPORTING
   display  = abap_false
   metadata = abap_false
   data     = abap_true
).


data selection_table TYPE TABLE OF RSPARAMS.

PERFORM GET_REPORT_READ_PARAMETER
    USING IV_DYNAMIC_PARAMETER_LIST
   CHANGING selection_table.


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.


CREATE DATA lr_data         TYPE HANDLE lr_data_descr.
CREATE DATA lr_data_line    TYPE HANDLE lr_data_line_descr.

ASSIGN lr_data->*           TO <lt_data>.
ASSIGN lr_data_line->*      TO <lt_data_line>.

DATA lx_runtime_info TYPE REF TO cx_salv_bs_sc_runtime_info.

TRY.

* hierarchical report

  cl_salv_bs_runtime_info=>get_data(
    IMPORTING
      t_data      = <lt_data>
      t_data_line = <lt_data_line>
         ).
  ev_result_json = /ui2/cl_json=>serialize( data = <lt_data_line> pretty_name = /ui2/cl_json=>pretty_mode-low_case ).

CATCH cx_salv_bs_sc_runtime_info INTO lx_runtime_info.
* normal (flat) report
  cl_salv_bs_runtime_info=>get_data(
    IMPORTING
      t_data      = <lt_data>
         ).
  ev_result_json = /ui2/cl_json=>serialize( data = <lt_data> pretty_name = /ui2/cl_json=>pretty_mode-low_case ).

ENDTRY.
cl_salv_bs_runtime_info=>clear_all( ).

ENDFUNCTION.


FORM GET_REPORT_READ_PARAMETER
  USING parameter_list TYPE  WDY_KEY_VALUE_LIST
  CHANGING sel_table TYPE RSPARAMS_TT.


data key_value TYPE wdy_key_value.
data key_value2 TYPE wdy_key_value.
data selection_row TYPE RSPARAMS.

LOOP AT parameter_list INTO key_value.
    selection_row-selname = key_value-key.
    selection_row-low = key_value-value.
    selection_row-sign = 'I'.
    selection_row-option = 'EQ'.
   APPEND selection_row to sel_table.
ENDLOOP.

ENDFORM.

В табличном результате JSON содержится столбец с именем "farbe".Что в переводе с немецкого означает «цвет».

Вот содержание этого столбца.AFAIK, есть диктант для каждой строки табличного результата.

[
  {
    "color": {
      "int": 0, 
      "inv": 0, 
      "col": 0
    }, 
    "fieldname": "LABST", 
    "nokeycol": ""
  }, 
  {
    "color": {
      "int": 0, 
      "inv": 0, 
      "col": 0
    }, 
    "fieldname": "MEINS", 
    "nokeycol": ""
  }, 
 ....
 ]

Я хотел бы удалить этот столбец с именем "farbe".

Но я хотел бы, чтобы это работало для всех сокотчеты.

Я не уверен, что этот столбец называется другим в не немецкой системе.Может быть, это называется "цвет" в английской системе?

Как найти имя столбца (в данном случае "farbe"), который содержит ненужную информацию о цвете?

(Как отфильтроватьJSON не является частью вопроса)

1 Ответ

0 голосов
/ 07 декабря 2018

Вы не можете знать имена, используемые в ALV, которые могут отличаться от отчета к другому.

Если в сетке ALV есть цветной столбец, он будет иметь тип типа LVC_T_SCOL .Таким образом, вы можете обнаружить его, используя класс RTTI, такой как CL_ABAP_TYPEDESCR.

Конечно, общий метод, работающий для всех отчетов, чтобы получить цветной столбец в ALV, не будет работать, если:

  • Некоторые ALV вообще не выводят какой-либо цвет (поэтому, возможно, нет цветового столбца)
  • Только столбцы ALV окрашены, для него не нужен цветовой столбец, вместо этого каталог полей используется для установки цвета.
  • Многие отчеты даже не дают ALV типа "grid" (в вашем случае).В некоторых отчетах используются списки ALV (примечания того же типа, что и выше, но тип цветного столбца другой).
...