这是Jerry 2021年的第 25 篇文章,也是汪子熙公众号总共第 296 篇原创文章。

最近有朋友给我留言,询问关于 SAP Cloud Application Programming(简称CAP) 的相关开发流程。

早在 SAP 2019 TechEd 上,SAP CTO Juergen Mueller 向 SAP 生态圈传递了一条重要信息:身处云时代大环境下的 SAP 从业者,如何选择最适合自己的 SAP 开发方式?

Juergen Mueller 给出了下图所示的决策树,帮助大家进行技术选型:

决策树中展示的主要分支解释如下:

  • 如果待实现的需求,能够通过非代码方式来完成,可以尝试工作流(Workflow) 或者低代码解决方案(Low-Code),比如 SAP RAD by Mendix,细节可以参考 Jerry 这篇文章:SAP云平台上的Low Code Development(低代码开发)解决方案。

  • 如果只能通过编码实现需求,则可以选择基于 ABAP 技术栈的 RAP(Restful ABAP Programming) 编程模型,或者非 ABAP 技术栈的 Cloud Application Programming 模型。

SAP Cloud Application Programming 模型的准确定义是什么?

SAP 官网的定义是:SAP Cloud Application Programming 是一套由开发语言,开发工具和库有机集成的框架,提供了一种高效,快捷,全栈式的企业级服务和应用开发手段。CAP 包含一套开发最佳实践,让开发者能够专注于应用内具体业务逻辑的开发,而无需分心将精力花在重复的底层基础设施功能的实现上去。

Jerry 在 2019 年 SAP TechEd 结束后,曾经写过一篇文章,通过一个在线书店的例子,介绍了 SAP Cloud Application Programming 编程模型的使用方式:

使用Cloud Application Programming模型开发OData的一个实际例子

如果大家照着文章里介绍的步骤,自己动手实践一遍,不难发现,我们绝大部分工作量都花在了思考并设计在线书店里涉及到的业务领域模型(Domain Model),比如书籍,书籍类别,作者,订单及模型间的相互关联关系。而这些模型本身的增删改查和持久化逻辑等更底层的技术实现,全部由 SAP CAP 本身完成,无需应用开发人员操心。SAP CAP 期望通过这种设计,来提高企业级应用的开发效率和健壮性。

距离 Jerry 前一篇文章已经过去两年了,最近我抽时间查询了 SAP 官网关于 SAP CAP 开发流程的介绍,发现其在 2019 年的基础上,从CAP 提供的开发工具的使用角度上说,没有太大的变化,但不少细节之处进行了优化,使用起来感觉更加顺畅。

本文介绍的使用 SAP Cloud Application Programming 模型开发在线书店的过程,分为下列四个步骤:

  1. 创建业务模型
  2. 将业务数据导入数据库表
  3. 开发 OData 服务,将业务数据暴露给消费者
  4. 开发前端 UI 页面,通过 OData 服务,将步骤 2 准备的业务数据展示出来

本文使用到的源代码,在 SAP 官网上能够下载。

本文使用基于 nodejs 的 SAP Cloud Application Programming 完成在线书店应用的开发,因此需要安装并配置 nodejs 开发环境。

  1. 创建业务模型

首先使用命令行,安装 CAP 的 SDK 工具:

npm i -g @sap/cds-dk

完成之后敲 cds 命令,确保能看到下列输出:

然后创建一个空的 CAP 项目:

cds init bookshop

cds init 命令行创建出来的项目,本质上还是一个 nodejs 应用,包含了 CAP 应用的骨架。我们接下来需要进入上图标注了三个序号的文件夹里,进行相应的业务逻辑开发。

  • app 文件夹里存放的是 CAP 应用的前端 UI 页面,这些页面消费该 CAP 应用提供的 OData 服务,将业务数据以 UI 方式展示出来。可以基于任何前端框架实现。

  • db 文件夹里存放的是 CAP 的业务模型定义,以及持久化数据库相关的资源。

  • srv 文件夹里存放的是 OData 服务定义。这些 OData 服务负责将 db 里定义的业务模型承载的业务数据暴露给消费者,比如被 app 文件夹里开发的前端应用所消费。

