ABAP ALV TOOLBAR 自定义按钮的类型以及listmenu按钮

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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17204926/viewspace-614960/

你可能感兴趣的:(ABAP ALV TOOLBAR 自定义按钮的类型以及listmenu按钮)