CDS View-Part 1 & Part 2介绍

9 篇文章 14 订阅

这是一个很好的系列,从Part1到Part20,反复练习就可以很好的掌握CDS View,尊重版权,仅供个人学习
https://sapyard.com/abap-on-sap-hana-part-iv/
https://sapyard.com/abap-on-sap-hana-part-v/

CDS Annotation online help:
https://help.sap.com/viewer/cc0c305d2fab47bd808adcad3ca7ee9d/1709%20000/en-US/630ce9b386b84e80bfade96779fbaeec.html

HANA DB以内存存储内存计算而傲,在其上的产品如S4 HANA、C4C等均以此为base为core,所以尽最大可能的利用内存数据库是SAP最新一代产品的特点。以HANA DB为基础,尽大可能的利用数据库的计算能力。SAP 从ABAP 7.40 SP05引入了ABAP CDS View。
CDS是SAP HANA中定义和使用语义丰富的数据模型的新基础设施。通过使用数据定义语言(DDL)、查询语言(QL)和表达式语言(EL), CDS可以包含编写操作、事务语义、约束等。
在这里插入图片描述
CDS View的存在是为了把逻辑处理从应用服务器推往数据库或是client端。 学HANA会经常看到一句“Core-to-Data”,就是把耗时最大的处理逻辑从应用服务器转移到Database,除了往后推,还能够通过从CDS View生成的OData服务的Annotations来控制SAP UI5 Smart ControlsSAP Fiori Elements。这样CDS View就把逻辑通过delegate到了前端控件。
CDS View有点类似 ABAP View,都是通过一个或多个数据库表提供预定义的SQL查询以有效和舒适地连接和访问数据。
在这里插入图片描述

Part 1 – Core Data Services介绍

通过问题了解CDS

首先讨论一个问题:

为什么需要CDS View?

假设有一个需求是获得组织代码 ’ 4711 '中所有员工的id、姓名和各自的家庭地址的邮政编码

用Native SQL来实现会是下面的代码:
在这里插入图片描述
上面代码的问题是,需求和SQL代码之间存在很大的语义差异。

用ABAP Open SQL代码实现的话,大概会是这样的:
在这里插入图片描述
Open SQL的问题是,命令式编程着重于描述程序是如何运行的。而且它还有可能因为嵌套造成性能低下。

接下来看下CDS View的实现:
在这里插入图片描述
看以看出,使用CDS, SQL开发人员可以看到和需求之间只有很小甚至没有语义差距,abaper也不需要任何编码。可以直接从CDS得到结果。这样的动机还不够吗?🙂

问题2:

CDS View都有哪些优势?

和传统的View相比, CDS View不只是简单的视图构建,而是描述了用于构建包含数据库表、数据库视图、函数和数据类型的元模型存储库的DDL。它满足了ABAP数据字典和HANA Studio不能实现的功能。对于CDS,数据模型是在数据库上定义和使用的,而不是在服务器上。CDS还提供了超越传统数据建模工具的功能,包括对概念建模和关系定义、内置功能和扩展的支持。最初,CDS仅在SAP HANA的设计时和运行时环境中可用。现在,CDS概念在SAP NetWeaver AS ABAP也得到了充分的实现,使开发人员能够在将代码执行下推到数据库的同时,使用ABAP开发工具在ABAP层工作。

问题:

CDS View有哪些类型?

可以分为ABAP CDS和HANA CDS,也可以这样划分 带参数的CDS View和不带参数的CDS View,

问题:

什么是Core Data Service(CDS)?什么是CDS View?

CDS是用于定义有丰富语义的数据模型的基础结构层,这些模型表现形式为CDS View。CDS允许开发人员以非常基本的方式定义实体类型Entity type(例如订单、业务伙伴或产品)和它们之间的语义关系,它们对应于传统实体-关系Entity-Relationship(ER)模型中的外键关系。
CDS是使用基于SQL的数据定义语言(DDL)定义的,DDL基于标准SQL,还有一些附加的概念,比如关联associations,它定义CDS View注释Annotations之间的关系,后者指定CDS工件Artifacts的特定领域使用。另一个例子是表达式expressions,可以在将某些CDS属性视为要聚合的度量的场景中使用表达式。

