说一说ABAP CDS View的发展历史与特性

1. 背景

随着SAP Fiori应用程序的兴起,SAP领域的小伙伴接触和使用ABAP CDS View的机会也是越来越多。今天,让我们花些时间,一起在了解下这项技术的设计初衷和发展历史。

2. 设计初衷

说起ABAP CDS View,就不得不提及SAP HANA。SAP HANA引入了内存计算技术,这让ABAP开发范式发生了变化。

传统的ABAP开发,SAP系统的数据库可以是anyDB, 与数据库的交互往往是最耗时的。因而,ABAP开发者的处理方式更多的是,先从数据库获取数据,然后在应用层加工处理数据。

但HANA内存计算的能力,让我们有可能将数据处理逻辑下沉,也即在获取数据时,就让HANA处理好数据。

在这里插入图片描述

ABAP CDS View就是在SAP HANA数据库推出后的几年中逐渐发展起来的,它的设计初衷就是为了充分利用SAP HANA数据库的能力,通过提供了一种新的数据定义和访问语言,使得数据处理可以在数据库层面进行,从而提高整体数据访问的性能和效率。

3. 语言集

ABAP CDS是一种数据定义和查询语言,它主要由以下几种构成语言组成:

  • DDL(Data Definition Language):用于定义数据模型,包括表、视图等,它是原生SQL的扩展,可以在更高的语义级别上建模和检索数据。
  • DCL(Data Control Language):用于定义数据访问控制,包括权限控制等,并且集成了SAP传统权限对象的技术。
  • QDL(Query Definition Language):用于定义数据查询,包括选择、排序、过滤等,这可以让我们在ABAP程序中通过Open SQL来直接访问CDS提供的数据。

4. 特性

ABAP CDS 提供了一系列的基础特性,使得开发者可以更高效地定义和访问数据,包括:

  • 数据模型定义:ABAP CDS允许开发者定义更复杂的数据模型,包括表、视图、关联等。
  • 参数化视图:ABAP CDS允许开发者定义参数化视图,使得视图可以根据参数的不同返回不同的结果。
  • 关联(Association)和路径表达式:ABAP CDS支持关联和路径表达式,使得开发者可以方便地访问关联实体的数据。
  • 元数据注解(Annotation):ABAP CDS支持在数据模型中定义元数据注解,如字段标签、搜索帮助等。
  • 表达式和函数:ABAP CDS支持各种表达式和函数,包括算术表达式、字符串函数、日期函数等。
  • 扩展性:ABAP CDS支持视图的扩展,使得开发者可以在不修改原始视图的情况下添加新的字段或关联。
  • 访问控制:ABAP CDS支持数据访问控制,可以定义谁可以访问哪些数据。
  • OData服务发布:ABAP CDS可以直接发布为OData服务,供其他应用程序访问。

5. 基础语法和演变(SQL View vs. CDS View Entity)

在AS ABAP 7.57之前,我们可以通过ABAP CDS的DDL语言直接定义发布两个对象,如下例:

@AbapCatalog.sqlViewName: 'ZDEMO_CDS_SQL'
define view ZDEMO_CDS_DDL
  as select from sbook
{
  carrid,
  connid
}

其中,@AbapCatalog.sqlViewName: ‘ZDEMO_CDS_SQL’ 指定了数据库SQL View的名字,在CDS View激活时,会在数据库层生成对应的SQL View (SE11可见)。
define view ZDEMO_CDS_DDL是定义的CDS View Entity的名字(SE11不可见)。

  • SQL View是数据字典中的一个对象,它是一个真实数据库的对象,但不含有任何额外的语义信息(Semantics)。
  • CDS View Entity并不会存在于数据字典中,它不是一个数据库对象,它可以看做是一个ABAP的数据类型,并含有额外的语义信息(Annotations)。

这种方式可以看做是一种技术上的过渡,随着CDS技术的发展,用define view的方式去创建CDS View Entity已经不再推荐,并且在AS ABAP 7.57后已经完全废弃。

目前,推荐的方式是,直接用关键字define view entity去创建CDS View,而无需去生成数据字典中对应的SQL View,示例如下:

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Demo View'
define view entity ZDEMO_CDS_DDL
  as select from sbook
{
  carrid,
  connid
}

这种方式,更加的简洁高效,也更符合CDS技术的初衷。

6. 注解(Annotations)

