ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

零基础入门RAP Fiori:从CDS视图到增删改查应用实战

零基础入门RAP Fiori:从CDS视图到增删改查应用实战

简介:面向具备一定 ABAP 基础、希望系统掌握 RAP Fiori 与 ABAP RESTful 编程模型的开发者,这份教程资料以 SAP PRESS 专业书籍内容为依托,围绕企业级 Fiori 应用开发场景展开。内容涵盖 ABAP 语言基础与高级主题、Core Data Services for ABAP、基于 ABAP Objects 的测试驱动开发,以及 Fiori 应用的规划、开发环境搭建、测试与部署等最佳实践,并涉及身份验证、授权、数据加密等安全性与性能优化要点,同时给出《Complete ABAP》《ABAP 7.5 Certification Guide》等延伸阅读建议,便于读者由浅入深构建知识体系。资源包共 1 个 PDF 文件,大小约 18.31MB,适合作为案头参考随时查阅。目前已有 366 人学习,可作为 RAP Fiori 入门与进阶的参考资料。

1. 零基础也能上手的 RAP Fiori:从“这到底是什么”说起

刚听到 RAP Fiori 这个词,很多人的第一反应是:是不是又要学一门新语言?其实不是。你可以把它想成一套“企业应用的组装说明书”——后端用 ABAP 写业务逻辑,前端用 Fiori 做界面,中间靠一套叫 RAP(ABAP RESTful 编程模型)的规范把两边接起来。以前做一套带增删改查的业务应用,要分别折腾数据模型、服务发布、界面绑定好几摊事,现在 RAP 把这条链路收拢成一条流水线:定义数据、加行为、发布服务、生成界面,四步走完。这份教程资源就是围绕这条流水线展开的,适合完全没碰过 RAP、但想动手做出第一个 Fiori 应用的零基础新手。你不需要先成为 ABAP 高手,只要跟着步骤走一遍,就能明白每个环节在干什么。

2. 为什么值得学:RAP Fiori 到底解决了什么麻烦

2.1 先看一个“没有 RAP”的世界有多累

假设你要做一个“员工请假申请”的小应用。传统做法大致是这样:先在数据库层建表,再写一堆 ABAP 代码去查数据、校验数据、保存数据,然后手动拼一个 OData 服务把数据吐给前端,前端再单独写页面去调这个服务。每一步都要人肉对齐字段名、参数格式、错误码,任何一处改了,上下游都得跟着改。这种“各管一段”的模式,新手最容易翻车的地方不是逻辑难,而是对不上号——后端说字段叫LEAVE_DAYS,前端写成了leaveDays,页面就空白给你看。

RAP 的思路是把这些环节串成一条有约束的流水线。你用 CDS 视图定义“数据长什么样”,用行为定义声明“允许做什么操作”,用服务定义和服务绑定把能力暴露出去,最后 Fiori Elements 根据这些声明自动生成列表页和详情页。你少写很多胶水代码,也少了很多“对不上”的机会。对新手来说,约束反而是好事:它告诉你每一步该放什么、不该放什么,不用自己发明架构。

2.2 RAP 在 SAP 技术栈里站什么位置

把 SAP 的技术栈粗略分成三层来看:最底下是数据与计算层(HANA 数据库、ABAP 应用服务器),中间是服务层(Gateway、OData、RAP),最上面是体验层(Fiori、Launchpad)。RAP 正好卡在中间这层,它的职责是把后端的数据和业务能力,整理成前端能直接消费的服务。所以你学 RAP,本质上是在学“怎么把 ABAP 的业务逻辑包装成一个规范的服务”,这件事学会了,前端是 Fiori 还是别的消费方,都能接得上。

这里有个新手常混淆的点:Fiori 是界面风格和前端框架,RAP 是后端编程模型,两者不是一回事,但经常一起出现。教程里把两者放在一起讲,是因为实际项目里它们就是搭档关系——RAP 负责“有什么”,Fiori 负责“怎么展示”。

2.3 学会之后你能做出什么

最直接的产出是一个能跑起来的 Fiori Elements 应用:打开是一个列表页,点进去是详情页,能新建、能编辑、能删除,数据真实存进后端。这类“列表 + 详情”的形态覆盖了企业里大量管理类应用,比如订单管理、物料查询、申请审批。你不需要手写前端页面,界面是根据你在 CDS 视图里加的 UI 注解自动生成的。这意味着你把精力放在数据模型和业务行为上,界面是“顺带”出来的。

对零基础的人来说,这个正反馈很重要:你很快能看到一个像模像样的页面跑起来,而不是学了两周还在配置环境。先看到结果,再回头理解每一层为什么这么设计,学习动力会稳得多。

3. 动手前的准备:环境、工具和第一个 CDS 视图

3.1 你需要装什么、在哪写代码

