gpt4 book ai didi

abap - 按数据类型动态隐藏 ALV 列

转载 作者:行者123 更新时间:2023-12-02 09:20:54 24 4
gpt4 key购买 nike

背景:我正在使用 cl_salv_table 类来生成和修改 ALV。此 ALV 显示 zpm_et_qual_notif_s 类型的表,其中每个偶数行都是 CHAR 类型的分隔符字段,长度为 1,名称为 DELIM1 DELIM2...等。由于没有理由在 ALV 中显示分隔符列,因此我想删除它们。

注意:我在标题中保留了通用的“ABAP 字典/内部结构”,因为我是否从 ABAP 字典结构或从中定义的内部表确定列数对我来说并不重要。


对我来说,简单的解决方案是使用这 15 个语句,因为当前有 15 个分隔符字段:

lv_alv->get_columns( )->get_column( 'DELIM1' )->set_visible( if_salv_c_bool_sap=>false ).
lv_alv->get_columns( )->get_column( 'DELIM2' )->set_visible( if_salv_c_bool_sap=>false ).
lv_alv->get_columns( )->get_column( 'DELIM3' )->set_visible( if_salv_c_bool_sap=>false ).
lv_alv->get_columns( )->get_column( 'DELIM4' )->set_visible( if_salv_c_bool_sap=>false ).
lv_alv->get_columns( )->get_column( 'DELIM5' )->set_visible( if_salv_c_bool_sap=>false ).
...

这样做的问题是,如果将新字段添加到表中,我的程序也必须更新。由于这个原因,并且这种方法需要许多几乎重复的行,我发现这是一个草率的解决方案。


我认为更干净的解决方案是以如下方式动态设置所有分隔符列的可见性:

" Dynamically hide delimiter columns
DATA lv_idx TYPE syst_index VALUE 1.
WHILE lv_idx < 16. " Number of delimiters
lv_alv->get_columns( )->get_column( |DELIM{ lv_idx }| )->set_visible( if_salv_c_bool_sap=>false ).
lv_idx = lv_idx + 1.
ENDWHILE.

这很好,因为它是一个简单的解决方案并且引入的开销最小。但是,我仍然遇到必须对分隔符列的数量进行硬编码的问题。理想的解决方案可以让我这样做:

" Dynamically hide delimiter columns
DATA lv_idx TYPE syst_index VALUE 1.
WHILE lv_idx < ( columns( 'ZPM_ET_QUAL_NOTIF_S' ) / 2 ). " Number of delimiters
lv_alv->get_columns( )->get_column( |DELIM{ lv_idx }| )->set_visible( if_salv_c_bool_sap=>false ).
lv_idx = lv_idx + 1.
ENDWHILE.

...但是当然,这不是问题。

如何动态获取内表或其所基于的 ABAP 字典结构的列计数?当然有一些动态解决方案可以解决这个问题。尝试自己解决这个问题导致我尝试了 cl_abap_structdescr 和 cl_abap_tabledescr ,但没有取得任何实质性成果。如果我的整个方法不好,我愿意改变它以遵循良好的实践。

最佳答案

首先,我会用 set_technical 标记这些列,以防止它们完全显示。 set_visible( abap_false ) 仅在当前/初始显示中隐藏它们,但用户可以选择显示这些可能令人困惑的列。

然后,我可能会尝试通过数据元素而不是位置来区分这些列。 (伪)代码,未经测试:

DATA(columns) = my_alv->get_columns( ).
DATA(column_list) = columns->get( ).
LOOP AT column_list ASSIGNING FIELD-SYMBOL(<column>).
IF <column>-r_column->get_ddic_rollname( ) = 'Z_IRRELEVANT_DELIMITER'.
<column>-r_column->set_technical( ).
ENDIF.
ENDLOOP.

关于abap - 按数据类型动态隐藏 ALV 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com