ARTICLE DETAIL

资讯详情

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

从SE38到ADT:S/4HANA Cloud报表开发与CDS视图实战指南

从SE38到ADT:S/4HANA Cloud报表开发与CDS视图实战指南 去年我接了一个从ECC升级到S/4HANA Cloud的报表项目。第一天打开SAP GUI我习惯性地敲了SE38准备把以前那套ZRPT0001直接复制进去结果登录界面告诉我这个客户端无法连接Cloud系统。当时我以为是网络配置问题折腾了半天才反应过来——不是网络不能通而是从这一个版本开始传统GUI开发这条老路已经彻底断了。云环境里的ABAP开发前线已经换成了Eclipse ADTABAP Development Tools。这篇文章我不想复述官方文档而是把从本地部署On-Premise转过来的开发者在S/4HANA Cloud里做报表时最常遇到的一堆困惑一次性捋清楚为什么必须用Eclipse、环境怎么搭、报表到底走CDS视图还是写ABAP、权限和传输怎么做、以及我在真实项目里踩过的那些坑。跟着这条路线走你至少能少走我当初绕过的那些弯路。1. 云端为什么不再让你打开SE38从“写报表”到“做报表”的转变1.1 GUI这条老路在S/4HANA Cloud彻底走不通了在本地部署系统里我的日常是SE38写REPORT、SE11建表、SE93挂菜单一条龙。这套手艺在S/4HANA Cloud里几乎全部失效。S/4HANA Cloud是一个由SAP托管并持续升级的租户你没有权限去修改标准表结构、替换标准程序、调整标准屏幕。就算你在系统里看到了VBAK这种底层表的影子直接select它也既不被推荐在权限层面也常常被限制。SAP刻意把这种“随意访问底表”的能力收紧了因为租户是多客户共享一套核心基础设施数据隔离和升级兼容是首要目标而不是让你像以前那样随心所欲地写一个报表绕开所有标准逻辑。SAP给出的扩展框架是两层的。第一层叫In-App扩展应用内扩展只允许你以开发对象的形态做事比如增加自定义字段、写CDS视图、定制业务逻辑但它本质上不开放OS层和标准代码第二层叫Side-by-Side扩展并排扩展把真正意义上的ABAP代码开发放到了SAP BTPBusiness Technology Platform的ABAP环境里。这两条路的共同开发入口都是Eclipse里的ADT而不是SE38/SE80。我开始理解这件事之后最大的感受是这不是简单的工具换班而是整个开发范式变了。以前你是在一个“什么都能碰”的系统里写代码现在你是在一个“只能按标准契约做扩展”的系统里建报表。1.2 Eclipse ADT官方钦定的ABAP开发入口ADT全称ABAP Development Tools是SAP基于Eclipse平台做的一套ABAP IDE插件。装上之后你在Project Explorer里看到的还是熟悉的Package、DDIC结构、CDS视图这些对象但它们的编辑方式从GUI上的小窗体表格变成了真正的代码编辑器和IDE里的工程化管理。为什么偏偏是Eclipse因为Eclipse本身就是企业级Java开发的事实标准IDE它有成熟的插件体系、代码补全、调试框架、Git集成、性能分析工具。SAP把ABAP开发移植到Eclipse上让ABAPer体验到的开发方式更接近一个“程序员IDE”而不是“业务工具”。比如你在ADT里写CDS视图有语法高亮、内容助手、实时语法检查、单元测试框架这些体验是SE80那种老式编辑器给不了的。从另一个角度说这也是一种战略选择云环境下SAP不可能给你一个桌面端的完整GUI而Eclipse通过ADT自然地承担了“云端ABAP开发台”的角色。因此我建议所有刚开始接触S/4HANA Cloud开发的人第一件事不要着急写代码先习惯在ADT里完成项目管理。你在ADT里建一个ABAP Project本质上就是连接一个云端的ABAP系统Project里的所有对象变更都通过传输请求管理。这种感觉很像你用VS Code连了一个远程开发环境只是背后的技术栈换成了ABAP。1.3 云环境里“报表”到底长什么样在On-Premise里报表几乎所有程序都长成ALV列表一个REPORT程序加一个屏幕加一个权限检查几百上千行代码是常态。到了云端你要先接受一个现实通常你不会再去写一个独立的REPORT程序了。云端的自定义报表落地形态主要有这几种用自定义分析查询Custom Analytical Queries基于分析型CDS视图在Fiori里做维度拖拽、筛选、图表展示。用自定义报表Custom Reports基于事务型CDS视图快速生成一个可搜索、可排序、可下载的列表页面。把CDS视图发布给SAP Analytics Cloud在嵌入式故事里做可视化分析。在BTP ABAP环境里用RAPABAP RESTful Application Programming Model构建一个OData服务再由UI5或第三方前端页面展示。这几条路线共用同一个数据基础——CDS视图。所以你问“在S/4HANA Cloud能不能通过Eclipse开发报表”准确的说法是你先在Eclipse ADT里开发CDS视图然后在Fiori层用Key User工具把视图落地成用户可交互的报表。这篇文章后面讲的实操核心就是这个链路。2. 环境搭建Eclipse选型、ADT插件安装与云系统连接2.1 Eclipse版本和Java环境如何匹配在动手之前先选对Eclipse发行版。我推荐下载“Eclipse IDE for Enterprise Java and Web Developers”而不是普通的基础版Eclipse更不要用STS、MyEclipse这类改装版。原因是ADT插件依赖Eclipse的JDTJava开发工具和WTPWeb工具平台模块如果你用一个精简版装完插件后编辑器经常会出现“类型找不到”“补全失效”这类莫名其妙的问题。我见过一个同事为了省事下载了Eclipse基础版装ADT后每一步都像在打地鼠最后老老实实换回了Enterprise版一切正常。这个坑属于典型的省事不省心。Java环境上我当前用的ADT版本需要JDK 17。Eclipse本身会找到你机器上的JDK如果只装了JRE而不是JDKEclipse可以启动但ADT里的ABAP编译器会报“javac找不到”。最简单的方式是先装JDK并设置JAVA_HOME再启动Eclipse时确认About对话框里显示的Java版本是17或更高。还要注意Eclipse分32位和64位现在新机器基本都是64位但如果你从老电脑拷贝过来的JDK是32位的Eclipse会直接拒绝启动提示“Failed to create the Java Virtual Machine”这时候去官方下载对应的64位JDK装上即可。2.2 从SAP官方站点安装ADT插件的完整过程安装ADT的入口是Eclipse的Help - Install New Software。步骤如下在Work with输入框里点Add添加SAP官方更新站点URL填写https://tools.hana.ondemand.com/。等待站点读取列表里会出现ABAP Development Tools展开勾选需要的组件建议把ABAP Development Tools全选。点Next接受许可协议等待下载安装最后重启Eclipse。安装完成后去Window - Preferences里看左侧导航如果出现了ABAP相关配置项说明ADT已经装好了。如果没有说明你选错了Eclipse发行版或站点版本回头检查第一小节。这里补充一个很实战的经验SAP官方更新站点有时下载速度会比较慢尤其在网络波动大的时候很容易下到一半超时。这时候不要把Eclipse停在大窗口里干等我建议先把p2 repository离线包下载到本地然后在Install New Software里用Archive模式选中这个本地zip包安装。离线包方式最大的好处是稳定、可重复而且能避开在线仓库在特定时段抽风。我个人不建议用任何第三方整合包或者“一键安装包”因为ADT和Eclipse版本之间的耦合非常敏感混装不同来源的插件会让后续开发充满不确定性排查起来极其痛苦。2.3 在ADT中建立S/4HANA Cloud项目连接ADT装好后连接云系统的方式是在Project Explorer里右键New - Other选择ABAP Project。创建过程中如果系统列表是空的点Add System系统类型选择SAP S/4HANA Cloud然后填入云租户的ABAP服务URL。这里要注意这个URL不是你平时登录SAP Fiori浏览器的那个入口而是ADT连接用的服务地址管理员在用户开通邮件或系统配置里能看到。填完URL后输入用户名和密码点击Connect。我遇到过最常见的问题就是连接时状态栏一直转圈最后超时。这种情况十有八九不是网络问题而是当前用户根本没有开发相关的权限。ADT连接之后要下载系统元数据、加载对象目录没有权限时系统会卡住或者直接弹授权错误。解决办法是让系统管理员在Fiori的用户管理里给该用户分配一个具备开发/扩展权限的业务角色或者使用具备相应权限的通信用户。只有当用户权限正确时连接完成后Project Explorer里才会出现ABAP Packages等可展开的节点。到了这一步你的Eclipse才算真正变成了一个能开发云端报表的IDE。3. 报表技术路线选型哪些情况用CDS视图哪些情况必须写ABAP3.1 CDS视图为什么是云报表的第一选择CDSCore Data Services是SAP在云战略下主推的数据建模方式。它把SQL查询、权限控制、语义注解、元数据描述全部揉进一个叫“数据定义”的对象里一个CDS视图就是一份带业务语义的数据契约。做云端报表我几乎都会从CDS开始原因有几个第一是语义统一。你在视图里定义好哪些字段是维度、哪些是度量、货币字段用哪个货币单位、数量字段用哪个单位Fiori前端和SAP Analytics Cloud会自动识别不用担心每个报表重新发明一套口径。第二是权限集中。CDS视图自带DCLData Control Language可以在数据层做行级过滤这比在ABAP里到处写AUTHORITY-CHECK高效得多。第三是升级兼容。S/4HANA Cloud每季度自动升级如果你基于SAP官方发布的接口视图I_开头做扩展系统升级时字段契约相对稳定你的视图不容易“爆掉”。第四是性能CDS通过HANA优化执行很多计算能下推到数据库层比传统报表在应用层循环处理要快得多。我个人还有一层体会CDS让“模型”和“展示”解耦了。以前一个ALV报表既包含取数逻辑又包含布局逻辑改一个字段就要动整个程序现在CDS只管把数据访问和语义定义清楚展示层的查询、图表、筛选都是Fiori端配置的事。开发和业务之间的界限清楚了很多。3.2 三种落地形态自定义分析查询、自定义报表、RAP服务CDS视图本身不是最终报表它还要通过合适的消费方式落地。根据使用场景不同我一般这样选形态适用场景CDS视图要求优点局限性自定义分析查询销售分析、财务分析、库存分析等看板类场景usageType: #ANALYTICS字段带维度和度量语义拖拽式配置图表筛选天然支持偏查询和展示不适合直接编辑数据自定义报表业务用户日常查看一张列表数据做过滤、排序、下载usageType: #TRANSACTIONAL或列表视图页面化快完全在Fiori里配置自定义程度有限复杂交互需求做不了BTP ABAP环境RAP复杂查询、需要事务处理、需要暴露OData给第三方在BTP里重新定义或消费S/4接口数据可编程能力上限最高支持操作开发成本高要管理BTP环境和前后端联动如果你只是需要一个分析报表我强烈建议先试自定义分析查询不要一上来就在BTP里建工程。很多时候业务要的只是一个能看数的入口用Key User配置20分钟就能交付而BTP的方案从环境准备到发布可能得花一两天。技术方案要充分匹配需求复杂度这是我在云端项目里学到的一条很现实的效率法则。3.3 实在绕不开ABAP代码时的合法路径总有一些报表逻辑是纯视图搞不定的比如复杂的循环计算、调用BAPI、读取外部文件、写日志、后台批处理。在S/4HANA Cloud的In-App路径里你没法创建传统的REPORT程序然后SE38运行它。这时候合法的做法是走Side-by-Side在BTP ABAP环境里开发RAP模型这是当前最主流的ABAP开发方式。在ADT里创建RAP业务对象由数据建模、行为定义、服务定义、服务绑定四层组成最终暴露一个OData服务前端可以是SAP UI5、SAP Fiori Elements也可以是第三方系统。普通的ABAP类和接口在ADT里同样可以创建类实现接口做单元测试。你可以在类里写复杂的业务逻辑但对外暴露通常也是通过RAP的服务绑定或函数模块的方式。In-App的自定义逻辑Custom Logic如果是基于标准BAdI的少量定制Key User工具里可以写ABAP逻辑仍然会在ADT里编辑代码但它只是扩展点开发不是完整报表程序。所以我的建议很明确能基于CDS加前端配置完成的报表绝不绕远路写代码CDS表达不了、需要事务或复杂计算时再进BTP ABAP环境。这句话说起来轻松但很多人包括当初的我都习惯遇到报表就打开编辑器开始敲代码到了云端必须转过来。4. 动手实操在ADT中从零创建一张销售数据报表4.1 先建包和传输请求云环境的对象归属在ADT里创建任何ABAP对象之前都要先有一个包Package。包不只是一种目录它是对象的逻辑容器也决定了对象的传输属性。右键Your Project - New - ABAP Package输入包名比如ZFIN_REPORT、描述最关键的是软件组件字段。S/4HANA Cloud里你要把对象放进一个自定义软件组件里这个组件需要事先在系统的扩展管理里初始化。如果系统里还没有合适的组件找管理员先创建一个开发时直接在包创建向导里选择它。创建包的过程中ADT会要求创建传输请求Transport Request。云端和On-Premise一样所有开发对象都受传输请求管理没有TR你连保存都会被拒绝。ADT里有一个专门的传输请求视图你能看到自己创建的请求释放Release后才可能流向下一个系统。我在实操中会把“对象包传输请求”当作一个整体来管理每个交付给业务的新报表至少对应一条清晰的传输链这样做后续排查问题会省很多事。4.2 定义CDS视图代码逐行讲解下面是一个最简但是完整的分析型CDS视图它基于标准接口视图I_SalesOrder查销售订单的关键字段。路径是New - Other - Data Definition。AbapCatalog.sqlViewName: ZRPT_SO AbapCatalog.compiler.compareFilter: true AccessControl.authorizationCheck: #CHECK EndUserText.label: 销售订单报表 ObjectModel.usageType: #ANALYTICS define root view Z_I_SalesOrderReport as select from I_SalesOrder as so { key so.SalesOrder, so.SalesOrderType, so.SalesOrganization, so.CompanyCode, so.Customer, so.NetAmountInCompanyCodeCurrency as NetAmount, so.CompanyCodeCurrency as Currency, so.CreationDate }逐行看关键处。sqlViewName是底层SQL视图名云环境里必须遵守Z开头的命名规范而且不能和已有SQL视图冲突。AccessControl.authorizationCheck: #CHECK告诉系统这个视图启用权限检查如果后面没配DCL非开发用户来查就只能看到空结果——这是故意设计的不是Bug。ObjectModel.usageType: #ANALYTICS声明这是一个分析型视图只有带上这个注解Fiori端的“自定义分析查询”才能把它选成数据源。define root view定义根视图是CDS视图家族里最基础的一种如果你用的是关联扩展也会见到define view配extend的写法但第一张报表用它足够。key so.SalesOrder定义主键分析型视图里主键的意义在于保证行的可识别性如果主键缺失后面做关联或连接时会频繁出现重复行。激活之前建议先在编辑器的语法检查视图里确认没有红叉。激活操作用快捷键CtrlF3或者右键-Activate。激活成功后右键视图 - Open with Data Preview能看到表格式的数据预览。注意如果此时预览里一条数据都没有大概率是5.1节要讲的权限问题而不是SQL写错了。我建议在开发阶段临时先通过数据预览里的“最大记录数”和过滤条件验证数据准确性确认取数和口径没问题后再去做权限发布这样能减少变量之间互相干扰。4.3 发布视图并在Fiori中创建最终报表ADT里视图激活只是第一步要让Fiori端的Key User工具能发现它还需要把视图“发布”出去。右键视图 - Publish这一步会把视图元数据注册到系统的语义目录中之后你在Fiori Launchpad里打开“自定义分析查询”这个App新建查询时就能在数据源列表里看到它了。进入自定义分析查询后选择刚才发布的数据源然后配置查询。通常的设置包括选择要展示的字段、设置默认筛选值、指定行维度、列度量以及哪些字段允许拖动到筛选器里。配置完保存查询就变成一个可运行的报表对象。如果你想给它一个更直观的入口可以在“嵌入式SAP Analytics Cloud”App里基于这个查询创建故事加图表、交叉表拖到画布上就成为一个正式的仪表盘页面。整个过程里最容易翻车的一点是在ADT里改了视图字段并重新激活发布后Fiori端的查询没有同步刷新。这不是Bug而是很多场景下查询对象把字段集“缓存”进了自己的元数据。遇到这种情况你需要在查询里删掉旧字段再重新加回来或者干脆重建一个查询。这点经验我记了很久因为第一次遇到时我在前台折腾了快两个小时以为是权限问题。4.4 激活失败与数据预览异常的排查顺序CDS视图开发中激活和预览是最频繁的两个操作也是最容易卡住新手的地方。我总结了一套排查顺序先看ADT的错误列表。好多报错其实是语法或者依赖问题比如引用了未激活的视图、字段名拼写错误、SQL视图名冲突。再看依赖顺序。CDS视图之间有层级关系你改了下层视图上层视图必须先激活激活顺序反了就会报“对象依赖于不兼容版本”。检查权限注解。如果#CHECK却没有任何DCL数据预览通常是空如果#NOT_REQUIRED又把视图发布给了太多用户数据可能所有人可见。这个选择要慎重。最后才是SQL层面的问题。比如join出来的1:N关系导致数据行膨胀或视图漏了key导致重复行。我没有见过哪张稍微像样一点的CDS视图第一次就能干净激活。出错了不用紧张按这个顺序排查大多数问题十分钟以内能定位。5. 报表权限不是传参DCL控制行级数据可见性5.1 为什么CDS默认是“关了门”的很多第一次用CDS的人都有一个困惑我明明写了#CHECK也激活了视图为什么业务用户查询一点数据都看不到答案就藏在DCL里。当视图声明了权限检查系统就会要求你为它提供一个DCLData Control Language对象。DCL的作用不是简单的“有权限就让你看”而是在数据层定义行级过滤条件。这意味着就算用户通过了Fiori授权他最终能看到的行仍然要满足DCL里写的where条件。这个设计初看很麻烦但细想非常合理。云环境的数据隔离要求非常严格不同公司代码、销售组织、工厂的数据混在一个租户实例上绝不能让某个报表开发者忘记写权限检查时就把整张表的数据泄露出去。SAP用“默认关闭、显式开放”的机制逼着每个CDS开发者在发布数据之前就把可见性想清楚。我一开始觉得这道工序拖慢交付节奏后来反而感恩这个设计因为它帮我挡住了好几次潜在的数据越权事故。5.2 写一个DCL角色并理解其生效范围创建DCL对象的方法是New - Other - Data Control Language选择你要控制的视图。编辑器会生成模板核心是define role加grant select on ... where ...。举个简化的例子EndUserText.label: 销售订单报表访问控制 define role Z_I_SalesOrderReport { grant select on Z_I_SalesOrderReport where (CompanyCode 1000); }这个例子表达的意思是分配了这个角色的用户查询这张视图时只能看到公司代码为1000的数据。实际的DCL条件通常比这复杂常见做法是取用户权限属性aspect比如按销售组织、工厂、成本中心动态匹配这样不用给每个公司代码单独建角色。在定义角色时还会出现MappingRole这类概念简单说它是控制角色与权限对象之间的关系这里不展开太深记住“DCL做行级过滤PFCG角色做授权入口”就够了。一个反复强调的点如果一个视图被多个角色引用每个角色都可以有自己的DCL条件用户最终能看到的范围是他分配到的所有角色DCL条件的并集而不是交集。我见过有同事把并集理解成交集结果排查了半天为什么用户多看到了一部分不该看的数据。这个坑挺隐蔽的建议早一点搞清楚。5.3 业务用户分配角色后查不到数据的排查链路当用户反馈“报表能看到但是没有数据”时我按下面这个链路逐层排查确认ADT开发者直接查询时有数据。如果开发者自己都看不到那是视图本身或数据源问题与权限无关。确认Fiori用户分配了包含视图授权的业务角色。可以在Fiori的用户管理或角色管理里查看。检查用户是否有对应权限对象。DCL通常要配合底层权限对象例如销售组织、公司代码的授权值才能取到aspect值角色如果没配这些授权值DCL条件永远不满足。验证DCL条件本身。最简单的方式是临时用超集管理员身份或者把DCL条件放宽到一个明确的公司代码看看数据是否恢复。比较典型的现象是ADT里数据预览成功但同一张视图发布到Fiori查询里为空。这类问题90%出在第2和第3步要么角色没配要么权限对象的值和DCL条件不匹配。只要你养成了按这个链路查的习惯一般不会在权限问题上耗太久。6. 从开发租户走到生产租户传输、发布与升级兼容6.1 传输请求的完整生命周期云环境虽然把很多事务码禁用了但传输请求这套机制依然存在只是入口变了。在ADT里开发对象时你会把新对象或者修改过的对象关联到一个传输请求上。开发完成后在ADT的传输请求视图里选中请求执行Release请求就正式从开发系统“出发”了。接下来的导入动作在S/4HANA Cloud里通常不是像On-Premise那样由STMS手动点导入而是通过系统的软件组件管理功能完成。你需要确保质量或生产租户里也激活了对应的软件组件然后系统自动拉取或由管理员触发导入。导入完成后登录目标租户检查对象状态看看视图有没有激活、Fiori端能不能搜到。整个过程的关键是你要始终保持“包、传输请求、软件组件”三者的对应关系清晰因为云环境里一旦对象归属错乱后续导入失败的排查成本会非常高。6.2 基于标准接口视图做扩展避免升级带来“断裂”S/4HANA Cloud每季度都会自动升级标准功能这是相比本地部署最大的差别。本地部署你可能三年才升级一次而且可以挑时间、先在测试环境演练几个月云端没有这个商量余地。因此你的扩展对象必须对升级“免疫”。最重要的一条开发纪律就是优先基于SAP发布的接口视图I_开头的标准CDS视图做扩展不要直接select底层透明表。原因很简单底层表字段在SAP升级时是可能被重构、改名甚至删掉的你基于它们写的视图升级完成后的第一个激活周期就会报“未知字段”而系统升级不会等你去改代码。接口视图是SAP承诺的稳定契约字段长期兼容基于它扩展你的自定义视图才能在一次又一次季度升级中活下来。我在一个项目里见过客户直接基于EKKO底表写了一张采购视图季度升级后EKKO里一个字段的语义变了报表结果直接跟财务对不上账最后重写了三个视图这个教训记忆深刻。另外一个相关纪律是扩展视图不要贪多能用标准视图填充的字段就用标准字段不要自己造一套“内部命名映射”。视图链越长升级后需要检查的环节就越多。6.3 发布后的运维观测点报表交付不等于工作结束发布之后至少有几个点值得持续观察查询响应时间。同一个CDS视图数据量上来之后性能可能会明显下降。注意查看ADT里数据预览耗时同时关注Fiori查询的加载情况。用户反馈的数据差异。CDS视图发布后业务用户可能会发现某些字段的口径和你定义时预期不同不要急着改代码先回到视图的数据预览里验证口径。授权变更。用户调岗、权限回收时DCL条件里的aspect值会变化可能导致部分人突然看不到数据。这不是技术故障但确实值得运维团队记录。云环境的运维节奏和本地完全不同你不能随便停机、不能随便回滚所以把观测点前置是我现在做任何云端报表项目都会坚持的做法。7. 高频问题清单我在真实项目里踩过的坑7.1 Eclipse环境类Eclipse启动卡顿是第一个高频问题。ADT装完后Eclipse会加载大量插件内存分配不够时会频繁Full GC。处理方式很直接打开eclipse.ini把-Xmx参数从默认值调到2048m甚至更高同时确认你给了Eclipse独立的JDK而不是让它和别的应用共享一个低配JRE。几十个ABAP对象同时打开的时候内存不足会造成编辑器无响应这个优化能解决80%的卡顿。另一个是Java版本错乱。有些机器上装了好几个JDKEclipse默认选了低版本启动时报“Unsupported class version”。解决方法是显式在eclipse.ini里用-vm指定JDK17的安装路径。注意-vm参数必须放在--launcher.appendVmargs之前这个顺序很多人不知道。7.2 ADT连接与激活类连接云系统一直转圈多半是用户权限或者URL不对。URL这里要提醒一下ADT连接的是云系统的ABAP服务端点不是你平时打开Fiori的那条HTTPS地址。有时候管理员发来的邮件里给了两三个地址要选对。权限方面至少需要一个能读开发目录的业务用户不是所有人都有。激活时报“SQL view name already used”是命名规划没做好。底层SQL视图名是全租户唯一和CDS视图名、字段名属于不同的命名空间。我的建议是注册一张命名清单所有项目的底层SQL视图名都统一管理避免两个人同时开发时撞车。7.3 数据与权限类“ADT预览有数据Fiori查询没数据”这个案例我前面已经讲过核心是权限链路。还有一种情况是Fiori查询里搜索不到你的视图这时先检查视图是否已发布再检查注解里有没有#ANALYTICS。你可以把发布想象成给数据源贴了个“上架”标记不发布、贴错分类前端商店里自然找不到它。重复行是另一个让我花过时间的坑。CDS里join多个关联数据源后如果主键字段定义得不完整底层SQL会返回笛卡尔积或一对多膨胀预览里全是重复行。遇到这种情况先检查视图的key覆盖是否完整再检查关联条件的基数cardinality写没写对。记住key不仅仅是为了排序更是CDS保证每行可识别的基础轻易不要用“尽量少写key”这种老思维。最后说一个我现在的默认动作每次改完一个CDS视图我都会拉着QA一起过一个“权限三问”清单——这个视图谁能看到DCL条件按什么维度切分Fiori端有没有用户角色绑定哪怕是一个最简单的报表我也会把这三件事落到字面上。倒不是为了走流程而是云环境里数据权限出问题就是安全事故级别的谁也不想在季度审计时出状况。
返回列表