注解是ABAP CDS的一个重要特性,它设计初衷是为了添加额外的语义信息到CDS实体,从而使得这些实体可以更好地被各种应用程序和服务消费,例如被ABAP运行时环境、OData服务、Fiori应用等消费。

ABAP CDS的Annotations主要分为以下几种:

  • 元数据扩展Annotations:用于添加额外的元数据到CDS实体,如字段标签、搜索帮助等。
  • UI Annotations:用于定义CDS实体在UI(如Fiori应用)中的显示方式,如字段顺序、字段可见性等。
  • OData Annotations:用于定义CDS实体在OData服务中的表现,如实体集名称、导航属性等。
  • 语义Annotations:用于定义CDS实体的业务语义,如度量单位、货币代码等。

以下是一个使用Annotations的ABAP CDS视图示例:


@AbapCatalog.sqlViewName: 'ZCDS_VIEW'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'CDS View Example'
@OData.publish: true
define view ZCds_View as select from sflight as flight
{
  @UI.lineItem: { position: 10 }
  flight.carrid as AirlineCode,

  @UI.lineItem: { position: 20 }
  flight.connid as ConnectionNumber,

  @UI.lineItem: { position: 30 }
  flight.fldate as FlightDate,

  @UI.lineItem: { position: 40 }
  flight.price as FlightPrice
}

在这个示例中,我们定义了一个名为ZCds_View的CDS视图,并使用了多个Annotations。
@AbapCatalog.sqlViewName@AbapCatalog.compiler.compareFilter@AccessControl.authorizationCheck@EndUserText.label是元数据扩展Annotations,它们分别定义了SQL视图名称、编译器比较过滤器、授权检查和标签。
@OData.publish是OData Annotation,它定义了这个视图应该被发布为OData服务。
@UI.lineItem是UI Annotation,它定义了各个字段在UI中的显示位置。

7. 其它方面

ABAP CDS 技术有着广泛的应用场景,在此就不再过多展开,有时间我会继续整理和总结。

8. 小结

本文介绍了ABAP CDS的发展历史和主要特性,有助于更好地理解这项技术。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Open AI限制来袭?用上这个工具轻松破局!

【导语】近日,AI领域掀起了一场不小的波澜。Open AI宣布,从7月9日起,将对部分地区的开发者实施API调用限制。这一消息对于许多依赖Open AI技术的国内初创团队来说,无疑是一个沉重的打击。 对于这些团队而言,Open AI的A…

Arcgis地统计分析工具灰色不可用 解决方法

使用Arcmap,调用地统计分析工具(Geostatistical Analyst)下的探索数据(Explore Data),发现工具呈灰色不可用。这是由于扩展模块中没有将该模块做勾选设置导致的。下面介绍一下如何解决地统计分析工具不可用…

汇聚荣做拼多多运营第一步是什么?

汇聚荣做拼多多运营第一步是什么?在众多电商平台中,拼多多凭借其独特的社交电商模式迅速崛起,吸引了大量消费者和商家的目光。对于希望在拼多多上开店的商家而言,了解如何进行有效运营是成功的关键。那么,汇聚荣做拼多多运营的第…

web前端——HTML

目录 一、HTML概述 1.HTML是什么? 2.HTML具体化解释 二、HTML基本语法 1.声明 2. Head头标签 3.body身体标签 4.一个html的基本结构 5.标签 6.标签属性 ①属性的格式 ②属性的位置 ③添加多个属性 三、基本常用标签 1.超链接 2.图像标签 ①图像标…

C++编程(四)this指针 常函数 常对象 静态成员

文章目录 一、this指针(一)概念(二)显式使用this指针的场景1. 当形参和成员变量名一致时2. 返回对象自身的时候必须要使用this指针3. 在类中销毁一个对象 二、常函数和常对象(一)常函数1. 概念2. 语法格式 …

【2024.6.23】今日科技时事:科技前沿大事件

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

最新!AI大模型的研究热点!

引言 在人工智能的浪潮中,大模型研究如日中天,涵盖诸多研究方向,每个方向均承载着独特的研究焦点与挑战。 以下,我们将逐一探讨数个备受瞩目的研究方向,包括检索增强生成RAG、大模型Agent、Mamba、MoE、LoRA等&#…

【LeetCode】八、堆的使用:第K个最大元素 + 前K和高频单词

文章目录 1、Java中的堆结构2、leetcode215:数组中的第K个最大元素3、leetcode692:前K个高频单词 1、Java中的堆结构 PriorityQueue类取堆顶元素删除堆顶元素堆的元素个数遍历堆 2、leetcode215:数组中的第K个最大元素 这题应该快排来解&…

