说一说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的发展历史和主要特性,有助于更好地理解这项技术。

  • 48
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十年铸器

给作者赏杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值