在老白的QQ群里(15881589)看到有人讨论字符串空格的问题,想起之前做过的一个需求,把WBS描述按层级显示,代码如下:
ls_prps-post1 = repeat( val = ` ` occ = ls_prps-stufe - 1 ) && ls_prps_post1.
但是当放到ALV里展示的时候,空格都被吞了。
当时没办法,只认为是SAP的ALV控件的bug,就把半角空格换成了全角空格。
今天群里知名大佬Sariel说SALV可以显示空格,然后搜到了一下DEMO程序SALV_DEMO_TABLE_REAL_SIMPLE,复制出来,更改后代码如下:
DATA: gt_outtab TYPE TABLE OF sflight.
DATA: gr_table TYPE REF TO cl_salv_table.
SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_outtab.
gt_outtab[ 1 ]-planetype = ` ` && gt_outtab[ 1 ]-planetype.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = gt_outtab.
gr_table->get_columns( )->get_column( 'PLANETYPE' )->set_leading_spaces( 'X' ).
gr_table->display( ).
WOC,确实可以显示空格。认知又被颠覆了……
不死心。跟一下程序,看它是怎么实现的。
盲猜SALV也是用的CL_GUI_ALV_GRID的OO控件,所以肯定也会依托屏幕作为容器来展示,于是按"CALL SCREEN"打断点,顺利DEBUG进到REUSE_ALV_GRID_DISPLAY函数代码中。
然后看函数中FIELDCAT的参数,对比了一下,很容易就发现有这么个不同之处。
于是写个DEMO看一下:
DATA: lt_makt LIKE TABLE OF makt,
lt_fcat TYPE lvc_t_fcat.
APPEND VALUE #( maktx = '1' ) TO lt_makt.
APPEND VALUE #( maktx = ' 1' ) TO lt_makt.
APPEND VALUE #( fieldname = 'MATNR' ) TO lt_fcat.
APPEND VALUE #( fieldname = 'MAKTX' parameter0 = 'X' ) TO lt_fcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
it_fieldcat_lvc = lt_fcat
TABLES
t_outtab = lt_makt
EXCEPTIONS
OTHERS = 1.
运行效果如下:
最后,特别感谢大S(Sariel)。
结论很简单,就是parameter0参数。至于其他参数有什么用,期待大家的探索了。
上面的问题分析过程,你学废了吗?
我的SE38插件工具箱——视频介绍:
https://www.bilibili.com/video/BV1hP4y1N7Qz/
联系286503700获取
ABAP文章汇总:
https://mp.weixin.qq.com/s/djmMeM0qfDxPPwxbjuJABA
Excel文章汇总:
https://mp.weixin.qq.com/s/NwJ0SzIrn9hVmaCMo-UYyA
网盘永久链接:
https://mp.weixin.qq.com/s/f_WwKZdwM-vPEstTjjz_eQ
关注公众号,点下方菜单打开上面的链接,更方便哦。
笔者微信:286503700(QQ同号)
如果喜欢,谢谢转发。