和DDIC在ABAP世界中的角色相似,基于CDS的数据模型作为中心定义,它可用于许多不同的领域,如事务和分析应用程序,以统一的方式与数据库中的数据进行交互。然而,CDS数据模型超出了DDIC的能力,后者通常被限制在事务范围内(想想传统的在线事务处理功能)。例如,CDS可以定义以分层方式聚合和分析数据的视图,从基本视图开始,然后添加组合基本视图的强大视图。另一个区别是对特殊操作符的支持,比如UNION,它允许组合多个select语句只返回一个结果集
CDS工件Artifacts存储在DDIC中,可以通过Open SQL在ABAP程序中访问,方式与普通ABAP表或视图相同。

简单说:
CDS是SAP HANA中定义和使用语义丰富的数据模型的新基础设施。通过使用数据定义语言(DDL)、查询语言(QL)和表达式语言(EL), CDS可以包含编写操作、事务语义、约束等。
在这里插入图片描述
问题:CDS有哪些工件Artifacts和元素?

实体Entities (tables)
视图Views
用户定义数据类型User-defined data types (including structured types)
上下文Contexts
关联Associations
注释Annotations

问题:

什么时候需要使用CDS View?

取决于可重用性。如果视图的功能只需要一次,那么不需要创建CDS View。我们可以在Open SQL中使用连接、SQL表达式、子查询等来执行这个代码下推。但是如果我们想要重用一个视图,需要使用到Open SQL没有CDS的语义或技术能力,或者我们是想把整个数据模型下推到数据库,这时就是我们需要使用CDS View的时候。

问题:

HANA CDS 和ABAP CDS的根本区别是什么 ?

CDS in native SAP HANA 和 CDS in ABAP的细微区别在于视图定义。在ABAP和HANA场景中,视图都是在DDIC中包含的现有数据库表之上创建的。对于原生SAP HANA中的CDS,我们必须创建与DDIC表对应的基本实体类型,作为CDS视图定义的一部分。而对ABAP中的CDS,我们可以从CDS视图定义中引用任何底层DDIC表、视图或类型,从而避免在CDS层重复DDIC表的定义。在ABAP场景中,CDS定义被视为DDIC工件,需要像任何其他DDIC工件一样被激活,当进行更改时,它们的影响将传播到相关的工件。
创建的HANA CDS对象不是由ABAP字典管理的,这意味着不能使用Open SQL直接访问它们,而且它们不是ABAP类型系统中的类型。

ABAP CDS View比ABAP Dictionary View能做的更多。ABAP字典视图实际上就是一个ABAP结构。ABAP CDS View也生成ABAP结构,但还有更多内容。总的来说,一个ABAP CDS View生成或可以生成:

  • 一个ABAP Structure
  • 一个Database Structure
  • 一个Open SQL Structure
  • 一个OData Service

在CDS View之前,ABAP代码主要是包含ABAP应用程序的逻辑,这个逻辑由应用服务器处理。现在,ABAP应用程序的大部分逻辑都可以从ABAP代码转到CDS View,从而从应用服务器转到数据库。
这个是 ABAP CDS View和 HANA CDS View的共同点。

SAP ABAP CDS Views

SAP ABAP CDS views定义在应用服务器层,View是由驻留在应用服务器中的DDL文件来创建和维护的,它是数据字段(SE11)的一部分,也是STMS,Life Cycle management的一部分。ABAP CDS View 是用OPEN SQL写的,ABAP CDS View 是旨在支持ABAP应用程序的开发。数据库系统的类型无关紧要,它可以不必是HANA数据库。因此ABAP CDS View的主要重点是创建视图。

总结一下SAP ABAP CDS View的特点:

  • 驻留在应用服务器
  • 可以配合任意数据库
  • 使用OPEN SQL
  • 旨在ABAP 应用
  • 重点是创建视图
    SAP ABAP CDS Views 驻留在数据字典中的应用程序服务器中,但是处理数据库中的逻辑。
SAP HANA CDS Views

SAP HANA CDS Views是定义在HANA 数据库层的,是由驻留在位于 HANA XS服务器的数据库的DDL文件创建和维护的,使用的是Native SQL。HANA CDS View旨在支持本地SAP HANA应用程序的开发。他们使用SAP HANA特有的特性。因此它们只能与HANA数据库一起使用。HANA CDS View的主要关注点是在HANA数据库上创建模型。

