笔者 2021 年曾经写过一篇文章,介绍了 ABAP 从诞生到今天的发展历史。
本文重点介绍现代 ABAP 编程模型的演进历史,图片来自这篇 SAP 社区博客:
![](https://img.haomeiwen.com/i2085791/2f2b5601c8503ef2.png)
1. 经典 ABAP 编程模型
目前国内很多 SAP 客户仍然在使用基于 ABAP 版本 7.40 或更低版本的 SAP 软件。
在这些 ABAP 版本中,有多种用户界面技术可用于构建应用程序,例如经典的 Dynpro、Web Dynpro ABAP、Floorplan Manager 和 WebClient UI 框架。
从 ABAP 7.40 这个里程碑的版本开始,SAP 大力优化了 ABAP 平台,以更好地支发挥内存数据库 SAP HANA 的运算能力。
在此背景下,SAP 推出了 ABAP Core Data Service,提供了新一代的数据建模基础设施和数据访问方式。
同传统的 ABAP DDIC 数据模型相比,基于 CDS 的数据模型是一种语义丰富(Semantically Rich)的数据模型,适用于所有应用领域。
所谓语义丰富,是指 CDS View 源代码中数可以添加各种 Annotations 作为元数据注释,这些注解既包含与业务对象相关的详细信息,如性别代码、地址类型、货币单位等业务层面的元数据,也提供被 Fiori Elements 等技术框架解析并生成对应处理逻辑等技术层面的元数据。
此外,从 ABAP 7.40 版本起,SAP Gateway 成为 ABAP 应用服务器的组成部分,BOPF 开发工具也在 ABAP 7.5 版本集成到平台中。
![](https://img.haomeiwen.com/i2085791/9a5e0dcfc008c999.png)
2. ABAP Programming Model for SAP Fiori
为了应对现代 Web 应用程序的用户体验需求,提供更好的对移动设备的支持,以及配合公司向云端转型的产品战略,SAP 决定支持前端与后端之间的 RESTful 通信方式。
同时,SAP 采用了全新的基于角色的用户体验设计原则,推出了现代化的 SAP Fiori 开发栈,主要包括以下内容:
-
SAPUI5 作为 SAP HTML5 UI 开发工具包,通过 SAP Fiori Elements 提供可复用的构件和完整的页面布局,大幅提升常见应用模式的 UI 开发效率。
-
OData 作为基于 REST 的协议,包含元数据支持,允许采用模型驱动的方法进行开发,并支持基于 SAP Fiori Elements 的 UI 开发。
-
用于实现业务逻辑的 ABAP 平台。
-
基于 Eclipse 的 ABAP Development Tool 和用于前端开发的 SAP Web IDE.
SAPUI5 和 OData 成为了 SAP Fiori 开发栈的核心技术。
为此,SAP ABAP 平台团队,致力于开发一种新的编程模型,提供一种高效且标准化的方法,用于构建各种类型的应用程序,包括事务型(Transactional)和分析型(Analytical).
这些应用程序不仅针对 SAP HANA 进行了优化,还具备优良的用户体验,比如适配各种移动设备、可扩展性和支持在云端运行。
同时,该模型还需要保留 ABAP 平台的核心资产,如生命周期管理和升级支持能力。
该模型的另一个目标是,现有的 ABAP 开发人员能够快速上手。
这个模型就是 ABAP Programming Model for SAP Fiori:
![](https://img.haomeiwen.com/i2085791/6132ddd674438baf.png)
随着 7.50 版本的发布,面向 SAP Fiori 的 ABAP 编程模型首次出现在 ABAP 开发人员的视野里,并在后续版本中进一步增强。
面向 SAP Fiori 的 ABAP 编程模型提供了一种标准化的方法,用于高效开发现代化的基于 Web 的应用程序,涵盖搜索、事务型和分析型应用程序。ABAP Programming Model for SAP Fiori 也是当时 SAP S/4HANA 应用程序开发采用的最佳实践。
该编程模型基于现代且经过验证的技术,包括 CDS、BOPF 和 SAP Gateway.
如下图所示,通过 SEGW 工具中的 Reference 功能,可以迅速将 CDS 模型的内容导入到正在开发的 OData 项目中。
![](https://img.haomeiwen.com/i2085791/adfc5293789fb619.png)
关于这个功能更详细的介绍,请参考笔者的文章:
添加了 @OData.publish 注解的 SAP CDS view 发布的 OData 服务,为何不支持修改和创建功能?
为了支持事务处理,在此过程中还引入了基于 CDS 的轻量级 BOPF 框架。
![](https://img.haomeiwen.com/i2085791/8eeb60245678e63d.png)
在 ABAP 7.51 版本中,引入了草稿处理功能(Draft-Handling),用于设置独占锁并支持临时数据的持久化存储。
所谓 Draft-Handling,用于在 SAP 业务数据的编辑过程中,实时保存未提交的更改。
该机制允许用户在多个会话或者繁琐的表单填写步骤中,逐渐构建和修改数据,并在需要时将其提交。
在实际应用中,Draft Handling 可以显著提高用户体验,因为它允许用户在输入数据时不必一次性完成所有步骤,而是可以分阶段进行。这不仅提高了工作效率,还减少了因意外中断而导致的数据丢失风险。
这也就是 SAP 官方文档中 Continuous Work 的含义。
Draft Handling 技术实现的核心思想是,在后台 ABAP 数据库中创建一个未提交的版本(草稿),并在用户完成编辑和确认无误后,再将该草稿版本提交为最终数据版本。在此过程中,Fiori 应用会对用户的操作进行跟踪,并确保不同用户之间的编辑不会相互干扰。
![](https://img.haomeiwen.com/i2085791/a98d8118d47562e1.png)
如下图 SAP S/4HANA Material 产品主数据的 Fiori 应用为例,尽管这个产品存在 Validation 校验错误,但是当前的编辑仍然可以通过 Draft 的形式保存。
在离开当前编辑页面时,系统会询问用户,有三种选择:
-
Save:提交当前 Draft 修改,如果校验通过,当前 Draft 版本变成正式保存版本。
-
Keep Draft:保留当前 Draft 版本,不做进一步处理。
-
Discard Draft:丢弃当前 Draft 版本,数据回滚到最近一次成功提交保存的正式版本。
![](https://img.haomeiwen.com/i2085791/cd116d1bc44eea65.png)
如果一条数据包含 Draft 版本,会在 Fiori Elements List Report 的 Smart Table 区域显式注明。
![](https://img.haomeiwen.com/i2085791/e8e636c5c41b83ce.png)
既然 ABAP Programming Model for SAP Fiori 这套编程模型已经提供了如此多的便利,为什么还会有接下来的 Restful ABAP Programming Model 呢?笔者下一篇文章会继续介绍。
网友评论