了解 ABAP 核心数据服务
学习目标
描述 ABAP 核心数据服务的基本任务。
命名最重要的 ABAP CDS 对象。
ABAP CDS 功能
ABAP 核心数据服务 (ABAP CDS)
播放视频以了解 ABAP 核心数据服务 (ABAP CDS)。
视频:本节含 SAP 官方视频(视频 ID
1_bgvu5fb1),需在 learning.sap.com 在线观看。
让我们详细了解一下这些任务。

长期以来,ABAP 开发人员在 ABAP 字典中定义了视图,与定义数据库表的方式相同。这些字典视图在 SQL 逻辑方面非常有限。它们仅支持内连接、字段选择(投影)和简单过滤条件。请注意,基于云的 ABAP 环境中不支持字典视图的定义。
SAP 在 ABAP 中引入核心数据服务的原因之一是需要在数据库上执行逻辑。正如您稍后在本次培训中学习的那样,ABAP CDS 视图支持各种 SQL 表达式和函数以将逻辑下推到数据库中。
有两种类型的 CDS 视图。
基于 CDS DDIC 的视图(已过时)
这种过时类型的 CDS 视图使用生成的字典视图作为数据库对象的技术表示。基于 CDS DDIC 的视图通过 DEFINE VIEW 语句定义。
CDS 视图实体
此新生成的 CDS 视图使用 DEFINE VIEW ENTITY 语句定义。CDS 视图实体直接定义数据库对象,而不先生成字典对象。
注意
在本培训中,我们将仅涵盖 CDS 视图实体。对于较旧的视图类型,请参阅 ABAP 关键字文档。

ABAP CDS 不仅支持数据库对象的技术定义。还允许您使用语义信息丰富技术定义。
让我们看一个示例。
CDS 视图实体 Z00_C_Employee 通过 CDS 数据定义中的 define view entity 语句定义。这是视图的技术定义,用于在数据库中创建名为 Z00_C_EMPLOYEE 的视图。除 define view entity 语句外,源代码还包含注释。注释是使用语义信息丰富技术视图定义的代码元素。注释以 at 符号 (@) 开头。
ABAP 系统仅评估少数注释。其余部分仅传递给 CDS 实体的使用者,即使用 CDS 实体读取数据的框架。使用者自行决定评估哪些注释以及忽略哪些注释。
ABAP CDS 实体最重要的使用者是现代 UI 技术,例如 SAP Fiori 和 SAP S/4HANA 嵌入式分析。

ABAP RESTful 应用程序编程模型的核心是业务对象。
使用一个或多个 CDS 视图实体对业务对象的结构进行建模。CDS 行为定义用于添加事务逻辑。事务逻辑在 ABAP 行为池(ABAP 源代码库中的 ABAP 类)中实施。
业务对象通常由业务服务(例如 OData 服务)使用。但您也可以使用实体操作语言 (EML) 在 ABAP 代码中对其进行访问。
注意
本培训不涉及建模、实施和使用 Business Objects 的详细信息。这些将在有关 ABAP RESTful 应用程序编程模型的专用课程中进行讨论。
ABAP CDS 对象

重要的 CDS 开发对象如下:
CDS 数据定义
CDS 数据定义包含一个 CDS 实体的定义。最重要的 CDS 实体是 CDS 视图实体及其前趋,现在是过时的基于 DDIC 的视图。
但是,您可以在数据定义中定义许多其他 CDS 实体类型:
CDS 映射视图基于 CDS 视图,并对其元素的子集进行投影。
CDS 抽象实体仅描述类型属性以及未实例化数据库对象的属性。
CDS 表函数在数据库函数中实施,并返回表格结果集。
例如,CDS 自定义实体在 ABAP 代码中手动实施。
CDS 层次结构定义 SQL 源中的 SQL 层次结构。
注意
在本次培训中,我们将重点介绍 CDS 视图实体。有关其他 CDS 实体的详细信息,请参阅 ABAP 文档。
CDS 访问控制
CDS 访问控制包含 CDS 角色的定义。访问分配了 CDS 角色的 CDS SQL 实体时,缺省情况下会评估附加访问条件。
CDS 元数据扩展
CDS 元数据扩展用于在其数据定义之外存储 CDS 实体的 CDS 注释。
CDS 行为定义
CDS 行为定义定义业务对象的交易行为。

