检测 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" 的列。德语的意思是 "color"。本栏目内容在此。据我所知,表格结果的每一行都有一个字典。
[
{
"color": {
"int": 0,
"inv": 0,
"col": 0
},
"fieldname": "LABST",
"nokeycol": ""
},
{
"color": {
"int": 0,
"inv": 0,
"col": 0
},
"fieldname": "MEINS",
"nokeycol": ""
},
....
]
我想删除这个名为 "farbe" 的列,但我希望它适用于所有 sap 报告。
我不确定此列在非德语系统中的调用方式是否不同。可能英文系统叫"color"?
如何找到包含不需要的颜色信息的列名称(在本例中为 "farbe")?
P.S。如何过滤 JSON 不是问题的一部分
您无法知道 ALV 中使用的名称,这些名称可能因报告而异。
如果 ALV 网格中有颜色列,它将是 类型 LVC_T_SCOL。所以你可以通过使用像 CL_ABAP_TYPEDESCR.
这样的 RTTI class 来检测它
当然,在以下情况下,适用于所有报告以获取 ALV 中的颜色列的通用方法将不起作用:
- 有些 ALV 根本不输出任何颜色(因此可能没有颜色列)
- 只对ALV的列进行着色,不需要color列,而是使用field catalog来设置颜色。
- 许多报告甚至不生成 "grid" 类型的 ALV(这是您的情况)。部分报告使用ALV列表(与上述相同的备注,但颜色列的类型不同)。
我正在使用此 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" 的列。德语的意思是 "color"。本栏目内容在此。据我所知,表格结果的每一行都有一个字典。
[
{
"color": {
"int": 0,
"inv": 0,
"col": 0
},
"fieldname": "LABST",
"nokeycol": ""
},
{
"color": {
"int": 0,
"inv": 0,
"col": 0
},
"fieldname": "MEINS",
"nokeycol": ""
},
....
]
我想删除这个名为 "farbe" 的列,但我希望它适用于所有 sap 报告。
我不确定此列在非德语系统中的调用方式是否不同。可能英文系统叫"color"?
如何找到包含不需要的颜色信息的列名称(在本例中为 "farbe")?
P.S。如何过滤 JSON 不是问题的一部分
您无法知道 ALV 中使用的名称,这些名称可能因报告而异。
如果 ALV 网格中有颜色列,它将是 类型 LVC_T_SCOL。所以你可以通过使用像 CL_ABAP_TYPEDESCR.
这样的 RTTI class 来检测它当然,在以下情况下,适用于所有报告以获取 ALV 中的颜色列的通用方法将不起作用:
- 有些 ALV 根本不输出任何颜色(因此可能没有颜色列)
- 只对ALV的列进行着色,不需要color列,而是使用field catalog来设置颜色。
- 许多报告甚至不生成 "grid" 类型的 ALV(这是您的情况)。部分报告使用ALV列表(与上述相同的备注,但颜色列的类型不同)。