浏览体系结构
学习目标
创建数据库表。
为 OData UI 服务生成开发对象。
创建数据模型
示例数据模型

此示例中的数据模型非常简单 - 有一个包含转机详细信息的单个数据库表 - 航空公司、航班号、出发机场和目的地的详细信息。
注意
图中未包括附加字段,运行时需要这些字段来管理并发控制。稍后,我们将查看这些内容。
创建数据库表
首先,让我们了解如何创建数据库表。
视频:本节含 SAP 官方视频(视频 ID
1_co02vqg8),需在 learning.sap.com 在线观看。
定义基本表属性
现在,我们将了解如何定义基本表属性。
视频:本节含 SAP 官方视频(视频 ID
1_no9qo42i),需在 learning.sap.com 在线观看。
添加表定义
以下视频介绍了如何添加表定义。
视频:本节含 SAP 官方视频(视频 ID
1_o1cwu3xf),需在 learning.sap.com 在线观看。

如果不使用内置 ABAP 字典类型指定表列的类型,请改用数据元素。数据元素是定义单个字段(如 UUID 或航空公司代码)类型的 ABAP 字典对象。数据元素不仅包含技术类型描述,还包含语义信息,例如字段标签。如果使用数据元素定义表列的类型,则系统可以在生成的用户界面上自动使用字段标签。
数据元素 图中的数据元素描述航空公司字段。它是长度为 3 的字符字段;系统将在生成的 UI 上自动使用字段标签。

要创建新的数据元素,请选择 文件→新建→其他 ,然后在过滤器文本字段中输入数据元素。输入包名称和数据元素名称,然后选择 下一步 。选择传输请求,然后选择完成。
然后,必须为数据元素指定数据类型。这应该是一个域 - 示例重用现有域 /DMO/CITY。请注意,两个数据元素使用相同的域。这意味着,如果随后有人更改域的长度,则更改将应用于使用该域的所有数据元素。
最后,输入短、中和长字段标签,以及用于列标题的标签。稍后,当您生成 Fiori 元素应用时,系统将自动使用这些文本。

定义的每个表都必须有一个主键。这是表描述开头的一系列字段,用于唯一标识表中的每个条目。
表中的第一个字段(以及键值定义中的第一个字段)必须是客户端字段,并且必须具有数据类型 abap.clnt。此外,我们的示例使用唯一键值的 UUID 很方便。如果使用数据元素 sysuuid_x16 指定此字段的类型,则可以让运行时在您创建新记录时自动分配 UUID。

出于可跟踪性原因,建议存储一些包含数据的管理信息,例如,为创建和最后更改创建或更改数据和时戳的用户。您创建的数据库表应包含图中显示的字段。
注意
对于稍后要使用的生成器,这些字段为必填字段。要使该生成器正常工作,还必须使用此处列出的数据类型定义字段。
特别是 fieldslocal_last_changed_at 和 last_changed_at 不仅是管理字段。在 ABAP RESTful 应用程序编程模型中,它们还用于并发控制。
由于 RESTful 应用程序是无状态的,因此无法单独通过独占锁确保数据一致性。ABAP RESTful 应用程序编程模型混合使用独占锁和 ETag 以避免数据不一致。ETag 是在更新数据集时更改其值的字段。通过比较 ETag 字段的值,框架可以确保数据集自上次读取以来尚未更改。上次更改的时戳使完美 ETag 字段。

