ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Eclipse中创建SAP CDS View:工具链配置与实战避坑指南

Eclipse中创建SAP CDS View:工具链配置与实战避坑指南 简介SAP CDS视图常被用于SAP HANA数据库中的高性能数据建模这份文档为需要在Eclipse中搭建ABAP开发环境并创建CDS视图的开发者提供了全程指导。内容涵盖了Eclipse版本选择、SAP插件下载安装、项目关联建立以及视图创建等核心环节并针对安装过程中可能出现的进度条长时间停滞、缺少微软视觉加加运行库、SAP动态链接库版本过旧等常见故障给出了具体解决办法。资源仅包含一个doc文件整体大小约一点二一兆字节适合离线查阅和反复参考。目前已有三百二十九人学习或下载对初学者而言是一份很实用的入门材料。文档在介绍创建方法时既提到了界面配置方式也重点演示了通过编写SQL直接生成视图的流程包括请求号、视图名以及数据定义语言名称的定义和关联条件的写法能够帮助读者结合示例快速上手减少摸索时间。1. Eclipse 里建 SAP CDS View先搞清这套工具链再做不迟做 SAP 开发久了都会遇到同一个问题多表关联查询一多ABAP 层写 JOIN 越来越吃力数据量一大性能就往下掉。SAP CDS ViewCore Data Services就是用来解决这个问题的——它把关联、过滤、权限检查都下沉到 HANA 数据库层网络传输量变小查询时间明显缩短。这篇笔记写的是整套操作流程Eclipse 装插件、配置连接、建包建视图以及我实际踩过的两个硬坑。适合手里有 SAP 系统、想在 Eclipse 里上手 CDS 但还没摸清门路的开发人员。我用的 SAP GUI 是 740Eclipse 用 2022-03 对应版本的插件下面所有步骤都以这个组合为例。先把工具链理顺后面创建视图才不会翻车。2. 装对 ABAP Development Tools版本匹配、两个必踩的坑2.1 下载 Eclipse 与 SAP 插件版本对应关系是第一步SAP 的 CDS 开发工具在 Eclipse 里叫 ABAP Development Tools简称 ADT它不是 Eclipse 自带的功能必须单独装。下载 Eclipse 时有个容易忽略的点不要下载最新版就直接用SAP 插件和 Eclipse 版本有严格的对应关系装错了插件根本装不上或者装上后功能按钮是灰的。常见对应关系如下Eclipse 版本SAP 插件更新站点路径适用场景Eclipse 2022-03 (4.23)https://tools.hana.ondemand.com/2022-03搭配 SAP GUI 740、S/4HANA 或 ECC on HANA 的常见组合Eclipse 2024-06 (4.32)https://tools.hana.ondemand.com/latest新系统、新项目但插件功能变动较大Eclipse 2021-09 (4.21)https://tools.hana.ondemand.com/2021-09老客户端环境、公司安全策略限制升版我的环境是 SAP 客户端 740Eclipse 用的是 2022-03 对应版本插件的更新站点也选择 2022-03。实际操作中这个版本组合最稳网络上的案例也最多出了问题容易查。如果你所在公司的 Eclipse 镜像源比较全也可以直接在 Help Install New Software 里粘贴上面的 URL但注意下载慢的问题——国内直连 SAP 官方插件站点经常卡住网上有人整理过镜像站搜“Eclipse 插件镜像 SAP”能找到尽量选国内镜像能省很多时间。安装时勾选“ABAP Development Tools”整个分类下的所有组件不要只勾一个否则后面创建 CDS 视图时会提示缺少依赖插件。这一步装完之后 Eclipse 会让你重启重启前先确认一下网络连接因为第一次启动 ADT 时它要去验证更新站点和下载运行时组件网络不稳会出现下面说的进度条问题。2.2 安装进度条卡死断开重连比等更有效装插件时最常见的就是进度条长时间不动停在 30% 或者 60% 的地方看起来像死掉了。第一次遇到时我等了二十分钟都没动静后来发现这不是真的卡死是 Eclipse 在下载更新元数据和依赖包时网络连接被重置了进度条没有反馈而已。我的处理方式是进度条超过 35 分钟完全不动就直接关掉安装对话框打开 Eclipse 的 Window Preferences Install/Update把 “Available Software Sites” 里的 SAP 更新站点 URL 选成镜像地址然后再重新走一遍安装。如果镜像也慢还有一个土办法断开当前网络重新连接让 Eclipse 重新发起 HTTP 请求很多时候连上后发现进度条突然跳到 90% 以上。这里要强调一点不要在安装过程中反复点击 Cancel 再重装Eclipse 的安装机制是 p2 仓库中断后下次装会校验之前的残留文件反而更容易报错。让它跑完或者彻底关掉 Eclipse 再重开重装二选一。2.3 装完重启报错ABAP communication layer 与 VC 2013 运行时库插件装完、重启 Eclipse 之后很多人会看到这样一条报错ABAP communication layer is not configured properly. This might be caused by missing Microsoft Visual C 2013 (x64) Runtime DLLs.现象上 Eclipse 左上角直接弹红色错误框能打开 ABAP 项目但连不上系统登录对话框根本出不来。原因也很直接ADT 的通信层组件依赖 Windows 下的 VC 2013 运行时库而 Windows 10/11 默认只自带更新的 VC 运行库版本并没有包含 2013 版。这条报错本身已经把解决方案写清楚了去微软官方下载 Visual C 2013 Redistributable (x64) 装上再重启 Eclipse 就能过。重点是选 x64不要装成 x86装错位数的库 ABAP 通信层一样起不来。装完 VC 库后还有一半概率会遇到另一个报错紧接着弹出来2.4 sapjco3.dll 版本太旧删掉 System32 里的旧文件Native library sapjco3 is too old. Found library C:\Windows\System32\sapjco3.dll has version 721.913, but required is at least version 753.900.这条报错的坑比 VC 更深。sapjco3.dll 是 SAP Java Connector 的本地库Eclipse 启动时会加载它。很多老 SAP 系统尤其是装过连接组件的电脑会在 C:\Windows\System32 下残留一个旧版本的 sapjco3.dll版本号 721 之类。ADT 要求至少 753.900版本不满足就直接拒绝工作。解决方式是最简单的手动删文件。先在文件管理器中定位 C:\Windows\System32\sapjco3.dll把它改名备份成 sapjco3.dll.bak或者直接删除然后重启 Eclipse。另外Eclipse 的 plugins 目录下也可能存在一份 sapjco3 相关的 jar 或 dll建议搜索一下整个 Eclipse 安装目录把所有 sapjco3*.dll 全部排查一遍只保留 ADT 自己带的最新版本。提示删除前先确认没有其他程序比如 SAP GUI 或其他 Java 工具正在占用这个 DLL。如果删除提示文件被占用先关掉所有 SAP 相关进程再操作。装完这些重启后 Eclipse 应该能正常打开 ABAP 项目了。下一步就是配置系统连接。3. 打通 Eclipse 与 SAP 系统建连接、选资源3.1 在 Eclipse 里新建 SAP 项目并配置连接插件装好后打开 Eclipse 的右上角透视图切换按钮选择 ABAP 透视图。第一次切换时它会问你配置什么后端系统选择 “SAP GUI 系统”因为在座大多数还是依赖 SAP GUI 740 作为底层登录组件。新建 SAP 项目的方法是File New Other ABAP Project或者直接在 ABAP 透视图的 Project Explorer 空白处右键选 New ABAP Project。输入项目名时要注意这个项目名不是你想叫什么就叫什么它必须匹配你 SAP 系统里的逻辑系统名。比如你登录后看到系统号为 00逻辑系统名是 F10那么项目名最好就叫 F10或者在创建时指定系统 ID、客户端号和语言。这些从 SAP GUI 登录界面都能看到抄过来就行。配置连接时Eclipse 会弹出让你输入的参数系统 ID三个字符、客户端号如 001、语言ZH 或 EN、用户名密码。这里有个经验第一次连接时勾选 Save Password后续开发节奏会顺畅很多——但注意这是开发环境才推荐的做法生产系统千万别勾。3.2 选中资源自动带出配置信息创建 ABAP 项目时有一个很多人没注意到的选项“选择一个资源进行创建”它能直接把下面步骤里要用的配置信息带出来省去手动填一堆东西的麻烦。具体做法是在新建项目向导里选好系统后向导会加载你 SAP 系统里的包列表。如果你已经知道后面要使用哪个开发包比如 Z001就选择 Z001 这个包作为初始资源。Eclipse 随后会自动把系统 ID、客户端的配置关联到项目里。如果你在创建完项目后再去配置包后面创建视图时还要手动选包、手动指定开发类多几步操作完全是浪费时间。连接建立后记得先在 Project Explorer 里展开项目节点确认能看到包和 ABAP 对象的树形结构。如果这里只能看到空项目、下面没有任何对象多半是连接配置有问题重新检查用户名密码和系统号另外确认你的账号是否有开发权限。4. 创建 CDS View 的两种实用路径界面配置与 SQL DDL4.1 方法一界面配置式创建在包 Z001 下面右键新建 Other搜 Core Data Services找到 Data Definition 之后SAP 会弹出一个向导。这个向导其实是图形化的元数据配置界面它会引导你输入视图名、描述、关联的表然后自动帮你生成 DDL 脚本的骨架。对于刚开始接触 CDS 的 ABAP 开发来说这个方式能避免手写语法错误因为它每一步只让你选表、选字段、选关联条件最后生成的代码结构是固定的。不过我自己的体验是这个界面配置方式在字段多、关联复杂的时候反而更慢——你每加一个关联表就要在界面上点来点去生成的 SQL 可读性也一般。正式功能开发我基本不用它但它有个好处用这种方式生成过一两次之后你对 DDL source 的语法结构会有直观理解所以我建议新手用界面配置生成第一个视图用来学习语法比看文档管用。4.2 方法二编辑 SQL 创建视图开发人员的首选第二种方式就是直接创建 DDL source 手写 SQL。在包 Z001 上右键选择 New Other ABAP Repository Object Core Data Services Data Definition输入 DDL 名称比如 ZTEST_V然后 Eclipse 会自动生成一个带注释的 CDS 视图模板。模板生成后把下面的 SQL 替换模板内容AbapCatalog.sqlViewName: ZTEST_CDV AbapCatalog.compiler.compareFilter: true AbapCatalog.preserveKey: true AccessControl.authorizationCheck: #CHECK EndUserText.label: 物料主数据与文本CDS视图 define view ZTEST_V as select from mara as m inner join makt as t on t.matnr m.matnr and t.spras 1 { m.matnr, m.mtart, m.laeda, t.maktx } where m.mtart FERT代码里每个注解和语句块的含义AbapCatalog.sqlViewName指定数据库层视图的实际技术名称这里是 ZTEST_CDV。这个名称不能和 SAP 现有的数据库视图冲突创建之前最好用 SE11 检查一下是否已存在同名对象。AccessControl.authorizationCheck: #CHECK启用权限检查。这意味着后面必须额外创建 DCL 权限对象Access Control否则激活时过不了。define view ZTEST_VDDL source 里的逻辑视图名对应你在代码里引用的 CDS 视图名称。select from mara as m inner join makt as tMARA 是物料主数据表MAKT 是物料文本表用物料号 MATNR 关联同时限定文本语言为中文SPRAS 1实际系统里 1 代表中文注意不同系统配置可能有差异。花括号内的字段列表就是最终视图暴露出来的字段建议只暴露应用真正需要的字段不要select *否则 HANA 对视图的列裁剪和压缩会失效。where m.mtart FERT只筛选成品物料这是性能优化的第一道闸尽量把过滤条件写在视图像内层而不是在外面再套 WHERE。写完后保存敲 CtrlF3 激活。激活时会弹出请求号确认框选择一个可用的请求号。如果你所在的传输链要求新建请求就选“创建新请求号”如果是个人开发机直接使用已有请求号 ZTEST 也可以。4.3 请求号与命名两个容易粗心的细节请求号是 SAP 开发里最容易被忽略但又最容易卡住流程的环节。激活 DDL source 时Eclipse 会提示选择一个传输请求。这里的原则是凡是需要上线的对象必须走传输链不要放进本地请求。如果只是自己验证语法和性能可以用本地请求但正式项目我不建议这么干后面传输列表少一个对象就得返工。命名方面视图名 ZTEST_CDV 和 DDL 源名 ZTEST_V 是两个不同的东西。DDL source 名称是我们写代码时的逻辑名而sqlViewName是数据库里实际生成的视图名激活后你可以在 SE11 里用 ZTEST_CDV 查到这个数据库视图的结构但编辑 CDS 代码永远是在 Eclipse 里改 ZTEST_V 对应的 DDL source。另外激活时经常遇到语法检查报错很多是关联字段类型不匹配、字段名写错、或者漏了注解。错误信息会直接定位到具体行号双击错误可以跳转修复后重新激活即可。5. CDS View 语法要点与排查激活失败到底在看什么5.1 CDS 视图的基本语法骨架不管多复杂的 CDS 视图骨架都是固定的注解块、定义语句、SELECT 子句、字段列表、WHERE 条件。注解块决定了这个视图的行为最常见的是下面这几个AbapCatalog.sqlViewName: ZDB_VIEW_NAME AbapCatalog.compiler.compareFilter: true AbapCatalog.preserveKey: true AccessControl.authorizationCheck: #CHECK EndUserText.label: 视图描述其中compareFilter: true表示把外部 WHERE 下推到 join 内部这个参数在 ABAP CDS 里相当关键。以前用 ABAP 写多表查询时过滤条件通常在外层执行HANA 拿到完整的 JOIN 结果集后再过滤数据量大时效率很低。设了compareFilter后HANA 会尽量把过滤条件下推到每张表减少中间结果集大小。这是 CDS 视图性能收益的重要来源之一。preserveKey: true则保持主键字段加了它之后后续在视图上做FOR ALL ENTRIES或者 JOIN 其他对象时字段语义更明确。如果是汇总型视图GROUP BY一般取消主键保留减少不必要的字段维护成本。5.2 激活语法报错三条最常见的翻车场景激活时报错是最常见的翻车环节我整理了三条踩过的记录场景一视图 A 引用视图 B但 B 还没激活现象激活 A 时报错提示 Object ZTEST_B is not active 或类似找不到类型的错误。原因很简单CDS 视图允许嵌套引用但引用链上的每个对象都必须是已激活状态。解决方式是先按依赖顺序激活底层视图或者直接在 Project Explorer 里右键选择 “Activate All Nested Elements”让 Eclipse 自动处理依赖顺序。从这以后我每次创建新视图都会顺带检查一下引用链避免在交付前一天才发现底层对象没激活。场景二JOIN 条件里用了括号包裹多个 OR 条件现象语法本身看起来没问题Eclipse 报 “The ON condition is too complex” 或者直接语法错误。原因是 HANA 对 CDS 的 ON 条件有规范化要求多个 OR 条件包裹在括号里可能产生非规范化结构。解决方式是把 OR 拆分成多个等价的连接条件或者把复杂条件提到 WHERE 里。相比折腾 JOIN 条件我更倾向于在 JOIN 里只写最简单的等值关联其余过滤统一放 WHERE清晰且不易报错。场景三视图能激活但用不了报权限不足现象视图在 Eclipse 里激活成功但 ABAP 程序里一 Select 就报权限错误或者干脆返回空数据。原因基本都在 DCLAccess Control上。AccessControl.authorizationCheck: #CHECK这个注解声明了要做权限校验但如果你没有为这个视图写 DCL 对象或者 DCL 里的权限条件没有给当前用户配置角色权限系统会直接拒掉所有访问。解决方式是为此视图新建 Access Control 并激活同时在 SAP 系统里给相关账户分配读取权限。这不是 CDS 语法问题但是新人最容易在这上面耗一天。5.3 性能没提升的排查思路有些项目把 CDS 视图建好后ABAP 层执行时间反而没明显变短这时候问题通常不在视图本身而在调用方式。CDS 视图的性能优势必须建立在 HANA 能对它做列存储和并行执行的基础上如果你在 ABAP 里这样写SELECT * FROM ztest_cdv INTO TABLE DATA(lt_data).全量取数仍然会把所有行捞到应用服务器。正确的做法是在 ABAP 侧也带 WHERE 下推过滤条件CDS 视图负责把多表关联的结果集压缩到最小ABAP 层再做字段裁剪。两个层面配合才能压住数据量。另一个容易被忽略的点是视图定义中如果使用了cast、字符串拼接或函数计算HANA 的表达式下推会被打断。视图里尽量少用非必要的标量函数让 HANA 能在列存储树形上直接执行原始字段运算。一条判断依据是视图内部字段数量越少、函数越简单性能越好。6. 用 ST05 验证 CDS View 的真实性能收益从激活到说服业务视图建好后我习惯做一次标准化的性能验证用数据说话而不是凭感觉。先在 Eclipse 里打开事务代码 ST05。打开后界面会列出当前登录用户的跟踪记录。点工具栏上的“Activate Trace”按钮选择跟踪类型为 SQL Trace然后回 Eclipse 里运行一段调用该 CDS 视图的 ABAP 程序比如SELECT * FROM ZTEST_CDV WHERE MATNR IN (...)。跑完后回到 ST05 停掉跟踪在跟踪结果里找到针对 ZTEST_CDV 的 READ 操作重点看两个指标执行时间和返回行数。同样的查询再用传统方式从 MARA、MAKT 两张表分别取数、在 ABAP 里关联跑完同样对比一遍。两个结果放在一起执行时间、数据库传输字节数、调用次数一目了然。这个验证方法除了能说服自己更重要的是能在项目评审时拿出具体数据。如果 CDS 视图跑了 200 毫秒传统 JOIN 跑了 800 毫秒对比就很直观如果性能只提升一点点检查一下 CDS 视图里是否写了函数、过滤条件下推是否生效。关于验证结果还有一个细节HANA 数据库对第一次执行的查询会做缓存冷启动和热启动耗时差别很大。做对比时两边的查询都先各跑两遍取第三遍的数据这样对 HANA 的优化器才公平。从那以后我每次提交 CDS 视图开发任务给测试同学之前都会强制自己先走一遍 ST05 的对比流程顺手在代码注释里写明设计视图时的性能基线后续优化也有据可查减少了很多来回沟通的时间。希望这篇笔记能帮你少走我踩过的那些弯路。本文还有配套的精品资源点击获取
返回列表