如何为CL_SALV_TABLE输出ALV的自定义结构字段设置列名
解决方案
首先澄清核心误区:lo_columns->get_column( )的入参不是ALV显示的列标题,是你定义结构体时的技术字段名,和当前列有没有显示标题无关,ABAP字典内的技术字段名默认全大写,所以你直接传入'DATA1'/'DATA2'/'DATA3'即可获取列对象,之后再修改显示名。
方案1:直接通过技术字段名修改列名
代码示例:
DATA(lo_columns) = go_alv->get_columns( ). " 修改data1列显示名 DATA(lo_column) = lo_columns->get_column( 'DATA1' ). lo_column->set_long_text( '自定义列名1' ). lo_column->set_medium_text( '列名1' ). " 可选,中等长度显示名 lo_column->set_short_text( '列1' ). " 可选,短长度显示名 " 同理修改data2、data3 lo_column = lo_columns->get_column( 'DATA2' ). lo_column->set_long_text( '自定义列名2' ). lo_column = lo_columns->get_column( 'DATA3' ). lo_column->set_long_text( '自定义列名3' ).
方案2:预定义字段语义标签(无需事后修改列名)
如果希望ALV自动带出列名,不需要每次渲染时单独设置,可以在定义结构时为字段绑定带标签的数据元素,或使用ABAP注解直接定义字段标签:
TYPES: BEGIN OF ty_workarea, data1 TYPE string @EndUserText.label: '自定义列名1', data2 TYPE string @EndUserText.label: '自定义列名2', data3 TYPE string @EndUserText.label: '自定义列名3', END OF ty_workarea.
注:
@EndUserText.label注解需要在ABAP 7.40及以上版本环境支持,低版本可先创建自定义数据元素,在数据元素的「字段标签」页维护对应显示名后,结构体字段参考该数据元素即可。
使用该结构定义的内表生成ALV时,系统会自动读取标签内容作为列标题,无需额外调用set方法修改。
内容的提问来源于stack exchange,提问作者covenant
相关产品推荐
相关产品推荐

