reuse_alv_grid_display 工具条增强

以下针对于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来做都行。
注意:如果想保留某些标准按钮的功能,请不要修改其功能码。

你可能感兴趣的:(ALV)