SAP CAP(Cloud Application Programming)知识介绍和学习路径

news2024/11/13 10:41:44

1. 框架简介

1.1 什么是CAP?

CAP(Cloud Application Programming)是SAP推出的一种现代化开发框架,旨在简化和加速云原生应用程序的开发

CAP框架基于开放标准和技术,如Node.js、Java、OData和SQL,提供了一套工具和库,帮助开发人员快速构建、扩展和运行企业级应用。

1.2 CAP的基础技术框架

CAP框架主要由以下几个部分组成:

  • CDS(Core Data Services):用于定义数据模型和服务的领域特定语言(DSL)。
  • Node.js/Java:CAP支持两种编程语言,开发人员可以选择使用Node.js或Java来编写业务逻辑。
  • OData:在CAP框架下,可以通过CDS语言自动生成OData服务。
  • SQL:CAP支持多种数据库,包括SAPHANA、SQLite等。
    在这里插入图片描述

1.3 CAP的开发模式

CAP的开发模式主要包括以下几个步骤:

  • 定义数据模型:使用CDS语言定义数据模型。
  • 定义服务:使用CDS语言定义服务接口。
  • 实现业务逻辑:使用Node.js或Java实现业务逻辑。
  • 部署和运行:将应用部署到SAP BTP(Business Technology Platform)或其他支持的环境中。

2. 学习资料与学习路径

2.1 官方文档

通过SAP CAP的官方文档 https://cap.cloud.sap/docs/,可以快速学习和了解CAP的开发知识。在官方文档中,提供了从入门到高级的各种教程,涵盖了 CAP 框架的各个方面,如数据建模、服务定义、业务逻辑实现、测试和部署等。
在这里插入图片描述

一个无用的知识:在CAP的官方文档上,我们可以看到cap>ire这样一个log,CAPIRE 这个名字其实来源于意大利语,意思是“理解”。

2.2 学习路径

学习 SAP CAP(Cloud Application Programming)框架可以分为几个阶段,从基础知识到高级应用。

  1. 对于从ABAP开发转为CAP开发的小伙伴,在正式开启CAP领域前,最好先了解SAP BTP的基本概念和服务,同时补齐JAVANode.js的一些基础语法知识。
  2. 在此基础上,学习CDS(Core Data Services)语言的语法和用法,了解如何定义数据模型和服务。
  3. 了解了CDS语言后,可以参照官方文档中的示例,创建一个简单的CAP项目,从而了解CAP项目的基本结构,以及各个文件的作用,同时学习使用CAP的命令行工具CLI来创建和管理项目。
  4. 完成上述学习后,基本上算是CAP入门了。在此基础上,可以进一步探索CAP的高阶功能,例如身份验证、授权、应用的部署等等。

同时, 学习SAPUI5 和 Fiori Elements技术对于 SAP CAP 中的应用程序开发也是非常有帮助。

因为:CAP 框架主要负责后端服务和业务逻辑,而 SAPUI5 和 Fiori Elements 则用于构建前端用户界面。

  1. 使用 CAP 框架定义数据模型和服务,处理业务逻辑和数据持久化。
  2. 使用 SAPUI5 或 Fiori Elements 构建用户界面,消费 CAP 提供的 OData 服务。

2.3 RAP vs. CAP

如果传统的ABAP开发接触过RAP框架的话,其实学习CAP框架还是相对容易的。虽然它们面向的技术栈和应用场景有所不同,但在设计理念和某些技术上有相似之处。

RAP与CAP有以下的相似点:

  • 面向服务的架构:两者都采用面向服务的架构,强调通过服务接口(如 OData)来访问和操作数据。
  • 数据建模:两者都使用领域特定语言(DSL)来定义数据模型和服务接口。CAP 使用 CDS(Core Data Services),而 RAP 使用 ABAP CDS
  • 业务逻辑分层:两者都强调业务逻辑的分层和模块化,支持在不同层次上实现业务逻辑。
  • 开放标准:两者都基于开放标准和协议,如 ODataRESTful API,便于集成和扩展。

若比较一下RAP与CAP的技术栈,可以发现如下的相似点:

  • 开发语言:
    • CAP:主要使用 JavaScript(Node.js)或 Java 来实现业务逻辑。
    • RAP:使用 ABAP 语言来实现业务逻辑。
  • 开发工具:
    • CAP:使用 Visual Studio CodeSAP BAS等发工具,结合 CAP CLI 进行项目管理。
    • RAP:使用 ABAP Development Tools(ADT)SAP BAS 进行开发。
  • 部署环境:
    • CAP:主要部署在 SAP BTP(Business Technology Platform)上,支持多种云环境。
    • RAP:主要部署在 SAP S/4HANA 系统中,适用于内部部署和云部署。

下面用一个小例子对比了RAP 和 CAP的相似性和不同点:

2.3.1 RAP

ABAP CDS 数据模型:

@EndUserText.label: 'Books'
@AbapCatalog.enhancementCategory: #NOT_EXTENSIBLE
@AccessControl.authorizationCheck: #NOT_REQUIRED
@Metadata.allowExtensions: true
define root view entity ZI_Books
{
  key ID      : abap.int4;
  title       : abap.string(100);
  author      : abap.string(100);
  stock       : abap.int4;
}

