☰
S/4HANA升级:从Released API到Clean Core的落地指南
2026/10/9 6:59:45 网站建设 项目流程

两年前那次S/4升级评估会,我坐在客户会议室里,集成架构师用很肯定的语气说:“我们的接口全部是标准BAPI,升级不会有问题。”我点了点头,然后追问了一句:“那你们物料主数据接收,是不是也在凌晨批处理里直接UPDATE了MARA/MARC表?”会议室安静了几秒钟。

我不用看代码都知道答案,因为这种情况几乎每个从ECC迁到S/4的老项目里都存在。今天想认真聊两个词:Released API和Clean Core。这两个概念看起来是技术名词,实际上决定了S/4HANA项目是“有能力持续演进的数字化底座”,还是一个“把十年前的问题原封不动搬进新房子”的定时炸弹。这篇文章会从接口契约、核心扩展边界、工具检查、落地路径和项目治理几个维度展开,适合正在做S/4升级规划、或者已经上了S/4但被自定义代码拖累的团队参考。

1. Released API 到底“释放”了什么:稳定契约与SAP的承诺边界

1.1 从“能用”到“保证不坏”:API开放的本质是契约变化

在ECC时代,做系统集成是一件非常“自由”的事情。自由到什么程度?我见过不少项目组,业务说要同步一个物料主数据,开发人员第一反应是:要不要直接写个ABAP程序,凌晨对MARA、MARC、MARD这些标准表做UPDATE。当时这么做,技术上完全“能用”——能跑,能出结果,业务也验收了。甚至有人为了省事,直接绕过BAPI,用OPEN SQL去改标准业务表,还把这种方案整理成项目组的“标准集成模板”。

但“能用”和“可以信赖”是两回事。

S/4HANA推出之后,SAP对接口的管理逻辑发生了根本性变化。最大的变化是:接口不再只是“文档里的一段描述”,而是一个有明确生命周期、有偿付保证的契约。SAP开始把API划分为不同的成熟度状态:Released、Partner、Internal、Deprecated。其中只有标了Released的接口,SAP才承诺在后续版本中保持兼容,在未来至少两个版本内不会移除,并且会通过版本化管理演进。Internal接口,意思是“我自己内部用,今天能用不代表明天还在”。Deprecated则更直接——“我们已经不推荐了,请尽快迁移,迟早要删”。

这里的关键不是“能不能调用”,而是“你把自己的系统建立在什么契约之上”。调用Released API,就像你在一份正规合同里签了字,对方违约要赔钱;调用Internal对象,相当于你租了个没有合同的房子,房东随时可以说房子要拆了,让你赶紧搬走。很多老项目的痛点恰恰在这:当时调用的BAPI、函数模块、结构体,在S/4里已经被划成了Internal甚至Deprecated,但周边系统还在跑,集成代码还在用。你以为是“标准接口”,其实早就是“违规搭建”。

1.2 常用接口类型快速对照与选型建议

在实际项目里,最常见的集成方式有四种:OData/REST接口、SOAP Web Service、BAPI/RFC调用、直接数据库表操作。它们在S/4HANA时代的命运完全不一样,我用一张表来对比:

集成方式接口状态SAP兼容承诺适用场景风险等级
OData / REST API多数已Released稳定,版本化管理前端应用、中间件、云集成低
SOAP Web Service多数已Released稳定,需关注WSDL版本企业服务总线、外部系统连接低
BAPI / RFC部分Released,部分已废弃需逐一核实状态老系统兼容、已有架构延续中
直接UPDATE标准表 / SELECT内部对象不可接受无承诺,升级即碎没有任何合理业务场景高

这不是说BAPI/RFC完全不能用,而是说选型时必须先核实状态。我见过不少团队在2023年了还在新项目里用BDC(Batch Input录屏)做大批量数据导入,理由是“一直这么干的”。实际上S/4HANA里很多主数据导入已经有标准的OData接口了,比如物料主数据可以用接口级联批量创建,效率和可控性都远高于录屏方式。新开发的集成功能,如果不优先选择Released API,那基本等于主动给自己挖坑。

1.3 Released API 的现实运作机制

要真正理解Released API,必须看到它后面的那套机制:API Hub、版本号、弃用策略。

