OO-ALV(通过屏幕来实现)

7 篇文章 0 订阅


面向对象编程(object oriented programming, oop,面向对象程序设计):是一种计算机编程框架。
面向过程参考的是slis,还有面向对象的是参考的lvc结构。

1.基本概念

1.对象,是一个现实实体的抽象(数据和程序)(属性和方法).
2.类 ,用来描述具有相同的属性和方法的对象的集合;
使用了对象以后,ALV是通过ALV的一个实例(INSTANCE)来显示的。
实现步骤
1.创建屏幕
2.屏幕绘制容器(Customer control)
3.定义变量
4.创建ALV对象
creat object: wcl_container
exporting
container_name = ‘WCL_CONTAINER’.
Creat object wcl_alv
EXORTING
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]

2.类和接口的定义

TYPE REF TO (表示参考类)
要展示数据写在屏幕上;
调用方法写在PBO里;
建立屏幕 (还要建立一个contailner),在逻辑流上写下面的代码:

PROCESS BEFORE OUTPUT.
 MODULE STATUS_8000.
  MODULE DISPLAY_ALV
PROCESS AFTER INPUT.
 MODULE USER_COMMAND_8000.

以下是代码实现了面向对象的ALV

3.例子(主程序)

REPORT zjgltest03.

" ALV变量
DATA:
  wcl_container TYPE REF TO cl_gui_custom_container , " 存放ALV的容器
  wcl_alv       TYPE REF TO cl_gui_alv_grid,  " ALV的网格instance
  gt_fieldcat   TYPE        lvc_t_fcat,  " 存放字段目录的内表
  gs_layout     TYPE        lvc_s_layo.   " 布局结构

" 要显示的ALV的数据的变量
DATA: gt_list TYPE TABLE OF ztesoppap ,
      wa_list TYPE          ztesoppap.
DATA:ok_code LIKE sy-ucomm,
     save_ok LIKE sy-ucomm.

CALL SCREEN 2000.



*&---------------------------------------------------------------------*
*&      Module  STATUS_8000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_8000 OUTPUT.
  SET PF-STATUS 'STANDARD'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_8000  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  DISPLAY_ALV  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE display_alv OUTPUT.

  PERFORM display_alv.

ENDMODULE.                 " DISPLAY_ALV  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_alv .
  IF  wcl_alv IS INITIAL.
    CREATE OBJECT wcl_container             " create container
      EXPORTING
        container_name = 'CONTAINER'.   " The name is CAPSLOCK.
    IF wcl_container IS NOT INITIAL.
      CREATE OBJECT wcl_alv                " create 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
        is_layout                     = gs_layout
      CHANGING
        it_outtab                     = gt_list[]
        it_fieldcatalog               = gt_fieldcat
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
  ELSE.

    CALL METHOD wcl_alv->refresh_table_display
      EXCEPTIONS
        finished = 1
        OTHERS   = 2.
    IF sy-subrc <> 0.

    ENDIF.
  ENDIF.




ENDFORM.                    " DISPLAY_ALV
*&---------------------------------------------------------------------*
*&      Form  PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM prepare_field_catalog  CHANGING p_gt_fieldcat.
  DATA ls_fcat TYPE lvc_s_fcat .
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE        =
      i_structure_name       = 'ZTESOPPAP'
*     I_CLIENT_NEVER_DISPLAY = 'X'
*     I_BYPASSING_BUFFER     =
*     I_INTERNAL_TABNAME     =
    CHANGING
      ct_fieldcat            = p_gt_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                    " PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*&      Form  PREPARE_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GS_LAYOUT  text
*----------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_LIST  text
*----------------------------------------------------------------------*
FORM get_data  TABLES   rt_outtab  LIKE gt_list[].
  SELECT * FROM ztesoppap INTO CORRESPONDING FIELDS OF TABLE
    rt_outtab UP TO 30 ROWS.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_8000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_8000 INPUT.

  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'BACK'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_8000  INPUT
4.标准ALV例子

以下是在SE38中打开的事物代码.
BCALV_FULLSCREEN_DEMO
BCALV_EDIT*
最好找SAP相关的demo来学习其中的用法。这样是最节省时间的。有时候自开发的例子可以用的比老的例子。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值