首页 > 其他分享 >说一说ABAP CDS View的发展历史与特性

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

时间:2024-06-30 17:58:42浏览次数:25  
标签:定义 CDS 视图 ABAP SQL 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的发展历史和主要特性,有助于更好地理解这项技术。

标签:定义,CDS,视图,ABAP,SQL,View
From: https://blog.csdn.net/nkGavinGuo/article/details/140021135

相关文章

  • WPF TreeView 三层绑定模板
    在WPF应用程序中,使用TreeView来展示三层数据结构是一个常见的需求。为此,你需要定义适当的数据绑定和模板。以下是一个完整的示例代码,展示如何实现这一点。数据模型首先,我们需要定义三层数据模型。假设我们有三层数据结构:RootItem包含ChildItem,ChildItem又包含SubChildItem。pub......
  • 快速学习SAP开发资料,SAP视频快速学习资料,ABAP零基础快速学习 为何选择学习SAP ABAP?选
    在瞬息万变的数字时代,想要在IT行业脱颖而出,掌握一项有优势技术是通往高薪的关键。SAP,作为全球企业管理和解决方案的领导者,其核心编程语言ABAP正引领着企业信息化的最前沿。现在,我们为你呈上一套精心策划的SAPABAP二次开发资料视频——你的收入改善与职业飞跃的加速器!一、为何选......
  • C#实现禁用DataGridView控件列表头自动排序功能 (附完整源码)
    C#实现禁用DataGridView控件列表头自动排序功能代码说明:在C#中,可以通过设置DataGridView控件的列的SortMode属性来禁用列头的自动排序功能。以下是一个完整的示例代码,展示了如何实现这一功能:usingSystem;usingSystem.Windows.Forms;​namespace......
  • Python高效内存访问,memoryview这个神器你值得拥有!
    目录1、初识memoryview......
  • WebView2UI - 在WPF之中使用WebView2的一些经验总结
    项目地址:https://gitee.com/skyw18/WebView2UI项目地址:https://github.com/skyw18/WebView2UIwebview简介与生命周期:WPF应用中的WebView2入门-MicrosoftEdgeDeveloperdocumentation|MicrosoftLearn具体代码可以参考微软官方示例文档WPF示例应用-MicrosoftEdge......
  • LabVIEW开发为什么沟通需求非常重要
    在LabVIEW开发项目中,需求沟通是项目成功的基石。以下是需求沟通的重要性及其原因:明确项目目标:定义清晰的目标:通过与用户的沟通,可以明确项目的目标和范围,确保开发团队理解用户的实际需求,从而避免偏离方向。减少歧义:需求文档和沟通可以减少开发人员和用户之间的误解,确保双......
  • LabVIEW与3D相机开发高精度表面检测系统
    使用LabVIEW与3D相机开发一个高精度表面检测系统。该系统能够实时获取三维图像,进行精细的表面分析,广泛应用于工业质量控制、自动化检测和科学研究等领域。通过真实案例,展示开发过程中的关键步骤、挑战及解决方案,确保系统的高性能和可靠性。随着工业自动化和智能制造的发展,精......
  • Qt QTreeView 常见节点操作
    QTreeView作为项目最经常使用的空间,常用接口和操作必须熟悉熟悉在熟悉!!!1、节点遍历1voidParamSettingDlg::GetNode()2{3for(inti=0;i<model->rowCount();i++)4{5QStandardItem*item=model->item(i);67qDebug()<<"item......
  • Windows Server 2025 中文版、英文版下载 (Inside Preview, updated Jun 2024) - 下一
    WindowsServer2025中文版、英文版下载(InsidePreview,updatedJun2024)-下一代Windows11ServerWindowsServer2025正式版发布在即请访问原文链接:https://sysin.org/blog/windows-server-2025/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org我们知道W......
  • Android webview图片过大
    privateclassArticleWebViewClientextendsWebViewClient{@OverridepublicvoidonPageFinished(WebViewview,Stringurl){super.onPageFinished(view,url);//重置webview中img标签的图片大小imgReset();}@Overridepublicbo......