OOALV

目录

一、OO-ALV的定义及调用

1、OO-ALV介绍

1.1、基本概念:

1.2、OOALV的实现

2、开发ALV的基本流程

3、方法 "set_table_for_first_display"的参数说明

二、OO-ALV示例程序


一、OO-ALV的定义及调用

1、OO-ALV介绍

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

1.1、基本概念:

  1. 对象Object)是一个现实实体的抽象。一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,这个程序产生该对象的动作或对它接受到的外界信号的反应。这些对象操作有时称为方法。对象是个动态的概念,其中的属性反映了对象当前的状态

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

1.2、OOALV的实现

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

实现步骤:

  1. 创建屏幕
  2. 屏幕绘制容器(customer control
  3. 定义变量
  4. 创建ALV对象
  5. 显示ALV
"创建ALV对象
CREATE OBJECT: WCL_CONTAINER
     EXPORTING
       CONTAINER_NAME = 'WCL_CONTAINER'.
    CREATE OBJECT WCL_ALV
     EXPORTING
       I_PARENT = WCL_CONTAINER. 
"显示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

2、开发ALV的基本流程

第1步:创建个屏幕(SCREEN),在屏幕上创建个定制控制。

 第2步:定义变量。

"定义变量
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 ,                   "布局结构
  "要显示的ALV的数据的变量
  gt_list       TYPE TABLE OF sflight WITH HEADER LINE."创建一个同名的工作区

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

在屏幕中的逻辑流中写如下代码:

PROCESS BEFORE OUTPUT."显示
 MODULE DISPLAY_ALV.

创建 DISPLAY_ALVMODULE,写下如下代码:

PERFORM display_alv .

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

  IF  wcl_alv IS INITIAL .
    CREATE OBJECT wcl_container
      EXPORTING
        container_name = 'CONTAINER'. "屏幕上的定制控制的名字
    IF wcl_container IS NOT INITIAL.
      CREATE OBJECT wcl_alv
        EXPORTING
          i_parent = wcl_container.
    ENDIF.
*获取字段目录
    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 p_gt_fieldcat.
  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.

 第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. 

第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状态。 

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

 CALL  SCREEN 8000.

3、方法 "set_table_for_first_display"的参数说明

参数

含义

I_BUFFER_ACTIVE

如果方法调用是静态的,可以设置这个标记,这表示,如果每次显示ALV都是相同的字段目录。既然这样,那么字段目录会被放到一个特殊的缓存里,这样加速了ALV的显示。

I_STRUCTURE_NAME

输出数据参考的数据字典的结构名,例如'SFLIGHT'。如果指定了这个参数,字段目录会自动生成,下面的参数IT_FIELDCATALOG不需要传值。

IS_VARIANT

决定布局显示的变式。

I_SAVE

决定用户是否可以保存变式:
'X' 只能保存全局变式
'U' 只能保存特定变式
'A' 都可以保存
SPACE 不可以保存变式

I_DEFAULT

决定用户是否可以定义默认的布局:
'X' 可以定义默认布局,这个参数是默认的
SPACE 不可以定义默认布局

IS_LAYOUT

布局参数,传递布局控制的一些信息。

IS_PRINT

后台打印属性的参数。

IT_SPECIAL_GROUPS

如果在字段目录中,一些字段通过SP_GROUP被分组在一起。我们就必须为这些组传递一个组的文本内表进去。

IT_TOOLBAR_EXCLUDING

需要隐藏的标准的按钮的内表。

IT_HYPERLINK

为每个句柄分配了超连接的内表,LVC_S_HYPE中的HREF存放了超连接的地址,HANDLE指定了句柄,使用这些句柄,你可以在GRID中使用超连接。

IT_ALV_GRAPHICS

比较复杂,没有用过,意思好象是可以在图表中显示ALV。

IT_OUTTAB

输出数据存放的内表,数据都是存放在这个内表里。

IT_FIELDCATALOG

字段目录。

IT_SORT

排序的标准。

IT_FILTER

过滤的标准。

IS_STABLE

刷新的稳定性,有2个参数,一个是行,一个是列.如果设置了相应的值,那么对应的行,或者列,在刷新的时候,将会保持稳定,就是滚动条保持不动。

I_SOFT_REFRESH

这个参数只是在异常情况下被使用,如果设置了这个参数,任何创建的合计,任何排序次序,任何为了显示数据而设置的过滤都将保持不变,这个是非常有意义的。例如:当然你没有修改数据内表里的数据而想刷新ALV,仅仅只是改变一下布局和字段目录。

二、OO-ALV示例程序

ZPROGRAM_F0052

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值