在 ADT 中激活数据库表时,系统会在数据库中创建相应的物理表。完成此操作后,您将能够自动生成应用所需的附加对象。
如何创建数据元素
演示:观看演示(SAP 官方交互式练习)
如何创建数据库表
演示:观看演示(SAP 官方交互式练习)
复制数据库表
在本单元练习中,您将创建 OData UI 服务。此 UI 服务将构成应用程序的基础,允许您更改航班价格。首先,为所需开发对象创建专用包。然后复制数据库表并使用数据填充该表。
模板:
/LRN/S4D400_APT(数据库表)
/LRN/CL_S4D400_APT_COPY(全局类)
解决方案:
/LRN/S4D400AFLGT(数据库表)
/LRN/CL_S4D400_APS_COPY(全局类)
任务 1: 创建子包
在您自己的包 ZS4D400_## 下创建新的子包(其中 ## 代表组编号)。
子包应具有以下属性: 属性值名称**ZS4D400_##_RAP,其中 ## 代表组编号描述OData UI 服务的对象添加到收藏包已选中超级包ZS4D400_##** ,其中 ## 代表组编号
步骤
在您自己的包 ZS4D400_## (其中 ## 代表组编号)下创建子包。
在项目浏览器中,右键单击 ABAP 包 ZS4D400_## ,然后选择新建→ABAP 包。
输入包名称
ZS4D400_##_RAP,其中##代表组编号。输入描述
OData UI 服务的对象。选中添加到收藏包复选框。
确保父包字段包含现有包的名称。
选择下一步。
确保软件组件设置为 ZSTUDENTS。
选择下一步。
确认传输请求并选择完成。
任务 2: 复制数据库表
在新包中,创建数据库表 /LRN/S4D400_APT 的副本。将新的数据库表命名为 Z##FLIGHT,其中 ## 代表组编号。
步骤
将数据库表
/LRN/S4D400_APT复制到您自己的包ZS4D400_##_RAP,其中 ## 代表组编号。打开数据库表
/LRN/S4D400_APT的定义。将项目浏览器视图与编辑器链接。
在项目浏览器视图中,右键单击数据库表
/LRN/S4D400_APT以打开上下文菜单。从上下文菜单中,选择复制....
在包字段中输入包的名称
ZS4D400_##_RAP。在名称字段中,输入Z##FLIGHT,其中 ## 代表组编号。选择下一步。
确认传输请求并选择完成。
激活数据库表定义。
按
Ctrl + F3激活开发对象。
任务 3: 填充数据库表
在 ZS4D400_## 包中,创建全局类 /LRN/CL_S4D400_APT_COPY 的副本(建议名称:ZCL_##_COPY)。在此副本中,将常量 table_name 的值更改为您自己的数据库表的名称。然后将类作为控制台应用执行。这将用数据填充数据库表。
步骤
将类
/LRN/CL_S4D400_APT_COPY复制到您自己的包ZS4D400_##中的类。打开全局类
/LRN/CL_S4D400_APT_COPY的源代码。如有必要,将项目浏览器视图与编辑器链接。
在项目浏览器视图中,右键单击类
/LRN/CL_S4D400_APT_COPY以打开上下文菜单。从上下文菜单中,选择复制....
在包字段中输入
ZS4D400_##。在名称字段中,输入ZCL_##_COPY,其中 ## 代表组编号。选择下一步。
确认传输请求并选择完成。
在副本中,调整方法
IF_OO_ADT_CLASSRUN~MAIN的源代码。将常量table_name的值更改为自己的数据库表的名称。确保常量的值等于数据库表的名称。
激活类并将其作为控制台应用执行。
按
Ctrl + F3激活类。按
F9键运行类。检查控制台视图。上次输出应读取:<...> 已填充数据。如果输出读取 *<...> 不是正确类型的表。*请确保存在具有该名称的数据库表、处于活动状态并且是模板表的准确副本。
对象生成器
生成附加对象
我们刚刚定义了用于保存数据的数据库表,但我们要创建的应用需要的对象不仅仅是此表。我们可以使用 ADT 中的向导生成这些对象。

生成的对象包含提供具有创建、读取、更新和删除功能的工作应用所需的所有信息。稍后,我们还将调整和扩展其中一些对象,以更改用户界面的外观并实施一些检查和计算。
观看此视频,了解如何生成附加对象。
视频:本节含 SAP 官方视频(视频 ID
1_5hbnucbe),需在 learning.sap.com 在线观看。
如何生成附加对象
演示:观看演示(SAP 官方交互式练习)
OData UI 服务预览
发布和预览服务
使用数据库表和对象生成器,您可以生成获取有效的 Fiori 元素应用所需的所有对象。唯一的手动步骤是发布服务。

必须先发布服务,然后才能测试应用。为此,请打开服务绑定并选择发布。完成此操作后,您创建的实体(在本例中为连接)将显示在实体列表中。标记该应用,然后选择预览以测试应用。
测试应用

