2022.8.31OOALV

19 篇文章 3 订阅

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

——   特别的,如果将某一列
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值