前言
SAP CDS(Core Data Services)是一种强大的数据建模工具,它允许您定义数据模型和服务,以支持SAP应用程序开发。在SAP CDS中,元数据扮演着至关重要的角色,它描述了数据模型的结构和语义信息。为了更好地管理和组织这些元数据,SAP引入了分层概念,将CDS Metadata Extension分配到不同的层次上。这些分层的目的是帮助组织在不同场景下管理和定制CDS元数据,以满足不同用户的需求。
提示:以下是本篇文章正文内容,下面案例可供参考
一、CDS是什么?
Core data services(以下简称CDS)可以指两样东西,一个是HANA CDS,一个是ABAP CDS。如我们所知,HANA CDS只支持HANA数据库,ABAP CDS理论上支持多种数据库供应商,结果是,ABAP CDS相比之下要少一些功能。因此,在某些情况下,无法使用ABAP CDS解决问题时,可以使用一种变通的方法,即通过ABAP Managed Database Procedures (AMDP)创建ABAP CDS Table Function。
CDS(Core Data Service)是SAP的战略性的技术解决方案之一。其目的是在数据的物理存在和用户需求中间构建起一个虚拟层,满足用户对访问SAP系统数据的需求,CDS的设计具有以下的目标
1、易于定义和创建
2、能够满足复杂业务逻辑编写的需求
3、能够充分发挥数据库,尤其是SAP HANA的性能
4、除了满足逻辑需求,要能够具有充足的语意信息
5、具有良好的复用性和满足变化的需求的适应性
6、易于管理和传输
7、与现有系统的安全机制集成
8、具有一定的自解释功能,帮助用户发现所需的数据,而不是依赖于对SAP底层数
据结构的理解
9、同时满足OLTP(ABAP,Fiori)和OLAP(BW、BO)应用的调用需求
CDS分为两种:
HANA CDS:由于HANA需要直接在数据库内开发应用,使用标准SQL语言比如CREATE TABLE和CREATE VIEW等,已不能满足需要定义带有语义属性(比如Annotation)的数据库表、视图、类型等,因此HANA CDS应运而生。
ABAP CDS:可以运行在除了HANA之外的其他数据库平台之上,使用ADT(ABAP Development Tool)工具通过DDL语言进行定义。通过对数据库表添加assciation和annotation等方式定义带有丰富语义的视图对象,供ODATA和SAPUI5使用。
CDS(核心数据服务)可以指两种不同的内容,一种是HANA CDS,另一种是ABAP CDS。HANA CDS仅支持HANA数据库,而ABAP CDS理论上支持多种数据库供应商,但功能相对较少。因此,在某些情况下,无法使用ABAP CDS解决问题时,可以采用一种替代方法,即通过ABAP托管数据库过程(AMDP)创建ABAP CDS表函数。
CDS(核心数据服务)是SAP的战略性技术解决方案之一,旨在在数据的物理存在和用户需求之间构建一个虚拟层,以满足用户对访问SAP系统数据的需求。CDS的设计具有以下目标:
易于定义和创建
能够满足复杂业务逻辑编写的需求
能够充分发挥数据库的性能,尤其是SAP HANA
除了满足逻辑需求,还具有充足的语义信息
具有良好的复用性和适应性以满足变化的需求
易于管理和传输
与现有系统的安全机制集成
具有一定的自解释功能,帮助用户发现所需的数据,而不是依赖于对SAP底层数据结构的理解
同时满足OLTP(ABAP,Fiori)和OLAP(BW、BO)应用的调用需求
CDS分为两种: HANA CDS:由于HANA需要在数据库内直接开发应用,使用标准SQL语言(例如CREATE TABLE和CREATE VIEW等)已不能满足定义带有语义属性(如注释)的数据库表、视图、类型等的需求,因此HANA CDS应运而生。
ABAP CDS:可以在除HANA之外的其他数据库平台上运行,使用ADT(ABAP开发工具)通过DDL语言进行定义。通过对数据库表添加关联和注释等方式,定义带有丰富语义的视图对象,供ODATA和SAPUI5使用。
二、DEMO
@AbapCatalog.sqlViewName: 'ZCFI001'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '支付预测CDS'
define view ZCFI_001
with parameters @Environment.systemField : #SYSTEM_LANGUAGE
p_spras : syst_langu,
p_gjahr : gjahr
as select from bseg
inner join t001 on bseg.bukrs = t001.bukrs and
t001.spras = $parameters.p_spras
left outer join ekko on bseg.ebeln = ekko.ebeln
left outer join ekko as _ekko on bseg.zuonr = _ekko.ebeln
left outer join lfa1 on bseg.lifnr = lfa1.lifnr and
lfa1.spras = $parameters.p_spras
{
bseg.mandt,
bseg.bukrs,
bseg.belnr,
bseg.gjahr,
bseg.lifnr,
bseg.zuonr,
bseg.ebeln,
bseg.ebelp,
bseg.h_waers as wares,
bseg.zbd1t,
bseg.zfbdt,
lfa1.name1,
t001.butxt,
case shkzg when 'S' then wrbtr * (-1) else wrbtr end as wrbtr,
case when not ekko.ekgrp is null then ekko.ekgrp else _ekko.ekgrp end as ekgrp
}
where
bseg.koart = 'K' and
bseg.augbl = '' and
bseg.gjahr <> $parameters.p_gjahr
总结
CDS有非常多的功能,以后会与大家多多分享。