总结一下SAP HANA CDS View的特点:

  • 驻留在HANA 数据库里(HANA XS)
  • 只能配合HANA数据库
  • 使用Native SQL
  • 旨在SAP HANA 应用
  • 重点是创建模型

SAP ABAP CDS View和SAP HANA CDS View是两个不同的CDS实现。它们跑在不同的平台上,技术兼容性无法保证,具有不同的功能和发布周期。

图表显示两者不同:

ABAP CDS ViewsHANA CDS Views
ResideApplication ServerHANA Database
DatabaseAnyHANA
SQLOPEN SQLNative SQL
AimABAP ApplicationNative HANA Application
Main FocusCreate ViewsCreate Models
Analytics intendedYesNo

如果再加上传统的ABAP Dictionary View,它的特点就只有:

  • 驻留在应用服务器
  • 可以配合任意数据库
  • 只能使用有限的基本SQL函数(如INNER JOIN或SELECT)

在ECC系统中使用ABAP CDS View而不是ABAPDictionary View的5个原因

  • 向上兼容S/4
  • 易于生成成熟的OData服务
  • 易于使用SAP UI5智能控件和Fiori Elements
  • 隐式授权检查
  • 性能提升

问题:

什么时候用ABAP CDS,什么时候用HANA CDS?

如果单独运行SAP HANA,或者在side-by-side的情况下运行SAP HANA(在顶部没有ABAP堆栈),这种情况不能使用ABAP CDS。必须用HANA CDS。

如果在HANA数据库上有一个ABAP栈(AS ABAP使用HANA数据库作为中央数据库),那么:

  • 如果想访问ABAP中的CDS实体作为数据类型或在Open SQL中,或者如果想用ABAP中的CDS的 annotation,这时要使用ABAP CDS。
  • 如果不想用ABAP访问CDS实体,但希望像ABAP库对象那样传输和升级它们,那么可以使用ABAP CDS
  • 如果不想用ABAP或是OPEN SQL访问CDS实体,可以使用HANA CDS,它可以更好地集成到SAP HANA中。然后可以只使用native SQL (ADBC, AMDP)用ABAP进行访问。

问题:

可以在HANA中原生地使用ABAP CDS么?

可以,对于每个CDS视图,在激活时都会同时在数据库中创建一个数据库视图(SQL视图)。我们可以直接访问这个数据库视图。CDS表函数由AMDP管理。相关的数据库功能也可以原生访问。

问题:

是否可以在HANA中本地访问数据库视图(由相应的ABAP CDS视图生成),同时考虑在相应的DCL中定义的授权逻辑?

可以,Open SQL隐式地检查授权,但是当然会被翻译成在DB级别上执行此操作的原生SQL代码(隐式条件)。本机检查授权本身的SADL框架也是如此。问题是,您需要访问未发布且可能更改的内部角色表示,或者您必须自己构建一个框架来解析角色定义并创建相应的条件。

问题:

如何在系统中找到所有的CDS View?

SE11或SE16查看表TADIR,条件是PGMID = ‘R3TR’, OBJECT = ‘DDLS’;
在这里插入图片描述

SE11或SE16查看表DDLDEPENDENCY,这里每一个DDL Source都有两行,一个的type是STOB,一个的type是VIEW,STOB代表CDS 实体(只能用ADT查看或修改),VIEW代表所生成的数据库视图(可以SE11查看)。它们的名字也可以定义成相同的,但通常我们会定义不同的名字,它们毕竟是不同类型的对象。
在这里插入图片描述
在这里插入图片描述

问题:

如何使用CDS View?

基本上,CDS视图是一个可以按其名称寻址的实体:在ABAP中作为一种类型,在Open SQL中作为一个数据源。
在SE11中看到CDS View是一种技术工件,但我们不应该在ABAP程序中直接使用这个数据库视图。从SE11中,还可以导航到由定义生成的数据库对象。这个数据库对象甚至可以用原生SQL直接访问。从SE11中,还可以导航到由定义生成的数据库对象。这个数据库对象甚至可以用原生SQL直接访问。

