SAP Shared Object Demo(共享对象) 02

编程入门 行业动态 更新时间:2024-10-09 22:15:50

SAP Shared Object Demo(共享<a href=https://www.elefans.com/category/jswz/34/1771306.html style=对象) 02"/>

SAP Shared Object Demo(共享对象) 02

前文介绍了共享对象相关内容,这篇主要从实战中简单介绍一下如何使用共享对象。

Demo 1:

1、创建根类(Root Class)

首先SE24创建一个新的Class:ZCL_SHR_AREAHANDLE_ROOT_HF,在Class的属性中勾选“共享内存启用(Shared Memory-Enabled)”,如图:

 2、创建属性

创建两个属性:1、“ID_NUM”参考类型:String,级别:Instance Attribute(实例属性),可见性:Public;2、“DREF”参考类型:DATA,级别:Instance Attribute(实例属性),可见性:Public。

 3、分配接口

在接口Tab页中,分配接口名称:IF_SHM_BUILD_INSTANCE。激活Class。

 4、创建区域(SHMA)

使用事务代码:SHMA创建区域名称:ZCL_SHAR_AREAHANDLE_ARE_HF,将之前创建的Root Class:ZCL_SHR_AREAHANDLE_ROOT_HF 分配到区域属性中的根类(Root Class)和构造器类(Constructor Class),

并且勾选属性的“自动区域构建(Aut. Area Creation)”和“带版本控制(With Versioning)”,动态属性中“置换类型(Displacem.Type)”选择“无法替换(Displacement Not Possible)”,

运行时间设置(Runtime Setting)中“区域构建(Area Structure)”选择“如读取请求则自动启动(Autostart fo Read Request and Every Ivalidation)”。

 5、创建共享数据:attach_for_write()

SE38创建程序:ZCL_SHR_AREAHANDLE_SET_HF。首先定义一个区域抓手变量和一个区域根类变量,然后分别进行实例化。在创建根类中已经定义好了属性:dref,使用CREATE DATA 在区域实例版本中创建一个匿名数据对象。

REPORT zcl_shr_areahandle_set_hf.

DATA: zcl_area_handle TYPE REF TO zcl_shar_areahandle_are_hf,
      zcl_root        TYPE REF TO zcl_shr_areahandle_root_hf.

FIELD-SYMBOLS: <fs_data> TYPE any .

TRY.
  zcl_area_handle = zcl_shar_areahandle_are_hf=>attach_for_write( ).

  CREATE OBJECT zcl_root AREA HANDLE zcl_area_handle.
  zcl_area_handle->set_root( zcl_root ).

  CREATE DATA zcl_root->dref AREA HANDLE zcl_area_handle TYPE string.
  ASSIGN zcl_root->dref->* TO <fs_data>.
  <fs_data> = '800'.
  zcl_area_handle->detach_commit( ).
CATCH cx_shm_external_type.

CATCH cx_shm_attach_error.

ENDTRY.

6、读取共享数据:attach_for_read()

SE38新建一个读取共享数据的程序:ZCL_SHR_AREAHANDLE_GET_HF

REPORT zcl_shr_areahandle_get_hf.

DATA: zcl_area_get TYPE REF TO zcl_shar_areahandle_are_hf.
FIELD-SYMBOLS: <fs_get> TYPE any.

DATA: zcx_error TYPE REF TO cx_shm_attach_error.

TRY.
  zcl_area_get = zcl_shar_areahandle_are_hf=>attach_for_read( ).
  ASSIGN zcl_area_get->root->dref->* TO <fs_get>.
  WRITE:/ <fs_get>.
  zcl_area_get->detach( ).
  zcl_area_get->free_area( ).
CATCH cx_shm_attach_error INTO zcx_error.
  WRITE:/ zcx_error->get_text( ).
ENDTRY.

结果如图:

 Demo 2

下面的例子我们对Root Class新增两个方法,用于共享对象的写入和读取。

1、新增方法

在Root Class 方法Tab页中新增方法:GET_ID_NUM和SET_ID_NUM,设置级别和可见性设置如下图:

 2、给GET方法分配参数

方法GET_ID_NUM添加一个参数名:I_MSG,类型为Returning。如下图:

 方法SET_ID_NUM添加一个参数名:L_ID_NUM,类型:Import,关联类型:STRING。

 3、区域构造

双击Root Class的方法:IF_SHM_BUILD_INSTANCE~BUILD 添加如下代码:

    DATA: sh_area type REF TO zcl_shar_areahandle_are_hf,
          sh_root TYPE REF TO zcl_shr_areahandle_root_hf.
    * Get a pointer to shared area
    sh_area = zcl_shar_areahandle_are_hf=>attach_for_write( ).
    * Create an instance of the root
    create OBJECT sh_root AREA HANDLE sh_area.
    * Sets Intial values
    sh_root->set_id_num( '999').
    * set the root back into the area
    sh_area->set_root( sh_root ).
    * Commit and detach
    sh_area->detach_commit( ).

4、SET/GET方法添加代码行

SET_ID_NUM方法添加如下代码:

    id_num = l_id_num.

GET_ID_NUM方法中添加如下代码:

    DATA: lv_id_msg TYPE string.
    * Concatenating a title to id_num.
    lv_id_msg = 'Identification Number:' && id_num.
    l_msg = lv_id_msg.

5、方法:attach_for_update()

SE38新建程序:ZCL_SHR_AREAHANDLE_UPDATE_HF,使用方法attach_for_update()更新步骤3中已初始化的数据。

REPORT zcl_shr_areahandle_update_hf.

DATA: zcl_area TYPE REF TO zcl_shar_areahandle_are_hf,
      zcl_root TYPE REF TO zcl_shr_areahandle_root_hf.

TRY.
  zcl_area = zcl_shar_areahandle_are_hf=>attach_for_update( ).

CATCH cx_shm_no_active_version.
  WAIT UP TO 1 SECONDS.
  zcl_area = zcl_shar_areahandle_are_hf=>attach_for_update( ).
ENDTRY.

zcl_root ?= zcl_area->get_root( ).

IF zcl_root IS INITIAL.
  CREATE OBJECT zcl_root AREA HANDLE zcl_area.
ENDIF.

zcl_root->set_id_num( '900').

zcl_area->set_root( zcl_root ).

zcl_area->detach_commit( ).

6、方法:attach_for_read()

SE38新建程序:ZCL_SHR_AREAHANDLE_READ_HF,使用方法attach_for_read读取更新后的共享对象。

REPORT zcl_shr_areahandle_read_hf.

DATA: zcl_area TYPE REF TO zcl_shar_areahandle_are_hf.

TRY.
  zcl_area = zcl_shar_areahandle_are_hf=>attach_for_read( ).

CATCH cx_shm_no_active_version.
  WAIT UP TO 1 SECONDS.
  zcl_area = zcl_shar_areahandle_are_hf=>attach_for_read( ).
ENDTRY.

DATA: lv_msg TYPE string.

lv_msg = zcl_area->root->get_id_num( ).
WRITE:/ lv_msg.
zcl_area->detach( ).

zcl_area->free_area( ).

更多推荐

SAP Shared Object Demo(共享对象) 02

本文发布于:2024-02-13 04:51:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1690755.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象   Shared   SAP   Object   Demo

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!