SAP把所有对外发布的API统一放在SAP API Business Hub上(api.sap.com),你可以查到一个接口的状态、版本、调用示例、限流要求。更重要的是,SAP采用语义化版本管理(比如v2、v4),当接口有非兼容性变更时会发布新版本,旧版本继续保留一段时间,给了集成方明确的迁移窗口。这套机制让“升级系统”变成一件可预期的事:你不需要每天都在担心标准功能包更新会不会把接口搞没,因为SAP在契约层面已经承诺了兼容期。

但问题在于,很多项目根本没有这种意识。我做过一次代码扫描,客户的接口代码里混着三类对象:真正的Released API、已经标废的BAPI、以及完全不透明的内部函数模块。其中内部函数模块的调用,是SAP完全不做兼容保证的。换句话说,只要一升级,这些模块可能改参数、可能改行为、可能直接消失。排查这类问题时,团队面对的不是“改一行代码”,而是“要重新设计集成方案”,成本完全不是一个量级。

这里有个实操经验:如果你在S/4HANA里开发,强烈建议在ABAP Development Tools(ADT)或API Hub里养成先查“API状态”的习惯。状态显示Released再动手,Internal和Deprecated一律不碰。老项目的话,下一轮升级规划前,把现有集成接口清单导出来,逐一对照API Hub核实状态,这一步能让你提前看到真正的风险面。

2. Clean Core 为什么这么强调:升级、扩展与运维成本的账要算清楚

2.1 Clean Core 到底指什么:标准核心与扩展的边界

说完接口,再来说Clean Core。这个概念在S/4HANA推广后变得高频,但很多企业的理解仍然停留在“不要改SAP标准代码”这句话上。这么说也没错,但太浅了。Clean Core的完整含义是:保持SAP标准系统的核心内核尽量干净,所有个性化的业务能力都通过SAP提供的、受支持的扩展机制来实现。

SAP把扩展机制划分成几个层次:

  • 无代码扩展(Key User Extensibility):业务用户自己配置自定义字段、自定义对象、自定义报表,比如用Custom Fields和Business Add-Ins的配置能力,不需要写代码。
  • 开发型扩展(Developer Extensibility / In-App):开发人员在SAP标准框架内做增强,比如在Cloud BAdI、Enhancement Spot、自定义业务对象里写代码,但这些“开发”必须跟着SAP定义的扩展点走。
  • 旁路扩展(Side-by-Side Extensibility):把新的业务流程、复杂逻辑部署到SAP BTP(Business Technology Platform)或其他外部平台上,通过Released API和标准核心互动,核心系统只负责标准的业务处理。

Clean Core推崇的显然不是“禁止开发”。它强调的是“你扩展的那堵墙,不能是承重墙”。在标准核心之外、或者标准框架内的受控扩展点去做个性化,都是被允许且推荐的。真正违反Clean Core的,是那些直接修改标准交付对象、把整套定制逻辑硬塞进标准程序、在隐式增强里写几百行ABAP自定义业务规则的行为。

我的理解是,Clean Core本质上是一种架构治理原则,它回答的是三个问题:你在哪里写代码、你写的东西是否会随升级被覆盖、这个系统未来是开放的还是封闭的。

2.2 为什么一个“不干净”的系统会变成大坑

我讲一个真实的项目片段。某制造企业从ECC升级到S/4,项目启动前专门做了自定义代码扫描,结果发现系统里有几千个ABAP对象,其中约四分之一是直接对标准表做读写操作的程序。最棘手的是一个“订单锁定状态”逻辑,它被写在标准销售订单创建流程的隐式增强里,每次创建订单都触发,完全绕过了SAP标准的业务事务。

表面上看这个程序跑了好多年都没大问题。但是一旦升级,SAP标准程序的调用链、屏幕逻辑、内部数据结构都有变化,隐式增强的挂点位置可能失效,甚至标准程序本身重构后,原来的增强点直接不存在了。这意味着销售订单创建这个基础流程会在升级当天出问题,而且问题定位极难——你甚至不知道是标准行为变了,还是自定义逻辑出了错。

