修改ALV 工具条--添加、删除按钮,按钮响应事件

以下针对于FM:REUSE_ALV_GRID_DISPLAY的ALV,以添加一个按钮为例,修改OO ALV工具条的方式大致相同。

第一步:创建我们的测试report : ztest09并实现的显示。代码如下所示:

REPORT  ZTEST09.
TYPE-POOLS: slis.

"(1)定义内表及工作区
DATA: gt_alv_data TYPE STANDARD TABLE OF sflight,
      lt_alv_data TYPE sflight.

DATA: lt_fieldcat   TYPE slis_t_fieldcat_alv.

"(2)初始化内表中的数据
SELECT * INTO TABLE gt_alv_data FROM sflight .

"(3)获得sflight中的字段结构 ,保存到内表lt_fieldcat中

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  EXPORTING
    i_structure_name       = 'SFLIGHT'
  CHANGING
    ct_fieldcat            = lt_fieldcat
  EXCEPTIONS
    inconsistent_interface = 1
    program_error          = 2
    OTHERS                 = 3.
"(4)使用第(3)步得到的 fieldcat第二步得到的内表数据,展示这个ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
    IT_FIELDCAT                       = lt_fieldcat
  TABLES
    t_outtab                          = gt_alv_data.

第二步:为程序ztest09创建一个GUI status。

一般是在标准工具条基础上进行修改,可以到函数组SALV中copy标准GUI status到自己的程序下,假如copy过来名字改为0100。这一步可以在在t-code:se41 中COPY PROGRAMM :SAPLKKBL STATUS :STANDARD_FULLSCREEN中到需要程序ztest09的STATUS中。


根据需要,添加自定义按钮、相应ICON和功能码BUTTON1,也可删除某些按钮不需要的按钮,保存激活。

删除不需要的按钮,可以通过直接修改GUI status进行,也可以通过SET PF-STATUS ... EXCLUDING ...的方式进行。

第三步:找到我们新copy过来的GUI status 0100,它的application toolbar的内容,如下图所示

比如我们需要删除这个按钮,只需要将它的fcode清除掉即可。增加PDF按钮,清除按钮后,

GUI status的内容如下所示:

然后,保存并激活我们这个GUI status。

第四步:在代码中应用这个GUI status。

REPORT  ZTEST09.
TYPE-POOLS: slis.

"(1)定义内表及工作区
DATA: gt_alv_data TYPE STANDARD TABLE OF sflight,
      lt_alv_data TYPE sflight.

DATA: lt_fieldcat   TYPE slis_t_fieldcat_alv.

"(2)初始化内表中的数据
SELECT * INTO TABLE gt_alv_data FROM sflight .

"(3)获得sflight中的字段结构 ,保存到内表lt_fieldcat中

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  EXPORTING
    i_structure_name       = 'SFLIGHT'

  CHANGING
    ct_fieldcat            = lt_fieldcat
  EXCEPTIONS
    inconsistent_interface = 1
    program_error          = 2
    OTHERS                 = 3.
"(4)使用第(3)步得到的 fieldcat第二步得到的内表数据,展示这个ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING

    IT_FIELDCAT                       = lt_fieldcat
    i_callback_program             =  sy-repid "必须设置这个参数,才能让程序找到需要的form
    i_callback_pf_status_set      = 'SET_PF_STATUS'
  TABLES
    t_outtab                          = gt_alv_data.

FORM set_pf_statusUSING rt_extabTYPE slis_t_extab.
  SET PF-STATUS'0100' .
ENDFORM.

程序运行后的效果如下图所示:

也就是说,在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
其实如果在GUI 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 =sy-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 ‘PDF'."是那个自定义按钮的功能码。
PERFORM FRM_button1."执行相应处理

你可能感兴趣的:(SAP,ALV)