0
点赞
收藏
分享

微信扫一扫

ALV显示红绿灯(FM ALV 和 OO ALV两…

玉字璧 2022-06-10 阅读 96

FM 方式ALV 红绿灯


*&---------------------------------------------------------------------*


*& Report  ZLM_ALV_07


*&


*&---------------------------------------------------------------------*


*1)在alv引用类型池定义时加入icon,如type-pools: slis, icon.


*


*2)给显示内表itab定义一字段statu存储状态灯;


*


*3)循环内表itab给字段statu值赋:


*绿灯:itab-statu = icon_led_green.


*红灯:itab-statu = icon_led_red.


*4)alv的fieldcat属性i_fieldcat-icon = 'X'.


*&---------------------------------------------------------------------*



REPORT  zlm_alv_07 .



*&---------------------------------------------------------------------*


*& 声明


*&---------------------------------------------------------------------*


TYPE-POOLS : slis ,  icon .



*&---------------------------------------------------------------------*


*&基本数据定义


*&---------------------------------------------------------------------*


DATA :

 

          BEGIN  OF str_data ,

 

              id      TYPE int4 ,

 

              age        TYPE int4 ,

 

              statu    TYPE char10 ,

 

          END  OF str_data .



DATA :

 

          g_it_data  LIKE  TABLE  OF str_data ,

 

          g_wa_data  LIKE str_data .



*&---------------------------------------------------------------------*


*& ALV相关定义


*&---------------------------------------------------------------------*


DATA : fieldcat  TYPE slis_t_fieldcat_alv  WITH  HEADER  LINE .



*&---------------------------------------------------------------------*


*& 宏定义


*&---------------------------------------------------------------------*


DEFINE fill_fieldcat .

 

  fieldcat -fieldname  = &1 .

 

  fieldcat -seltext_l  = &2 .

 

  fieldcat - icon     =  'X' .       "图标功能

 

  append fieldcat .


END-OF-DEFINITION .



*&---------------------------------------------------------------------*


*& 主逻辑


*&---------------------------------------------------------------------*



START-OF-SELECTION .

 

  PERFORM zform_fill_data .

 

  PERFORM zform_show .



*&---------------------------------------------------------------------*


*& form区


*&---------------------------------------------------------------------*



FORM zform_fill_data .

 

  fill_fieldcat    'ID'    '编号' .

 

  fill_fieldcat    'AGE'   '年龄' .

 

  fill_fieldcat    'STATU'  '灯饰' .


 

  g_wa_data - id     =  1 .

 

  g_wa_data -age      =  12 .

 

  g_wa_data -statu  = icon_led_red .


 

  APPEND g_wa_data  TO g_it_data .


 

  g_wa_data - id     =  2 .

 

  g_wa_data -age      =  13 .

 

  g_wa_data -statu  = icon_led_green .


 

  APPEND g_wa_data  TO g_it_data .


ENDFORM .                     "zform_fill_data



*&---------------------------------------------------------------------*


*&      Form  zform_show


*&---------------------------------------------------------------------*


*       text


*----------------------------------------------------------------------*


FORM zform_show .

 

  CALL  FUNCTION  'REUSE_ALV_LIST_DISPLAY'

 

      EXPORTING

 

          it_fieldcat  = fieldcat[]

 

      TABLES

 

          t_outtab        = g_it_data[] .


ENDFORM .                     "zform_show


OO 方式ALV 红绿灯 效果: ​ALV显示红绿灯(FM <wbr>ALV <wbr>和 <wbr>OO <wbr>ALV两种实现方式)



主要代码: *&---------------------------------------------------------------------* *&   全局变量 *&---------------------------------------------------------------------* DATA:       BEGIN OF str_spfli,         checkbox TYPE char1,         status   TYPE icon_d,                 "检查状态图标         carrid   TYPE   sflight-carrid       , "航线承运人ID         connid   TYPE   sflight-connid       , "航班连接 Id         fldate   TYPE   sflight-fldate       , "航班日期         price     TYPE   sflight-price         , "航空运费         cellstyle TYPE lvc_t_styl,           "可编辑字段SORT表       END OF   str_spfli.

DATA:       g_it_show LIKE TABLE OF str_spfli WITH KEY checkbox carrid connid,       g_wa_show LIKE str_spfli.


