OO-ALV实现步骤

面向对象

面向对象编程(OOP)是一种计算机编程架构。

  1. 对象(Object)是一个现实实体的抽象。一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,这个程序产生改对象的动作或对它接受到的外界信号的反应。这些对象操作有时称为方法。
  2. 类(Class)用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

OO-ALV

定义:使用了对象以后,ALV是通过ALV的一个实例(INSTANCE)来显示。

实现步骤:

  1. 创建屏幕

  2. 屏幕绘制容器(customer control)

  3. 定义变量

  4. 创建ALV对象

    CREATE OBJECT:WCL_CONTAINER
      EXPORTING
        CONTAINER_NAME = 'WCL_CONTAINER'.
      CREATE OBJECT WCL_ALV
      EXPORTING
        I_PARENT = WCL_CONTAINER.
    
  5. 显示ALV

    CALL METHOD WCL_ALV->SET_TABLE_FOR_FIRST_DISPLAY
    

OO-ALV的控制结构:

  • 字段目录 [Field catalog]:参考字段 LVC_S_FCAT
  • 布局控制 [layout]:参考结构[LVC_S_LAYO]
  • 打印和排序,过滤控制:
    • 打印的参数控制参考结构 [LVC_S_PRNT]
    • 排序的参数控制参考结构 [LVC_S_SORT]
    • 过滤的参数控制参考结构 [LVC_S_FILT]

开发基本流程:

第一步:创建SCREEN,在屏幕上创建一个定制控制
在这里插入图片描述

在这里插入图片描述

1000-1100是选择屏幕预留编号,大多使用8000-9000
在这里插入图片描述

Next Screen:点击返回将要跳转的屏幕(如果找不到屏幕,退出程序)

产生逻辑流:

  • PROCESS BEFORE OUTPUT:展示屏幕显示的动作
  • PROCESS AFTER INPUT:后期显示之后的交互
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第二步:定义变量

DATA:
*ALV变量
  wcl_container TYPE REF TO cl_gui_custom_container,	"存放ALV的容器
  wcl_alv TYPE REF TO cl_gui_alv_grid,	"ALV的网络
  gt_fieldcat TYPE lvc_t_fcat,	"存放字段目录的内表
  gs_layout TYPE lvc_s_layo.	布局结构
*---声明需要显示的内表(以SFLIGHT为例)
DATA BEGIN OF gt_list OCCURS 0.
	INCLUDE STRUCTURE SFLIGHT.
DATA END OF gt_list.

首先写主程序:

查看类:SE24

在这里插入图片描述

REPORT ****
*------定义变量------*
DATA:
*ALV变量
  wcl_container TYPE REF TO cl_gui_custom_container,	"存放ALV的容器
  wcl_alv TYPE REF TO cl_gui_alv_grid,	"ALV的实例
  gt_fieldcat TYPE lvc_t_fcat,	"存放字段目录的内表
  gs_layout TYPE lvc_s_layo.	布局结构
*---声明需要显示的内表(以SFLIGHT为例)
DATA BEGIN OF gt_list OCCURS 0.
	INCLUDESTRUCTURE SFLIGHT.
DATA END OF gt_list.

*要显示的ALV的数据的变量
DATA:GT_LIST TYPE TABLE OF sflight WITH HEADER LINE.

第三步:创建ALV这个对象,他的父组件是那个容器

在PBO中写入如下代码:

PROCESS BEFORE OUTPUT.
	MODULE display_alv.

创建display_alv的MODULE后,写入一下代码:

PERFORM display_alv.

在FORM display_alv中,判断ALV实例是否存在,如果不存在,则创建:

FORM display_alv.
IF wcl_alv IS INITIAL.
CREATE OBJECT:wcl_container
EXPORTING
  container_name = 'CONTAINER'.		"屏幕上定制控制的名称,要大写
  
IF wcl_container IS NOT INITIAL.  "判断不为空的话创建
CREATE OBGECT wcl_alv
 EXPORTING
  I_PARENT = wcl_container.
ENDIF.
*获取字段目录
PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT.
*获取样式
PERRORM PREPARE_LAYOUT CHANGING GS_LAYOUT.
*获取需要显示的数据
PERFORM GET_DATA TABLES GT_LIST.

