刚刚过去的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的原创文章,请关注公众号"汪子熙":

使用SAP Cloud Application Programming模型开发OData的一个实际例子的更多相关文章

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

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

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

    2016年时,Jerry曾经写过一系列关于SAP Fiori Smart Template(现在更名为Fiori Elements了)的博客,介绍了所谓的MDD开发方法论 - Metadata Dri ...

  3. 如何在SAP Cloud Platform ABAP编程环境里创建一个employee

    用ABAP Development Tool登录SAP Cloud Platform ABAP编程环境后,对ABAP项目点击右键,选择属性,从而找到该环境的web访问的url: https://325 ...

  4. C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践

    Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介绍了在C4C里使用Cloud Application S ...

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

    相信通过Jerry的前一篇文章 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用,想必大家对Restful ABAP Programming模型已经有 ...

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

    Jerry的Restful ABAP Programming模型介绍系列的前两篇文章: 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 Jerry带 ...

  7. 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧

    Jerry从2018年底至今,已经写了一系列关于SAP Kyma的文章,您可以移步到本文末尾获得这些文章的列表.Kyma是SAP开源的一个基于Kubernetes的云原生应用开发平台,能够允许SAP的 ...

  8. SAP C/4HANA Sales Cloud使用OData服务和第三方系统集成的一个具体例子

    出于工作需要,Jerry写了这篇文章,给某些Partner做参考. 以前Jerry曾经介绍过SAP C/4HANA的五朵云到底包含哪些具体产品,其实在SAP官网上有更权威的中文解释: https:// ...

  9. 如何在SAP Cloud Platform上进行第一个integration flow开发

    登录SAP Cloud Platform integration tenant,点击Edit图标: 创建一个新的Content package: 保存content package后,点击artifa ...

随机推荐

  1. JMH java基准测试

    Measure, don’t guess! JMH适用场景 JMH只适合细粒度的方法测试 原理 编译时会生成一些测试代码,一般都会继承你的类 maven依赖 <dependencies> ...

  2. yum安装python3.6的方法

    # centos7 # 换成阿里云的yum源 yum -y install epel-release yum repolist yum -y install python36 测试 [root@loc ...

  3. Nginx实践篇(5)- Nginx代理服务 - 代理缓冲区、代理重新定义请求头、代理连接超时(转)

    Nginx实践篇(5)- Nginx代理服务 - 代理缓冲区.代理重新定义请求头.代理连接超时 nginx参数默认值 http://nginx.org/en/docs/http/ngx_http_co ...

  4. Qt编写安防视频监控系统15-远程回放

    一.前言 远程回放有两种处理方式,一种是采用NVR厂家提供的SDK开发包来登录到NVR上,然后根据SDK的函数接口指定的视频文件,当然也有接口查询视频文件列表等:一种是采用视频监控行业的国标GB281 ...

  5. 初学nodejs express小案例——小小相册(不涉及数据库,非常详细)

    业务简介: 显示文件夹 点击显示相册 上传相册 一.在主页显示文件夹  首先,我们要建立以上的文件夹,其中views用于放模板ejs,uploads里放的是相册文件夹,public是网页所需要的css ...

  6. sql 各种依赖关系解释

    1.数据依赖 数据依赖指的是通过一个关系中属性间的相等与否体现出来的数据间的相互关系,其中最重要的是函数依赖和多值依赖. 2.函数依赖 设X,Y是关系R的两个属性集合,当任何时刻R中的任意两个元组中的 ...

  7. python办公自动化(一)PPTX

    简介: python-pptx是python处理PPT的一个库,注重的是读和写,无法导出,没有渲染功能. 办公自动化,说的是大了一点,但是最常见的office三件套,word,excel,ppt.这还 ...

  8. C++17新特性optional和string_view

    1. optional的作用 类模板 std::optional 管理一个可选的容纳值,即可以存在也可以不存在的值. 一种常见的 optional 使用情况是一个可能失败的函数的返回值.与其他手段,如 ...

  9. cube-slide组件的应用

    <template> <div> <cube-slide :data="items"/> </div> </template& ...

  10. [INet] 借助 HTTP Cache 加速应用响应

    背景: GET 访问一个应用的时候,内容一般都不会时刻在变,如何让下一个人请求时极速获取响应过的内容,并且在内容发生变更时能够识别出来. 在应用层做 Cache 是一种方法,但是依旧要响应整个 Bod ...