我身在江湖,江湖却仍没有关于我的传说!
------挨踢行业的小人物
ABAP 自学笔记之 ALV 自定义按钮
ALV 中自定义按钮
----李宝勋
使用 alv 的时候,我们经常性需要添加自定义按钮,实现用户单击事件调用 ,
这里介绍通过 GUI 状态增加按钮。
假如你定义了报表程序 ZMMR3009,里面已经编写好了 alv 的实现函数:如下 :
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM
I_SAVE
IS_LAYOUT
= W_REPID "当前程序
= ''
= I_LAYOUT "子函数layout_build填充的格式
定义
IT_FIELDCAT
= I_FIELDCAT_ALV[] "子函数fields填充的各
列
TABLES
T_OUTTAB
EXCEPTIONS
= IT_BLNTD
PROGRAM_ERROR
OTHERS
在你的程序里找到函数:‘REUSE_ALV_GRID_DISPLAY’,双击这个函数名,打
= 1
= 2.
开这个函数代码窗口:如下图:
1
我身在江湖,江湖却仍没有关于我的传说!
------挨踢行业的小人物
ABAP 自学笔记之 ALV 自定义按钮
点击工具栏上的‘Dispaly Object List’按钮 ,打开对象浏览器窗口,
如下图:
展开函数组:SLVC_FULLSCREEN,并选中 GUI 状态下的:STANDARD_FULLSCREEN
项,如下图:
右键单击,选择 copy 选项 ,在打开的窗体中设置如下,将 alv 的 gui 状态
复制到你的程序里,程序:ZMMR3009 是的目标程序,状态:STANDARD_004 是你
新建的 gui 名称,如下图:
2
我身在江湖,江湖却仍没有关于我的传说!
------挨踢行业的小人物
ABAP 自学笔记之 ALV 自定义按钮
然后点击'Copy',直到弹出的窗体全部消失,然后在你的程序里添加如下代
码:
CONSTANTS CNS_PF_STATUS
'ALV_PF_STATUS'."alv自定义按钮
CONSTANTS CNS_USER_COMMAND TYPE SLIS_FORMNAME VALUE
'ALV_USER_COMMAND'."alv自定义按钮响应事件
上面代码写到 alv 变量定义的代码下面,下面添加设置 GUI 状态代码:
TYPE SLIS_FORMNAME VALUE
FORM alv_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD_004' EXCLUDING rt_extab.
ENDFORM.
创建按钮开始:
双击'STANDARD_004',打开如下界面,找个空白的单元格先添加个'|',如下图:
3
我身在江湖,江湖却仍没有关于我的传说!
------挨踢行业的小人物
ABAP 自学笔记之 ALV 自定义按钮
然后在下个单元格输入名称:print,,双击这个名称弹出界面如下图:
确定后,在界面里设置按钮文本和图标等信息,如下图:
4
我身在江湖,江湖却仍没有关于我的传说!
------挨踢行业的小人物
ABAP 自学笔记之 ALV 自定义按钮
确定后,如下图
选择功能键后,确定后,如下图
输入图标文字信息,单击 确定,然后点击保存按钮、编译,没有问题后,激活程序。到
此按钮创建完毕。
创建按钮结束。
接下来进行在 alv 中进行设置自定义按钮,在 alv 函 数 :‘REUSE_ALV_GRID_DISPLAY’
中添加下面的红色代码部分:
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM
= W_REPID "当前程序
5
我身在江湖,江湖却仍没有关于我的传说!
------挨踢行业的小人物
ABAP 自学笔记之 ALV 自定义按钮
GUI
I_CALLBACK_PF_STATUS_SET = CNS_PF_STATUS "设置alv的自定义按钮
I_CALLBACK_USER_COMMAND = CNS_USER_COMMAND "设置alv自定义按钮
响应事件
I_SAVE
IS_LAYOUT
定义
IT_FIELDCAT
= ''
= I_LAYOUT "子函数layout_build填充的格式
= I_FIELDCAT_ALV[] "子函数fields填充的各
列
TABLES
T_OUTTAB
EXCEPTIONS
PROGRAM_ERROR
OTHERS
= IT_BLNTD
= 1
= 2.
编写自定义按钮响应事件:
FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
到此 alv 自定义按钮设置完毕,如果你想添加多个按钮,只需将创建按钮开始到创建按钮
结束部分重复就行了,在按钮响应事件里根据你设定的功能代码键值进行不同按钮的区别。
PERFORM PRINT_FORM."调用打印程序
CASE R_UCOMM.
WHEN 'PRINT'.
WHEN OTHERS.
...
ENDCASE.
创建好的程序运行如下:
6