在 ABAP 开发工具的项目浏览器中,您可以在开发包的专用节点核心数据服务中找到 CDS 对象。
分析字典和 CDS 对象
您希望了解如何在 ABAP 字典和 ABAP 核心数据服务中定义对象。在第一步中,准备 ABAP 开发环境、创建新包并分析某些现有对象。
前提条件
如果要按照此学习旅程中的描述进行练习,则需要访问专用的实践练习系统。如果已为学习旅程的其他部分之一预订系统,则可以继续将此系统用于第三部分。如果您尚未预订实践练习系统,请单击此链接获取详细信息:https://learning.sap.com/practice-systems/data-modelling-in-abap-dictionary-and-abap-core-data-services
除了在预订流程中收到的 ABAP 服务实例 URL 外,还需要本地安装 Eclipse IDE,并在顶部安装 ABAP 开发工具插件。点击此链接获取分步说明 https://developers.sap.com/tutorials/abap-install-adt.html。
任务 1: 准备项目
在 Eclipse 中,创建 ABAP 云项目并将包 /LRN/S4D430_EXERCISE 添加到收藏包的列表。在 ABAP 云项目中,在父包 ZLOCAL(建议名称:ZS4D430_##,其中 ## 是您的组编号)下创建新包,并将其添加到收藏包。
步骤
打开 Eclipse,切换到 ABAP 透视图并创建 ABAP Cloud 项目。
注意
如果您刚刚完成"深入 ABAP 编程知识"课程并且已在 Eclipse 中打开 ABAP Cloud 项目,则可以跳过此步骤。
打开 Eclipse。
选择 窗口→透视图→打开透视图→其他... 。
在对话框中,双击 ABAP。
选择 文件→新建→ABAP 云项目 。
在出现的新建 ABAP 云项目对话框中执行以下操作: 如果已为您提供 ABAP 服务实例 URL:
将此 URL 复制并粘贴到对话框的相应字段中。
选择 下一步 。 如果已为您提供包含服务密钥的文件:
在对话框中选择 提取 链接。
选择 导入... ,然后选择具有 服务密钥 的文件。
导入后,单击 复制到剪贴板 ,复制 服务实例 URL 。
选择 关闭 。
在 ABAP 服务实例 URL:* 字段的弹出框顶部,粘贴 ABAP 服务实例 URL 以及组合键 Ctrl + V 。
选择 下一步 。
选择在浏览器中打开登录页面。
系统将提示您登录系统。 输入用于注册 SAP Learning Hub 的用户名和密码。
当您看到消息您已成功登录时,请关闭浏览器窗口并返回到 Eclipse。
要完成项目创建,请选择完成。
将包
/LRN/S4D430_EXERCISE添加到收藏夹包列表。在左侧的项目浏览器中,展开 ABAP 云项目,然后展开子节点收藏包。
右键单击 收藏包 ,然后选择 添加包 ....
在搜索字段中,输入
/LRN/S4D430。从匹配项目列表中选择 /LRN/S4D430_EXERCISE,然后选择确定。
在 ABAP Cloud 项目中,使用表中列出的属性创建新包。当提示进行传输时,请选择您所涉及的传输请求。如果未列出传输请求,则创建新请求。 | 字段 | 值 | | --- | --- | | 名称 |
ZS4D430_##,其中##是您的组编号 | | 描述 |在 ABAP 中建模| | 添加到收藏包 | 已选中 | | 超级包 |ZLOCAL| | 包类型 |开发| | 软件组件 |ZLOCAL| | 应用程序组件 | 将此字段留空 | | 传输层 | 将此字段留空 |在项目浏览器中,右键单击 ABAP 云项目并选择新建→ABAP 包。
输入包名称 **
ZS4D430_## ,**其中##是您的组编号。输入描述
在 ABAP 中建模。选中添加到收藏包复选框
输入父包
ZLOCAL。确保将包类型设置为**
开发**。选择下一步。
确保软件组件设置为
ZLOCAL。确保应用程序组件为空。
确保传输层为空。
选择下一步。
检查选项 从我参与的请求中选择 下是否列出了传输请求。如果是这种情况,请选择此选项。如果列表为空,请选择创建新请求选项并输入请求描述,例如
ABAP 练习。选择完成。
任务 2: 分析对象
分析包 /LRN/S4D430_INTRO 的内容。
注意
包 /LRN/S4D430_INTRO 是包 /LRN/S4D430_EXERCISE 的子包。
步骤
在项目浏览器视图中,展开 /LRN/S4D430_EXERCISE→/LRN/S4D430_INTRO→字典并分析内容。
同样,展开 /LRN/S4D430_EXERCISE→/LRN/S4D430_INTRO→核心数据服务并分析内容。
任务 3: 浏览 ABAP 中的使用
创建实施接口 IF_OO_ADT_CLASSRUN 的 ABAP 类(建议名称:ZCL_##_INTRO,其中 ## 代表组编号)。使用代码完整化浏览包 /LRN/S4D430_INTRO 中的哪些对象可用作 SELECT 语句中的数据类型和数据源。
步骤
在包中创建新的 ABAP 类(建议名称:
ZCL_##_INTRO,其中 ## 代表组编号)。在项目浏览器视图中,右键单击包
Z##_S4D430以打开上下文菜单。从上下文菜单中,选择 新建→ABAP 类 。
确认包字段包含包的名称。在名称字段中输入新类的名称,并在描述字段中输入**
分析字典和 CDS**。选择添加....
在对话窗口中,输入
IF_OO_ADT_CLASSRUN并选择确定。返回上一窗口,选择下一步。
确认传输请求并选择完成。
在
IF_OO_ADT_CLASSRUN~MAIN方法中,声明**字符串类型的变量(建议名称:var**)。如下调整代码:
METHOD if_oo_adt_classrun~main.
DATA var TYPE string.
ENDMETHOD.
将类型
string替换为包/LRN/S4D430_INTRO中的对象。使用代码完整化找出哪些对象可用作数据类型。
注意
包 /LRN/S4D430_INTRO 中的所有对象的名称均以 /LRN/S4D430_IND 开头。
删除
string。输入
/LRN/S4D430_IND并按 **Ctrl + 空格**键调用代码完成。实施从数据库表
/LRN/S4D430_IND中读取的 SELECT 语句。
提示
为简单起见,读取所有字段 (FIELDS *)、所有行(无 WHERE 子句),并在 INTO TABLE 子句中使用内联声明。
添加以下代码:
SELECT FROM /lrn/s4d430_ind
FIELDS *
INTO TABLE @DATA(result).
将 FROM 子句中的
/lrn/S4D430_ind替换为包/LRN/S4D430_INTRO中的其他对象。使用代码完整化找出哪些对象可用作数据源。
注意
/LRN/S4D430_INTRO 包中所有对象的名称均以 /LRN/S4D430_IND 开头。
在 FROM 子句中,将光标放在
/LRN/S4D430_IND之后。按 **
Ctrl + 空格**键调用代码完成。