选择预览后,将打开一个浏览器窗口,您可以创建新的转机。但是,该应用不实施除类型检查以外的任何检查(例如,航班号字段中仅允许数字)。
生成和预览 OData UI 服务
在本练习中,您将为 OData UI 服务生成资源库对象,并将该服务预览为 SAP Fiori 应用。
模板:
无
解决方案:
包 /LRN/S4D400_EXERCISE_RAP 中生成的开发对象。
注意
请注意,所用生成器的实施可能会发生变化。因此,练习中生成的开发对象可能与解决方案中的开发对象不同。
前提条件
您已完成上一练习。您已创建数据库表 Z##FLIGHT(## 是您的组编号),并且数据库表包含数据。
任务 1: 使用生成器
使用生成器 ABAP RESTful 应用程序编程模型→OData UI 服务在子包 ZS4D400_##_RAP 中生成所需的开发对象。为此,在向导中指定以下值 &R:
字段 |
值 |
|---|---|
常规→参考对象 |
|
常规→项目名称 |
<空> |
常规→部件前缀 |
<空> |
常规→部件后缀 |
<空> |
业务对象→数据模型→CDS 实体名称 |
|
业务对象→数据模型→CDS 实体别名 |
|
业务对象→行为→行为实施类 |
|
业务对象→行为→草稿表名称 |
|
服务映射→服务映射实体→CDS 实体名称 |
|
服务预测→服务预测行为→行为实施类 |
|
业务服务→服务定义→服务定义名称 |
|
业务→服务服务绑定→服务绑定名称 |
|
业务服务→服务绑定→绑定类型 |
|
步骤
启动数据库表
Z##FLIGHT的对象生成器(其中 ## 是您的组编号)。在项目浏览器中,展开以下路径:收藏包→ZS4D400_##→ZS4D400_##_RAP→字典→数据库表(其中 ## 是您的组编号)。或者,打开数据库表
Z##FLIGHT的定义,如有必要,将项目浏览器视图与编辑器链接。在项目浏览器视图中,右键单击数据库表
Z##FLIGHT以打开上下文菜单。从上下文菜单中,选择生成 ABAP 资源库对象....
在对话框中,选择生成器。
在对话框的左侧,选择 ABAP RESTful 应用程序编程模型→OData UI 服务 。
选择下一步导航至下一步。
确保在子包
ZS4D400_##_RAP中创建开发对象。当窗口在顶部读取输入包时,请确保包字段包含
ZS4D400_##_RAP。选择下一步导航至下一步。
使用 表中的数据配置生成器。
警告
在输入所有数据之前,请勿选择下一步。
逐个选择对话框左侧的项目,然后填写右侧窗格中的相应字段。上表中列出了所需的值 &R。
输入所有数据后,选择下一步。
检查将要生成的资源库对象并生成对象。
注意
请耐心等待。生成对象需要一些时间。生成流程结束时,将出现一个对话框,询问您是否要在编辑器中打开生成的服务绑定。单击打开确认此对话框。
检查显示的资源库对象列表。
确定已正确输入所有名称时,选择下一步。
确认传输请求并选择完成。
选择打开确认生成流程结束时的对话窗口。
在项目浏览器中分析生成器输出。
在项目浏览器中,将光标置于子包
ZS4D400_##_RAP上,然后按F5重新加载包的内容。展开包的所有子节点以查看已生成开发对象的名称。
任务 2: 预览应用
发布 OData UI 服务并将结果预览为 SAP Fiori 应用。
步骤
发布本地服务端点。
注意
发布服务可能需要一些时间。
如果尚未创建,请打开生成的 ZUI_##FLIGHT_O4 服务绑定。
如果服务绑定处于非活动状态,请按
Ctrl + F3将其激活。要发布服务,请选择编辑器中心的 发布 。
将 OData UI 服务预览为 SAP Fiori 应用。
在右侧的服务版本详细信息部分中,选择航班,然后选择预览....
结果
随即打开一个浏览器窗口,其中包含 SAP Fiori 应用程序。如果出现提示,请使用 ABAP 系统用户登录到应用程序。 3. 显示航班列表。
选择执行以显示存储在数据库表
Z##FLIGHT中的航班列表。对于其中一个航班,导航到详细信息视图。
选择其中一个列表条目以导航到包含该航班详细信息的对象页面。
对于此航班,切换到更改模式。
选择编辑。
在航班价格字段中输入一些文本,例如
。为航班价格输入负值。