刚刚过去的SAP TechEd上,SAP CTO Juergen Mueller向外界传递了一个重要的信息:身处云时代大环境下的SAP从业者,在SAP云平台上该如何选择适合自己的开发方式?

Juergen Mueller用了一棵决策树来向大家介绍,对于拥有不同开发技能水平的SAP从业者,可以按照这棵树,根据自身情况和项目需要来选择不同层次和组合的开发工具以及编程模型。

上图右边的分支表明,如果不想抛弃已经习得的ABAP开发技能,可以选择SAP云平台上的ABAP编程环境;反之,如果青睐nodejs,Java这些技术栈,那么SAP云平台也不会让你失望:SAP Cloud Application Programming Model(简称为CAP),是SAP推荐的在SAP Cloud Platform上进行开发的最佳实践。

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

看一个具体的例子,通过Cloud Application Programming Model实现一个简单的在线书店应用。书店里出售很多书(Books),每本书包含ID,名称,作者(Author)和库存这四个字段。用户通过创建订单(Orders)进行购买。

如果是用ABAP技术栈实现这个需求,一种比较容易的方式是使用事务码SEGW,通过OData协议来实现。在SEGW里创建Books,Author和Orders模型,以及对应的增删改查。Jerry在去年的文章 SAP OData编程指南 里曾详细介绍。再后来有了CDS view,可以通过在CDS view上加注解@OData.publish的方式快速创建OData服务。

到了SAP Cloud Platform ABAP编程环境上,我们有了更加好用的工具:Restful ABAP Programming Model,

30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现

从以上短短的描述,我们能够感受到,近些年来ABAP技术栈随着SAP向云端转型而不断快速向前演进的趋势。

下面我们就来看看如何用SAP CAP实现这个在线书店的需求。

命令行执行下面的命令:

npm set @sap:registry=https://npm.sap.com
npm i -g @sap/cds

从SAP的npm仓库里下载cds库并进行全局安装:

接下来直接敲cds命令,如果看到下面的帮助信息,说明安装成功了。此后所有的CAP开发,都围绕着这个cds命令进行。

CAP开发的IDE可以使用Visual Studio Code,当然也可以用其他文本编辑工具。推荐Visual Studio Code的原因是SAP发布了一款针对CAP开发的Visual Studio Code扩展,支持语法高亮和静态检查,可以从SAP官网下载:
https://tools.hana.ondemand.com/#cloud

和我们开发一个nodejs应用类似,基于CAP的编程,第一步就是cds init,这个命令会自动帮我们创建CAP应用的骨架和从npm.sap.com下载CAP应用必需的库文件。

cds init执行完毕后,打开Visual Studio Code,界面如下,这些全是cds init自动生成的:

新建srv文件夹,下面创建文件cat-service.cds,完成Books,Authors和Orders的建模,即定义每个模型的字段,以及模型间的跳转关系:

定义完之后,执行命令cds run,就可以本地预览我们刚刚创建的模型了。这个命令启动了一个本地服务器,通过http://localhost:4004访问:

到目前为止,因为我们没有实现这个模型的持久层,所以还观察不到任何数据。

在实现持久层之前,我们可以先mock一些数据。新建cat-service.js, 在里面硬编码一些测试数据:

这样,再次请求Books和Authors,就能在浏览器里看到mock的数据了:


下面我们进行持久层的相关开发。新建一个文件夹db,下面新建一个文件data-model.cds,把之前实现在cat-service.cds里的模型定义拷贝过来。第17行的managed意思是把Orders模型的增删改查操作托管给框架完成。

此时cat-service.cds里的实现就干净多了,直接重用上一步data-model.cds里定义好的模型。注意此处的@readonly和@insertonly注解。

这个例子里我们选用SQLite这个轻型数据库来存储数据。用命令行npm i sqlite3 -D安装SQLite,然后进行数据库部署:

cds deploy --to sqlite:db/my-bookshop.db

根据cds deploy命令的输出提示,package.json也相应被更新了:

前面提过Books和Authors这两个模型具有@readonly注解,因此我们新建两个csv文件,维护一些数据在文件内:

然后将这两个csv文件通过命令cds deploy导入到数据库里。

登录sqlite控制台,使用select语句查看成功从csv文件导入的数据:

前面提到Orders的注解是@insertonly, 现在我们想实现一个新功能,每次针对一本书下单后,该图书的库存减一。

《生化危机》目前只有12本了:

打开之前存放mock数据的cat-service.js, 在下单之前的hook里实现库存减一的操作:

然后进行测试:在postman里执行post请求,下单再买一本:

此时再次执行get请求,发现《生化危机》的库存已经和期望的一样扣掉了一本了:

这种频繁下单的顾客,估计是和Jerry一样的生化系列爱好者。


希望这个例子能够帮助大家对如何使用Cloud Application Programming Model进行开发有一些基本的认识。感谢阅读。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

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

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

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

  2. 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用

    Jerry之前的文章30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 发布之后,有朋友问我,"没错, 我是在你的文章里看到了Fiori应用的 ...

  3. SAP Cloud Application Programming 介绍(2021 更新版)

    这是Jerry 2021年的第 25 篇文章,也是汪子熙公众号总共第 296 篇原创文章. 最近有朋友给我留言,询问关于 SAP Cloud Application Programming(简称CAP ...

  4. SAP BTP 平台 Cloud Application Programming 编程模型概述

    SAP Cloud Application Programming Model (CAP) 是一个包含语言.库和工具的框架,用于构建企业级服务和应用程序.它引导开发人员沿着经过验证的最佳实践和大量开箱 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 砥砺前行,不忘初心,我的运维学习之路.
  2. docker远程访问TLS证书认证shell
  3. git stash的用法
  4. 解决内存不可read和written的问题
  5. Python中使用httpx模块详解
  6. oracle账户解锁28000,oracle 下载 账号密码ORA-28000账户被锁和解锁
  7. 6.第一个程序Hello World
  8. 用3种方式解决复杂报表
  9. 012-ViewState状态保持
  10. 洛谷 2312 / bzoj 3751 解方程——取模
  11. 关于“undefined reference to”错误
  12. Padavan设置无线中继
  13. Excel批量生成条形码
  14. 快速健身---马步站桩
  15. 【JAVA笔记】JAVA调用同一个包里的不同类的方法:
  16. 众数和中位数的应用题_什么是众数和中位数
  17. Python+selenium注册唯一账号
  18. ubuntu设置全攻略
  19. SPM8和哪个版本的matlab配套,SPM8处理流程
  20. 曾经我们并肩作战,敬未来一杯,敬资本一杯

热门文章

  1. 通过telnet访问路由器
  2. PHP的十个高级技巧
  3. 【助教】关于代码提交相关注意事项
  4. windows 下 配置 github
  5. Mac 上 Sublime Text3-Package control-console安装失败解决方案
  6. Android之动画
  7. 屯题 (bestcoder #62~#75)
  8. 【网上收藏】取得网卡mac
  9. “欢迎光临”用其他各国语言怎么写、怎么说?
  10. 高等数理统计(part5)--分布族的完备性