ABAP CDS开发
ABAP CDS开发
🎯 CDS概念
==Core Data Services==(CDS)是SAP的战略性技术解决方案之一。其目的是在数据的物理存在和用户需求中间构建一个==虚拟层==,满足用户对访问SAP系统数据的需求。
graph TD
A[CDS] --> B[HANA CDS]
A --> C[ABAP CDS]
B --> B1["仅支持HANA数据库<br>功能丰富"]
C --> C1["支持多种数据库<br>通过ADT开发"]
CDS类型对比
| 类型 | 支持平台 | 特点 |
|---|---|---|
| HANA CDS | 仅支持HANA数据库 | 功能丰富,直接在数据库内开发 |
| ABAP CDS | 支持多种数据库平台 | 通过ADT工具开发,功能相对较少 |
CDS设计目标
- 易于定义和创建
- 能够满足==复杂业务逻辑==编写的需求
- 能够充分发挥数据库,尤其是SAP HANA的==性能==
- 具有==充足的语意信息==
- 具有良好的==复用性==和适应性
- 易于管理和传输
- 与现有系统的安全机制集成
- 具有一定的==自解释==功能
- 同时满足OLTP(ABAP,Fiori)和OLAP(BW、BO)的调用需求
📋 CDS特点
主要特性
- 将==数据计算逻辑下推==到数据库层
- 可以使用
UNION及UNION ALL叠加查询结果 - 支持
CASE条件语句 - 支持 Arithmetic、String 和 CAST 等语句
- 支持
INNER JOIN、OUTER JOIN等 - 可以使用 ==Annotation==(注解)
- 支持 Aggregations、Grouping 功能
- 支持==90%以上的SQL功能==
开发环境
ABAP CDS==不能在SAP GUI==上进行开发,只能在 ==Eclipse== 上通过安装ABAP Development Tools(ADT)的方式进行开发。
💡ADT安装步骤
- 下载安装 Eclipse
- 打开 Eclipse → Help → Install New Software
- 输入网址:
https://tools.hana.ondemand.com/xxxx(xxxx为Eclipse版本号) - 选择 ABAP Development Tools for SAP NetWeaver
🏗️ ABAP CDS部分语法
基本语法
1 | @AbapCatalog.sqlViewName: 'ZMY_CDS_VIEW' |
使用CASE条件
1 | @AbapCatalog.sqlViewName: 'ZMATERIAL_STATUS' |
使用WHERE条件
1 | @AbapCatalog.sqlViewName: 'ZMATERIAL_ACTIVE' |
使用CAST语句
1 | @AbapCatalog.sqlViewName: 'ZMATERIAL_PRICE' |
使用Association
1 | @AbapCatalog.sqlViewName: 'ZMATERIAL_SUPPLIER' |
定义选择参数
1 | @AbapCatalog.sqlViewName: 'ZMATERIAL_SEL' |
⚠️参数限制
目前CDS视图的选择屏幕只支持==单值==(parameters),不支持多值(selection-options)。
🔍 S/4 数据表查看对应CDS视图方法
以 mseg 表为例:在使用CDS View查询MSEG时发现查不出数据,这是因为S/4部分表需要使用对应的CDS视图查询才会生效。
查找步骤
- 在 ==SE16== 中输入需要查询的表名
- 在视图框中输入
NSDM_E_MSEG,查出结果:NSDM_V_MSEG - 使用
NSDM_V_MSEG作为数据源创建CDS视图
💡 使用CDS创建oData Service
步骤1:创建CDS view
创建带有oData注解的CDS视图:
1 | @AbapCatalog.sqlViewName: 'ZWX_CDS3' |
📌关键注意
- 加上
@OData.publish: true可以将CDS发布为oData - ==一定要定义主键==(在字段前加上
key关键字),否则会报错
步骤2:激活并维护服务
- 事务代码:
/N/IWFND/MAINT_SERVICE - 点击==添加服务==
- 输入筛选条件,点击获取服务
- 查出对应服务后点击==添加所选服务==
- ==激活==服务
步骤3:测试oData服务
使用事务代码 /N/IWFND/GW_CLIENT 测试:
1 | request uri: /sap/opu/odata/sap/zwx_cds3_cds/ZWX_CDS3?$filter=posnr eq '000010' |
⚠️大小写敏感
URI需要==区分大小写==。
🏗️ 开发流程总结
graph LR
A["1. 安装Eclipse<br>+ ADT"] --> B["2. 创建ABAP<br>项目"]
B --> C["3. 创建CDS<br>Data Definition"]
C --> D["4. 定义CDS<br>视图"]
D --> E["5. 检查并<br>激活"]
E --> F["6. 添加oData<br>注解"]
F --> G["7. 激活服务<br>+ 测试"]
⚠️ 注意事项
- CDS视图激活后==不能修改==,只能删除重新创建
sqlViewName和define view后面的名称==不能相同==- 选择屏幕目前只支持==单值==(parameters)
- S/4系统的某些表需要使用对应的==CDS视图==才能查询到数据
- URI需要==区分大小写==
- 在ABAP程序中调用时使用的是
sqlViewName
ABAP程序调用CDS视图
1 | REPORT z_cds_call_example. |