OOALV
OOALV ,是指通过面向对象的方式实现的ALV输出
基本使用原理:
-
通过界面调用,在界面的Customer Control控件中,输出ALV
CLASS ALV优势
—— 使用面向对象的编程方式
—— 使用容器,可以在一个界面中指定位置进行ALV的输出
执行步骤
—— ALV实现相关变量定义
—— 创建本地类的声明以及实现
—— 创建界面,并创建Customer Control 容器
—— 实例化container,关联Customer Control容器
—— 将ALV植入container中
—— ALV格式化(layout及fieldcat的赋值等)
—— 注册相关事件
—— 执行ALV显示(CALL METHOD GS_XXX->SET_TABLE_FOR_FIRST_DISPLAY)
涉及内容
主要使用的类
DATA: gs_alv TYPE REF TO cl_gui_alv_grid, "用于表单输出
gs_con TYPE REF TO cl_gui_custom_container, "用于定义容器
gs_dyndoc_id TYPE REF TO cl_dd_document, “用于表头书写
gs_splitter TYPE REF TO cl_gui_splitter_container. "用于分割容器
主要使用的方法
—— 第一次输出表单: SET_TABLE_FOR_FIRST_DISPLAY
—— 刷新表单内容: REFRESH_TABLE_DISPLAY
I_SOFT_REFRESH, ‘X’ :只刷新单元格(如果有合计不自动更新)
—— 刷新fieldcat: SET_FRONTED_FIELDCATALOG
如果fieldcat 格式有修改,需要刷新格式设置,则调用这个方法
基本表单输出
执行步骤:
—— 创建REPORT程序 ,在END-OF-SELECTION 中执行输出,创建界面0100,调用界面
END-OF-SELECTION.
IF GT_MARD[] IS NOT INITIAL.
CALL SCREEN 0100.
ELSE.
MESSAGE S001 DISPLAY LIKE 'E'.
ENDIF.
—— 在TOP INCUDE 中增加基本定义
INCLUDE ZHQ_35TOP
INCLUDE ZHQ_35O01
INCLUDE ZHQ_35I01
INCLUDE ZHQ_35F01
—— 在界面中增加 customer control控件,例名称为GS_CON
data: gs_alv type ref to CL_GUI_ALV_GRID , "ALV类
gs_CON type ref to CL_GUI_CUSTOM_CONTAINER "容器类
gt_FIELDCAT TYPE LVC_T_FCAT, "列格式
gs_fieldcat TYPE LVC_S_FCAT, "列格式-结构
gs_stable type LVC_S_STBL, "光标不动
gs_layout type LVC_S_LAYO. "输出格式
—— 在界面的PBO部分增加 module ,用于ALV输出
PROCESS BEFORE OUTPUT.
MODULE INIT.
MODULE INIT OUTPUT.
IF GS_ALV IS INITIAL.
PERFORM CREATE_ALV.
PERFORM BUILD_FIELDCAT_ALV.
PERFORM BUILD_LAYOUT_ALV.
PERFORM BUILD_ALV_ALV.
—— 设置fieldcat及layout等属性,通过调用方法执行ALV的初次输出或刷新
FORM BUILD_ALV_ALV.
CALL METHOD GS_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT
CHANGING
IT_FIELDCATALOG = GT_FIELDCAT
IT_OUTTAB = GT_MARD[]
.
ENDFORM.
创建ALV
在使用ALV类之前,需要对其进行创建,并指定ALV输出时的容器
步骤
—— 定义,参照类定义ALV及容器
GS_ALV TYPE REF TO CL_GUI_ALV_GRID, "ALV输出
GS_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "ALV容器
—— 在界面中增加Customer CONSTRUCTOR 构造方法传值
CONTAINER_NAME,界面中用户定义容器名称
—— 实例化ALV 对象,给CONSTRUCTOR 构造方法传值
CONTAINER_NAME , 界面中用户定义容器名称
—— 实例化ALV对象,给CONSTRUCTOR 构造传值
I_PARENT,实例化的容器对象
FORM CREATE_ALV.
*创建容器
CREATE OBJECT GS_CON
EXPORTING
CONTAINER_NAME = 'GC_CON'.
*将ALV植入容器中
CREATE OBJECT GS_ALV
EXPORTING
I_PARENT = GS_CON.
ENDFORM.
设置fieldcat
定义
—— 内表:LVC_T_FCAT
—— 结构:LVC_S_FCAT
执行ALV输出前,对fieldcat表单进行赋值
调用ALV输出方法时,传值给IT_FIELDCATALOG
FORM BUILD_FIELDCAT_ALV.
CLEAR GT_FIELDCAT_ALV USING:
‘WERKS’ ‘工厂’ ‘1’ ‘6’
‘LGORT’ ‘仓库’ ‘2’ ‘6’
‘MATNR’ ‘物料’ ‘3’ ‘15’
‘LABST’ ‘数量’ ‘4’ ‘15’
‘CHECK’ ‘选择’ ‘5’ ‘3’
‘ICON’ ‘图标’ ‘6’ ‘5’
ENDFORM.
FORM ADD_FIELDCAT_ALV USING P_FIELDNAME
P_SELTEXT
P_COL
P_LEN.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = P_FIELDNAME . "字段名
GS_FIELDCAT-SCRTEXT_M = P_SELTEXT. "描述
GS_FIELDCAT-COL_POS = P_COL. "输出列
GS_FIELDCAT-OUTPUTLEN = P_LEN. "输出长度
IF GS_FIELDCAT-FIELDNAME = ‘ICON’.
GS_FIELDCAT-ICON = ‘X’. "图标
ENDIF.
IF GS_FIELDCAT-FIELDNAME = ‘CHECK’ .
GS_FIELDCAT-CHECKBOX = ‘X’ . "复选框
ENDIF.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
ENDFORM.
设置fieldcat
COL_POS 输出列 列的位置 ,第几列,例如1,2
FIELDNAME 字段名称
CURRENCY 货币单位/参考的当前单位的字段名称
QUANTITY 计量单位
DO_SUM 总计列值’X’,合计
FIX_COLUMN 固定列
EMPHASIZE 列的颜色
NO_OUT 列没有输出’X’,隐藏此列
DATATYPE ABAP字典中的数据类型
INTTYPE ABAP数据类型(C,D,N)
HOTSPOT 单击敏感’x’ ,下面出现下划线
DECIMALS 设置小数的位数
SCRTEXT_L/M/S 字段标签长/中/短
设置LAYOUT
定义
——结构: LVC_S_LAYO
执行ALV输出前,对LAYOUT结构进行赋值
调用ALV输出方法时,传值给IS_LAYOUT
FORM BUILD_LAYOUT_ALV.
GS_LAYOUT-ZEBRA = 'X'. "斑马纹
GS_LAYOUT-COL_OPT= 'X'. "优化列宽
GS_LAYOUT-SEL_MODE = 'X'. "选择模式
* GS_LAYOUT-INFO_FNAME ='A'. "行颜色
GS_LAYOUT-CTAB_FNAME = 'COLOR' . "单元格颜色
GS_LAYOUT-STYLEFNAME = 'CELLSTL' . "单元格编辑
ENDFORM.
CWIDTH_OPT 最优化宽度 SPACE, ‘X’
GRID_TITLE 标题,在网格和工具条之间 最长70个字符
NO_TOOLBAR 隐藏工具条 SPACE ,‘X’
NO_VGRIDLN 隐藏垂直线 SPACE ‘X’
SEL_MODE 选择模式SPACE, ‘A’ ‘B’ ‘C’ ‘D’
CTAB_FNAME 带有复杂单元格颜色编码的字段名称,最长30个字符
INFO_FNAME 带有简单行彩色代码的字段名称,最长30个字符
ZEBRA 可选行颜色,出现了间隔色带 SPACE,‘X’
STYLEFNAME 字段格式
颜色值的设置: C+X (颜色:1~7)X(是否加重:1/0)X(是否反色1/0)
以列为单位
—— 在FIELDCAT中给EMPHASIZE字段赋值
GS_FIELDCAT_EMPHASIZE = 'C100'.
以行为单位
—— 在内表中增加一个字段,类型为CHAR,至少长度为4,例如COLOR
—— 给向输出内表获取数据时,给COLOR字段赋值
—— 设置LAYOUT ,给INTO_FNAME字段赋值颜色字段名称,例如COLOR
LOOP AT GT_MAED.
IF GT_MARD_LABST = 0.
GT_MARD-COLOR = ‘C100’. "设置行的颜色
以单元格为单位
—— 在内表中增加一个字段,类型为LVC_T_SCOL,例COLOR
—— 在向输出内表取数据时,通过结构给COLOR字段内表赋值
—— 设置LAYOUT,给CTAB_FNAME 字段赋值颜色字段名称,例如COLOR
可修改属性设置
以表单为单位
—— 设置LAYOUT-EDIT ,为X,可修改
以列为单位
—— 设置FIELDCAT-EDIT,为X,列可修改
以单元格为单位
—— 在内表中增加一个字段,类型为LVC_T_STYL, 例如CELLSTL
—— 在需要设置修改属性的位置,通过结构给CELLSTL字段内表赋值
FIELDNAME,需要设置属性的字段名
STYLE, 可修改属性
- 不可修改:CL_GUI_ALV_GRID=>MC_STYLE_DISABLED
- 可修改: CL_GUI_ALV_GRID=>MC_STYLE_ENALBED
—— 设置LAYOUT ,给 STYLEFNAME 字段赋值修改属性的字段名,例如CELLSTL
—— 特别的,如果将某一列