RAP 开发的主战场是 Eclipse 里的 ABAP Development Tools(简称 ADT),不是 SAP GUI 里那个老式编辑器。新手第一步容易卡在“我到底该打开哪个软件”。记住:写 CDS 视图、行为定义、服务绑定,都在 ADT 里完成;SAP GUI 更多是给运维和传统事务用的,入门阶段可以先不碰。

你需要一个能访问 ABAP 系统的账号,以及装好 ADT 插件的 Eclipse。系统可以是公司或学校提供的开发机,也可以是试用环境。装好之后,在 ADT 里连上系统,你会看到一个按包(Package)组织的项目树。入门阶段建议自己建一个独立的开发包,别在公共包里乱改,这是血泪经验——改坏了别人的东西,排查起来非常麻烦。

提示:不同环境的菜单文字可能略有差异,但“新建 → 其他 → ABAP 相关对象”这个大路径是一致的,找不到时先在这个路径下翻。

3.2 第一个例子:定义一个最简 CDS 视图

我们从最小的东西开始:定义一个只读的 CDS 视图,把一张表里的几个字段暴露出来。下面这段代码放在一个新建的 CDS 数据定义里,语言标注为 ABAP CDS。

@AbapCatalog.sqlViewName: 'ZDEMO_EMP_V' @AccessControl.authorizationCheck: #NOT_REQUIRED define view ZDEMO_EmployeeView as select from zdemo_employee { key employee_id as EmployeeId, employee_name as EmployeeName, department as Department }

逐行解释一下。第一行的sqlViewName是给数据库层用的视图名,长度有限制,所以起得短一点;第二行关掉权限检查,入门阶段先不纠结授权,等跑通了再补。define view后面是你在 ADT 里看到的名字,as select from指向底层的物理表。大括号里是字段映射:左边是表里的原始字段,as后面是暴露给外面的别名,key标记主键。别名用驼峰写法,是为了后面生成界面时字段名更友好。

写完保存并激活(快捷键通常是 Ctrl+F3)。激活成功后,右键这个视图选择“数据预览”,能看到表里的数据以表格形式展示出来。这一步跑通,说明你的环境、语法、表名都没问题,可以往下走了。

3.3 给视图加上“能看懂”的界面注解

光有数据还不够,我们要让 Fiori Elements 知道怎么展示它。做法是在 CDS 视图里加 UI 注解。下面是在刚才基础上补的一小段。

@UI.lineItem: [ { position: 10, label: '员工编号' } ] key employee_id as EmployeeId, @UI.lineItem: [ { position: 20, label: '姓名' } ] employee_name as EmployeeName, @UI.lineItem: [ { position: 30, label: '部门' } ] department as Department

@UI.lineItem的意思是“在列表页里作为一列显示”,position控制列的先后顺序,label是列标题。你不需要写任何前端代码,这些注解就是给界面生成器的指令。加完注解重新激活,再通过服务绑定做预览,就能看到一个带列标题的列表页雏形。

这里新手最容易忽略的是:注解要加在字段别名那一行的正上方,位置错了不会报语法错,但界面就是不生效,属于典型的“玄学”问题。我第一次学的时候在这上面耗了半小时,后来养成习惯——加完注解先看预览,不对就检查注解挂在哪一行。

4. 把只读变成可操作:行为定义与服务发布

4.1 行为定义:告诉系统“允许做什么”

只读视图只能看,不能改。要让应用支持新建、编辑、删除,需要给数据模型加“行为”。行为定义是一个独立的开发对象,用声明式语法描述允许的操作。下面是一个最简版本。

managed implementation in class zbp_demo_employee unique; strict ( 2 ); define behavior for ZDEMO_EmployeeView alias Employee persistent table zdemo_employee lock master authorization master ( instance ) { create; update; delete; field ( readonly ) EmployeeId; }

managed表示这套增删改查的通用逻辑由框架托管,你只写特殊校验;persistent table指明数据最终落到哪张表;lock master是并发控制的声明,入门阶段照写即可。大括号里的create、update、delete就是开放的操作,field ( readonly )表示主键由系统生成、界面上不可编辑。这段声明本身不写业务逻辑,它更像一张“能力清单”,框架根据清单去调度。

4.2 服务定义与服务绑定:把能力暴露出去

行为定义好了,但外部还看不见。需要两步:服务定义(Service Definition)声明“暴露哪些视图”,服务绑定(Service Binding)声明“用哪种协议暴露”。服务定义很短:

@EndUserText.label: '员工服务' define service ZDEMO_EmployeeService { expose ZDEMO_EmployeeView as Employee; }

expose ... as ...把视图以别名形式放进服务里。接着建一个服务绑定,类型选 OData V2 或 V4,绑定到上面这个服务定义,然后点“激活”再点“发布”。发布成功后,绑定界面里会出现一个服务地址,点旁边的预览按钮,就能在浏览器里看到自动生成的 Fiori 应用:列表页有数据、有新建按钮、点行进详情页。

这一步是整个入门流程里最有成就感的时刻——你没写一行前端代码,一个能增删改查的应用就跑起来了。如果预览打不开,先检查服务绑定是否真的“发布”了(激活不等于发布),再看浏览器地址里的服务路径是否完整,这两个是新手最高频的卡点。