还有个更现实的成本账。S/4HANA每年有两次功能包发布,每两年左右会有一次大的版本更新。你上了S/4之后不可能永远停在最初版本,总会有新功能要吸收、有安全补丁要打、有合规要求要满足(比如全球税率调整、电子发票相关功能包)。如果核心很脏,每一次升级都变成“先处理自定义代码兼容性”的项目,周期从几周拖到几个月,预算从几十万拖到上百万。我见过一个团队,为了两个很小的自定义增强,每次升级都要组织开发人员手工检查、测试、修代码,年复一年地在同一个泥潭里打转。

反过来,如果一个系统贯彻了Clean Core原则,升级时自定义代码的影响范围被压缩到最小。标准功能包更新来了,你只需要关注扩展点附近的行为变化,绝大部分代码零修改。这类系统的运维团队甚至可以做到“半夜发版、早上验证”,这才是S/4HANA持续交付的基础。

2.3 检查你的“不干净程度”:常用工具与操作路径

检查系统干不干净,不能用“我觉得我们很规范”来判断。好在SAP和生态里有成熟的工具,可以直接把风险晒出来。

首推的是SAP Readiness Check for Clean Core,这是SAP官方提供的分析工具,能输出一份定制化代码与S/4HANA兼容性的评估报告。它会统计系统里的自定义对象数量、按ABAP对象类型分类、标记出哪些程序可能因S/4变更而受影响,还会给出Clean Core的核心KPI——比如“可最小化自定义代码百分比”之类。这个工具在项目评估阶段就要跑,不要等到实施方案定稿了才想起来。

另一个关键是自定义代码适配工具(Custom Code Adaptation)。在项目迁移期,它会把现有的自定义对象分为“兼容”、“需迁移”、“需重写”几个等级,并生成细颗粒的清单。我建议至少每季度跑一次,以便看到整个团队在“制造脏代码”还是在“保持核心干净”。有些企业是在S/4上线后才发现某外包组为了赶需求,直接在标准表上开了个自定义字段池,还建了十几个Z批处理程序,把外联平台的订单状态往标准表里硬写。要不是定期扫描,这种问题能潜伏大半年。

工具的局限性也要说清楚:它能告诉你哪里有风险,但不会告诉你业务逻辑该怎么重构。扫描结果出来之后,仍然需要人工做分类、排序、规划迁移路径。所以工具的价值是“把问题摆上桌面”,真正的工程判断还是在于团队架构能力。

3. 把两者串起来:一条现实的 S/4HANA 扩展架构演进路径

3.1 Released API 是 Clean Core 的技术底座

讲到这你会发现,Released API和Clean Core不是两个独立的口号,而是一体两面。Clean Core告诉你“不要在标准核心乱搞”,Released API则回答“不乱搞之后,功能怎么做”。没有稳定、可靠、可持续的扩展接口,Clean Core就是一句空话。反过来,如果系统足够Clean,接口的使用和演进也变得安全和可控,因为你知道所有扩展都能落在受支持的扩展点上。

可以这么理解:Clean Core是“道路规划”,Released API是“交通规则”。道路规划得再好,没有交通规则,车照样横冲直撞;只有交通规则而没有合理的道路规划,车也跑不到该去的地方。S/4HANA体系的理想状态,就是标准核心是一条主干道路网,所有个性化功能通过规则明确的接口通道,在路网两侧的“扩展区”里生长。

更进一步说,SAP在S/4HANA里已经预留了一批官方的“扩展点”,包括:通过业务事件触发外部系统、通过Custom Business Objects创建行业特定的业务对象、通过外部服务调用总线把复杂逻辑放到BTP上。这些扩展点的有无线索,都在告诉你“SAP希望你把代码写在哪”。

3.2 现实的落地策略:从最脏的地方开始清理

即便接受Clean Core理念,改造一个老系统的工程量依然很大。我的建议是:不要一上来就想“全部清干净”,那往往会让项目陷入论证和纠结。反而应该按风险从高到低排优先级,逐步推进。实际操作中,我一般把清理对象分成三批:

第一批:直接修改标准表的程序、直接调用内部RFC/BAPI的代码、大段写在隐式增强里的业务逻辑。这是“灾难优先级”,必须先处理,因为它直接决定升级当天会不会崩。处理方式通常是重构为Released API调用,或把业务逻辑抽到外部服务。