START-OF-SELECTION.

  "获取数据   SELECT carrid           connid           fldate           price     FROM sflight INTO CORRESPONDING FIELDS OF   TABLE g_it_show.

  FIELD-SYMBOLS   LIKE LINE OF   g_it_show.   DATA:l_dex TYPE int4.

  LOOP AT g_it_show ASSIGNING .     l_dex = sy-tabix MOD 3.

    CASE l_dex.       WHEN 1 .         -status = icon_led_green.       WHEN 2.         -status = icon_led_red.       WHEN OTHERS.         -status = icon_led_yellow.     ENDCASE.   ENDLOOP.   "调用屏幕   CALL SCREEN 9001.



FORM zform_alv_show .   DATA:   l_style       TYPE i,           ls_layout     TYPE lvc_s_layo,           is_stable     TYPE lvc_s_stbl,           l_disvariant TYPE disvariant.

* 屏幕初始化   IF alv_ctner IS INITIAL.

    CREATE OBJECT alv_ctner       EXPORTING         repid                       = sy-repid         dynnr                       = '9001' *       side                         = cl_gui_docking_container=>dock_at_right       ”ALV贴屏幕右边,从屏幕右边开始算宽度         side                         = cl_gui_docking_container=>dock_at_left       "ALV贴屏幕左边,从左边算屏幕宽度,         extension                   = 900                                           "屏幕宽度 *         style                       = cl_gui_control=>ws_child                     "可选参数,设置ALV是否可用手动拖动大小       EXCEPTIONS         cntl_error                   = 1         cntl_system_error           = 2         create_error                 = 3         lifetime_error               = 4         lifetime_dynpro_dynpro_link = 5         OTHERS                       = 6.

    IF sy-subrc <> 0.       MESSAGE s001(00) WITH '屏幕初始化失败'.       LEAVE LIST-PROCESSING.     ENDIF.

*添加自定义工具条     PERFORM frm_set_alv_toolbar. *     CREATE OBJECT g_alv_grid       EXPORTING         i_parent = alv_ctner.

*构建显示字段样式     PERFORM frm_build_fieldcat.

    "Set/Reset Ready for Input Status     CALL METHOD g_alv_grid->set_ready_for_input       EXPORTING         i_ready_for_input = 1.

* layout 设定样式     CLEAR ls_layout.     ls_layout-cwidth_opt = 'X'.     "优化列宽

    CLEAR l_disvariant.     l_disvariant-report = sy-repid. "当前程序

* event   绑定事件     CREATE OBJECT g_event.

    SET HANDLER g_event->toolbar             FOR g_alv_grid.     SET HANDLER g_event->handle_data_changed FOR g_alv_grid. *     SET HANDLER g_event->handle_f4           FOR g_alv_grid.     SET HANDLER g_event->handle_cell_click   FOR g_alv_grid.     SET HANDLER g_event->handle_user_command FOR g_alv_grid.     SET HANDLER g_event->handle_double_click FOR g_alv_grid.     SET HANDLER g_event->handle_onf1         FOR g_alv_grid.

    "以下两个方法达到的效果是:光标离开正在编辑的单元格时,就触发了handle_data_changed     "如果不注释掉以下两个方法,则只有执行下一操作时才会触发handle_data_changed,比如点保存点删除     CALL METHOD g_alv_grid->register_edit_event       EXPORTING         i_event_id = cl_gui_alv_grid=>mc_evt_modified.

    CALL METHOD g_alv_grid->register_edit_event       EXPORTING         i_event_id = cl_gui_alv_grid=>mc_evt_enter.

*   "显示内表数据     CALL METHOD g_alv_grid->set_table_for_first_display       EXPORTING         is_layout             = ls_layout         is_variant           = l_disvariant         it_toolbar_excluding = gt_tools       CHANGING         it_fieldcatalog       = it_fieldcatalog[]         it_outtab             = g_it_show[].

  ELSE.

    "冲销设置tcode 为 RELOAD,防止因为原来的tcode影响程序执行     CALL METHOD cl_gui_cfw=>set_new_ok_code       EXPORTING         new_code = 'RELOAD'.

    "ALV 控制:刷新稳定性 按行刷新,可选参数     CLEAR is_stable.     is_stable-col = 'X'.

    "刷新     CALL METHOD g_alv_grid->refresh_table_display       EXPORTING         is_stable       = is_stable         i_soft_refresh = 'X'.

    "提交     CALL METHOD cl_gui_cfw=>flush.

  ENDIF. ENDFORM.                     " ZFORM_ALV_SHOW




举报

相关推荐

0 条评论