1. 项目概述:为什么RAP是构建现代Fiori应用的基石
如果你是一位SAP技术架构师,或者正在带领团队向SAP S/4HANA或SAP BTP迁移,那么“如何高效、标准地构建现代Fiori应用”一定是你思考的核心问题。过去,我们可能用Web Dynpro ABAP、SAPUI5搭配OData服务(SEGW)或ABAP Programming Model for SAP Fiori来搭建应用,但这些方式或多或少存在开发效率、架构统一性或与云原生理念契合度上的挑战。ABAP RESTful Application Programming Model(RAP)的出现,正是SAP给出的官方答案。它不是一个孤立的技术点,而是一套完整的、声明式的、以业务对象为中心的端到端开发框架,旨在统一并简化SAP Fiori应用的开发体验。
简单来说,RAP定义了我们如何在后端ABAP环境中设计、实现和暴露业务服务。它强制性地将业务逻辑、数据模型和行为定义在一个统一的框架内,并通过标准的OData协议自动生成Fiori服务。这意味着,作为架构师,你不再需要花费大量时间在技术基础设施的搭建和集成上,而是可以聚焦于业务对象的设计和核心业务规则的实现。RAP强制推行的分层架构(业务服务、业务对象、底层数据模型)和契约优先的开发模式,使得应用从一开始就具备了良好的可维护性、可扩展性和云就绪特性。本指南将从一个资深架构师的视角,深入拆解如何利用RAP构建一个健壮的现代Fiori应用,重点不在于基础操作,而在于架构决策、设计模式以及那些只有踩过坑才能获得的实战经验。
2. 核心架构设计与技术选型考量
2.1 RAP的分层架构:契约、行为与实现分离
RAP的核心魅力在于其清晰的分层架构,这直接映射了现代软件设计中的关注点分离原则。理解每一层的职责和交互方式,是做出正确技术决策的前提。
业务服务层(Business Service) :这是面向消费端(如Fiori Elements UI)的契约层。在这里,你定义最终暴露给外部的OData服务,包括实体集(EntitySets)、关联(Associations)和函数导入(Function Imports)。这一层的关键决策在于服务粒度的设计。是设计一个粗粒度的、包含所有相关数据的“主数据服务”,还是多个细粒度的、职责单一的服务?我的经验是,优先考虑Fiori应用的屏幕流和用户体验。一个复杂的“创建销售订单”应用可能需要一个聚合了客户、物料、定价信息的服务;而一个简单的“显示物料主数据”应用则对应一个独立的细粒度服务。RAP允许你通过服务绑定(Service Binding)将一个业务对象(BO)的多个节点(Nodes)投影到不同的服务中,这为灵活的API设计提供了可能。
业务对象层(Business Object) :这是业务逻辑和行为的核心载体。在RAP中,业务对象通过行为定义(Behavior Definition)和业务对象运行时(Business Object Runtime)来体现。行为定义文件( .bddef )是你声明业务对象行为契约的地方:哪些操作是允许的(create, update, delete),有哪些自定义动作(actions),有哪些校验(validations),有哪些字段是只读的或由系统自动填充(determinations)。这里的设计哲学是“声明优先于编码”。作为架构师,你必须和业务专家紧密合作,在编码之前,就在行为定义中明确所有业务规则和交互的“契约”。这极大地减少了后续的沟通成本和返工。
数据模型层(Data Model) :这是业务对象的持久化基础。RAP支持两种主要方式:托管(Managed)和非托管(Unmanaged)。在托管模式下,RAP运行时几乎接管了所有标准的CRUD(创建、读取、更新、删除)操作,你只需要在行为实现(Behavior Implementation)中编写自定义的业务逻辑(如复杂的校验、定价计算)。而在非托管模式下,你需要自己实现所有的数据持久化逻辑,这通常用于包装已有的、复杂的传统ABAP代码或自定义数据库表。架构选型的关键在于权衡: 对于全新的、标准化的应用,强烈推荐使用托管模式 ,它能将开发效率提升数倍,并保证代码符合最佳实践。只有当需要集成遗留代码或处理极其特殊的持久化逻辑时,才考虑非托管模式。
2.2 托管 vs. 非托管:一个关键的架构决策点
这个选择会贯穿整个项目,必须在项目启动初期就明确。
托管模式(The Managed Scenario) :
- 优势 :开发速度极快。你定义好CDS视图作为数据模型,声明好行为,RAP运行时就会自动生成对应的OData服务以及标准的UI服务(如草案处理、批量操作)。你只需要专注于“增值”的业务逻辑。
- 工作原理 :RAP运行时在底层为你的业务对象CDS视图自动生成对应的“托管”数据库表(通常以
/开头),并处理所有到这些表的增删改查。你的行为实现类只需要继承cl_abap_behavior_handler并重写相关方法(如validateSave,modify)来注入自定义逻辑。 - 适用场景 :全新的SAP S/4HANA扩展应用、基于SAP BTP ABAP环境(Steampunk)的绿色字段应用、任何不需要直接操作特定现有数据库表的场景。
非托管模式(The Unmanaged Scenario) :
- 优势 :完全的控制权。你可以将RAP业务对象层作为一层“门面”(Facade),背后调用任何已有的BAPI、函数模块、或直接操作自定义的Z表。这是将传统ABAP程序现代化、为其提供Fiori前端的利器。
- 工作原理 :你需要自己实现行为定义中声明的每一个操作(
create,update,delete,read等)。在行为实现类中,你
297




被折叠的 条评论
为什么被折叠?



