参考说明
内容参考自CSDN博客:https://blog.csdn.net/ot512csdn/article/details/50394424.
效果展示
需求说明
以MSEG表为例,设计一个表头,一个表体;表头包含该工厂下的所有物料,通过点击每个物料,对应显示出表体内该物料的所有凭证行。
代码说明
ABAP中对于事件的实现原理:
- 定义事件方法
- 指定事件的执行方法代码
- 事件变量实例化
- 把事件指定到ALV控件中(注册事件)
用OO方式实现一个屏幕2个ALV展示的原理:
- 创建屏幕0100
- 放入2个自定义控件,取名CON1,CON2
- 通过点击第一个ALV控件(只能单选),带出数据到第2个ALV控件里
屏幕会带出3个模块,这些模块都放在一个源程序里
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
MODULE INIT_CON.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
STATUS_0100 模块:用于设置状态
USER_COMMAND_0100 模块,用于触发用户操作
INIT_CON 模块:初始化屏幕和ALV控件
该模块中,我们可以看到OO ALV的使用方法,即CREATE OBJECT CON1_REF连接到CON1屏幕控件上,CREATE OBJECT G_GRID1再创建ALV对象,然后我们给ALV对象注册几个事件,
- HANDLE_TOOLBAR这个事件用于给ALV加自定义的工具条按钮。
- HANDLE_CLICK用于给ALV点击其中一行后的处理代码段。
- HANDLE_COMMAND事件用于接收用户按了自定义按钮后,触发的代码段。
MODULE INIT_CON OUTPUT.
"---------第一个ALV控件-----------------
IF CON1_REF IS INITIAL.
DATA GS_LAYOUT1 TYPE LVC_S_LAYO.
GS_LAYOUT1-CWIDTH_OPT = 'X'.
GS_LAYOUT1-GRID_TITLE = '表头'.
GS_LAYOUT1-SEL_MODE = 'B'.
GS_LAYOUT1-ZEBRA = 'X'.
DATA GT_FIELDCAT TYPE LVC_T_FCAT.
DATA GS_FIELDCAT TYPE LVC_S_FCAT.
GS_FIELDCAT-COL_POS = 1. GS_FIELDCAT-FIELDNAME = 'BOX'. GS_FIELDCAT-CHECKBOX = 'X'. GS_FIELDCAT-HOTSPOT = 'X'.
APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 2. GS_FIELDCAT-FIELDNAME = 'WERKS'. GS_FIELDCAT-COLTEXT = '工厂'.
APPEND GS_FIELDCAT TO GT_FIELDCAT. CLEAR GS_FIELDCAT.
GS_FIELDCAT-COL_POS = 3. GS_FIELDCAT-FIELDNAME = 'MATNR'. GS_FIELDCAT-COLTEXT = '物料编码'. GS_FIELDCAT-NO_ZERO = 'X' .
APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.
CREATE OBJECT CON1_REF
EXPORTING
CONTAINER_NAME = 'CON1'.
CREATE OBJECT G_GRID1
EXPORTING
I_PARENT = CON1_REF.
"4 注册事件句柄,图标的还必须加在这里,不然不行
CREATE OBJ