服务定义:

@EndUserText.label: 'Catalog Service'
define service ZC_CatalogService
{
  expose ZI_Books as Books;
}

业务逻辑(ABAP 类):

CLASS zcl_catalog_service DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES: if_rap_query_provider,
                if_rap_modify_provider.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS zcl_catalog_service IMPLEMENTATION.

  METHOD if_rap_query_provider~select.
    " Implement query logic here
  ENDMETHOD.

  METHOD if_rap_modify_provider~create.
    " Implement create logic here
  ENDMETHOD.

ENDCLASS.

2.3.2 CAP

CDS 数据模型(schema.cds):

namespace my.bookshop;

entity Books {
  key ID : Integer;
  title  : String;
  author : String;
  stock  : Integer;
}

服务定义(service.cds):

using { my.bookshop as my } from './schema';

service CatalogService {
  entity Books as projection on my.Books;
}

业务逻辑(catalog-service.js):

const cds = require('@sap/cds');

module.exports = cds.service.impl(async function() {
  const { Books } = this.entities;

  this.after('READ', 'Books', each => {
    if (each.stock > 111) {
      each.title += ' -- 11% discount!';
    }
  });

  this.on('CREATE', 'Books', async req => {
    const { ID, title, author, stock } = req.data;
    if (stock < 0) {
      req.reject(400, 'Stock cannot be negative');
    }
    await INSERT.into(Books).entries({ ID, title, author, stock });
  });
});

3. 小结

本文介绍了SAP CAP框架的基础知识,并结合ABAP技术栈的特点,给出了CAP建议的学习路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2099358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

删除重复的行

Excel的有7列数字&#xff0c;有些数字整行重复。 ABCDEFG11234567276543213123456741234567511111116111111177777777 要求删掉重复的行。 IJKLMNO1765432127777777 使用 SPL XLL&#xff0c;输入公式&#xff1a; spl("?.group(~).select(~.len()1).conj()",…

Windows、Mac安装配置Nodejs【保姆级教程】

安装配置Nodejs 最近需要使用whistle抓包&#xff0c;发现依赖nodejs环境&#xff0c;同时环境为windows&#xff0c;故在此记录。 1 windows 下载nodejs 官网地址&#xff1a;https://nodejs.org/en/ 下载完成后&#xff0c;双击安装包&#xff0c;开始安装Node.js直接点【…

SOMEIP_ETS_078: Wrong_SOMEIP_Protocol_Version

测试目的&#xff1a; 验证当设备&#xff08;DUT&#xff09;接收到一个包含错误协议版本的SOME/IP请求时&#xff0c;是否能够返回错误消息或忽略该请求。 描述 本测试用例旨在检查DUT在处理一个echoUINT8方法的SOME/IP消息时&#xff0c;如果消息中包含的协议版本不正确&…

ARM体系与架构

硬件基础 NOR Flash 和 NAND Flash异同 NOR&#xff0c;Not OR&#xff0c;逻辑是或非门&#xff1b;NAND&#xff0c;Not AND&#xff0c;逻辑是与非门。 两者都是FALSH芯片&#xff0c;断电不丢失。FLASH只能写0不能写1&#xff0c;所以写前都要先擦除。 NOR FLASH 按照块、…

HarmonyOS开发实战( Beta5版)高负载场景下线程设置防止关键线程被打断

场景介绍 在现代软件开发中&#xff0c;多线程或多进程的并发处理已成为常态。在多线程环境中&#xff0c;不同线程执行的任务具有不同的重要性和紧急程度。在高负载情况下&#xff0c;系统资源&#xff08;如CPU时间&#xff09;变得非常宝贵&#xff0c;此时如果关键线程&am…

开源-基于J2EE分布式架构的会议管理系统,支持会议资源管理,预订会议,冲突检测,提醒与签到

自20世纪末至21世纪初&#xff0c;数字化和互联网技术的迅猛发展彻底改变了工作方式和商业模式。企业迅速采用电子邮件、即时通讯和在线会议等数字工具以提升沟通效率。 在信息爆炸的时代&#xff0c;工作中面临的信息量剧增&#xff0c;而企业对效率和生产力的要求也日益提高…

用canvas 实现一个 图片 object-fit: cover 模式的效果 ,纯js

先看效果&#xff1a;左侧是原生的object-fit: cover img 右侧是canvas 处理之后的 模仿object-fit: cover 的效果&#xff0c;src 是转换之后的base64 地址 可以结合style样式发现右图并没有object-fit: cover&#xff0c;但是效果与左同。 直接贴代码吧 <!DOCTYPE htm…

2022ICPC香港站

K. Maximum GCD 分析&#xff1a;对 n 任意取模的结果只可能是小于 n/2​ 的正整数。一个序列的最大公约数不会超过这个序列的最小值。 如果全部值都大于等于最小值的两倍&#xff08;或等于最小值&#xff09;&#xff0c;则都可以变成最小值。 反之则取最小值/2。 #includ…