第二批:自定义增强里实现但可以迁到标准扩展点的功能。比如客户方有特殊的定价判断逻辑,以前是用代码硬塞进标准定价过程,现在可以考虑放到BTP上的扩展服务里,通过标准事件或接口触发。

第三批:一些历史遗留的自定义报表和工具,业务已经不怎么用了。这类代码的最佳归途就是退役,不建议花成本迁移。清掉它们同样能降低升级评估的噪音。

优先级选定后,我建议用“升级模拟”来验证效果——在测试环境做一次S/4版本升级演练,对比清理前后的兼容性报告。通常你会发现,当你把第一批高风险对象处理掉之后,升级评估报告的可信度会发生质变,剩下的问题基本都可控了。

3.3 技术选型举例:主数据集成和业务扩展的两种典型路径

举两个例子说明“接口+核心干净”在实际中怎么落地。

第一个例子是主数据集成。一家公司有个旧的物料主数据维护系统,需要和S/4保持双向同步。老方案是从ERP里直接写自定义RFC,把MARA等核心表当成共享数据库来处理。重构后的方案是:S/4侧用SAP标准发布的物料主数据OData接口来提供和接收数据,中间加一层集成中间件(可以是BTP Integration Suite,也可以是企业已有的ESB)负责字段映射、校验、错误重试。核心系统里不再有任何针对主数据的自定义接口代码,升级时这块基本零影响。

第二个例子是复杂业务规则。一家做食品分销的企业,在订单审批时有一套特殊的“保质期批次优先级”逻辑,逻辑本身很复杂,而且每年会根据仓储策略调整。放在标准核心里的做法,是在销售订单的隐式增强里塞几百行ABAP,每次调整策略都改核心代码。改成Side-by-Side扩展后,规则逻辑被部署成一个独立的业务服务(运行在BTP或客户自己的容器平台),订单创建时,核心系统通过业务事件通知外部服务,外部服务计算出结果再通过Released API把结果写回。这样业务方可以独立调整规则,不碰ERP核心,也不影响升级节奏。

这两个例子的共同点,不是在“消灭自定义开发”,而是把自定义开发放到了正确的位置——不侵入标准核心,不受SAP版本升级的直接影响,用可控、可监控、可替换的方式存在。

4. 实际项目中常见的认知偏差与执行阻力

4.1 最大的误解:Clean Core = 禁止开发

这个误解在管理者和业务部门里尤其常见。一听到“Clean Core”,第一反应是“那是不是以后什么定制都不能做了?我们的特殊需求还怎么满足?”

Clean Core从来不反对个性化,它反对的是把个性化塞进标准核心、以“能跑就行”的方式破坏系统结构。你可以在Cloud BAdI里做增强,可以在自定义业务对象里建新实体,可以在BTP上部署你想要的任何逻辑和界面。就在2023年,SAP还在推动“可组合式架构”(Composable Architecture)概念,鼓励客户把扩展能力拆成独立可复用的服务单元。这个方向的本质,是让企业在差异化竞争力上更自由,而不是更受约束。

所以项目推广Clean Core时,最好是把它作为“架构规范”来沟通,而不是作为“禁开发令”。说清楚规则:标准框架里的扩展点可以用,标准核心对象不允许直接破坏。业务方真正关心的是需求能不能实现,只要你能给出“逻辑不变、放在别处实现、效果更好”的方案,他们其实没有理由反对。

4.2 “先上线再说,后面清理”的决策陷阱

另一个几乎每个项目都会遇到的阻力,是时间压力下的“妥协”。S/4迁移窗口紧张,数据清洗、流程切换、用户培训一个接一个。在这个节骨眼上,所有人都会倾向于抄近路:这个功能直接加到标准程序里吧?这套逻辑先写在隐式增强里,上线后我们再重构?我们推行的Clean Core正是在这种时刻最容易土崩瓦解的。

