从 CDS 实体中选择还是从 CDS 数据库视图中选择

Lil*_*hal 4 abap hana cds

在 SAP 的 ABAP CDS 中,该define view语句用于创建 CDS 视图。这个对象有一个 CDS 实体名称,这就是它在编辑器和包中的显示方式,但它也有一个AbapCatalog.sqlViewName必须不同的注释。语法的文档define view有一些信息:

为使用 DEFINE VIEW 定义的 CDS 视图(ABAP CDS)创建了两个对象。必须为两个对象中的每一个指定名称:

  • CDS数据库视图的名称CDS_DB_VIEW必须在@AbapCatalog.sqlViewName注解后用引号指定。ABAP 字典视图的通常规则适用于这个名称,它不区分大小写(它在内部转换为大写字母)。关联的 SQL 视图是以该名称在数据库上创建的。

  • CDS 实体的名称 cds_entity在关键字 DEFINE VIEW 之后定义(DEFINE 是可选的)。不需要指定引号。此名称遵循 CDS 数据库视图的规则,但长度可以为 30 位。

这两个名称都在 ABAP 字典中数据类型的命名空间中,并且每个名称都必须是唯一的。这两个名称可用于其他 DDL 语句或 ABAP 程序中以访问 CDS 视图。

它提到了一些其他差异,例如实体在 SAP 的数据字典工具(SE11、SE16)中不可用,以及从实体中进行选择的事实始终以严格模式运行,但关键是:

在 CDS 的 DDL 和 ABAP 中,CDS 视图可以作为 CDS 数据库视图CDS_DB_VIEW和作为 CDS 实体 cds_entity 进行寻址。但是,强烈建议仅使用 CDS 实体

当我在一个简单的查询中运行这两个时,我注意到从实体中进行选择时没有 MANDT 列,但是从 CDS 数据库视图中进行选择时出现此列。

那么,开发人员在使用 CDS 视图时应该牢记数据库视图和 CDS 实体之间的真正区别是什么?

小智 5

您不应再查询 ABAP CDS 数据库视图并将查询限制为使用 ABAP CDS 实体。尽管在 NetWeaver 7.40 中可以查询数据库视图,但在更高版本中已弃用。所以不要担心数据库视图:-)

请参阅文档:Obsolete Access to CDS Views in Open SQL

为了保持行为一致并仅使用 CDS 视图的定义属性,应仅使用 CDS 实体的名称来访问 CDS 视图。

从 7.50 版开始,严格模式下禁止直接访问 CDS 数据库视图。

关于客户端处理,您应该相应地关注 CDS 实体的客户端行为。ABAP CDS 客户端处理中描述了不同的选项。