这意味着我们可以从ABAP程序或其他地方直接访问CDS View。为了评估CDS View(存储在系统表中)的语义属性(Annotations),我们应该使用合适的API (CL_DD_DDL_ANNOTATION_SERVICE(如果系统中可用))。

从CDS源代码创建的数据库视图仅仅是“出于技术原因”。CDS源代码和定义的CDS实体应该是“真实的东西”。

问题:

CDS的显著特征是什么?

  1. 丰富语义的数据模型
  2. Domain specific languages (DDL, QL, DCL)
  3. 陈述性的,接近概念思维的
  4. CDS完全基于SQL
  5. 任何“标准SQL”具体的特性(如join、Union、内置函数)它都有
  6. 完全兼容任何数据库
  7. 生成和管理的SQL View
  8. 原生集成在SAP HANA中
  9. 特定领域框架的共同基础:如UI, Analytics, Odata, BW,…@AnalyticsDetails.aggregationBehaviour: SUM
  10. 内置函数和代码下推
  11. 用于breakout场景的表函数
  12. 丰富的内置SQL函数集
  13. 可扩展
  14. 在模型级别上扩展
  15. 在元模型级别上注释

小结

SAP声称传统的数据库视图只是一个或多个表的链接,而CDS View是一个完全成熟的数据模型,除了具有se11定义的视图所没有的额外特性之外,它甚至可以被SAP域之外的应用程序使用。

从技术上讲,CDS是SQL的增强,它为我们提供了一种数据定义语言(DDL),用于定义语义丰富的数据库表/视图(CDS实体)和数据库中的用户定义类型。

增强包括:

  1. 使用附加的(特定于领域的)元数据来丰富数据模型的注释。注释是以@符号开头的一行代码。
  2. 概念层面上的关联,用查询中的简单路径表达式expressions替换连接join。
  3. 数据模型中用于计算和查询的表达式 expressions

与在事务SE11中创建和维护的传统字典视图一样,CDS View也由ABAP数据字典管理。在激活时,会在HANA层上创建一个数据库视图,但是只有ABAP CDS View(在所谓的DDL源中定义)必须通过ABAP更改和传输系统(CTS)传输。此外,CDS View提供的功能可以在所有SAP支持的数据库上使用,我们不必担心在异构系统中传输这些对象。

CDS View是ABAP字典中ABAP CDS实体,比经典的SE11视图高级得多。我们可以在DCL的不同位置使用的参数来影响CDS View。对于传统的SE11视图来说,CDSView会在我们可以在SE11中检查的数据库中生成一个平台相关的运行时对象。当使用Open SQL访问一个CDS View,数据库接口访问这个运行时对象。CDS Veiw是在Eclipse中使用DDL(与SQLScript无关)用基于源代码的编辑器创建的。

出于技术上的原因,在SE11中从源代码中生成了一个经典的DB视图,我们可以像访问任何经典视图一样访问它,但我们不应该这样做。相反,应该访问所谓的CDS实体,因为它比纯粹的技术DB视图具有更多的意义,并且涉及新的客户端处理类型。

PS:在即将发布的版本中(可能已经发布了),直接访问CDS View的DB 视图将被宣布为过时的。所以,如果可以避免的话,最好不要使用这些DB 视图。

我们使用CDS在字典中对应用程序的大部分进行建模,并在ABAP中使用简单的Open SQL select来进行直接的join连接和子查询。将来Open SQL可能会具有与CDS View相同的功能,但这并不意味着它们是多余的。在CDS出现之前,我们就已经可以在SE11中创建可重用视图和ABAP中在Open SQL中编程联接之间进行选择。根据经验,如果视图在多个程序中使用,我们就创建视图,而仅在需要它一次时就编写join联接。这与CDS非常相似,但对语义丰富的模型建模的可能性更大,以便在ABAP程序中重用

CDS是开放的。它并不仅限于HANA(但是在不同的DB中性能可能不同)。

Part 2 进一步了解CDS