MyBatis~配置解析, 属性(properties)、设置(settings)

注意, 对应的名称一定要相同, 比如username就要对应username, 而且如果同时使用外部配置文件和property, 优先级是外部配置文件优先级更高 设置(settings) 这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了…

利用Python控制终端打印字体的颜色和格式

利用Python控制终端打印字体的颜色和格式—操作详解(ANSI转义序列) 一、问题描述二、ANSI转义序列三、具体代码和显示效果(看懂这段代码,以后可随心控制字体的打印格式) 欢迎学习交流! 邮箱: z……

Linux系统相关函数总结

在应用程序当中,有时往往需要去获取到一些系统相关的信息,譬如时间、日期、以及其它一些系统相关信息,本章将向大家介绍如何通过 Linux 系统调用或 C 库函数获取这些系统信息。除此之外,还会向大家介绍 Linux 系统下的/proc 虚拟文…

Android 13 为应用创建快捷方式

参考 developer.android.google.cn 创建快捷方式 来自官网的说明: 静态快捷方式 :最适合在用户与应用互动的整个生命周期内使用一致结构链接到内容的应用。由于大多数启动器一次仅显示四个快捷方式,因此静态快捷方式有助于以一致的方式执行…

TikTok API接口——获取视频评论信息

一、引言 TikTok,作为全球最受欢迎的短视频社交平台之一,不仅为用户提供了展示才华和分享生活的舞台,也为品牌和企业提供了与年轻用户互动的新渠道。在这个信息爆炸的时代,了解用户的声音、掌握舆论动向显得尤为重要。通过TikTok…

uview中的utabs组件item字数不一致导致滑块偏移

给item单独设置宽度,使滑块计算准确 ::v-deep .u-scroll-box .u-tab-item {width: 80px !important;&:nth-child(3),&:nth-child(4),&:nth-child(5) {width: 60px !important;}flex: 1 1 0% !important; }效果如下:

【TOOL】ceres学习笔记(一) —— 教程练习

文章目录 一、Ceres Solver 介绍二、Ceres 使用基本步骤1. 构建最小二乘问题2. 求解最小二乘问题 三、使用案例1. Ceres Helloworld2. Powell’s Function3. Curve Fitting4. Robust Curve Fitting 一、Ceres Solver 介绍 Ceres-solver 是由Google开发的开源C库,用…

吐血推荐!3款视频生成工具,全部国产,都免费

AI视频大模型的爆发,让创作爆款视频不再是专业人士的能力。 今天二师兄给大家推荐3款免费的视频生成工具。 01 可灵 推荐指数 : 五颗星 先看效果 可灵大模型测试 可灵大模型是快手AI团队自主研发的视频生成大模型,具备强大的视频创作能力&a…

大数据开发需要哪些职场知识

职场是个人情世故的江湖,除了专业技能,成功的大数据开发人员还需要掌握多种职场知识。以下是一些重要的职场知识和技能,结合实际例子详细说明。 目录 理论知识与工程实践理论知识工程实践例子 项目经验总结项目管理总结和反思例子 做事方式方…

【python】OpenCV—Color Map

文章目录 cv2.applyColorMapcv2.putText小试牛刀自定义颜色 参考学习来自 OpenCV基础(21)使用 OpenCV 中的applyColorMap实现伪着色 cv2.applyColorMap cv2.applyColorMap() 是 OpenCV 中的一个函数,用于将灰度图像或单通道图像应用一个颜色…

《PIDNet: A Real-time Semantic Segmentation Network Inspired by PID Controllers》

期刊:CVPR 年份:2023 代码:https://github.com/XuJiacong/PIDNet 摘要 双分支网络架构已经证明了它在实时语义分割任务中的有效性和有效性。然而,高分辨率细节和低频上下文的直接融合的缺点是细节特征很容易被周围的上下文信息…

Qt开发 | Qmake与CMake | Qt窗口基类 | VS Qt项目与QtCreator项目相互转化 | Qt架构 | Qt学习方法

文章目录 一、Qmake与CMake介绍1.Qmake2.CMake3.使用qmake还是cmake? 二、Qt3个窗口基类的区别三、vs qt与QtCreator项目相互转化方法1.QtCreator项目转VS Qt2.VS Qt项目转QtCreator项目 四、Qt架构介绍与学习方法详解 一、Qmake与CMake介绍 Qmake和CMake都是构建系…