news 2026/6/11 15:10:37

ABAP CDS - CDS视图基础语法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ABAP CDS - CDS视图基础语法

一、先认识CDS

  1. ABAP CDS(Core Data Services)是 SAP 基于HANA数据库的核心建模技术
  2. 用于定义语义化数据模型,替代传统视图
  3. 包括数据建模、语义定义、字段增强、关联、权限、注解的核心技术
  4. CDS View :普通视图,只读为主,传统 ABAP CDS
  5. CDS Entity:可编辑实体,RAP 专用,能做 CRUD、草稿、锁定
  6. 现在流行用于在RAP框架(RAP ABAP RESTful Application Programming Model):CDS + Behavior + OData + Fiori
  7. CDS 分 3 大类:DDL CDS(数据定义):视图、表、类型DCL CDS(访问控制):权限控制DDX CDS(RAP 专用):行为定义 Behavior Definition、元数据扩展 Metadata Extension
  8. SAP 官方最佳实践:把所有 UI、搜索、文本、标签等注解全部抽出来,放到 Metadata Extension 里,主 CDS 视图只负责数据,不负责展示。

二、CDS 视图基础语法

1、注解(Annotation)

  1. @AbapCatalog.sqlViewName: 'XXX'映射底层数据库视图名
  2. @AbapCatalog.compiler.compareFilter: true编译对比过滤条件
  3. @AccessControl.authorizationCheck: #NOT_REQUIRED关闭权限检查
  4. @EndUserText.label: 'XXX'视图描述文本

2、视图定义

  1. define view entity 视图名:定义 CDS 视图实体
  2. as select from 表名 as 别名:指定主数据源 + 表别名

3、参数语法

  1. with parameters 参数名 : 数据类型定义输入参数
  2. $parameters.参数名:调用参数

4、表关联

1. 传统 JOIN

  • inner join 表 as 别名 on 关联条件 :内连接
  • left outer join 表 as 别名 on 关联条件:左外连接

2. CDS Association(推荐)

  • association [0..1]/[0..*] to 表 as _别名 on $projection.字段 = 关联表.字段
    • [0..1]:一对一;[0..*]:一对多
    • $projection:指代当前 CDS 投影字段

5、字段基础语法

  1. key 字段:定义主键
  2. 原字段 as 别名:字段起别名
  3. '字符串' 或者 数字 as 别名 :定义常量字段
  4. 字段1 运算符 字段2 as 别名 :计算字段(+、-、*、/)

6、内置函数 & 类型转换

  1. concat(字段1,字段2):字段拼接
  2. substring(cast(字段:类型),起始位,长度):字符串截取 + 类型转换
  3. upper(字段):转大写
  4. coalesce(字段,默认值):空值替换

7、条件语法

  1. case when 条件 then 值 else 值 end as 别名 :多条件判断

8、过滤、分组、聚合

  1. where 条件:普通行过滤(可使用参数)
  2. 聚合函数:count() / sum() / avg() / max() / min()
  3. group by 非聚合字段:分组(非聚合字段必须全部列出)
  4. having 聚合条件分组后过滤(仅用于聚合结果)

代码案例:

// 注解:映射到数据库的SQL视图名称(DDLS必须,长度≤16位) @AbapCatalog.sqlViewName: 'ZCDS_ALL_DEMO' // 注解:编译时对比过滤条件 @AbapCatalog.compiler.compareFilter: true // 注解:关闭权限对象检查,测试用 @AccessControl.authorizationCheck: #NOT_REQUIRED // 注解:视图描述文本 @EndUserText.label: 'CDS基础语法汇总' // 定义CDS视图实体 define view entity Zcds_All_Demo // 定义输入参数:外部可传参过滤 with parameters p_carrid : abap.char(3), // 航空公司代码参数 p_fldate : abap.dats // 航班日期参数 // 主表:预订表sbook as select from sbook as b // 传统SQL LEFT OUTER JOIN 左连接,关联航空公司表scarr,别名c left outer join scarr as c on b.carrid = c.carrid // CDS专属 Association 关联(推荐替代JOIN,一对多/一对一) // [0..1]:0或1条,一对一;[0..*]:一对多 association [0..1] to spfli as _spfli // $projection 代表当前CDS投影字段,关联条件 on $projection.carrid = _spfli.carrid and $projection.connid = _spfli.connid { // 1. 主键字段:key标记,必写 key b.carrid, // 航空公司编码 key b.connid, // 航班连接ID key b.fldate, // 航班日期 // 2. 普通字段 + 字段别名(as 起别名) b.bookid as booking_id, // 预订ID,别名 c.carrname as airline_name, // 航空公司名称 // 3. 常量字段:固定字符串、固定数字 'SAP航班数据' as data_source, 100 as fixed_num, // 4. 计算字段:字段四则运算 b.loccur * b.price as total_price, // 数量*单价=总价 // 5. CDS内置函数 + 类型转换cast concat(b.carrid, b.connid) as flight_no, // 拼接字段 substring(cast(b.fldate : abap.char(8)),1,6) as year_month, // 截取年月 upper(c.carrname) as airline_upper,// 转大写 coalesce(b.price, 0) as price_not_null,// 空值替换为0 // 6. CASE WHEN 多条件判断 case when b.seatsocc = b.seatsmax then '满员' when b.seatsocc > 0 then '有乘客' else '空座' end as seat_status, // 7. Association关联表的字段,直接使用 _spfli.cityfrom, // 出发城市 _spfli.cityto // 到达城市, // 8. 聚合函数:count/sum/avg/max/min,配合GROUP BY使用 count(b.bookid) as book_count, // 预订数量 sum(b.loccur) as sum_loccur, // 总座位数 avg(b.price) as avg_price, // 平均价格 max(b.price) as max_price, // 最高价格 min(b.price) as min_price // 最低价格 } // 9. WHERE:普通过滤条件,使用输入参数$parameters where b.carrid = $parameters.p_carrid and b.fldate >= $parameters.p_fldate and b.price is not null // 10. GROUP BY:分组聚合,非聚合字段必须全部写在这里 group by b.carrid, b.connid, b.fldate, c.carrname, b.seatsocc, b.seatsmax // 11. HAVING:分组后过滤(只能过滤聚合结果) having count(b.bookid) > 0
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 6:35:34

因促达促进长高作用原理

因促达促进长高的作用机理:因促达是生长因子促进剂(IGF-1 Promotion)与γ-氨基丁酸骨胶原蛋白肽压片糖果的组合,同时作用于GH-IGF-1生长轴的三个靶点,实现更全面、更直接、更有效的效果。针对生长轴的第一个靶点&#…

作者头像 李华
网站建设 2026/5/15 6:29:18

GitClaw:基于AI Agent与GitHub Actions的智能仓库自动化管理实践

1. 项目概述:当GitHub遇上AI智能体如果你是一名开发者,每天的工作都离不开GitHub,那你一定对重复性的仓库操作感到疲惫。克隆新项目、查看issue、拉取最新代码、处理合并冲突……这些操作虽然基础,但日复一日地手动执行&#xff0…

作者头像 李华
网站建设 2026/5/15 6:27:36

SAP APO IPPE主数据之维护整车物料及其生产版本

1.创建整车物料,并关联可配置物料2.分配整车物料到访问节点3.进入整车物料详细信息,选择访问视图,点击创建生产版本4.录入生产版本信息,保存

作者头像 李华
网站建设 2026/5/15 6:25:48

shein 请求头加密算法逆向分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包 内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!侵权通过头像私信或名字简介叫我删除博…

作者头像 李华
网站建设 2026/5/15 6:24:12

技能驱动开源赏金平台:从能力证明到任务匹配的技术实践

1. 项目概述:一个技能驱动的开源赏金平台最近在GitHub上看到一个挺有意思的项目,叫Claws-Temple/claws-temple-bounty2.0-skills。光看这个名字,你可能会有点摸不着头脑——“Claws Temple”(利爪神殿?)、“…

作者头像 李华
网站建设 2026/5/15 6:23:15

小成本低预算,但高效果优人才

中小团队的困境,预算有限难做好校招 很多中小企业或者小的招聘团队,在校招实习招聘中,都面临预算有限、人手不足的困境,想要做好校招,看起来很难,只能被动等待简历,招聘的效果一直不好。 但实…

作者头像 李华