ABAP ALV之红绿灯使用方式及消息反馈的使用详解

2022-12-02 14:55:52 浏览数 (1)


开启掘金成长之旅!这是我参与「掘金日新计划 · 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,"消息

代码语言:javascript复制
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等动作实现用户数据反馈. 满足用户的防呆操作需求.

“我深怕自己本非美玉,

故而不敢加以刻苦琢磨。

却又半信自己是块美玉,

故而又不肯庸庸碌碌

与瓦砾为伍。 ” --- 山月记

这里是百里一个努力的学习者 .努力学习好好记录,点滴进步,就是成功.

0 人点赞