上一个部分我们了解到HANA中的CDS视图有两个组件,也就是创建一个Data Definition时会生成两个对象:

  • DDL SQL View: 它是只读的经典数据库视图,在ABAP字典(SE11)中可见。但不能在SE11中编辑。
  • CDS View Entity:它是DDL源文件,也是实际的CDS视图。它是一个数据库对象,在Eclipse/HANA Studio/ADT中可见,在SE11中无法查看CDS View 实体。它覆盖了CDS数据库视图并使其他属性成为可能,比如在CDS View中定义的权限检查。

在展示如何在HANA ADT中创建CDS View之前,我们先从如何删除CDS View开始。

问题:我们需要分别删除 DDL SQL View和CDS View Entity么?
答案是不,那我们可以通过删除DDL SQL来删除CDS View么?,答案也是不

先执行删除DDL SQL是不会成功的。因为它是CDS View 生成的。
如果要删除的话,要执行删除CDS View Entity,也就是Data Definitions。然后SQL View就自动删除了。
在这里插入图片描述
在这里插入图片描述
接下来看如何创建一个CDS View。
很简单,使用ADT工具,创建一个DDL Source
在这里插入图片描述
或者
在这里插入图片描述
在这里插入图片描述
指定TR
在这里插入图片描述
在这里插入图片描述
SAP提供了一些常用的模版以便我们快速完成CDS View创建,比如要创建一个带参数的CDS View,就可以选上图那个Define View with Parameters避免了忘记语法的尴尬
在这里插入图片描述
在这里插入图片描述
上图是我们选择了最常用的Define View模版:

  1. SQL View Name
  2. CDS View Entity Name
  3. 简单SQL的数据集的数据源表


当我们试图用SE11去打开这个CDS View Entity时,提示是需要用ADT才能查看或编辑的。
在这里插入图片描述
查看SQL View 是可以的,但也仅是查看,是不允许编辑的,因为它是CDS激活时生成的,同样在TR中也是看不到这个SQL View的,只有Data Definition对象
在这里插入图片描述
在这里插入图片描述

SAP推荐命名规范

CDS View的命名规则
SQL View name 最长16位字符, CDS View name最长30位字符。自定义文件的用Z或Y开头(或者registered namespace)。
在引用SAP Business entity时,重用SAP定义的字段名,创建自己的字段名或扩展SAP标准的View时,使用YY或ZZ作为前缀。

SQL View name

<前缀><描述> – 如: ZIBPADDR.

前缀规则:

  • Y或Z开头
  • I (interface view – basic & composite views), C (consumption view), A (remote API view), P (private VDM view), E (extension include view), X (VDM view extension)

后缀规则:

  • 全部大写
  • 没有空格
  • 如果是一个value helper CDS view,就用VH结尾
  • 如果是transactional object CDS view或是transactional consumption view,就用TP结尾,例如:ZCFOOTP

CDS View name
<前缀><描述> – 例如: ZI_BPNameAddress.
前缀规则:

  • Y或Z开头
  • I (interface view – basic & composite views), C (consumption view), A (remote API view), P (private VDM view), E (extension include view), X (VDM view extension)
  • 使用下划线"_"

描述规则:

  • 没有空格
  • 驼峰大小写
  • 如果是一个value helper CDS view,就用VH结尾,如:ZC_BPNameVH
  • 如果是transactional object CDS view或是transactional consumption view,就用TP结尾,例如:ZC_FooTP

参考:About ABAP Programming Model for SAP Fiori

Annotations

Annotations enrich the data models with additional (domain specific) metadata.
Annotation用metadata来丰富数据模型。

上面Demo中@开头的都是这个CDS View的Annotation,可以翻译叫注释,对当前CDS View的一个更详细解释说明以及定义了一些属性。例如@ClientDependent注释允许我们设置CDS视图是否依赖于client。在上面的例子中,它是依赖于client的(默认)。注释还可以用于指定CDS视图的缓冲区状态(打开/关闭)和缓冲区类型(single/generic/fully单个/通用/完全)。AbapCatalog.sqlViewName指定了当前CDS View的名字,是一个mandatory属性。

在读一个CDS View时,左下角的Outline是我们先会去看地方,非常实用的功能。
在这里插入图片描述
在这里插入图片描述
先介绍一个概念“虚拟数据模型”,以前看的一些内容,正好对应上面CDS View的命名,

为什么有基本视图和消费视图之类区分?

虚拟数据模型 Virtual Data model

