关于 abap-cloud
abap-cloud 是面向 ABAP Cloud 开发者及 SAP 扩展评估团队的开发指南,介绍 clean core A–D 级别、开发模式选择、API 限制,以及在 ABAP Cloud 中使用未发布 API 的封装方式。
主要功能
- 01按 clean core A–D 级别分类扩展
- 02比较 ABAP Cloud 与经典 ABAP
- 03说明 API 访问限制
- 04指导封装未发布的 API
- 05查找已发布和经典 API 的分类
- 06提供 clean core 检查与整改指引
适用场景
- 01评估扩展的 clean core 级别
- 02选择 ABAP 开发模式
- 03查找未发布 API 的替代方案
- 04规划经典或内部 API 的封装
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ likweitan/ abap-skills --skill abap-cloud安装后在 Claude Code 中输入/abap-cloud确认已加载。
附带文件references/clean-core-levels.md
详细介绍
ABAP Cloud 和 Clean Core 级别概念
ABAP Cloud 编程模型开发指南,介绍如何使用 Clean Core 级别概念(A–D)对扩展进行分类,以及如何应用 Clean Core 原则。
术语说明:SAP 已将原有的 3 层可扩展性模型演进为 Clean Core 级别概念。3 层模型(Tier 1/2/3)已被取代,请改用 Level A、B、C、D。当前产品名称:SAP Cloud ERP(公有云)、SAP Cloud ERP Private(原名 S/4HANA Cloud Private Edition)、SAP Business AI Platform(包含 SAP BTP 功能)、SAP Build(专业代码和低代码工具,包含 ABAP Cloud)。
工作流
-
确定用户的使用场景:
- 了解 ABAP Cloud 的概念和限制
- 将扩展归类到某个 Clean Core 级别
- 在 ABAP Cloud 开发和经典 ABAP 开发之间进行选择
- 封装非已发布 API,以便在 ABAP Cloud 中使用
- 确定已发布 API 或经典 API 的替代方案
-
按 Clean Core 级别对扩展进行分类:
- Level A:仅使用已发布的 API 和扩展点(稳定性契约)
- Level B:使用经典 API 和经典框架(由 SAP 专家提名,无稳定性契约)
- Level C:使用 SAP 内部对象(通过变更日志有条件地符合 Clean Core)
- Level D:使用不建议的对象和模式(必须整改)
-
应用最低级别规则:扩展的级别由它使用的最低级别决定。调用一个内部对象的 Level A 扩展属于 Level C 扩展。
-
引导实现朝最高适用级别推进(优先考虑 Level A)。
Clean Core 级别概念
SAP 将扩展分为四个级别,类似于能效标签。Level A 是目标状态,体现了“优先使用 SAP Business AI Platform”的策略;Level D 必须整改。
| 级别 | 名称 | SAP 对象限定符 | 升级稳定性 | ATC 行为 |
|---|---|---|---|---|
| Level A | 使用 SAP Build 进行扩展 | [Released] SAP 远程 API、本地 API、扩展点 | 由稳定性契约保障 | 无检查结果 |
| Level B | 使用经典 API | [Classic] SAP API 和扩展点 | 由 SAP 专家提名,无正式契约 | 优先级 3(信息) |
| Level C | 访问内部对象 | [Internal] SAP 对象(未分类对象的默认值) | 升级不稳定;通过变更日志降低风险 | 优先级 2(警告) |
| Level D | 不建议 | [Not recommended] SAP 对象、扩展点、技术 | 风险高,技术债务重大 | 优先级 1(错误) |
Clean Core 状态:Level A = Clean Core · Levels B 和 C = 有条件符合 Clean Core · Level D = 不符合 Clean Core。
Level A — 使用 SAP Build 和 Joule Studio 进行扩展
仅使用具有稳定性契约的公开已发布接口和扩展点。
- 栈内:在 SAP Cloud ERP Private 中使用 ABAP Cloud 开发模型,采用已发布的本地 API(已发布的 CDS 视图、已发布的 BO 接口、已发布的扩展点),并结合关键用户可扩展性
- 并行扩展:在 SAP Business AI Platform 上使用 ABAP Cloud、CAP 或低代码/无代码工具(SAP Build、Joule Studio),使用已发布的远程 API
- 在 SAP Business Accelerator Hub、Cloudification Repository 或 ADT 中直接查找已发布的对象
- 注意:Level A 的覆盖范围并不涵盖 SAP Cloud ERP Private 的全部功能范围,也没有计划实现完整覆盖
"Level A: ABAP Cloud class using only released APIs
CLASS zcl_my_extension DEFINITION
PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS zcl_my_extension IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
"Released CDS view — no direct table access
SELECT FROM I_BusinessPartner
FIELDS BusinessPartner, BusinessPartnerName
INTO TABLE @DATA(partners)
UP TO 10 ROWS.
out->write( partners ).
ENDMETHOD.
ENDCLASS.
Level B — 利用经典 API
成熟、文档齐全且由 SAP 指定的经典 API和经典框架。没有正式的稳定性承诺,但长期以来可靠使用,并经过 SAP 内部质量保证。
- 典型示例:
BAPI_*函数模块、CL_GUI_ALV_GRID、未发布的 BAdI、用户/客户出口、SAP GUI 和 ALV 框架 - ABAP 语言版本为 Standard ABAP 的自定义对象属于 Level B,前提是它们仅引用已发布或经典对象
- 可供 Level A 代码使用的经典 API 封装属于 Level B
- 在 Cloudification Repository 的
objectClassifications_SAP.json和用于框架分类的 SAP Note 3578329 中识别经典 API - 经典 ABAP 开发推荐的软件组件:
HOME
Level C — 访问内部对象
SAP 内部对象,在技术上可访问,但未发布、未指定、未记录,也不支持客户使用。这是所有未另行分类的 SAP 对象的默认分类。
- 典型示例:直接调用内部函数模块/类、对 SAP 数据库表的读取访问
- 缓解措施:SAP 对象变更日志会标识在后续版本中可能发生不兼容变更的内部对象,从而可在升级前主动重构
- SAP 可能将内部对象重新分类为经典对象(→ Level B)或不推荐对象(→ Level D)
- 在 Cloudification Repository 中,具有已发布后继对象的对象会标记为
internalAPI
Level D — 不推荐
风险最高、技术债务最高。立即修复。
- 在 Cloudification Repository 中分类为
noAPI的 SAP 对象(例如RFC_READ_TABLE) - 对 SAP 对象的修改(包括通过手动更正应用的 SAP Note)
- 隐式和显式增强(源代码插件)
- 对 SAP 数据库表的直接写入访问
- 调用 SAP 程序中的表单例程
- 关键 ABAP 语句(内核调用、系统调用、编辑器调用、
EXEC SQL、数据库提示、报表/Dynpro 生成、nametab 导入/导出) - 实现标记为 SAP 内部的 BAdI
开发模型
SAP Cloud ERP Private 中两种并存的栈上开发模型:
| 方面 | ABAP Cloud 开发 | 经典 ABAP 开发 |
|---|---|---|
| Clean core | Level A | Level B(或使用内部/不推荐对象时为 C/D) |
| 语言版本 | ABAP for Cloud Development | Standard ABAP |
| 默认选择 | 是 — 适用于所有新的基于 ABAP 的扩展 | 仅在没有已发布 API 或 UI 为经典界面时使用 |
| 主导模型 | RAP | 经典框架(SAP GUI、ALV、Web Dynpro、SEGW、BOPF) |
| 强制执行 | 语法检查 + 运行时检查 | ABAP Test Cockpit(ATC)治理 |
| 软件组件 | 使用 ABAP for Cloud Development 语言版本的组件 | HOME 或现有经典组件 |
| IDE | ADT(必需) | ADT 或 SAP GUI |
| 开发者角色 | SAP_BC_ABAP_DEVELOPER_5 模板 | 标准开发者角色 |
访问规则
ABAP Cloud 对象只能访问:
- 同一软件组件中的自定义对象
- 已发布的 SAP 对象(已发布的 API)
- 经典软件组件中为 ABAP Cloud 开发发布的自定义对象(已发布的自定义 API)
经典 ABAP 对象应仅访问:
- 自身软件组件中的自定义对象
- 已发布的 SAP API 以及经典 SAP API
- 经典和 ABAP Cloud 软件组件中的自定义对象
通过授权强制执行该模型
授权对象 S_ABPLNGVS 控制开发人员能否在 Standard ABAP 中创建对象,还是只能在 ABAP for Cloud Development 中创建对象。使用它创建专用的 ABAP Cloud 开发人员角色。
ABAP for Cloud Development 中的关键限制
- 只能使用已发布的 SAP API(C1 合约)
- 不得直接访问 SAP 表的数据库表(应使用已发布的 CDS 视图)
- 不得使用经典 dynpro、选择屏幕或依赖 SAP GUI 的语句
- 不得使用
CALL TRANSACTION、SUBMIT、AUTHORITY-CHECK(应使用CL_ABAP_AUTHORIZATION) - 不得使用经典 BAdI 或用户出口(只能使用已发布的 BAdI)
- 不得使用
EXEC SQL或原生 SQL(应使用 ABAP SQL 或 AMDP) - 不得使用未发布的函数模块
- 不得使用
INCLUDE程序 - 不得使用
WRITE或经典列表输出 - 使用
if_oo_adt_classrun输出到控制台
包装器模式
如果所需 API 尚未发布,请在经典 ABAP软件组件中构建包装器,并将其发布供 ABAP Cloud 开发使用。使用该 API 的 ABAP Cloud 代码保持整洁;包装器将级别违规限制在单一位置。
包装器级别分类(摘自白皮书):
- 围绕经典 API(B 级对象)的包装器 → 包装器为 B 级
- 围绕内部对象(C 级对象)的包装器 → 包装器为 C 级
- 围绕不建议使用的对象的包装器 → D 级,不要构建
"Classic ABAP software component: wrapper class released for ABAP Cloud
"Wrapping BAPI_PO_CREATE1 (a classic API) → Level B
CLASS zcl_wrapper_material DEFINITION
PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES zif_material_reader.
"Release with C1 contract in ADT → API State tab
ENDCLASS.
CLASS zcl_wrapper_material IMPLEMENTATION.
METHOD zif_material_reader~get_material.
"Access non-released API internally
SELECT SINGLE * FROM mara
WHERE matnr = @iv_matnr
INTO @DATA(ls_mara).
"Map to released structure
rs_material = VALUE #(
matnr = ls_mara-matnr
mtart = ls_mara-mtart
matkl = ls_mara-matkl ).
ENDMETHOD.
ENDCLASS.
包装器指南
- CDS 视图:在未发布的 SAP CDS 视图之上创建自定义 CDS 视图并发布。关联目标和值帮助视图可能也需要包装器。如果不存在 SAP CDS 视图,则包装数据库表。
- 类/接口:包装未发布的 FM 或类。不要复制未发布的数据类型——应通过包装器公共部分中的
TYPES声明对其进行包装,这样只需发布包装器。 - 授权:经典 API 通常会检查未发布的授权对象,而这些对象在 ABAP Cloud 中不可用。PFCG 角色可以混用已发布和未发布的授权对象。发布包装器时,请为其提供
SU22数据,并针对指定用途创建SU22变体。 - ATC 豁免:包装可将 N 项检查结果减少为 1 项——在包装器上创建单个细粒度豁免,而不是为每种用途各创建一项。这是 SAP 针对内部对象的推荐做法。
- 弃用包装器:SAP 发布 API 后,替换包装器并将代码迁移到 ABAP Cloud。
通过 RFC 代理实现包装(与堆栈上部署并行)
"Side-by-side consumer calls a released RFC wrapper
DATA(lo_dest) = cl_rfc_destination_provider=>create_by_comm_arrangement(
comm_scenario = 'Z_MY_COMM_SCENARIO'
service_id = 'Z_MY_OUTBOUND_SRV' ).
CALL FUNCTION 'Z_WRAPPER_FM'
DESTINATION lo_dest->get_destination_name( )
EXPORTING iv_param = lv_value
IMPORTING ev_result = lv_result.
对象分类查询
| 方法 | 描述 |
|---|---|
| 云化代码库 | objectClassifications_SAP.json — 经典 API、noAPI、内部 API 分类 |
| 云化 API 查看器 | 访问 https://sap.github.io/abap-atc-cr-cv-s4hc/ 浏览 |
| SAP Business Accelerator Hub | 提供具有稳定性契约的已发布远程和本地 API |
| ADT:已发布对象搜索 | 使用 api: 前缀搜索(例如 api:cl_*),或通过 Project Explorer → 已发布对象 |
| ATC clean core 检查 | SYCM_USAGE_OF_APIS、SYCM_ALLOWED_ENH_TECHNOLOGY、CI_SEARCH_CUST_MODIFICATIONS |
| SAP Note 3578329 | 经典技术、复用服务和应用框架的分类 |
| SAP Note 3565942 | 提供 Usage of APIs 和 Allowed Enhancement Technologies ATC 检查 |
| released-abap-classes 技能 | ABAP Cloud 的常用已发布类 |
| XCO Library | XCO_CP_* 类提供适用于云环境的替代方案 |
经典 API 分类适用于以下对象类型:函数模块(FUNC)、类(CLAS)、接口(INTF)、CDS 视图(STOB)、BO 接口(BDEF)。用作数据类型的 DDIC 对象不分类也不检查;仅检查对 SAP 表的 SQL 访问。
常见的非已发布 → 已发布替代方案
| 非已发布(级别 C/D) | 已发布替代方案(级别 A) |
|---|---|
AUTHORITY-CHECK | CL_ABAP_AUTHORIZATION=>check_authorization() |
sy-uname | cl_abap_context_info=>get_user_technical_name() |
sy-datum / sy-uzeit | cl_abap_context_info=>get_system_date/time() |
cl_gui_frontend_services | 不可用 — 请改用 Fiori UI |
CALL TRANSACTION | RAP 操作或 Fiori 导航 |
SUBMIT ... AND RETURN | 通过 CL_APJ_RT_API 创建后台作业 |
直接 SELECT SAP 表 | 已发布的 CDS 视图(I_* 视图) |
CONVERSION_EXIT_* | CL_ABAP_CONV_CODEPAGE、域固定值 |
BAPI_* 函数模块 | 已发布 API 或 RAP BO 消费(否则为级别 B) |
RFC_READ_TABLE(noAPI) | 已发布的 CDS 视图或已发布的远程 API |
经典 MESSAGE 语句 | 通过 REPORTED 发送 RAP 消息 |
用例 → 级别映射
| 类别 | 用例 | 级别 |
|---|---|---|
| 扩展 | 通过已发布扩展 include 添加自定义字段 | A |
| 扩展 | 实现已发布的 SAP BAdI | A |
| 扩展 | 通过未发布扩展 include 添加自定义字段 | B |
| 扩展 | 通过传统 append 在 DB 表上添加自定义字段 | C |
| 扩展 | 实现用户/客户出口(例如 SAPMV45A) | B |
| 扩展 | 实现未发布的 SAP BAdI | B |
| 扩展 | 实现标记为 SAP-internal 的 BAdI | D |
| 扩展 | 扩展基于 RAP 的 SAP Fiori 应用 | A |
| 扩展 | 扩展 SEGW / BOPF / UI5 SAP Fiori 应用 | B |
| 扩展 | 扩展 SAP GUI 事务 | B |
| 自定义应用 | 自定义的基于 RAP 的 SAP Fiori 应用(核心范围) | A |
| 自定义应用 | 自定义 SEGW / BOPF / UI5 应用 | B(优先选择 RAP) |
| 自定义应用 | 旧版 UI 应用(带 ALV 的 ABAP 报表、Web Dynpro) | B(应予以避免) |
| 自定义应用 | 基于 SE54 的 BC UI | B(优先选择基于 RAP 的 BC 应用) |
| 封装 | 围绕未发布 SAP 对象(例如 BAPI)的封装类 | 如果被封装对象是传统 API,则为 B;否则为 C |
| 封装 | 为未发布 SAP 表或 CDS 视图创建封装 CDS 视图 | 如果被封装对象是传统 API,则为 B;否则为 C |
| 修改 | 带手动修正的 SAP Note | D(核心中一旦具备相应能力就重置) |
| 修改 | 业务驱动的修改 | D(仅限特殊情况) |
关键用户扩展性与开发者扩展性
使用已发布扩展点时,两者均属于级别 A:
- 关键用户扩展性(无代码/低代码):自定义字段、自定义逻辑、自定义 CDS 视图、自定义业务对象,以及通过 Fiori 应用创建自定义分析查询。对于紧密耦合的扩展,请从这里开始——使用事务
SEEA/ 扩展注册表查找已注册的扩展点。 - 开发者扩展性(ABAP Cloud):当关键用户扩展性无法满足需求时使用。在 ADT 中通过 RAP 实现完整生命周期管理。
最佳实践
- 以级别 A 为目标——“优先采用 SAP Business AI Platform”,在栈内使用 ABAP Cloud
- 按使用的最低级别分类——一个内部对象就会使整个扩展归为级别 C
- 立即消除级别 D——修改、隐式增强、表写入、noAPI 对象
- 尽量减少级别 C——用已发布或传统 API 替换内部对象;监控 SAP 对象的变更日志
- 务实地接受级别 B——传统 API 在实践中具有升级稳定性;不要强行进行不必要的重写
- 进行封装,而非分散使用——一个封装配一个 ATC 豁免,胜过多处直接使用
- 通过 ATC 管理——使用全局检查变式,对于优先级 1 和 2 的发现项,阻止传输发布
- 拆分软件组件——ABAP Cloud 组件与用于传统开发的
HOME
输出格式
在解答有关 ABAP Cloud / clean core 的主题时,请按以下结构组织回复:
## ABAP Cloud Guidance
### Context
- Clean core level: [A / B / C / D] (classified by the lowest level used)
- Development model: [ABAP Cloud / Classic ABAP]
- Language version: [ABAP for Cloud Development / Standard ABAP]
- Target platform: [SAP Cloud ERP / SAP Cloud ERP Private / SAP Business AI Platform]
### Recommendation
[Guidance on the approach and how to reach a higher level]
### Code Example
[ABAP code following clean core principles]
### Released API References
- [List of relevant released or classic APIs used]
### Expected ATC Findings
- [Priority and check name, if any]
参考资料
- Clean Core 可扩展性白皮书(级别概念):https://www.sap.com/documents/2023/11/2e6b5b98-957e-001e-9e9e-cbd0b2b1f1e0.html
- 使用基于 ABAP 的扩展扩展 SAP S/4HANA(指南):https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/extend-sap-s-4hana-in-the-cloud-and-on-premise-with-abap-based-extensions/ba-p/13500561
- SAP Cloudification Repository:https://github.com/SAP/abap-atc-cr-cv-s4hc
- Cloudification Repository Viewer:https://sap.github.io/abap-atc-cr-cv-s4hc/
- SAP Business Accelerator Hub:https://api.sap.com/
- ABAP Cloud 速查表:https://github.com/SAP-samples/abap-cheat-sheets
- Clean Core 指南:https://help.sap.com/docs/abap-cloud
- SAP Note 3578329 — 经典技术分类
- SAP Note 3565942 — Clean Core ATC 检查
详细参考
- Clean Core 级别详情:阅读
references/clean-core-levels.md,了解完整的逐级比较、决策矩阵、治理设置和补救优先级
相关技能
- abap-cloud-migration:用于对现有自定义代码进行基于级别的补救
- atc-cloudification:用于配置 ATC Clean Core 检查和级别治理
- released-abap-classes:用于查找 Level A 已发布 API 的替代方案
- authorization-iam:用于 ABAP Cloud 中的授权和封装器
SU22处理 - badi-enhancement:用于对 BAdI 和增强技术进行级别分类