08-OOALV

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。

基本概念:

1.对象(Object)是一个现实实体的抽象。一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的

实体,这个程序产生该对象的动作或对它接受到的外界信号的反应。这些对象操作有时称为方法。对象是个动态的

概念,其中的属性反映了对象当前的状态。

2.类(Class)用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。每

个对象是类的实例。

使用了对象以后,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的控制结构:

1.字段目录 [Field catalog]:参考结构 LVC_S_FCAT

2.布局控制[layout]:参考结构[LVC_S_LAYO]

3.打印和排序,过滤控制:

打印的参数控制请参考结构 [LVC_S_PRNT]

排序的参数控制请参考结构[LVC_S_SORT]

过滤的参数控制请参考结构[LVC_S_FILT]

开发OO-ALV的基本流程
第1步:创建个SCREEN,在屏幕上创建个定制控制

在这里插入图片描述
在这里插入图片描述

第2步:定义变量

ALV变量

DATA:

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 .

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

在PBO中写入如下代码:

PROCESS BEFORE OUTPUT .

MODULE display_alv .

创建DISPLAY_ALV的MODULE后,写下如下代码:

PERFORM display_alv .

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

IF WCL_ALV IS INITIAL .

CREATE OBJECT: WCL_CONTAINER

EXPORTING

CONTAINER_NAME = ‘WCL_CONTAINER’.

CREATE OBJECT WCL_ALV

EXPORTING

I_PARENT = WCL_CONTAINER.

获取字段目录

PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT .

获取样式

PERFORM 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_GROUPS =

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 .

第4步:获取要显示数据的字段目录有两种方式
1.手动创建

FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .

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 GT_FIELDCAT TYPE LVC_T_FCAT.

DATA ls_fcat type lvc_s_fcat .

CALL FUNCTION ‘LVC_FIELDCATALOG_MERGE’

EXPORTING

i_structure_name = ‘SFLIGHT’

CHANGING

ct_fieldcat = GT_FIELDCAT[]

EXCEPTIONS

inconsistent_interface = 1

program_error = 2

OTHERS = 3.

IF sy-subrc <> 0.

*–Exception handling

ENDIF.

ENDFORM . "prepare_field_catalog

第5步:设置布局

FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.

ps_layout-zebra = ‘X’ .

ps_layout-grid_title = ‘Flights’ .

ps_layout-smalltitle = ‘X’ .

ENDFORM. " prepare_layout

第6步:读取数据至内表

FORM GET_DATA TABLES RT_OUTTAB LIKE GT_LIST[].

SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS

OF TABLE RT_OUTTAB UP TO 30 ROWS.

ENDFORM.

第7步:定义GUI状态栏

SE41复制标准GUI状态

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

DATA:ok_code TYPE sy-ucomm, “接受用户按钮

save_ok type sy-ucomm.

在屏幕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. " USER_COMMAND_8001 INPUT

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

CALL SCREEN 8000.

ve_ok type sy-ucomm.

在屏幕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. " USER_COMMAND_8001 INPUT

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

CALL SCREEN 8000.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值