修改ALV 工具條,在ALV toolbar上新增、移除按鈕
阿新 • • 發佈:2019-01-11
以下針對於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來做都行。
注意:如果想保留某些標準按鈕的功能,請不要修改其功能碼。
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來做都行。
注意:如果想保留某些標準按鈕的功能,請不要修改其功能碼。