1. 程式人生 > >修改ALV 工具條,在ALV toolbar上新增、移除按鈕

修改ALV 工具條,在ALV toolbar上新增、移除按鈕

以下針對於FM:REUSE_ALV_GRID_DISPLAY的ALV,以新增一個按鈕為例,修改OO ALV工具條的方式大致相同。
1、建立一個GUI status
首先在程式中建立一個工具條,一般是希望在標準工具條基礎上進行修改,可以到函式組SALV中copy標準GUI status到自己的程式下,假如copy過來名字改為0100.
根據需要,新增自定義按鈕、相應ICON和功能碼BUTTON1,也可刪除某些按鈕不需要的按鈕,儲存啟用。


2、在call function REUSE_ALV_GRID_DISPLAY時,傳入引數I_CALLBACK_PF_STATUS_SET          = 'SET_PF_STATUS'
'SET_PF_STATUS'是一個Form的名字,可以任意寫,然後在程式中新增'SET_PF_STATUS'這個Form,這其實是PBO過程,程式碼很簡單,如下
*&--------------------------------------------------------------------*
*&      Form  set_pf_status
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS '0100' .
ENDFORM.                    "set_pf_status
其實如果在第一步,沒有刪除按鈕,而又不想顯示出來的話,還可以在這個form中寫程式碼濾掉,如下意思是不顯示排序的兩個按鈕。
*&--------------------------------------------------------------------*
*&      Form  set_pf_status
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  DATA: BEGIN OF EX_TAB OCCURS 0,
  FCODE LIKE SY-UCOMM,
  END OF EX_TAB.
  EX_TAB-FCODE = '&ODN'. APPEND EX_TAB.”升序
  EX_TAB-FCODE = '&OUP'. APPEND EX_TAB.”降序
  SET PF-STATUS 'STANDARD' EXCLUDING EX_TAB.
ENDFORM.                    "set_pf_status
需要注意的是,需要傳入引數I_CALLBACK_PROGRAM                = I_REPID "否則的話,系統找不到'SET_PF_STATUS'這個form,也就無法執行這個Form了。
3、新增一個按鈕,肯定要新增按鈕事件在call function REUSE_ALV_GRID_DISPLAY時,傳入引數I_CALLBACK_USER_COMMAND           = 'USER_COMMAND'
同樣USER_COMMAND這是個Form名字,可以任意取名,是個PAI的事件響應Form,在程式碼中實現這個form,可如下
*&--------------------------------------------------------------------*
*&      Form  user_command
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
  CASE R_UCOMM.
    WHEN 'BUTTON1'.”BUTTON1是那個自定義按鈕的功能碼。
      PERFORM FRM_button1."執行相應處理
    when others.
  ENDCASE.
ENDFORM.                    "user_command
綜上是在ALV toolbar上新增一個按鈕,並處理按鈕事件的例子,按這個思路,刪除或者濾掉ALV toolbar上的按鈕也好辦了,可以在自定義的GUI status直接刪除,或者在set_pf_staus這個form中使用excluding來做都行。
注意:如果想保留某些標準按鈕的功能,請不要修改其功能碼。