ABAP CDS中的CDS DDL和CDS DCL的语法包括一般SQL DDL和DCL的元素,还可以定义注释和CDS关联。其语法和语义基本符合CDS的一般概念。
ABAP CDS - 一般语法规则(General Syntax Rules)
在ABAP CDS中定义CDS对象的CDS DDL和CDS DCL的一般语法规则如下:
关键词-Keywords:关键字必须全大写,全小写,或者小写字母加大写首字母。其他大小写混合使用是不允许的。
命名-Names:
•名称不区分大小写。
•名称长度不超过30个字符,不超过2个字符。
•名称可以由字母、数字、“_”、“/”组成。
•名称必须以字母、斜杠或下划线开头。建议使用下划线作为CDS关联的命名约定。
•包含多个部分的名称的分隔符是“。”。包含多个部分的名称可以是路径、带有前缀数据源的列和结构化注释。
•以下CDS关键字不能用作名称:ALL, AND, AS, ASSOCIATION, AVG, CASE, CAST, COUNT, CROSS, DISTINCT, EXISTS, EXTEND, EXTENSION, FROM, FULL, GROUP, HAVING, INNER, JOIN, KEY, LEFT, MAX, MIN, NOT, NULL, ON, OR, ORDER, RIGHT, SELECT, SUM, UNION, VIEW, WHEN, WHERE。
常量-Literal:
•必须完整地指定数字常量,必要时使用小数点(.)作为小数分隔符。
•字符常量用单引号(')括起来。
注释-Comments:
•两个正斜杠(//)引入一个注释,该注释一直持续到行尾。
•行内或跨多行的注释用字符/*和*/括起来。
分隔符-Separators:语句可以用分号(;)结束。有时这是强制性的。
受保护的关键字-Protected words:某些关键字受到保护,不能用作自定义名称。数据库表TRESE中保留的名称不允许使用。
说明:
•语句后面的结束分号有时是可选的,因为一段CDS源代码目前只能包含一条语句。
•在CDS数据定义的DDL源代码和CDS角色的DCL源代码中,还可以使用两个斜杠、两个破折号(--)来引入注释。但是,斜杠(//)是推荐的方法。在用于注释定义的DDLA源代码和用于元数据扩展的DDLX源代码中不允许使用两个破折号。
举例说明:
• SELECT、select和Select都是指定关键字的有效方法。另一方面,seLect和SeLect会产生语法错误。
• MYVIEW, myview, and myView都是定义相同的操作数。
• 0.5是一个有效的数字常量,但是 .5 不是。
ABAP CDS - 语言元素(Language Elements)
以下部分按主题排列,总结了ABAP CDS中的CDS DDL和CDS DCL的语言元素。
◾DDL(Data Definition Language,即数据定义语言)
• CDS注释定义-CDS Annotation Definitions
关键词及补充说明:
| Language Element | Meaning |
| define annotation ... | 定义CDS注释 |
| enum | 定义CDS注释的枚举符号 |
| default | 定义CDS注释的默认值 |
| array of | 定义注释数组 |
• CDS视图-CDS Views
关键词及补充说明:
| Language Element | Meaning |
| DEFINE VIEW ... AS | 定义CDS视图 |
| WITH PARAMETERS | 定义CDS视图的输入参数 |
| SELECT [DISTINCT] ... FROM | CDS视图的SELECT语句 |
| INNER JOIN ... ON | SELECT语句中的内连接 |
| LEFT|RIGHT OUTER JOIN ... ON | SELECT语句中的外连接 |
| ASSOCIATION ... TO ... AS ... ON | 为SELECT语句中的路径表达式定义CDS关联 |
| WITH DEFAULT FILTER | 指定CDS关联的默认筛选条件 |
| 1: | 路径表达式的属性 |
| INNER ... WHERE | 路径表达式的属性 |
| LEFT OUTER ... WHERE | 路径表达式的属性 |
| KEY ... AS | SELECT列表的元素 |
| $EXTENSION.* | SELECT列表中增强的元素 |
| WHERE ... | SELECT语句的WHERE子句 |
| GROUP BY ... | SELECT语句的GROUP-BY子句 |
| HAVING ... | SELECT语句的HAVING子句 |
| UNION ALL ... | SELECT语句的UNION子句 |
• CDS视图增强-CDS View Enhancements
关键词及补充说明:
| Language Element | Meaning |
| EXTEND VIEW ... WITH | 使用CDS视图扩展扩展CDS视图 |
• CDS表函数-CDS Table Functions
关键词及补充说明:
| Language Element | Meaning |
| DEFINE TABLE FUNCTION ... RETURNS ... IMPLEMENTED BY METHOD ... | 定义CDS表函数 |
• CDS层次结构-CDS Hierarchies
关键词及补充说明:
| Language Element | Meaning |
| DEFINE HIERARCHY ... | 定义CDS层次结构 |
| WITH PARAMETERS | 定义CDS层次结构的输入参数 |
| AS PARENT CHILD HIERARCHY | 使用父子关系定义CDS层次结构 |
| SOURCE ... | 指定CDS层次结构的数据源 |
| CHILD TO PARENT ASSOCIATION | 指定CDS层次结构的层次关联 |
| PERIOD FROM ... TO ... VALID FROM ... TO ... | 定义临时的层次结构 |
| DIRECTORY ... FILTER BY ... | 指定CDS层次结构源的条件 |
| START WHERE ... | 指定CDS层次结构的开始条件 |
| SIBLINGS ORDER BY ... | 指定CDS层次结构中兄弟节点的排序顺序 |
| DEPTH ... | 划定CDS层次结构的结构级别 |
| NODETYPE ... | 将元素定义为CDS层次结构的节点类型 |
| MULTIPLE PARENTS ... | 定义在CDS层次结构中指定多个父节点时应用的行为 |
| ORPHANS ... | 定义在CDS层次结构中指定孤立节点时应用的行为 |
| CYCLES ... | 定义在CDS层次结构中指定节点周期时应用的行为 |
| GENERATE SPANTREE | 将CDS层次结构简化为树状结构 |
• CDS抽象实体-Abstract CDS Entities
关键词及补充说明:
| Language Element | Meaning |
| DEFINE ABSTRACT ENTITY ... | 定义一个抽象的CDS实体 |
| WITH PARAMETERS | 定义抽象CDS实体的输入参数 |
| ASSOCIATION ... TO ... ON | 在抽象CDS实体的元素列表中发布CDS关联 |
| WITH DEFAULT FILTER | 指定CDS关联的默认筛选条件 |
• CDS元数据扩展-CDS Metadata Extensions
关键词及补充说明:
| Language Element | Meaning |
| ANNOTATE ENTITY|VIEW ... WITH | 为CDS实体定义CDS元数据扩展 |
| VARIANT | 将CDS元数据扩展与CDS变式连接起来 |
| PARAMETERS | 扩展CDS实体输入参数的注释 |
◾DCL(Data Control Language,即数据控制语言)
• CDS角色-CDS Roles
关键词及补充说明:
| Language Element | Meaning |
| DEFINE ROLE | 定义CDS角色 |
| GRANT SELECT ON | 在CDS角色中定义访问规则 |
| WHERE | CDS角色的条件访问规则中的WHERE子句 |
| AND, OR, NOT | CDS角色的条件访问规则中的布尔运算符 |
| INHERIT | 定义CDS角色的继承访问规则(已过时) |
| ASPECT pfcg_auth, | CDS角色的条件 |
| ASPECT user | |
| PFCG_MAPPING | 指定CDS角色的PFCG条件中的PFCG映射 |
| INHERIT ... FOR GRANT SELECT ON | 定义CDS角色的继承条件 |
| ...=|<>|<|>|<=|>=|?=|BETWEEN|LIKE|IS NULL ... | 常量条件的操作符 |
• CDS访问策略-CDS access policy
关键词及补充说明:
| Language Element | Meaning |
| DEFINE ACCESSPOLICY | 定义CDS访问策略 |
| DEFINE PFCG_MAPPING ... BETWEEN ... AND ... USING ... | 在访问策略中定义PFCG映射 |