OO方式實現ALV: cl_salv_table


這里總結最近用cl_salv_table實現ALV遇到問題和解決辦法

FORM set_alv2 .
DATA: lv_syrepid TYPE syrepid.
      lv_syrepid  = sy-cprog.
      cl_salv_table=>factory(
        EXPORTING
        list_display = abap_false
        r_container = cl_gui_container=>screen0
        IMPORTING
          r_salv_table = gr_alv
        CHANGING t_table = gt_doc ). “傳輸需要顯示的內表

      gr_functions = gr_alv->get_functions( ).        "獲取常用的ALV功能按鈕


DATA lv_icon TYPE string.
lv_icon = icon_refresh.
gr_functions->add_function(       "添加自定義按鈕
 EXPORTING
   name = 'DOWNLOAD'
   icon = '@M9@'
   text = '下載文檔'
   tooltip = '下載文檔'
   position = if_salv_c_function_position=>right_of_salv_functions ). "往右邊排

gr_functions->add_function(
 EXPORTING
   name = 'SELECT_ALL'
   icon = '@4B@'
   text = '全選'
   tooltip = '全選'
   position = if_salv_c_function_position=>left_of_salv_functions ). "往右邊排

gr_functions->add_function(
 EXPORTING
   name = 'DESELECT_ALL'
   icon = '@4D@'
   text = '取消全選'
   tooltip = '取消全選'
   position = if_salv_c_function_position=>left_of_salv_functions ). "往右邊排

gr_functions->set_all( abap_true ). ”設置所有alv按鈕(自帶的+自定義的)
"=====獲取事件對象
DATA: gr_event TYPE REF TO cl_salv_events_table.
gr_event = gr_alv->get_event( ).

"=====事件注冊
DATA: gr_handle_event TYPE REF TO cl_handle_events.
CREATE OBJECT gr_handle_event.
SET HANDLER gr_handle_event->on_user_command FOR gr_event.
SET HANDLER gr_handle_event->on_checkbox     FOR gr_event.
DATA: gr_column_list TYPE REF TO cl_salv_column_list.

      gr_columns = gr_alv->get_columns( ).               "獲取列的class
      gr_column  = gr_columns->get_column('ACTION_NO').  "獲取該列 
      gr_column->set_short_text('需求號').        "調用修改列名稱的方法
      gr_columns->set_optimize( abap_true ).      "調用設置列最優化設置方法這邊用到列實例是gr_colums不是gr_colum

      gr_column = gr_columns->get_column('FLAG').  

      gr_column->set_short_text('選擇').
      gr_columnt ?= gr_column.                      "這邊很重要
      gr_columnt->set_cell_type( 6 ).          "設置選擇列為checkbox,6代表checkbox

      gr_display = gr_alv->get_display_settings( ).  "alv設置
      gr_display->set_list_header('需求號&文檔編號報表'). "alv抬頭設置
      gr_alv->display( )."調用實例方法顯示表報        "調用顯示alv方法展示ALV報表
ENDFORM.                    " SET_ALV2
下面是是事件的class的定義
CLASS
cl_handle_events DEFINITION. PUBLIC SECTION. METHODS: on_user_command FOR EVENT added_function OF cl_salv_events_table IMPORTING e_salv_function, on_checkbox FOR EVENT link_click OF cl_salv_events_table IMPORTING row column. ENDCLASS. CLASS cl_handle_events IMPLEMENTATION. METHOD on_user_command. PERFORM handle_user_command USING e_salv_function. ENDMETHOD. METHOD on_checkbox. PERFORM handle_clickbox USING row column. ENDMETHOD. ENDCLASS.
事件的方法定義
FORM
handle_user_command USING p_function TYPE salv_de_function. CASE p_function. WHEN 'DOWNLOAD'. PERFORM down_doc. WHEN 'DESELECT_ALL'. gs_doc-flag = ' '. MODIFY gt_doc FROM gs_doc TRANSPORTING flag WHERE flag = 'X'. WHEN 'SELECT_ALL'. gs_doc-flag = 'X'. MODIFY gt_doc FROM gs_doc TRANSPORTING flag WHERE flag = ' '. ENDCASE. gr_alv->refresh( ). ENDFORM.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM