news 2026/4/27 2:14:34

SAP-Fiori:系列(4)Gateway ODATA (V2) CURD之Delete

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SAP-Fiori:系列(4)Gateway ODATA (V2) CURD之Delete

在 OData V2 服务中,DELETE操作用于删除指定的实体资源。本文将从客户端调用、HTTP 协议细节、ABAP 后端实现、常见错误等方面全面介绍 OData 的删除功能。如果你已经熟悉了 OData 的查询(GET)和创建(POST),DELETE 会非常简单——只需知道目标资源的 URI,发送一个带正确认证和 CSRF token 的 DELETE 请求即可。


1. DELETE 操作的核心概念

  • HTTP 方法DELETE

  • URI 格式/sap/opu/odata/<服务路径>/<实体集>(<主键值>)

  • CSRF 防护:SAP Gateway 默认要求所有写操作(POST、PUT、DELETE)都必须携带有效的X-CSRF-Token头。


2. 完整的 DELETE 请求示例

假设我们要删除ZUSERSetId为 3的用户。

2.1 请求 URL

http://主机:端口/sap/opu/odata/SAP/ZXKJ_USER_SRV/ZUSERSet(3)

2.2 请求头

DELETE /sap/opu/odata/SAP/ZXKJ_USER_SRV/ZUSERSet(5) HTTP/1.1 Host: X-CSRF-Token:

注意:DELETE 请求通常不需要请求体(body)。只需 URI 和头部即可。

2.3 操作示例

这是系统存在的ZUSERSetId为 3的用户

删除成功示例

2.4 成功的响应

  • HTTP 状态码204 No Content(最常见,表示删除成功且无内容返回)

  • 响应体:空

某些服务也可能返回200 OK并在响应体中包含被删除实体的元数据,但 OData V2 规范推荐使用204


4. ABAP 后端实现(SAP Gateway)

在 SAP 系统中,DELETE 操作的逻辑实现在DPC_EXT类的DELETE_ENTITY方法中。

重写DELETE_ENTITY方法代码如下:

DATA: ls_key TYPE zkjuser, lv_id TYPE int1. " 1. 从 iv_key_tab 中提取主键值 READ TABLE it_key_tab INTO DATA(ls_key_tab) WITH KEY name = 'Id'. IF sy-subrc = 0. lv_id = ls_key_tab-value. ELSE. RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception EXPORTING textid = /iwbep/cx_mgw_busi_exception=>business_error message = '主键 Id 未提供'. ENDIF. " 2. 检查记录是否存在(可选,DELETE 语句本身会检查) SELECT COUNT(*) FROM zkjuser INTO @DATA(lv_mandt) WHERE id = @lv_id . IF sy-subrc <> 0. RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception EXPORTING textid = /iwbep/cx_mgw_busi_exception=>business_error message = |用户 Id = { lv_id } 不存在|. ENDIF. " 3. 执行删除 DELETE FROM zkjuser WHERE id = @lv_id. IF sy-subrc = 0. COMMIT WORK. ELSE. ROLLBACK WORK. RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception EXPORTING textid = /iwbep/cx_mgw_busi_exception=>business_error message = '删除失败,请重试'. ENDIF.

关键点解析

  • 主键提取:参数it_key_tab是一个表,每行包含字段名(name)和值(value)。你需要根据实体定义,从其中提取所有主键字段。

  • 存在性检查:可选但推荐,可以给出明确的业务错误提示(如“记录不存在”)。

  • 事务提交:删除成功后务必COMMIT WORK,失败则ROLLBACK WORK

  • 异常抛出:用RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception返回错误,客户端会收到400 Bad Request500状态码及错误消息。


5. 完整的 OData CRUD 对照表

操作HTTP 方法URI 示例常见状态码是否需要请求体CSRF Token
CreatePOST/ZUSERSet201是 (Atom/JSON)必须
ReadGET/ZUSERSet(3)200不需要
UpdatePUT / MERGE/ZUSERSet(3)204必须
DeleteDELETE/ZUSERSet(3)204必须

注意:UPDATE 既可以通过 PUT(完整替换)实现,也可以通过 MERGE/PATCH(部分更新)实现,具体取决于服务配置。


6 . 总结

如果你已经完成了 OData 的查询和创建功能,实现删除会非常顺畅。希望本文能帮助你快速掌握 OData DELETE 的使用。如果有任何问题,欢迎在评论区留言讨论!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 2:14:33

AI容器化进入“毫秒级弹性”时代:Docker AI Toolkit 2026实时推理沙箱技术解析(eBPF+WebAssembly双引擎架构)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI容器化“毫秒级弹性”的技术范式跃迁 传统AI服务部署长期受限于静态资源配额与分钟级扩缩容延迟&#xff0c;而现代推理负载呈现强突发性、低时延敏感、多模型混部等特征。容器化不再仅是封装手段&am…

作者头像 李华
网站建设 2026/4/27 2:13:46

机器学习数据准备框架:提升模型效果的工程实践

1. 机器学习数据准备框架全景解读在真实业务场景中&#xff0c;数据科学家们80%的时间都消耗在数据准备环节。这个被戏称为"脏活累活"的阶段&#xff0c;实际上决定着模型效果的上限。不同于算法调参有明确的评价指标&#xff0c;数据预处理更像是一门需要系统化思维…

作者头像 李华
网站建设 2026/4/27 2:12:20

MySQL 远程访问实战:从基础操作到真实踩坑记录

MySQL 远程访问实战&#xff1a;从基础操作到真实踩坑记录本文记录了一次完整的 MySQL 远程连接踩坑过程&#xff0c;涵盖基础命令行操作、认证插件报错、IP 被拉黑等问题及解决方案。一、MySQL 基础命令行操作 1.1 登录与退出 # 本地登录&#xff08;默认走 localhost&#xf…

作者头像 李华
网站建设 2026/4/27 2:10:10

使用yubikey-agent实现硬件级SSH密钥安全管理与无缝认证

1. 项目概述&#xff1a;为什么你需要一个硬件密钥管理代理 如果你是一名开发者&#xff0c;或者日常工作中需要频繁使用SSH密钥访问远程服务器、Git仓库&#xff0c;那么你一定对管理那一堆 id_rsa 、 id_ed25519 私钥文件感到头疼。它们要么躺在 ~/.ssh 目录里&#x…

作者头像 李华
网站建设 2026/4/27 2:10:01

医疗电子设备核心技术:信号处理与低功耗设计

1. 医疗电子设备的核心技术解析医疗电子设备的核心在于精准的信号采集与处理&#xff0c;这依赖于高性能的模拟前端和数字信号处理技术。作为一名在医疗电子领域工作多年的工程师&#xff0c;我见证了从传统分立式设计到现代高度集成方案的演变过程。医疗设备对信号链的要求极为…

作者头像 李华
网站建设 2026/4/27 2:09:57

机器学习商业化:技术变现路径与实战经验

1. 项目概述"Machine Learning for Money"这个标题直击当下最热门的两个领域交汇点&#xff1a;机器学习技术与商业变现。作为一名在数据科学和金融科技交叉领域工作多年的从业者&#xff0c;我见证过太多优秀的机器学习模型因为缺乏合理的商业逻辑而束之高阁&#x…

作者头像 李华