当前位置: 首页 > news >正文

SAP-BTP :(9)RAP-草稿处理

一、草稿处理的核心价值

草稿(Draft)是 RAP 为企业级应用提供的一种关键机制,它允许用户在不立即提交数据的情况下长期编辑一个业务对象实例,并且可以临时保存编辑状态离开后返回继续编辑,最后一次性激活。

  • 传统无草稿 BO:每次修改立即进入事务缓冲区,一旦离开页面,未提交的更改即丢失。

  • 启用草稿后:编辑内容被持久化到专门的草稿表,支持草稿创建、编辑、激活、删除等操作。

草稿机制使得 RAP 应用能够支持复杂的、多步骤的表单填写场景,例如旅行申请、订单录入等。

二、启用草稿所需的核心构件

构件作用
草稿表(Draft Table)存储草稿数据,与激活数据表分离;由 RAP 框架完全管理
行为定义中的with draft开启 BO 的草稿能力
关联上的with draft允许通过关联导航到草稿实例
draft determine action Prepare激活前的校验触发点
lock master total etag并发控制,使用 ETag 字段防止版本冲突
投影中的use draft将草稿能力暴露给服务消费者

三、案例步骤整理

Step 1 – 在基础业务对象中启用草稿

1.1 添加with draft声明

在基础行为定义ZI_RAP_Travel_####的头部,managed;之后添加:with draft;

1.2 指定草稿表
  • Travel 实体:draft table zrap_dtrav_####

  • Booking 实体:draft table zrap_dbook_####

1.3 生成草稿表
  • 光标放在表名上,按Ctrl+1(Quick Fix),选择生成草稿表。

框架自动根据实体模型生成对应的草稿表结构。

  • 注意:以后修改 BO 数据模型后,可再次用 Quick Fix 重新生成草稿表(会更新表定义)。

1.4 调整关联声明(解决警告)
  • Travel 实体中的_Booking关联改为:association _Booking { create; with draft; }

  • Booking 实体中的_Travel关联改为:association _Travel { with draft; }

  • 原因:草稿启用后,关联必须显式标记with draft,才能在草稿实例间导航。

1.5 添加总 ETag 锁定:lock master total etag LastChangedAt
  • 作用:使用LastChangedAt字段作为乐观锁版本标识,防止草稿基于过期的激活实例激活。

1.6 指定draft determine action Prepare触发的校验

  • 意义:当用户点击“激活”时,框架会先调用Prepare动作,在此处执行所有需要检查的校验,并将消息保存为状态消息(即使激活失败,用户返回后仍能看到错误提示)。


Step 2 – 在投影业务对象中暴露草稿

2.1 添加use draft

在投影行为定义ZC_RAP_Travel_####的头部添加:use draft;

2.2 调整投影关联
  • Travel 投影:use association _Booking { create; with draft; }

  • Booking 投影:use association _Travel { with draft; }

2.3 针对 OData V2 的特殊处理
  • 如果使用 OData V2,需要注释掉use etag

    因为 OData V2 的 Fiori Elements 尚不支持 ETag 与草稿同时使用。


Step 3 – 调整行为实现(授权控制)

在行为池类ZBP_I_RAP_TRAVEL_####中:

  • 找到get_authorizations方法。

  • requested_authorizations条件判断中,取消注释与%action-Prepare%action-Edit相关的代码行。

  • 这样,草稿相关的两个内置动作(PrepareEdit)也会受到授权检查。


Step 4 – 预览与测试

启动 Fiori 应用后,你会看到:

  • 过滤器区域新增“编辑状态”(Editing Status)筛选。

  • 创建新对象时,在对象页面编辑字段时,你会立即在底部看到草稿保存指示器。

在后端查看相关的草稿表,可以看到目前已输入的所有值。

四、关键设计思想

1. 草稿表完全由框架管理

  • 开发者只需声明draft table xxx,无需手动编写任何 DDL 或 DML。

  • 框架自动处理草稿的创建、读取、更新、激活、删除。

2. 状态消息持久化

  • 启用草稿后,校验失败的消息会作为状态消息写入草稿表,而不是仅存在于当前会话。

  • 用户关闭应用再打开,依然能看到之前的错误提示 —— 极大提升用户体验。

