企业级 SAP 项目里经常会遇到这样一类代码,当前 ABAP 应用并不能只依赖自己系统里的数据库表完成业务处理,它必须在某个业务步骤中访问另一个系统。
一个 SAP S/4HANA Cloud 系统在创建采购订单时,可能需要查询外部供应商平台的实时交付能力。一个基于 RAP 开发的应用,可能需要从另一个 SAP S/4HANA tenant 读取 Business Partner。财务流程可能仍然需要调用传统 SAP ECC 系统中的 RFC Function Module。某些银行、税务或者历史企业服务,又可能只提供 SOAP Web Service。
从业务代码的角度看,这些事情都可以概括成一件事,ABAP 程序需要执行一次 remote call。
困难往往不在于把一个 HTTP 请求发送出去,而在于远程服务的数据结构、参数、返回值、类型转换、认证方式、目标地址以及异常处理,都会逐渐进入业务代码。如果完全依赖手工拼接请求和解析响应,集成代码很快就会变成一块很难维护的区域。
ABAP Cloud 为这类问题提供了一个非常重要的设计对象,Service Consumption Model,简称SRVC。
它的思路并不复杂。我们把远程服务的 metadata 引入 ABAP 开发环境,由开发工具根据服务契约生成相应的模型和 typed proxy。业务代码不再直接面对 XML、JSON 或远程参数描述,而是通过具有明确 ABAP 类型的接口访问远程系统。
SAP 当前文档中,Service Consumption Model可以基于不同类型的服务 metadata 创建。OData 使用 ED