Solidworks笔记

目录 一、Solidworks 1.1 特征命令 1.1.1 镜像 1.1.2 扫描 1.2 报错 1.3 &#xff08;零件&#xff09;属性 1.3.1 材料属性 1.3.2 质心 1.3.3 材料库的创建、保存、导入 1.3.4 查询材料参数的网站 1.3.5 编辑零件颜色 1.3.6 几种颜色 1.3.7 转动惯量查看 …

猫头虎 分享已解决Bug || ModuleNotFoundError: No module named ‘flask‘ 解决方案

猫头虎 分享已解决Bug || ModuleNotFoundError: No module named flask 解决方案 猫头虎 最近收到了一位粉丝的求助&#xff0c;他在进行后端开发时遇到了一个令人头痛的错误&#xff1a;ModuleNotFoundError: No module named flask。这不仅是新手容易遇到的问题&#xff0c;甚…

Linux运维--Firewall防火墙命令以及规则等详解(全)

Linux运维–Firewall防火墙命令以及规则等详解&#xff08;全&#xff09; 在Linux系统中&#xff0c;你可以使用firewalld和iptables来管理和设置防火墙规则。Firewalld是一个动态管理防火墙的工具&#xff0c;而iptables是一个更底层的工具&#xff0c;可以直接配置Linux内核…

算法的学习笔记—数据流中的中位数(牛客JZ41)

&#x1f600;前言 在处理动态数据时&#xff0c;实时计算中位数是一个经典问题。中位数是排序后处于中间位置的数值&#xff0c;数据流中的中位数计算面临两个挑战&#xff1a;首先是数据量的动态变化&#xff0c;其次是需要保持元素的有序性。为了高效地解决这个问题&#xf…

【高校科研前沿】三峡大学黄进副教授等人在环境科学Top期刊JCP发文:人类活动如何在气候变化下影响和降低生态敏感性:以中国长江经济带为例

文章简介 论文名称&#xff1a;How human activities affect and reduce ecological sensitivity under climate change: Case study of the Yangtze River Economic Belt, China&#xff08;人类活动如何在气候变化下影响和降低生态敏感性&#xff1a;以中国长江经济带为例&am…

Facebook的AI进化:如何用智能技术提升内容推荐

在数字时代&#xff0c;社交媒体平台不仅是信息传播的重要渠道&#xff0c;也是个人和品牌互动的关键平台。Facebook作为全球领先的社交媒体网络&#xff0c;其内容推荐系统的优化在很大程度上提升了用户体验。本文将探讨Facebook如何通过人工智能&#xff08;AI&#xff09;技…

Android Studio gradle下载太慢了!怎么办?(已解决)

Android Studio&#xff01;你到底干了什么&#xff1f;&#xff01; 不能高速下载gradle&#xff0c;我等如何进行app编程&#xff1f;&#xff01; 很简单&#xff0c;我修改gradle地址不就是了。 找到gradle-wrapper.properties文件 修改其中distributionUrl的地址。 将 ht…

基于LDA模型的经济金融政策文本研究与分析设计与实现,很详细

摘 要 经济金融政策文本的研究与分析对于理解国家经济发展方向和政策制定逻辑至关重要。近年来&#xff0c;随着信息技术的发展&#xff0c;基于文本的定量分析方法在经济金融领域得到广泛应用。LDA&#xff08;Latent Dirichlet Allocation&#xff09;作为一种典型的主题模型…

OpenSea收到SEC韦尔斯通知,NFT赛道提前预定大败局?

NFT赛道需要寻找下一个突破口&#xff0c;回到数字艺术&#xff0c;或者走向应用型技术。 作者&#xff1a;Wenser&#xff1b;编辑&#xff1a;郝方舟 出品 | Odaily星球日报&#xff08;ID&#xff1a;o-daily&#xff09; 就在昨日&#xff0c;曾经最大的 NFT 交易平台 Open…

前端宝典二十五:vue2高阶用法mixin、transition、slot

本文主要探讨vue2中几个高阶的用法&#xff1a;mixin、transition、slot 一、mixin 在 Vue 中&#xff0c;mixin&#xff08;混入&#xff09;是一种用于在多个组件之间共享代码的机制。它允许你定义可重用的选项对象&#xff0c;并将其混入到不同的组件中。 1、使用方法 创…

重新修改 Qt 项目的 Kit 配置

要重新修改 Qt 项目的 Kit 配置&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 打开 Qt Creator 首先&#xff0c;启动 Qt Creator&#xff0c;确保你的项目已经打开。 2. 进入项目设置 在 Qt Creator 中&#xff0c;点击菜单栏的 “Projects” 标签&#xff08;通…

python3兼容python2吗

不兼容&#xff0c;最明显的是print变成了函数。 最重要的变化&#xff1a; 第一点是python2里的str变为了python3里的byte&#xff0c;而str由unicode str取代&#xff0c;因此一些网络编程&#xff0c;hash加密的函数需要将参数encode处理。 第二点是大量的python2库没有被…