开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
序
HELLO ,这里是百里,一个学习中的ABAPER ,在SAP开发中会经常遇到上传,下载,信息对比展示等内容,此时一般会使用messege 等采用display 'S' 的方式进行展示. 然后还有一种比较更加方便且非常明显的内容方式.就是采取红绿灯及消息展示的方式来提醒用户.此案例讲将会详细讲解红绿灯的使用方式及消息反馈的内容.
何为红绿灯
ALV红绿灯及如其名所示,就是真的红绿灯一般数据状态展示,如绿色表示通过,审核过,黄色表示有异常,警告.红色表示有禁止,暂停等信息.当然设定这个内容依然需要按照个人意愿 .
技术介绍
使用4位字符串或者 使用ABAP中固定的字符串可以展示.在ALV对应数据内容中加入到数据结构中及ALV数据中即可.
代码语言:javascript复制@0A@ 或者 ICON_RED_LIGHT. 红灯
@08@ 或者 ICON_GREEN_LIGHT. 绿灯
@09@ 或者 ICON_YELLOW_LIGHT. 黄灯
实例展示
本案红绿灯使用的经典方式,通过不同字段判断状态属性的一个案例.通过不同值,经过逻辑判断,给对应的红绿灯内容赋给对应的颜色.
数据准备
定义数据内容 附加
light TYPE iconname, "指示灯
msg TYPE string,"消息
TYPES:BEGIN OF ty_Data ,
doccode TYPE char20 ,
zrowid TYPE char20 ,
matcode TYPE char20 ,
matname TYPE char20 ,
uom TYPE char20 ,
memo TYPE char20 ,
light TYPE iconname, "指示灯
msg TYPE string,"消息
END OF ty_Data .
data : gs_data TYPE ty_Data .
data : gt_DAta TYPE TABLE of ty_Data .
" alv 通用变量
DATA: wa_layout TYPE lvc_s_layo.
DATA:wa_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat.
DATA gs_grid TYPE lvc_s_glay. "新
获取数据
获取基础数据内容,通过逻辑判断,以单位为'双' 的内容为'红灯', 不为双的内容为'绿灯'.
代码语言:javascript复制START-OF-SELECTION .
PERFORM get_data .
FORM get_data .
"select * from ZWDEMOTABLE1 as a into CORRESPONDING FIELDS OF TABLE gt_DAta .
select doccode ,zrowid ,matcode ,matname ,uom ,MEmo from ZWDEMOTABLE1 as a into TABLE @gt_DAta .
"select doccode zrowid matcode matname uom MEmo from ZWDEMOTABLE1 as a into TABLE gt_DAta .
LOOP AT gt_DAta into gs_data.
IF gs_data-uom = '双'.
gs_data-msg = '这个单位是' && gs_data-uom && '是红灯' .
gs_data-light = icon_led_red.
ELSE.
gs_data-msg = '这个单位是' && gs_data-uom && '是绿灯' .
gs_data-light = icon_led_green.
ENDIF.
MODIFY gt_DAta FROM gs_data .
CLEAR gs_data .
ENDLOOP.
ENDFORM.
数据展示
代码语言:javascript复制FORM diaplay_data .
PERFORM set_alv_layout.
PERFORM bulid_fieldcat.
PERFORM call_alv_func.
ENDFORM.
FORM set_alv_layout .
CLEAR: wa_layout.
wa_layout-zebra = 'X'. "斑马线
"wa_layout-cwidth_opt = 'X'. "自动列宽
ENDFORM.
FORM bulid_fieldcat .
DEFINE add_col.
* ADD 1 TO pos.
* lw_fieldcat-col_pos = pos.
wa_fieldcat-fieldname = &1.
wa_fieldcat-ref_field = &2.
wa_fieldcat-ref_table = &3.
wa_fieldcat-scrtext_l = &4.
wa_fieldcat-outputlen = &5.
wa_fieldcat-no_zero = &6.
wa_fieldcat-edit = &7.
wa_fieldcat-edit_mask = &8.
wa_fieldcat-key = &9.
CASE wa_fieldcat-fieldname.
WHEN 'MSG' .
wa_fieldcat-outputlen = '40' .
" WHEN 'slbox'.
" wa_fieldcat-checkbox = 'X' .
" wa_fieldcat-edit = 'X' .
" wa_fieldcat-edit_mask = 'X'.
" WHEN 'VBELN' .
" wa_fieldcat-HOTSPOT = 'X' .
" WHEN 'KBETR'.
" wa_fieldcat-decimals_o = 2 .
" WHEN 'FKIMG' .
" wa_fieldcat-decimals_o = 0 .
WHEN OTHERS.
ENDCASE .
APPEND wa_fieldcat TO gt_fieldcat.
CLEAR : wa_fieldcat.
END-OF-DEFINITION.
REFRESH: gt_fieldcat.
add_col 'LIGHT' space space '状态灯' space space space space space.
add_col 'MSG' space space '消息' space space space space space.
add_col 'DOCCODE' space space '单号' space space space space space.
add_col 'ZROWID' space space 'rowid' space space space space space.
add_col 'MATCODE' space space '料号' space space space space space.
add_col 'MATNAME' space space '料名' space space space space space.
add_col 'UOM' space space '单位' space space space space space.
add_col 'MEMO' space space '备注' space space space space space.
ENDFORM.
FORM call_alv_func .
DATA :gt_event TYPE slis_t_event,
gs_event TYPE slis_alv_event.
" MOVE 'DATA_CHANGED' TO gs_event-name.
" MOVE 'ALV_DATA_CHANGED' TO gs_event-form.
APPEND gs_event TO gt_event.
gs_grid-edt_cll_cb = abap_true. " 选中复选款,立刻触发data changed 事件
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid "回调程序
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
i_grid_settings = gs_grid
is_layout_lvc = wa_layout
it_fieldcat_lvc = gt_fieldcat "需要显示的内表的列
i_save = 'A'
it_events = gt_event
TABLES
t_outtab = gt_DAta "需要显示的数据
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
结果
此处只是做一个案例解释,典型以双为单位的红灯.非双为单位的为绿灯 .
技术总结
本篇文章讲的内容是,工作中会常用的红绿灯及消息反馈内容附加的内容. 学会了此内容以后,可以对比上传,下载,OLE等动作实现用户数据反馈. 满足用户的防呆操作需求.
“我深怕自己本非美玉,
故而不敢加以刻苦琢磨。
却又半信自己是块美玉,
故而又不肯庸庸碌碌
与瓦砾为伍。 ” --- 山月记
这里是百里一个努力的学习者 .努力学习好好记录,点滴进步,就是成功.