簡體   English   中英

檢測 ALV 網格中的顏色列

[英]Detect color column in ALV-grid

我正在使用這個 abap 函數以 json 格式導出報告

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.

tabluar JSON 結果包含一個名為“farbe”的列。 這是德語的意思是“顏色”。 本欄目內容在此。 AFAIK 表格結果的每一行都有一個字典。

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

我想刪除這個名為“farbe”的列,但我希望它適用於所有 sap 報告。

我不確定該專欄在非德語系統中的名稱是否不同。 也許它在英文系統中被稱為“顏色”?

如何找到包含不需要的顏色信息的列名(在本例中為“farbe”)?

PS 如何過濾 JSON 不是問題的一部分

您無法知道 ALV 中使用的名稱,這些名稱可能因報告而異。

如果 ALV 網格中有一個顏色列,它將是LVC_T_SCOL 類型 所以你可以通過使用像 CL_ABAP_TYPEDESCR 這樣的 RTTI 類來檢測它。

當然,在以下情況下,適用於所有報告以獲取 ALV 中的顏色列的通用方法將不起作用:

  • 一些 ALV 根本不輸出任何顏色(因此可能沒有顏色列)
  • 只有ALV的列被着色,它不需要顏色列,而是使用字段目錄來設置顏色。
  • 許多報告甚至不生成“網格”類型的 ALV(這是您的情況)。 一些報告使用ALV列表(與上面相同的備注,但顏色列的類型不同)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM