介绍一个ABAP中基本已经被遗忘的技术 - Object Services(对象服务)

1. 背景介绍

ABAP Object Services(AOS)是在SAP R/3 4.6C版本中引入的,旨在提供一种面向对象的方式来处理数据库操作

与直接使用 ABAP SQL 语句不同,它使用持久对象(Persistent Object),这些对象的属性被映射到数据库内容。这样,实际的数据库访问被Object Services的类和接口封装起来。

AOS包括以下几方面的功能:

  • 持久性对象管理(Persistent Service):处理业务实体(如订单、客户、产品等)的创建、读取、更新和删除操作。
  • 事务处理(Transaction Service):将一组数据库操作组合在一起,作为一个单一的事务来执行,以确保数据的一致性。
  • 复杂查询(Query Service):执行复杂的数据库查询,检索满足特定条件的对象。

2. 看个简单的例子

与直接使用Open SQL操作数据库不同,要使用AOS,我们要了解一个新的ABAP类,也即 Persistent Class。

在这里插入图片描述
创建Persistent class的同时,会自动生成两个Class Actor。
在这里插入图片描述
在运行时,代理类Agent在持久对象Persisent Object和ABAP对象服务之间运行(AOS)。

在这里插入图片描述

接下来,通过Persistence Representation自动绑定class到对应的DB表SPFLI。

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

生成映射对应的代码:

在这里插入图片描述
这样就完成了persistent object和DB table面向对象的封装。

通过下面代码就可以完成数据的插入:

REPORT ztest_object_service.

START-OF-SELECTION.

  FINAL(ls_spfli) = VALUE spfli( carrid    = 'LH'
                                 connid    = '123'
                                 countryfr = 'DE'
                                 cityfrom  = 'FRANKFURT'
                                 airpfrom  = 'FRA'
                                 countryto = 'SG'
                                 cityto    = 'SINGAPORE'
                                 airpto    = 'SIN'
                                 fltime    = '740'
                                 deptime   = '234500'
                                 arrtime   = '180000'
                                 distance  = '10000'
                                 distid    = 'KM'
                                 fltype    = ' '
                                 period    = '1' ).

  FINAL(lo_agent) = zca_gg_spfli_persistent=>agent.  

  DATA(lo_connection) = lo_agent->create_persistent( i_carrid    = ls_spfli-carrid
                                                     i_connid    = ls_spfli-connid
                                                     i_countryfr = ls_spfli-countryfr
                                                     i_cityfrom  = ls_spfli-cityfrom
                                                     i_airpfrom  = ls_spfli-airpfrom
                                                     i_countryto = ls_spfli-countryto
                                                     i_cityto    = ls_spfli-cityto
                                                     i_airpto    = ls_spfli-airpto
                                                     i_fltime    = ls_spfli-fltime
                                                     i_deptime   = ls_spfli-deptime
                                                     i_arrtime   = ls_spfli-arrtime
                                                     i_distance  = ls_spfli-distance
                                                     i_distid    = ls_spfli-distid
                                                     i_fltype    = ls_spfli-fltype
                                                     i_period    = ls_spfli-period            ).

  COMMIT WORK.

上面的代码等价于:

  FINAL(ls_spfli) = VALUE spfli( carrid    = 'LH'
                                 connid    = '123'
                                 countryfr = 'DE'
                                 cityfrom  = 'FRANKFURT'
                                 airpfrom  = 'FRA'
                                 countryto = 'SG'
                                 cityto    = 'SINGAPORE'
                                 airpto    = 'SIN'
                                 fltime    = '740'
                                 deptime   = '234500'
                                 arrtime   = '180000'
                                 distance  = '10000'
                                 distid    = 'KM'
                                 fltype    = ' '
                                 period    = '1' ).

  INSERT INTO spfli VALUES @ls_spfli.

  COMMIT WORK.

3. 说说感受

ABAP Object Services在某些场景下仍然是一个不错的工具,但这种面向对象的DB封装对于ABAP应用程序的开发,并没有带来显著的效率或性能的提升,因而,这种技术一直是非常小众的,基本没有流行起来。

从作者本人的角度而言,不推荐使用这种技术。

了解这种技术,更多的是为了运维的需求。如果你正在维护一个已经使用ABAP Object Services的系统,那么继续使用和扩展它是合理的。

但对于新的项目,特别是基于SAP HANA和SAP S/4HANA的项目,推荐使用ABAP Core Data Services (CDS) 作为数据建模的持久性框架。

因为CDS提供了更强大的查询能力和更好的性能,以及更丰富的框架支持,例如:BOFE,RAP,OData etc。

4. 参考资料

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 09:38:06       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 09:38:06       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 09:38:06       58 阅读
  4. Python语言-面向对象

    2024-07-13 09:38:06       69 阅读

热门阅读

  1. xml详解

    xml详解

    2024-07-13 09:38:06      34 阅读
  2. 【软件测试】 1+X中级 自动化测试试题

    2024-07-13 09:38:06       23 阅读
  3. PostgreSQL UPDATE 命令

    2024-07-13 09:38:06       20 阅读
  4. 手撕排序算法:选择排序

    2024-07-13 09:38:06       28 阅读
  5. ABAP中客户部分清账的BAPI的使用方法

    2024-07-13 09:38:06       23 阅读
  6. 方便快捷传文件—搭建rsync文件传输服务器

    2024-07-13 09:38:06       29 阅读
  7. Git 在commit后,撤销commit

    2024-07-13 09:38:06       19 阅读
  8. 【React Hooks原理 - useRef】

    2024-07-13 09:38:06       21 阅读