SAP ABAP CDS View属于虚拟数据模型,用于事务和分析应用程序以及API。
虚拟数据模型:

  • 避免冗余ABAP CDS View
  • 使用consistent name提供consistent model
  • help to maintain an overview
  • 从业务角度将数据结构化为一个个逻辑单元

通常一个虚拟数据模型由4部分组成:

  • Consumption Views 供消费的视图
  • Composite interface views 复合接口视图
  • Basic interface views 基础接口视图
  • Database tables 数据库表

如下图例:
在这里插入图片描述

虚拟数据模型中的ABAP CDS Views要使用Annotation关键字:@VDM.viewType: #<VDM_CDS_VIEW_TYPE>
SAP使用Annotation @VDM.viewType对CDS View进行内部构造和解释
<VDM_CDS_VIEW_TYPE> 的值可以是:

  • #BASIC
  • #COMPOSITE
  • #CONSUMPTION
    必须上其中的一种。

Basic Interface views

@VDM.viewType: #BASIC

基本接口视图构建在数据库表之上。基本接口视图是虚拟数据模型的底层。只有基本接口视图才能访问数据库表。所有其他的CDS视图都重用,可以从基本接口视图取它们的数据。
基本接口视图应该从单个数据库表中进行选择。基本接口视图不应该存在转换或计算逻辑。
使用Basic interface views的目的有:

  • 以CDS View镜像数据库表,按需取字段
  • 使用额外的语义注释(semantics annotations)增强数据库表字段
  • 将数据库表的技术名称转换为业务中使用的可读名称
  • 通过强制转换操作转换数据库表的技术类型,使它们更加精确
Field AnnotationSemantic
@Semantics.amount.currencyCodeAmount that references to a currency (@Semantics.quantity.unitOfMeasure)
@Semantics.quantity.unitOfMeasureAmount that references to a unit(@Semantics.unitOfMeasure)
@Semantics.unitOfMeasureUnit
@Semantics.currencyCodeCurrency
@Semantics.textText in human-readable form

Comosite Interface Views复合接口视图

@VDM.viewType: #COMPOSITE

Composite interface views是建立在Basic interface views和其它Composite interface views之上的。它在虚拟数据模型中的中间层。这种项目数据一般用于应用程序和Consumption views消费视图,或者组合来自多个数据源的数据以从其他复合视图中重用。
Analytical CDS views 如 fact sheets, cubes,和 dimensions也用 composite interface views。

使用Composite interface views的目的有:

  • 重用
  • 特定用途的项目数据
  • 合并来自多个数据源的数据

Consumption Views消费视图

@VDM.viewType: #CONSUMPTION

Consumption Views是建在Composite interface views之上的,是虚拟数据模型的最上层,顾名思义就是最终被用来消费用的。通常是被:

  • SAPUI5 和 Fiori应用 通过OData服务
  • 事务性service models
  • Analytical Queries

消费视图并不用来重用,它就是为应用或是系统需求提供准备的数据。

消费视图可表现为三种:

  • 诸如事务性消费视图之类的消费视图
  • 分析性消费视图,如cube
  • 远程API消费视图,如定义web service API

消费视图可以通过annotation事务和分析应用程序的属性(如应用程序的layout和behavior)来控制。

常见类型的CDS View

除了最普通的 View之外还有:

带Join的CDS View

注意一下这里$projection指的就是主表scarr
在这里插入图片描述

带参数的CDS View

在这里插入图片描述
在这里插入图片描述
可以看到SE11是不能查看这种带参数的视图的,可以在ADT中使用Data preview工具快速查看。
在这里插入图片描述
在这里插入图片描述

还有View with Association, Extend View and Table Function with Parameters.等等,可以在后面接触到时再做学习。

如何在ABAP程序中使用CDS View?

我们可以像使用ABAP中的其他表或数据字典视图一样使用CDS视图,带参数的写法是这样的:

SELECT * FROM ZGJZ_I_WO_STATUS_PA( p_stat = @p_status , p_lang = 'EN' ) INTO TABLE @i_wo_status.
为什么ABAP中推荐使用CDS View而不是DDL SQL View?