4.3 加一条自己的校验逻辑

框架托管的通用逻辑够用,但真实业务总有自己的规则。比如员工编号不能重复。做法是在行为实现类里写一个校验方法,然后在行为定义里用validation挂上去。入门阶段不用把整套行为实现语言吃透,先照着模板改一个校验,理解“声明挂载点 + 实现方法”这个配对关系就够了。这个模式贯穿 RAP 的很多扩展点:声明在哪里生效,实现在哪里写,两者靠名字对上。

5. 新手避坑:这几处翻车点提前知道

5.1 激活成功但预览空白

现象:CDS 视图激活没报错,服务绑定也发布了,打开预览却是空表格或白屏。原因通常是 UI 注解没生效,或者注解挂错了对象——比如注解加在了基础视图上,但服务暴露的是投影视图。解决:确认注解加在最终被expose的那个视图上,改完重新激活并重新发布服务绑定,别只刷新浏览器。

5.2 改了字段名,界面报错

现象:把 CDS 里的别名从EmployeeName改成EmpName之后,预览报字段找不到。原因:行为定义、注解、甚至前端消费方都可能引用了旧名字,改一处不会自动同步所有地方。解决:改名前先全局搜一遍旧名字,确认哪些地方引用;改完按“视图 → 行为定义 → 服务定义 → 服务绑定”的顺序逐层重新激活,顺序错了会出现中间层引用不到的情况。

5.3 新建按钮点了没反应

现象:列表页有“新建”按钮,点下去弹窗出不来或者保存报错。原因多半是行为定义里没开create,或者主键字段被设成了必填但界面没给输入框。解决:先看行为定义的大括号里有没有create;再看主键是不是readonly,如果是只读又要求必填,系统就不知道该填什么。入门阶段让主键由系统生成最省事。

5.4 在错误的编辑器里找对象

现象:在 SAP GUI 里翻半天找不到自己建的 CDS 视图。原因:RAP 相关对象主要在 ADT 里管理,GUI 里的事务码视图不完整。解决:统一在 Eclipse 的 ADT 里操作,养成“新建对象先想清楚在哪个工具里”的习惯,能省掉大量“东西去哪了”的困惑。

5.5 直接在生产或公共包里练手

现象:练着练着把别人在用的对象改坏了,或者自己的改动被别人覆盖。原因:没有隔离开发环境。解决:入门第一天就建自己的独立开发包,所有练习对象放里面。这个习惯看起来小题大做,但等到你因为一次误改排查一下午的时候,就知道值了。

6. 下一步学什么:从跑通一个例子到能独立做应用

跑通上面那条链路之后,你已经摸到了 RAP 的骨架。接下来的学习路径,我建议按“补基础 → 加复杂度 → 学规范”三段走,而不是一头扎进厚书里从第一页啃。

第一段,补 ABAP 和 CDS 的基础。你不需要把 ABAP 语法书通读,但至少要能看懂变量声明、内表操作、方法调用这几样,因为行为实现里的校验逻辑都是用 ABAP 写的。CDS 方面,重点练三件事:关联(association)怎么写、计算字段怎么加、权限控制注解怎么配。这三样覆盖了大多数业务视图的需求。练习方式很土但有效:拿你跑通的那个员工视图,试着关联一张部门表,把部门名称带出来显示在列表页上。

第二段,加复杂度。把单表的增删改查扩展成有父子关系的场景,比如“申请单 + 申请明细”,体会一下组合视图和行为树是怎么回事。再试着加一个自定义动作(action),比如“提交审批”,理解动作和普通增删改的区别。这一段会明显变难,翻车是常态,但每修好一个,你对框架的理解就深一层。

第三段,学规范和工程化。包括测试怎么写、传输请求怎么管、命名规范怎么统一。这部分不性感,但决定了你做的东西能不能交给别人维护。

阶段重点建议投入判断是否过关
补基础ABAP 语法、CDS 关联与计算字段两到三周能独立做出带关联字段的列表页
加复杂度组合视图、自定义动作、校验三到四周能做出父子结构的申请类应用
学规范测试、传输、命名持续别人能看懂并接手你的代码

关于学习资料,教程里提到的几本参考书可以按需查阅,但别指望从头读到尾——把它们当字典,遇到具体问题时翻对应章节效率更高。入门阶段最有效的学习方式永远是“改一个能跑的例子”,而不是“读完一章再动手”。

最后说个我自己的教训。我刚开始学的时候,总想先把所有概念搞明白再动手,结果在“什么是托管与非托管”这种问题上纠结了好几天,一个应用都没做出来。后来逼自己先照着例子跑通,跑通之后再回头问“为什么这样能行”,反而理解得快。从那以后我每次学新东西,都强制自己先做出一个最小可运行版本,再谈深入。希望这个习惯也能帮到你,先从跑通那个员工列表页开始,剩下的路会越走越清楚。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进