*------显示ALV------
CALL METHOD wcl_alv->set_table_for_first_display
EXPORTING
* I_BUFFER_ACTIVE = 
* I_CONSISTENCY_CHECK = 
* I_STRUCTURE_NAME = 
* IS_VARIANT = 
* I_SAVE = 
* I_DEFAULT = 'X'
IS_LAYOUT = GS_LAYOUT
* IS_PRINT = 
* IT_SPECIAL_GTOUPS = 
* IT_TOOLBAR_EXCLUDING = 
* IT_HYPERLINK = 
CHANGING
IT_OUTTAB = GT_LIST[]
IT_FIELDCATALOG = GT_FIELDCAT
* IT_SORT = 
* IT_FILTER = 
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ELSE.
*ALV---------
CALL METHOD WCL_ALV->REFRESH_TABLE_DISPLAY		"判断不为空,刷新
* EXPORTING
* IS_STABLE = 
* I_SOFT_REFRESH = 
	EXCEPTIONS
	FINISHED = 1
	OTHERS = 2.
	IF SY-SUBRC <> 0.
*异常处理------------
	ENDIF.
ENDIF.

第四步:获取要显示数据的字段目录:有两种方式

1、手动创建

FORM prepare field catalog CHANGING p_gt_fieldcat.
DATA ls_fcat TYPE lvc_s_fcat.
   ls_fcat-fieldname = 'CARRID'.
   ls_fcat-inttype = 'C'.
   ls_fcat-outputlen = '3'.
   ls_fcat-coltext= 'Carrier ID'.
   ls_fcat-seltext = 'Carrier ID'.
   APPEND ls_fcat to pt_fieldcat.
   CLEAR ls_fcat.
   
   ls_fcat-fieldname = 'CONNID'.
   ls_fcat-ref_table = 'SFLIGHT'.
   ls_fcat-ref_table = 'CONNID'.
   ls_fcat-outputlen = '3'.
   ls_fcat-coltext= 'Connection ID'.
   ls_fcat-seltext = 'Connection ID'.
   APPEND ls_fcat to pt_fieldcat.
   ENDFORM.
   

2、根据结构自动创建

FORM PREPARE_FIELD_CATALOG CHANGING p_gt_fieldcat.
DATA ls_facat TYPE lvc_s_fcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
 I_STRUCTURE_NAME = 'SFLIGHT'		"根据哪一个结构生成:这里根据SFLIGHT结构
* I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
  ct_fieldcat = p_gt_fieldcat		"维护形参p_gt_fieldcat
EXCEPTIONS
  INCONSISTENT_INTERFACE  = 1
  PROGRAM_ERROR     	  = 2
  OTHERS				  = 3.
  
IF sy-subrc <> 0.

ENDIF.

第五步:设置布局

FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.
	ps_layout-zebra = 'X'.
	ps_layout-grid_title = 'Flights'.
	ps_layout-smalltitle = 'X'.
ENDFORM.

第六步:读取数据至内表

FORM GET_DATA TABLES rt_outtab LIKE GT_LIST[].
	SELECT * FROM sflight INTO CORRESPONDING FIELDS
	OF TABLE rt_outtab UP TO 30 ROWS.
ENDFORM.

第七部:定义GUI 状态栏

通过SE41复制标准GUI状态

调用状态栏双击击PBO下的status_8000.(里面自动生成的代码)

MODULE status_8000 OUTPUT.
  SET PF-STATUS 'STANDARD'.		"输入状态栏名称
ENDMODULE.

第八步:定义用户响应事件

*接收用户按钮
DATA:ok_code TYPE sy-ucomm,		"ok_code在元素清单中定义,用于接收
	 save_ok TYPE sy-ucomm.			"把获取到的ok_code传到save_ok
*注意:变量定义在子程序前	 
	 
*在屏幕PAI事件定义MODULE
MODULE user_command_8000.

*定义MODULE
MODULE user_command_8000 INPUT.
* DATA:save_ok TYPE sy-ucomm.  "前面已定义
 	  save_ok = ok_code.
 	  CLEAR ok_code.
 	  CASE save_ok.
 	    WHEN 'BACK'.
 	    LEAVE PROGRAM.
 	    WHEN OTHERS.
 	  ENDCASE.
ENDMODULE.

第九步:在程序里调用屏幕

CALL SCREEN 8000.(放在第二步下,子程序的上面)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值