我们可以既使用DDL SQL视图也可以使用CDS视图中进行数据选择。但是区别是,如果使用DDL SQL视图,那和普通的数据字典对象就一样了,并不能体现出HANA数据库的优势,也就看不到性能的提高。理论上这是需要ABAP层和数据库层之间建一个数据库连接的;而CDS View Entity(DDL Source)是ABAP层已知的数据库对象,并不存在于数据字典(SE11)中。这个数据库对象包含SQL power并驻留在数据库层。这样我们就可以在ABAP层和数据库之间不创建数据库连接的情况下执行SQL。只有结果将被传送回ABAP层。

下面程序代码分别使用了DDL SQL View和CDS View entity,可以执行实验一下:

*&---------------------------------------------------------------------*
*& Report YCDS_WO_STATUS_REPORT
*&---------------------------------------------------------------------*
*& Description: Demo to fetch data from CDS View with Parameter
*& Note: This program is just to show how CDS View can be used.
*& This does not depict the true strength (Core to Data Paradigm) of CDS
*&---------------------------------------------------------------------*
REPORT ycds_wo_status_report.

*--------------------------DATA DECLARATION----------------------------*
*DATA: i_wo_status TYPE STANDARD TABLE OF ZGJZ_I_WO_STATUS_PA. " CDS Entity View
DATA: I_WO_STATUS TYPE STANDARD TABLE OF ZGJZIWOSTATUSPA. " DDL SQL View (DDIC)

*&---------------------------------------------------------------------*
*&SELECTION SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK a01 WITH FRAME TITLE TEXT-001.
PARAMETERS : p_status TYPE j_status. " Status
PARAMETERS : p_lang   type spras."Lauguage
SELECTION-SCREEN END OF BLOCK a01.

*&---------------------------------------------------------------------*
*& START OF SELECTION.
*&---------------------------------------------------------------------*
START-OF-SELECTION.

* Select data using CDS View with Parameter
  PERFORM sub_get_data_from_cds.

*&---------------------------------------------------------------------*
*& END OF SELECTION.
*&---------------------------------------------------------------------*
END-OF-SELECTION.

* Display data
  PERFORM sub_display_data.

*&---------------------------------------------------------------------*
*& SUB ROUTINES
*&---------------------------------------------------------------------*

FORM sub_get_data_from_cds.
* Fetch from CDS Entity View
*  SELECT * FROM ZGJZ_I_WO_STATUS_PA( p_stat = @p_status,p_lang = @p_lang )
*    INTO TABLE @i_wo_status.

* Fetch from DDL SQL data dictionary View
 SELECT * FROM ZGJZIWOSTATUSPA( P_STAT = @P_STATUS,p_lang = @p_lang )
 INTO TABLE @I_WO_STATUS.
ENDFORM.

FORM sub_display_data.

  DATA:
    lr_functions  TYPE REF TO cl_salv_functions, " ALV Functions
    lr_alv        TYPE REF TO cl_salv_table, " ALV Functions
    lr_display    TYPE REF TO cl_salv_display_settings, " ALV Functions
    lv_salv_msg   TYPE REF TO cx_salv_msg. "ALV Functions.

* Display the final internal table in ALV
  IF i_wo_status IS NOT INITIAL.
    TRY.
* Factory Method
        cl_salv_table=>factory( IMPORTING r_salv_table = lr_alv
        CHANGING t_table = i_wo_status ).

      CATCH cx_salv_msg INTO lv_salv_msg.
        MESSAGE lv_salv_msg TYPE 'E'.

    ENDTRY.

* Self explanatory
    lr_functions = lr_alv->get_functions( ).

    lr_functions->set_all( abap_true ).

    lr_display = lr_alv->get_display_settings( ).

    lr_display->set_striped_pattern( cl_salv_display_settings=>true ).

    lr_display->set_list_header( TEXT-001 ).

* Actual Diplay
    lr_alv->display( ).

  ELSE.
    MESSAGE 'No data found' TYPE 'I'.
    LEAVE LIST-PROCESSING.
  ENDIF.

ENDFORM.

需要注意的是DDL SQL View和CDS View是不能通用声明的。如果声明用的是SQL View,那下面就也要用SQL View。同理CDS View。
在这里插入图片描述
在这里插入图片描述

  • 14
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值