我印象最深的一个项目:某集团做S/4升级,初始扫描发现自定义对象总数巨大,其中高风险对象占了不小比例。项目委员会原本定了清理计划,但上线时间表一压,管理层拍板“先保证上线,清理放到二阶段”。结果呢?三年之后,二阶段从没启动过。系统上线了,但几乎把ECC时代的脏东西全带进了新系统,升级评估报告的警报依然一篇接一篇。而“事后清理”的成本通常远高于“迁移期一起清理”,因为上线后的系统业务连续运行,动一个对象都有无数关联影响。

所以我的建议非常直接:如果计划里没有为Clean Core预留明确的时间窗口、人力和责任主体,就不要骗自己说“以后再清”。宁可把上线时间往后推两周,也不要在迁移中制造一批需要未来花三个月抢救的风险代码。

4.3 谁来负责:Clean Core 不是开发团队一个部门的事

Clean Core之所以难落地,还有一层面在于“责任归属”。很多企业把所有相关问题归到开发团队——你们把代码写干净就行。但实际上,它需要业务、架构组、运维、QA、供应商共同参与。

我见过比较好的做法是成立一个“扩展治理小组”:由企业架构师牵头,开发主管、业务分析师、外部实施方技术负责人一起参与。每周对所有新增自定义对象做评审,回答四个问题:这个功能是否必须扩展标准流程?扩展点是否受SAP支持?能否用Side-by-Side方案?后续版本升级时这个自定义对象会不会成为负担?每一个新需求评审完,都形成书面记录。

此外,供应商管理也是关键。很多实施方是按人天收费的,写进标准程序的代码往往比搭建外部服务“更快更便宜”,所以如果没有约束,实施方天然倾向于走短平快的脏路子。把Clean Core要求写进项目SOW(工作说明书),约定系统验收时高风险自定义代码数量的上限,比口头反复强调有效得多。我做过一个项目,就是因为合同里明确了“上线后Custom Code占比不能超过X%”,推动效果立竿见影,实施团队自己就会来讨论重构方案。

5. 落到自己的项目上:几个好用的判断标准与检查清单

5.1 快速自检清单

如果你也想评估自己系统在Released API和Clean Core方面的健康程度,可以从这十项开始自查:

  • 有多少自定义程序在直接对SAP标准业务表做写操作(UPDATE/INSERT)?
  • 现有集成接口里,有多少调用的是未标记Released的BAPI/RFC或内部函数模块?
  • 是否存在Big的隐式增强(屏幕增强、程序增强中写入完整业务逻辑)?
  • 是否在标准数据库中新增了大量自定义字段并且被跨模块逻辑硬编码引用?
  • 使用的扩展点是否被SAP官方支持?是否有SAP Note或文档作为依据?
  • 是否有“先上线再清理”却拖了很久的历史遗留改造项?
  • 新开发需求评审时,是否有明确的“扩展点优先”规则?
  • 定期是否跑过Readiness Check / Custom Code Adaptation Scan?
  • 外部系统与S/4的集成方案,是否优先考虑了Released OData/SOAP API?
  • 项目SOW或运维制度里,是否写入了自定义代码质量红线?

每一项如果你答不上来,那大概率系统里就存在对应的风险。不需要追求所有项都完美,但至少要清楚地知道每一项的现状,以及哪些项是你未来升级时真正会踩的雷。

5.2 我的个人体感与最后的建议

做了这么多年项目,我越来越觉得,Released API和Clean Core这类事情,表面上是技术话题,实际上是治理话题。很多企业的困难不在于“不知道”,而在于“没把规范当回事”。从第一天就把接口状态检查作为开发的准入门槛,把扩展点评审作为需求进开发的必经步骤,这些动作的成本很低,但效果极其深远。

我个人在项目里推动的时候,特别喜欢做一件事:把扫描报告直接投影到会议室上给大家看。当一群人看到一个看似稳定的系统里躺着一堆高风险对象时,讨论的质感和氛围会立刻改变。从“我们这个系统应该没问题吧”变成“这些代码我们接下来怎么拆”,这一步本身就值回所有评估成本。

所以如果你想做点什么,我的建议是从最小范围试点开始:挑一个你最常用的主数据集成接口,确认它是不是Released API;找一个风险最高的自定义程序,做一次重构迁移实验;跑一次Readiness Check,看看自己底牌什么样。这三件事做完,你对“Released API和Clean Core的重要性”应该就不需要任何人再向你解释了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询