SAP 中类的使用

一、事务代码:SE24

二、步骤

2.1、创建类:se24

实例化类型
public:该类可以在任何地方进行初始化
Protected:只能在自身和或类的子类中进行初始化
Private: 只能自身的类中进行初始化
Abstract: 不可以创建实例。

2.2、创建属性

2.2.1、选择属性

 

在属性分页签中先按上图填写好属性MV_NAME ,级别、可见性,然后点击上图框起来的按钮进入下图,类定义

 

级别
instance attribute : 相当于用data申明的变量
static attribute : 这个属性所有的对象实例都是共享的,这个静态属性由类的所有对象共有,(对象访问使用-> ,通过类名访问=>).
constant : (常量的属性)
可见性
public :公共可见
protected: (本身,子类,友元类)
PRIVATE (本身,友元类)
Read-only: 该属性不可以在类外被直接修改。
键入
like: 已经实例化的数据对象
type:没有实例化的类型
type ref to :后面跟类
Type boxed :结构嵌套的定义(数据值相同时,可以记录一条数据)

 2.2.2、代码定义三部 (结构体,内表,工作区)

 定义好后,返回界面,自动添加了MT_MATERIAL,MS_MATERIAL属性

2.3、创建方法

2.3.1、方法建立

级别 : instance method :实例方法必须通过类的实例来使用
static Method :只能操作静态对象.

2.3.2、添加参数

 IMORTING: 输入值
EXPORTING: 输出值
CHNAGING: 输出值
Returning: 输出一个参数
传递值 :是值传,还是传引用。

2.3.3、进入代码

 2.3.4、测试参数

2.3.5、测试代码

REPORT ZTEST01.

DATA :GO_CLASS_MATLL TYPE REF TO ZCL_CLASS_MATL.
DATA : GV_I_NAME TYPE CHAR30 VALUE 'importing into class'.
DATA : GV_E_NAME TYPE CHAR30 VALUE 'exporting from class'.
DATA : GV_C_NAME TYPE CHAR30 VALUE 'changing in class'.
DATA : GV_R_NAME TYPE CHAR30 VALUE 'returning from class'.
CREATE OBJECT GO_CLASS_MATLL.
CALL METHOD GO_CLASS_MATLL->TEST_PARAMETER
  EXPORTING
    IV_NAME = GV_I_NAME " method imporing parameter
  IMPORTING
    EV_NAME = GV_E_NAME
  CHANGING
    CV_NAME = GV_C_NAME
  RECEIVING
    RV_NAME = GV_R_NAME.

WRITE:/ 'gv_i_name',GV_I_NAME.
WRITE:/ 'gv_e_name',GV_E_NAME.
WRITE:/ 'gv_c_name',GV_C_NAME.
WRITE:/ 'gv_r_name',GV_R_NAME.

2.4、事件

2.4.1、创建事件

 2.4.2、创建方法

REPORT ZTEST01. 

TYPES:
  BEGIN OF TY_MATERIAL,
    MATERIA_ID   TYPE MARA-MATNR,
    MATERIA_TYPE TYPE MARA-MTART,
  END OF TY_MATERIAL .
TYPES:
  TY_TAB_MATERIAL TYPE SORTED TABLE OF TY_MATERIAL WITH NON-UNIQUE KEY MATERIA_ID .

DATA : GV_MATNR TYPE MARA-MATNR.
DATA : GT_MARA TYPE TY_TAB_MATERIAL .
DATA : GO_INVENTORY TYPE REF TO ZCL_CLASS_MATL.
CREATE OBJECT GO_INVENTORY.

PARAMETERS : P_MTART TYPE MARA-MATNR.

"Register event handler method
SET HANDLER GO_INVENTORY->HANDLE_ORDER_POINT_REACHED FOR GO_INVENTORY.

START-OF-SELECTION.

  CALL METHOD GO_INVENTORY->CHECK_MATERIAL
    EXPORTING
      IV_MATERIAL_ID = P_MTART
    IMPORTING
      ET_MATERIAL    = GT_MARA.

  LOOP AT GT_MARA INTO DATA(GS_MARA).
    WRITE :/ GS_MARA-MATERIA_ID, GS_MARA-MATERIA_TYPE.
  ENDLOOP.

 2.5、创建构造方法

REPORT ZTEST01.

 DATA GO_CONSTRUCTOR TYPE REF TO ZCL_CLASS_MATL.
CREATE OBJECT GO_CONSTRUCTOR
  EXPORTING
    IV_VALUE 'CONSTRUCTOR'.

WRITE:/ 'CONSTRUCTOR TEST. '.

结果

 2.6异常

 2.7 父类

测试:

 

 

 

测试:

 

 

报表调用方式一:

 报表调用方式二:

2.8 

DATA:
  go_obj TYPE REF TO cl_material_details_list.
"打印程序初始内存使用量
cl_abap_memory_utilities=>get_total_used_sizeIMPORTING size DATA(lv_init_size).
WRITE: / |内存初始用量: { lv_init_size } { 'Bytes' }| COLOR COL_POSITIVE.

DO 1000 TIMES.
  CREATE OBJECT go_obj.
  FREE go_obj.
ENDDO.

cl_abap_memory_utilities=>get_total_used_sizeIMPORTING size DATA(lv_before_size).
WRITE: / |创建并FREE类变量后内存用量: { lv_before_size } { 'Bytes' }| COLOR COL_GROUP.

cl_abap_memory_utilities=>do_garbage_collection).

cl_abap_memory_utilities=>get_total_used_sizeIMPORTING size DATA(lv_after_size).
WRITE: / |使用垃圾回收后内存用量: { lv_after_size } { 'Bytes' }| COLOR COL_TOTAL.

 

posted @ 2025-02-28 15:01  下一詀110  阅读(266)  评论(0)    收藏  举报