ALV显示红绿灯(FMnbsp;ALVnbsp;和nbsp;OOnbsp;ALV两…
生活随笔
收集整理的這篇文章主要介紹了
ALV显示红绿灯(FMnbsp;ALVnbsp;和nbsp;OOnbsp;ALV两…
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 紅綠燈 效果:
主要代碼: *&---------------------------------------------------------------------* *& ?全局變量 *&---------------------------------------------------------------------* 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
OOalv相關,可見;http://blog.sina.com.cn/s/blog_c0978c9b0101f1ee.html
*&---------------------------------------------------------------------*
*&?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 紅綠燈 效果:
主要代碼: *&---------------------------------------------------------------------* *& ?全局變量 *&---------------------------------------------------------------------* 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
OOalv相關,可見;http://blog.sina.com.cn/s/blog_c0978c9b0101f1ee.html
轉載于:https://www.cnblogs.com/senlinmu110/p/3802248.html
總結
以上是生活随笔為你收集整理的ALV显示红绿灯(FMnbsp;ALVnbsp;和nbsp;OOnbsp;ALV两…的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Wait--查看等待
- 下一篇: 设计原则:公理系统在编程中的运用