ABAP 之LT_FIELDCAT的拼接写法
序
HELLO,这里是百里,一个学习中的ABAPER,我们在工作中会经常写ALV报表,那么什么东西是让你最痛苦的呢. 针对百里而言,我觉得有几点. 第一就是数据定义,第二取数,第三就是写FIELDCAT 的时候. 这东西毫无技术含量不说又非常的占位置.你要写一堆一堆一堆的. 今天百里看代码时候发现了一个小功能.就是LT_FIELDCAT的拼接写法.
什么是LT_FIELDCAT的拼接写法
其实这个名字我也想了一下.其实我不确定这个是不是该这么取名字,但是确实是拼接了FIELDCAT的字段内容.总体作用就是可以减少我们在工作中针对自定义表 的部分可以不用手写,而直接通过代码生成.
使用方法
主要是调用函数LVC_FIELDCATALOG_MERGE
该函数可以将自检表(标准表) 中的字段对应带到FIELDCAT中. 这样我们就可以少写很多的字段 .这里推荐 自检表这么干,因为标准表的文本真的有点反人类. 哈哈哈…
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = '自检表'
CHANGING
ct_fieldcat = lt_fieldcat.
实例
本次实例讲的是自建表结合自定义的两个字段直接简单方便的输出ALV对应内容
数据准备
TYPES:BEGIN OF ty_data.
INCLUDE STRUCTURE zsdt0003A.
TYPES: slbox TYPE char1,
zmsg TYPE char20.
TYPES:END OF ty_data.
DATA:gt_data TYPE TABLE OF ty_data.
DATA:lt_fieldcat TYPE lvc_t_fcat,
ls_fieldcat TYPE lvc_s_fcat,
ls_layo TYPE lvc_s_layo.
DATA:ls_glay TYPE lvc_s_glay.
ls_layo-cwidth_opt = 'X'.
data :numc TYPE p .
注意这里要用一个继承,当然不用继承也可以,只要你不嫌弃着累就行 . 用了继承可以更方便的输出ALV必须的字段.
获取数据
select * from ZSDT0003A as a into TABLE gt_data .
LOOP AT gt_data into data(gs_DAta).
numc = numc + 1 .
gs_data-zmsg = numc .
modify gt_data FROM gs_data .
ENDLOOP.
定义子例程
DEFINE add_col.
* ADD 1 TO pos.
* lw_fieldcat-col_pos = pos.
ls_fieldcat-fieldname = &1.
ls_fieldcat-ref_field = &2.
ls_fieldcat-ref_table = &3.
ls_fieldcat-scrtext_l = &4.
ls_fieldcat-outputlen = &5.
ls_fieldcat-no_zero = &6.
ls_fieldcat-edit = &7.
ls_fieldcat-edit_mask = &8.
ls_fieldcat-key = &9.
CASE ls_fieldcat-fieldname.
WHEN 'SLBOX'.
ls_fieldcat-checkbox = 'X' .
ls_fieldcat-edit = 'X' .
ls_fieldcat-edit_mask = 'X'.
" WHEN 'VBELN' .
" ls_fieldcat-HOTSPOT = 'X' .
" WHEN 'KBETR'.
" ls_fieldcat-decimals_o = 2 .
" WHEN 'FKIMG' .
" ls_fieldcat-decimals_o = 0 .
WHEN OTHERS.
ENDCASE .
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR : ls_fieldcat.
END-OF-DEFINITION.
REFRESH: lt_fieldcat.
调用函数及展示ALV
add_col 'SLBOX' space space '选项' space space space space space.
add_col 'zmsg' space space '序号' space space space space space.
"* 获取ALV固定结构
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ZSDT0003A'
CHANGING
ct_fieldcat = lt_fieldcat.
DELETE lt_fieldcat WHERE fieldname = 'MANDT'."不显示客户端字段
ls_glay-edt_cll_cb = abap_true.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
* is_variant = is_variant
i_callback_pf_status_set = 'PF_STATUS_SET'
i_callback_user_command = 'USER_COMMAND'
i_grid_settings = ls_glay
is_layout_lvc = ls_layo
it_fieldcat_lvc = lt_fieldcat
i_save = 'A'
" it_events = lt_event
TABLES
t_outtab = gt_data
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
结果展示
我们很明显看到我们自己手写的其实只用’SLBOX’ 和’ZMEG’ 字段 ,剩下的字段都是由函数帮我们写入进来的.
这样可以减少我们很多的时间 .
技术总结
今天讲的是针对自建立表时,如何更节省时间的生成对应ALV 的办法,可以减少我们非常多的时间,去做更多的事情,这种写法与自己写入的方式一样,可以在后续通过操作内表LT_FIELDCAT 的字段内容进行其他操作,如颜色,单元格,自动列宽等等都可以的.
百里鸡汤
及时当勉励,岁月不待人。劝君吸取少年时,劝君莫惜金缕衣。桐花万里丹山路,雏凤清于老凤声
这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.
- 点赞
- 收藏
- 关注作者
评论(0)