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。