3. 关联的草稿导航

  • 关联必须显式标记with draft,才能在主实体与子实体的草稿实例之间导航。

  • 这避免了非草稿关联错误地指向激活实例。

4. ETag 乐观锁

  • 使用lock master total etag确保激活操作基于最新的激活实例版本。

  • 如果草稿基于旧版本,激活时会触发冲突处理(通常提示用户刷新)。

5. Prepare 动作作为校验集中点

  • 在激活 OData 请求的单独 changeset 中调用Prepare,将校验与激活分离。

  • 这样即使校验失败,也已保存的状态消息仍然可以返回给前端。


五、与无草稿 BO 的主要区别

特性无草稿有草稿
编辑方式直接修改事务缓冲区持久化到草稿表
离开页面后修改是否保留❌ 丢失✅ 保留
状态消息持久化❌ 仅当前会话✅ 存入草稿表
on-modify determination立即在缓冲区执行立即在草稿实例执行
on-save determination在 COMMIT 时执行在激活时执行
并发控制数据库锁(短暂)ETag + 草稿锁(可长时间)

六、总结一句话

启用草稿处理只需在行为定义中添加with draft、指定草稿表、调整关联及 ETag,并在投影中暴露use draft,即可让 Fiori 应用获得完整的草稿编辑、状态持久化和激活前校验体验。

http://www.jsqmd.com/news/837870/

相关文章:

  • 护发精油产品测评:6款来自护发精油排行榜的真实体验 - 速递信息
  • ChanlunX缠论插件技术解析:C++算法实现与通达信集成方案
  • 3PEAK思瑞浦 TPA1882-SR SOP8 运算放大器
  • 3步快速上手YimMenu:GTA V最强安全增强菜单实战指南
  • 2026年家装家居建材行业GEO服务商怎么选?看服务适配性与落地经验 - 小李说家居
  • ARM CADI接口调试与性能分析实战指南
  • RK3588核心板赋能无人机智能飞控:异构计算与AI视觉实践
  • 智能音箱麦克风阵列拾音优化:手把手调整ES7210四通道ADC的增益与寄存器配置
  • 效率引擎剖析:现代公众号图文编辑器的核心组件与实现逻辑 - 行业产品测评专家
  • SD-PPP:Photoshop AI插件完整解决方案,5分钟掌握AI绘图工作流
  • 探索高效图片下载利器:如何用Python一键获取海量图片资源?
  • 便携式/超声波/水冷壁测厚仪品牌推荐:从源头厂家到品质口碑的全方位选购指南 - 品牌推荐大师
  • 5分钟搭建Windows离线语音转文字系统:TMSpeech让你的会议记录零压力
  • 构建本地化数字生活日志系统:从数据采集到个性化分析
  • MAA明日方舟助手:重新定义游戏日常的智能伴侣
  • 从Axure原型到智能运营:构建共享充电桩后台管理系统的核心模块与实战场景
  • 3PEAK思瑞浦 TP27-SR SOP8 运算放大器
  • Pixelle-Video:从零到一的AI视频生成终极指南
  • Java分布式追踪零侵入实践:SpecialAgent原理、部署与生产调优
  • 高效智能工具:三步把B站视频变成文字稿,让学习笔记轻松搞定
  • 2026天津装修:靠谱家装的三大核心趋势 - 速递信息
  • NotebookLM上传失败?5个被官方隐藏的文档格式适配技巧,90%用户都不知道
  • 如何在Windows上快速安装ViGEmBus虚拟手柄驱动:终极指南
  • 通过curl命令直接调用Taotoken大模型API的排错指南
  • 3步掌握浏览器视频下载神器:猫抓扩展的完整使用指南
  • 魔兽争霸3卡顿掉帧如何解决?三步优化让你的游戏焕然新生
  • KMS智能激活工具:3分钟永久激活Windows和Office的终极指南
  • 大模型推理全链路拆解
  • 强力解锁Figma中文界面:设计师效率提升的母语解决方案
  • 3个实用技巧解决Windows音频均衡难题:Equalizer APO免费配置指南