包含通用重用方面

Objective

After completing this lesson, you will be able to 借助 CDS 方面通过新元素扩展实体定义

方面

现在,让我们探索如何使用所谓的方面通过新元素增强实体的定义。

观看视频以了解 CDS 方面。

在本课中,我们将了解 extend 指令。我们稍后将在另一课中讨论 annotate 指令。

extend 指令

使用 extend 指令,您可以将扩展字段添加到现有定义,如下图所示:

在示例中,元素 someAdditionalField 将添加到 Authors 域实体。这也会将此字段添加到生成的数据库表中。

注意

消费者总是看到合并的有效模型,分离到对其完全透明的各个方面。

使用 extend 指令,还可以将注释等元数据添加到现有定义或覆盖现有元数据。

类型属性也可以通过 extend 设置。例如,可以增加类型为 字符串 的现有元素的长度。

命名方面

您可以使用具有预定义方面的 extend 将相同的扩展应用于多个目标,如下图所示:

该示例显示命名方面 ManagedObject,它定义了 createdAtcreatedBy 这两个元素。工作簿作者实体都通过此命名方面由这些字段扩展。

注意

语法 aspect ManagedObject 与语法 define aspect ManagedObject 的效果相同,即 define 关键字是可选的。

命名扩展可以包含任何内容,例如字段、类型或实体。

Include 作为快捷方式语法

还可以在类似继承的语法中使用命名方面作为包含文件。此语法允许您同时使用多个命名方面扩展定义。在下图中,作者实体由两个命名方面 ManagedObjectAnotherAspect 扩展。

包含文件是语法糖。所示示例等效于使用一系列 extends,如下所示:

Code Snippet
1234567
entity Authors {} extend Authors with ManagedObject; extend Authors with AnotherAspect; extend Authors with { key ID : UUID; ... }

常见重用方面

CDS 附带预构建的模型 @sap/cds/common,提供通用类型和方面以供重用。

建议所有应用程序使用通过 @sap/cds/common 提供的通用类型和方面。这使您可以受益于从实际业务应用程序中学习的最佳实践。

在以下部分中,我们将详细了解 @sap/cds/common 中的两个方面:cuidmanaged。稍后,我们还将讨论此模型中的 CodeList 方面以及 CountryCurrency 类型。

方面 cuid

cuid 方面是一个便捷的快捷方式,允许您向实体定义添加规范、通用唯一的主键。

注意

提醒一下,服务提供者运行时会使用自动生成的 UUID 自动填充 UUID 类型的关键字段。

方面 managed

managed 方面可用于将 createdAtcreatedBymodifiedAtmodifiedBy 四个字段添加到实体。这些字段用于跟踪创建和更新数据记录的人员以及时间。

通过使用此方面,您可以存储相关记录相关的管理信息,并保持核心域模型干净易懂。

字段 createdBymodifiedBy 的数据类型为 User,这是 @sap/cds/common 中的常见重用类型。

此方面中使用的注释 @cds.on.insert@cds.on.update 表示在插入和更新时由通用处理器自动填充的元素。

这些注释中使用的伪变量解析如下:

  • $now 替换为当前服务器时间(UTC 格式)
  • $user 是从身份验证中间件接收的当前用户的 ID

注意

无论何时修改相应行(即在 CREATE 操作期间),都会设置 modifiedAtmodifiedBy 字段。

使用 @sap/cds/common 中的方面

为了能够使用 @sap/cds/common 模型中的方面,必须通过 using 指令导入它们。例如,在下图中,这通过 using 的 ES6 式解构器变式针对通用重用方面 cuidmanaged 完成。

两个导入的方面用作示例中的包含内容,以使用相应字段扩展作者实体。如果没有两个预定义的方面,则需要以下作者实体的定义来实现与使用本机含义所示的示例中相同的结果:

Code Snippet
123456789101112
entity Authors { key ID: UUID; createdAt : Timestamp @cds.on.insert: $now; createdBy : User @cds.on.insert: $user; modifiedAt : Timestamp @cds.on.insert: $now @cds.on.update: $now; modifiedBy : User @cds.on.insert: $user @cds.on.update: $user; name : String(100); dateOfBirth : Date; dateOfDeath : Date; books : Association to many Books on books.author = $self; }

演示和练习:使用预定义方面

注意

在练习中,在 SAP Business Application Studio 中自行执行以下演示中的分步说明。

作为练习的起点,如果已成功完成,请使用之前的练习 将关联添加到域模型 的结果。或者,您还可以使用以下 GitHub 资源库中的分支 5_associations 作为起点:

https://github.com/SAP-samples/cap-development-learning-journey

模拟的完整实施可在 GitHub 资源库的 6_common_reuse_accounts 分支中找到。

有关资源库内容及其使用方法的详细信息,可在此处找到。

观看视频,了解如何使用预定义方面。