ABAP ALV TOOLBAR 自定義按鈕的型別以及listmenu按鈕

SAP騎士發表於2009-09-18
3.新增自定義的按鈕和響應命令
 
    我們在ALV的工具條上增加一些按鈕來增加我們自定義的功能,當然也可以在GUI狀態中增加,2種的處理方式是不一樣的.
    我們通過toolbar事件來增加按鈕,然後通過user_command事件來實現我們自定義的功能.
 
    在TOOLBAR事件裡,我們把自定義的按鈕加到引數"e_object"的表屬性"mt_toolbar"中可以了.下面是一段示例程式碼:
 
FORM. handle_toolbar USING i_object TYPE REF TO cl_alv_event_toolbar_set.
   DATA: ls_toolbar TYPE stb_button.
 
   CLEAR ls_toolbar.
   MOVE 3 TO ls_toolbar-butn_type.
   APPEND ls_toolbar TO i_object->mt_toolbar.
 
   CLEAR ls_toolbar.
   MOVE 'PER' TO ls_toolbar-function.
   MOVE icon_display_text TO ls_toolbar-icon.
   MOVE 'Passenger Info'(201) TO ls_toolbar-quickinfo.
   MOVE 'Passenger Info'(201) TO ls_toolbar-text.
   MOVE ' ' TO ls_toolbar-disabled.
   APPEND ls_toolbar TO i_object->mt_toolbar.
 
   CLEAR ls_toolbar.
   MOVE 'EXCH' TO ls_toolbar-function.
   MOVE 2 TO ls_toolbar-butn_type.
   MOVE icon_calculation TO ls_toolbar-icon.
   MOVE 'Payment in other Curencies'(202) TO ls_toolbar-quickinfo.
   MOVE ' ' TO ls_toolbar-text.
   MOVE ' ' TO ls_toolbar-disapbled.
   APPEND ls_toolbar TO i_object->mt_toolbar.
ENDFORM.
 
增加自定義按鈕的結構如下:
Field
Description
FUNCTION
功能程式碼
BUTN_TYPE
按鈕型別
可用的按鈕型別:
0                                                     Button(normal)
1                                                     Menu and default button
2                                                     Menu
3                                                     分割符
4                                                     Radio button
5                                                     Checkbox
6                                                     Menu entry
ICON
按鈕圖示(可選)
TEXT
按鈕文字(可選)
QUICKINFO
按鈕的懸停文字(可選)
DISABLED
灰化

在上面的程式碼例子裡,我們增加了一個常規的按鈕和一個含有選單的按鈕.通過把按鈕的型別設定為1或者2,我們可以增加一個含有選單的按鈕,在事件menu_button還可以實現子選單:

FORM. handle_menu_button USING i_object TYPE REF TO cl_ctmenu
I_ucomm TYPE syucomm..
 CASE i_ucomm.
 WHEN ‘EXCH’.
CALL METHOD i_object->add_function
      EXPORTING
         Fcode     = ‘EU’
         Text      = ‘Euro’.
CALL METHOD i_object->add_function
      EXPORTING
         Fcode     = ‘TRL’
         Text      = ‘Turkish Lira’.
 ENDCASE.
ENDFORM.
 
為了實現這些自定義的按鈕的功能,我們使用USER_COMMAND事件來處理.
 
FORM. handle_user_command USING i_ucomm TYPE syucomm.
 DATA lt_selected_rows TYPE lvc_t_rowid.
 DATA ls_selected_row TYPE lvc_s_roid.
 
 CALL METHOD gr_alvgrid->get_selected_rows
        IMPORTING
              Et_row_no = lt_selected_rows.
 READ TABLE lt_selected_rows INTO ls_selected_row INDEX 1.
 If sy-subrc ne 0.
    MESSAGE S000(su) WITH 'Select a row'(203).
 ENDIF.
 CASE i_ucomm.
 WHEN 'CAR'.
     READ TABLE gt_list INDEX ls_selected_row-row_id.
     IF sy-subrc = 0.
       CALL FUNCTION 'ZDISPLAY_CARRIER_INFO'
             EXPORTING carrid = gt_list-carrid
             EXCEPTIONS carrier_not_found  = 1
                          Oters           = 2.
     ENDIF.
 WHEN 'EU'.
     READ TABLE gt_list INDEX ls_selected_row-row_id.
     IF sy-subrc = 0.
        CALL FUNCTION 'ZPOPUP_CONV_CURR_ADD_DISPLAY'
              EXPORTING monun = 'EU'
                          Quant = gt_list-paymentsum.
     ENDIF.
 ENDCASE.
ENDFORM.

 我們通過方法get_selected_rows來獲取選擇的行.功能EXCH有2個子功能,所以我們不需要實現它.為了能顯示ALV附加的一些功能,可以在ALV例項建立的時候呼叫set_toolbar_interactive方法.

   CALL METHOD gr_alv_grid->set_toolbar_interactive.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17204926/viewspace-614960/,如需轉載,請註明出處,否則將追究法律責任。

相關文章