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映射 |