可以在CDS源代码中指定的CDS注释可以由CDS注释定义指定。CDS注释定义将CDS注释定义为CDS对象。它描述了如何在CDS源代码中使用此注释。该描述包括以下内容:
◾主注释的名称
◾可能的注释值
◾是否可以使用子注释进行结构化
◾是否可以指定注释数组
注释在单独的DDLA源代码中定义,并随该代码一起传输。注释定义的DDLA源代码可以使用CDS DDL语句define annotation精确地定义一个同名的CDS注释(然而,该注释可以是子注释的主注释)。这种类型的DDLA源代码只能在ABAP开发工具(ADT)中编辑,DDLA源代码也可以在ABAP工作台的Repository Browser中显示。
***提示***:
◾定义为CDS对象的注释由ABAP开发工具(ADT)在指定注释时用于源代码着色和代码完成。
◾在CDS实体的DDL源代码中对CDS实体定义的语法检查还不计算注释定义。它只检查注释语法的正确性。
◾客户和合作伙伴目前不能定义自己的注释。目前应该只使用SAP注释。
◾SAP Annotations列出了SAP交付的所有DDLA源代码。
定义注释的DDL-DDL for Annotation Definitions
除了用于数据定义的DDL语句外,ABAP CDS中的CDS DDL还可以在DDLA源代码(CDS source code for CDS annotation definitions in CDS DDL)中将CDS注释定义为CDS对象。下面的语句在这里使用:
定义注释-DEFINE ANNOTATION
语法:
[@annotation_annot1]
[@annotation_annot2]
...
[define] annotation Anno { : type; }
| { [:] {subannos}[;] }
| { : array of arrelem }
语句define annotation在DDLA源代码的CDS DDL中定义了一个名为Anno的CDS注释。注释Anno是当前注释定义的主要注释,可以用可选的子注释进行结构化。注释定义的DDLA源代码只能包含一个主注释的定义,该主注释的名称必须与DDLA源代码的名称匹配。名称区分大小写。定义注释的注释,@annotation_annot1, @annotation_annot2,…,可以在语句定义注释之前指定。这些由子注释继承或覆盖在那里。
例子:
定义结构化注释-Defines a structured annotation。
@Scope:[#VIEW, #EXTEND_VIEW]
define annotation DemoAnnoStruct
{ subAnno1 : Boolean default true;
subAnno2 : Integer enum { I1; I2; I3; } default #I1;
subAnno3 : array of String(10);
subAnno4 : array of { comp1 : String(1);
comp2 : String(2);
};
};
主注释DemoAnnoStruct有subAnno1到subAnno4的子注释。子标注subAnno3和subAnno4是标注数组。(这里,subno4是结构化的。)
以这种方式定义的注释允许在DDL源代码的注释语法中指定以下内容,这些注释语法将CDS视图或CDS表函数定义为视图注释或函数注释:
◾指定子注释subAnno1一次(这里隐式使用默认值true):
@DemoAnnoStruct.subAnno1
◾在大括号中指定子注释subAnno1和subAnno2(这里的默认值被显式注释值覆盖)。在subAnno2中,使用固定枚举值之一:
@DemoAnnoStruct:{subAnno1:false, subAnno2:#I2}
◾指定标注数组subAnno3的标注值。引号内的值最多可以有10个字符:
@DemoAnnoStruct.subAnno3:['a','abc','abcdefghij']
◾为结构化标注数组subAnno4指定标注值:
@DemoAnnoStruct.subAnno4:[ {comp1: 'a', comp2: 'b' },
{comp1: 'c', comp2: 'd' },
{comp1: 'e', comp2: ‘f' } ]