用 Visual Studio Code 打开新建好的 CAP 项目,首先在 db 文件夹的 schema.cds 文件里,创建在线书店业务模型。使用关键字 entity 定义一个名为 Books 的模型。

冒号后面的 managed,包含了几乎所有业务模型都需要定义的 Administrative 信息,即创建时间,创建者,修改时间,修改者。因此 SAP CAP 出于重用目的,将这四个字段包裹在名为 managed 的 aspect 中。应用人员定义的业务模型,通过 : managed 的语法将其包含入内。

ABAP 开发人员可以将这种机制,类比成 ABAP DDIC 的 Include Structure.

采用同样的语法,定义书籍作者(Authors) 和书籍类别(Genres)模型后,我们下一个需要考虑的问题就是,如何插入业务数据到这些模型对应的数据库表里。

  1. 将业务数据导入数据库表

SAP CAP 提供了一种比较简单的数据导入方式,即本地维护一些包含业务数据的 csv 文件,将这些 csv 文件导入到模型对应的数据库表里。无独有偶,SAP Commerce Cloud (电商云)也支持这种 csv 文件导入的方式,实现数据导入功能。这种数据导入方式,在 SAP Commerce Cloud 里称为 ImpEx (Import & Export 的简写).

我在 db 文件夹下 schema.cds 里定义的命名空间为 sap.capire.bookshop, 因此为了使用 csv 文件向这个命名空间里的数据库表导入数据,需要按照下列命名规范创建 csv 文件:

<命名空间>-<模型名称>.csv

比如我导入数据库的作者数据,创建的 csv 文件名为:sap.capire.bookshop-Authors.csv

书籍数据:sap.capire.bookshop-Books.csv

书籍类别数据:sap.capire.bookshop-Genres.csv

csv 文件维护完毕之后,执行 cds deploy 命令,将 csv 文件导入到数据库里。命令中 sqlite 冒号后面是我指定的数据库名称:my.db

cds deploy --to sqlite:my.db

数据导入成功后,在Visual Studio Code SQLite Explorer里能浏览数据库表及其内容:

  1. 开发 OData 服务,将业务数据暴露给消费者

接下来,需要将上图所示的 my.db 数据库中的业务数据,通过 OData 服务,暴露给消费者。

SAP CAP 采用声明式(Declarative)的服务定义方式,将业务数据通过 OData 暴露出来。

在 srv 文件夹下新建一个 cat-service.cds 文件,实现一个图书的目录浏览服务(Catalog Service).

上图 OData 服务源代码一些关键点说明:

  • 使用 using 关键字,导入 db 文件夹下 schema.cds 文件中定义的命名空间 sap.capire.bookshop 下包含的业务模型。

  • @path 注解,定义了该目录服务的 endpoint 为 /browse.

  • @readonly 注解,表明该 OData 服务只能以只读的方式,暴露 Books 和 ListOfBooks 数据给消费者。

因为 Books 模型的定义里,没有直接包含书籍的作者名,而是通过一个名为 author 的 Association,指向对应的 Authors 模型。因此,上图第五行,通过auth.name 后面的 as 关键字,将 Association 指向的作者模型的 name 字段,内联到 OData Books 模型中来。

执行 cds run 命令,启动开发好的 CAP 应用:

http://localhost:4004 访问,就可以测试我们通过以上三个步骤,开发完成的 OData 服务了。

这个由 cds SDK 自动生成的默认界面,提供了很多 OData 服务测试功能。

比如点击 Books 超链接,能通过下面 url 代表的 OData 服务调用,查看到服务器数据库上所有的书籍数据:

http://localhost:4004/browse/Books

点击 Fiori Preview 超链接,能够在一个自动生成的 SAP Fiori Elements 应用里,调用上述 url,将书籍数据展示在 Fiori UI 上。

Jerry 后续的文章,会根据该在线书店的例子,介绍更多 SAP Cloud Application Programming 开发相关的内容,敬请期待。

更多阅读

  • 使用SAP Cloud Application Programming模型开发OData的一个实际例子

  • 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用

  • Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现

  • Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试

  • SAP云平台上的Low Code Development(低代码开发)解决方案

更多Jerry的原创文章,尽在:“汪子熙”:

SAP Cloud Application Programming 介绍(2021 更新版)相关推荐

  1. SAP Cloud Application Programming CDS 模型间 association 的设置

    本文提到的在线书店的例子,参考 Jerry 的文章:SAP Cloud Application Programming 介绍 - 2021 更新版 我定义了两个业务模型,名称分别为 Books 和 A ...

  2. SAP Cloud Application Programming bookshop 例子 Vue页面不能正常显示的原因分析

    我在本地用cds run 命令启动 SAP Cloud Application Programming 应用后,访问如下 url: http://localhost:4004/vue/index.ht ...

  3. 使用 Visual Studio Code SQLite 扩展来浏览 SAP Cloud Application Programming 数据库

    在 SAP Cloud Application Programming 编程模型里,我们可以使用下面的命令行,使用持久化数据库( persistent database ) 来存储 entity 的数 ...

  4. SAP Cloud Application Programming 里的@(path) 注解

    标题:SAP Cloud Application Programming 里的@(path:'/browse') service 实现的 .cds 文件源代码: using { sap.capire. ...

  5. 安装 SAP Cloud Application Programming SDK @sap/cds-dk 时报错以及解决方案

    我使用下列命令行安装 SAP Cloud Application Programming 开发SDK时,遇到下列错误消息: EEXIST file already exists EEXIST: fil ...

  6. SAP Cloud Application Programming 编程模型(CAP)的设计准则

    在SAP的云应用程序编程模型(CAP)是一个框架,语言,库和工具,为构建企业级的服务和应用.它引导开发人员沿着经过验证的最佳实践和大量现成的解决方案来应对重复性任务的"黄金之路" ...

  7. 最简单的 SAP Cloud Application programming CDS 练习

    使用命令行安装 sap CDS SDK: npm i -g @sap/cds-dk 安装完毕后,新建一个 srv 文件夹,里面新建一个 world.cds 文件,定义一个 service: servi ...

  8. 一个典型的使用 SAP Cloud Application Programming 模型开发的 Fiori 应用

    这个应用的完整代码,在这里可以下载. 这个项目的层级结构如下图所示: bookshop 文件夹 该文件夹下包含了基于 SAP CAP 编程模型实现的服务和测试数据. 进入文件夹,执行命令 cds ru ...

  9. SAP Cloud Application Programming bookshop 例子的 Fiori Preview

    进入 bookshop 文件夹,命令行 cds watch,以 development mode 启动应用: 点击超链接,即可通过 Fiori Elements 预览这些 service: 预览的 u ...

最新文章

  1. Briefings in Bioinformatics:微生物基因组学和功能基因组学相关软件和数据库的研究进展
  2. Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来!(附代码)...
  3. (0104)iOS开发之在Mac上用Charles给iPhone抓包
  4. pokemon 下载 android,宝可梦pokemon home
  5. 粉丝该从哪里来?搞定这8种吸粉渠道
  6. You have new mail
  7. linux du -hd1查看文件及目录所占磁盘空间
  8. twitter api 无法连接_光大银行牟健君:金融API的安全问题和应对技术
  9. 数论--费马小定理求逆元
  10. 《硝烟中的Scrum和XP》学习手札
  11. 教师职称考计算机模块,2015教师职称计算机考试模块.doc
  12. js去除字符串头尾空格
  13. 714 买卖股票的最佳时机含手续费(状态机dp)
  14. Arduino ESP32 看门狗定时器
  15. 服务器physx性能测试,望穿秋水! PhysX卡性能测试首度曝光
  16. Number of unique ways that ATM can tender
  17. ZBrush菜单栏详解(二),3D建模新手必走的进阶之路
  18. OKR还是集权制?750亿美金字节跳动的成长秘密
  19. 浅谈我对思维导图的认识
  20. 面对区块链,普通人应该做什么?

热门文章

  1. 发现dba_segments和dba_extents中统计段空间大小居然不一样
  2. Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)...
  3. css vertical-align
  4. MySQL5.5 对多核CPU的支持测试
  5. ASP.NET MVC 第一章 我们的第一个MVC例子
  6. 由胡润百富榜联想到的
  7. 超强的图片文字识别 RosettaStone超越尚书云龙绿化版
  8. (旧)走遍美国——(三、文化4)
  9. RedHat7安装Tomcat
  10. Redis单机部署、添加开机自启、配置参数