乐于分享
好东西不私藏

国产化浪潮下,国内软件实施商的SAP对接困境

国产化浪潮下,国内软件实施商的SAP对接困境

国产化浪潮下,国内软件实施商的SAP对接困境

用AI共创了一个开源工具,希望能帮到同样在这件事上耗过时间的人


一个很多团队都经历过的处境

接到一个项目,客户用的是SAP,团队里没有一个人做过SAP开发。

去网上搜"Java对接SAP",找到的要么是一篇2016年的博客,要么是一段没有上下文的代码片段。联系了SAP顾问,对方说需要一个业务顾问加一个开发顾问,定制开发周期两周,报价十万。

只能接受。

等到下一个项目,同样是SAP,同样的问题,同样的流程再走一遍。没有积累,没有复用,每次都从零开始。

这种处境不少见,很多国内实施团队都有过类似的经历。


问题出在哪里

近年来国产化替代持续推进,越来越多的国内企业级软件需要与SAP系统对接——ERP替换、MES上线、财务共享中心落地、供应链平台建设……SAP作为存量核心系统,往往是绕不开的集成节点。

但大多数国内实施商面临一个现实困境:

懂业务的不懂SAP技术,懂SAP的资源稀缺且成本高。

更让人头疼的是,SAP其实早就提供了大量标准集成接口——

  • • OData REST API(V2和V4)
  • • RFC / JCo 远程调用
  • • IDoc 报文
  • • BAPI 标准业务函数
  • • BTP Integration Suite 云集成平台

覆盖采购、销售、库存、财务、主数据、生产等几乎所有核心业务场景,官方文档也是公开的。

问题不是SAP没有接口,而是没有SAP经验的开发者不太容易找到该用哪个、怎么配、常见的坑在哪里。

这种信息不对称,是每次集成项目反复消耗时间和成本的主要原因之一。


做了一个开源工具,分享出来

工具名称:sap-integration-wiki

GitHub 地址:https://github.com/shrek-abaper/sap-integration-wiki

说实话,这个工具本身就是 AI 时代共创方式的一次实践。

内容来源有两部分:一是 SAP 官方文档——API Business Hub、Help Portal、社区沉淀——由 AI 系统性地检索、提炼、结构化;二是十多年 SAP 集成项目中积累的实战经验,包括踩过的坑、跑通的方案、在项目现场总结出来的一些做法。两者通过 AI 共创的方式融合在一起,形成了这个初版。

它不是某一个人独立写出来的作品,而是人的经验判断 + AI 的信息处理能力结合的产物。这种方式本身,也是 AI 时代知识沉淀的一种可能性——不替代专家,而是让专家的经验能够更快、更结构化地传递出去。

它遵循标准 Skill 规范构建,让 AI 助手(Claude、OpenCode、Cherry Studio 等)加载后,能够基于专项的 SAP 知识库来回答集成问题,给出更有针对性的方案。


它能解决什么

对于没有 SAP 背景的开发者,获取可用信息本身就是一道门槛。

去 Google 或百度搜索,能找到的资料良莠不齐——版本混杂、年代各异,花大量时间筛选之后,还是不确定这条信息对自己的 SAP 版本是否适用,示例代码能不能直接跑。

直接问通用 AI,得到的回答通常是准确但宽泛的方向性描述:

"你可以使用 SAP 的 RFC API 来创建采购订单。"

这本身没有错,但对于不熟悉 SAP 生态的开发者来说,后续还需要自己判断:该用哪个具体接口?ECC 和 S/4HANA 的做法一样吗?认证怎么配?哪些字段是必填的?常见的报错怎么排查?——每一个问题都需要额外的搜索和甄别,而没有 SAP 经验,很难判断哪个答案是可信的。

加载这个 Skill 之后,AI 能够基于结构化的 SAP 专项知识给出更聚焦的回答:

"你的 S/4HANA On-Premise 环境,推荐使用 OData V2 接口 API_PURCHASEORDER_PROCESS_SRV,通过 Deep Insert POST 一次性创建 PO 抬头和行项目。注意需要先做 CSRF Token Fetch,以下是完整的 Payload 结构和 CSRF 处理代码……"

版本明确、接口具体、代码可用、常见坑提前说明——节省的不只是时间,是在陌生领域反复试错的那种消耗感。


一个真实的演示

以下是通过 Cherry Studio 验证的实际对话,原始记录未做修改:

开发者:我想通过 Java 读取 SAP 的客户应收账款明细,要怎么实现?

Skill 首先确认关键信息:请问您的 SAP 版本是 ECC 还是 S/4HANA?

开发者:SAP 版本是 ECC


Skill 随即给出完整方案,输出的内容覆盖了从环境搭建到业务实现的每一步,按顺序来就能跑通。

第一步:拿到 JCo 库

这是很多人卡住的第一关。JCo 是 SAP 官方的 Java 连接库,不在 Maven Central 上公开分发,需要用 SAP 账号登录 SAP Support Portal(support.sap.com)下载对应操作系统版本的压缩包,解压后得到 sapjco3.jar 和平台对应的 Native 库(Windows 下是 sapjco3.dll,Linux 下是 libsapjco3.so)。Skill 直接告诉你去哪里下、下什么、放在哪里:

# 将下载的 sapjco3.jar 手动安装到本地 Maven 仓库mvn install:install-file \  -Dfile=sapjco3.jar \  -DgroupId=com.sap.conn.jco \  -DartifactId=sapjco3 \  -Dversion=3.1.5 \  -Dpackaging=jar

Native 库需要放到系统 PATH 里,或者启动 JVM 时指定路径:

java -Djava.library.path=/path/to/jco/lib -jar your-app.jar

第二步:配置连接

生成一个 .jcoDestination 配置文件,放在类路径下,告诉 JCo 去哪个 SAP 系统、用哪个账号连接:

jco.client.host=sap-server.example.comjco.client.sysnr=00        # SAP 实例编号,两位数字jco.client.client=100      # SAP 集团代码,非端口号jco.client.user=RFCUSERjco.client.passwd=your-passwordjco.client.lang=ENjco.destination.pool_capacity=5jco.destination.peak_limit=20

第三步:调用 BAPI,获取数据

技术选型锁定 BAPI_AR_ACC_GETOPENITEMS——SAP 官方的应收账款未清项查询接口,ECC 环境下比较稳定的方式,无需定制开发。Skill 输出的核心调用代码如下:

JCoFunctionbapi= destination.getRepository()    .getFunction("BAPI_AR_ACC_GETOPENITEMS");bapi.getImportParameterList().setValue("COMPANYCODE", "1000");bapi.getImportParameterList().setValue("CUSTOMER",    String.format("%010d", Integer.parseInt(customerNo))); // 客户号必须10位补零bapi.getImportParameterList().setValue("KEYDATE", "20240101"); // 格式 yyyyMMddbapi.execute(destination);// 遍历 OPEN_ITEMS 表,AUGBL 字段为空的才是未清项JCoTableitems= bapi.getTableParameterList().getTable("OPEN_ITEMS");

第四步:SAP 侧配置清单

光有代码还不够,SAP 那边也要做配置。Skill 给出了完整的 SAP 操作步骤,不熟悉 SAP 的话,可以直接把这份清单交给客户的 SAP BASIS 管理员来做:

  • • 用事务码 SU01 创建专用 RFC 用户,类型选"通信用户"
  • • 分配权限对象 F_KNA1_BUK(客户主数据读取)和 F_BKPF_BUK(财务凭证读取)
  • • 用事务码 SM59 创建 TCP/IP 连接并测试连通性

第五步:扩展为微服务(可选)

如果团队里有非 Java 技术栈的系统也需要读 SAP 数据,Skill 还给出了架构扩展思路:把 JCo 调用封装成一个 REST 微服务,其他系统通过 HTTP 调用,不需要每个系统都直接集成 JCo:

任意客户端    ↓ HTTP RESTJava JCo 微服务    ↓ JCo RFC(端口 33xx)SAP ECC 6.0

从一句自然语言描述,到涵盖环境搭建、连接配置、代码实现、SAP 配置、架构扩展的完整落地方案,只经历了两轮对话。每一步都有具体指引,不需要自己去猜"下一步该做什么"。


覆盖了哪些场景

业务场景

业务域
覆盖内容
采购(MM)
创建/查询/修改采购订单,供应商 EDI 确认,IDoc 收发
库存(MM-IM)
按工厂/库存地点实时查询库存,过账,预留
销售(SD)
创建销售订单,跟踪交货状态,读取账单
财务总账(FI)
过账 GL 凭证,读取财务文档,科目确定
应收应付(AR/AP)
未清项查询,供应商发票创建,付款,预付款,凭证暂存
固定资产(FI-AA)
读取资产台账,过账资产购置/报废/转移/折旧
财务共享(FSSC)金蝶↔SAP 集成模式,SAP Central Finance (CFIN) 复制方案
主数据
物料主数据,业务伙伴(客户/供应商),成本中心
生产(PP)
生产订单,BOM 读取,物料移动(261/101),MRP

财务共享中心(FSSC)场景是这次单独整理的部分。国内不少实施商正在承接"金蝶/用友→SAP"或"本地财务→SAP Central Finance"的项目,这类场景可参考的公开资料比较少,Skill 里整理了完整的 API 目录和主数据映射建议,供参考。

技术方式

技术
覆盖内容
OData V2/V4
CSRF 流程、$expand/$filter/$batch、Deep Insert、错误解析
RFC/JCo
连接池配置、BAPI 调用模板、RETURN 表解析、负载均衡
IDoc/PI-PO
控制记录、关键段、状态生命周期、监控事务码
BAPI/RAP
选型建议,按业务域的关键 BAPI 列表,RAP OData V4
认证
Basic Auth、OAuth2(本地 SOAUTH2 + Cloud)、SSL/TLS、ICF 节点
BTP Integration SuiteiFlow、Cloud Connector、API Management、Event Mesh、Communication Arrangement
最佳实践
幂等性设计、重试逻辑、连接管理、安全加固、监控告警

SAP 版本覆盖

SAP 版本
OData
RFC/BAPI
IDoc
BTP
ECC 6.0
仅自定义
完整支持
完整支持
经 Cloud Connector
S/4HANA On-Prem 1909–2022
OData V2 标准 API
完整支持
完整支持
经 Cloud Connector
S/4HANA On-Prem 2023+
V2 + V4(部分)
完整支持
完整支持
经 Cloud Connector
S/4HANA Cloud Public
OData V4 为主
不对外
受限
原生支持
S/4HANA Cloud Private
V2/V4
受限
经 BTP
原生支持

附带可运行工具

Skill 内置三个脚本,可以直接运行生成开发所需的文件:

# 生成任意 OData 服务的 Postman Collection(含 CSRF 自动处理)node gen-odata-postman.js --service API_PURCHASEORDER_PROCESS_SRV \  --host s4hana.example.com --client 100 --output po.json# 生成 JCo 连接配置文件(含所有参数注释)python gen-jco-config.py --name SAP_PRD --host s4hana.example.com \  --sysnr 00 --client 100 --user RFC_USER --output SAP_PRD.jcoDestination# 生成 IDoc XML 骨架(含关键段和字段说明)python gen-idoc-template.py --msgtype ORDERS --idoctype ORDERS05 \  --sender-partner SAP_PROD --receiver-partner EXT_001 --output skeleton.xml

希望能帮到的事

解决单个项目的交付问题,只是这个工具比较直接的用途。

更希望的是,对于一些国内软件服务商来说,SAP 对接能力可以慢慢从"每次都要临时找人"变成"自己团队能做"——不依赖外部 SAP 资源,接口能看懂、代码能写、问题能排查、下次项目能复用。

这种能力一旦在团队里沉淀下来,不只是省了外包费用,也能让自己的产品在涉及 SAP 的项目里更有底气,为客户提供更完整的交付。

这个 Skill 想做的,是把原本需要在项目里慢慢摸索积累的 SAP 集成知识,通过结构化的场景内容和 AI 智能体,变成团队可以直接调用的参考资源——少走一些弯路,多一些确定性。

能不能帮到你,用了才知道,欢迎试试。


如何使用

支持任何遵循 Skill 规范的 AI 平台:

Claude Code

ln -s /path/to/sap-integration-wiki ~/.agents/skills/sap-integration-wiki

Cherry Studio / OpenCode在智能体配置中指定 SKILL.md 路径,Skill 会自动加载。

LangChain / RAG 方案

from langchain.document_loaders import DirectoryLoader, UnstructuredMarkdownLoaderloader = DirectoryLoader('/path/to/sap-integration-wiki',    glob='**/*.md',    loader_cls=UnstructuredMarkdownLoader)documents = loader.load()# 接入你的向量库或检索链

安装后,直接用中文描述你的集成需求即可,比如:

  • • "我需要从 Java 程序创建 SAP 采购订单,SAP 是 S/4HANA On-Premise"
  • • "SAP OData 一直返回 403 CSRF token validation failed,怎么解决"
  • • "金蝶和 SAP 之间要做财务共享,有哪些方案"
  • • "ECC 环境怎么查库存,要实时的"

一起完善

这个 Skill 已经 MIT 开源,内容还不完整,欢迎一起来补充:

  • • 补充场景:HR、WM/EWM、PM、QM 等模块目前还没有覆盖
  • • 补充代码示例:.NET、Go、Node.js、Ruby 等语言的实现
  • • 修正错误:API 名称、字段说明、版本信息如有偏差欢迎提 Issue
  • • 翻译:目前有中英文版本,欢迎其他语言

每一个从实际项目里沉淀的场景,对后来遇到同样问题的人都会有帮助。


最后说一句

做这个工具,是想解决一个实际存在的问题——SAP 对接对于没有 SAP 背景的团队来说,信息获取的门槛确实有点高,但这个门槛其实不是必要的。

希望这个工具能让这件事变得容易一点点。

如果它帮到了你,或者你在 SAP 对接上有什么实际踩过的坑,欢迎在评论里说说,或者直接去 GitHub 提 Issue——沉淀下来,也许能帮到下一个遇到同样问题的人。


🔗 GitHub:https://github.com/shrek-abaper/sap-integration-wiki


同系列项目,感兴趣也可以看看:

🔗 sap-abap-cli:https://github.com/shrek-abaper/sap-abap-cli通过 ADT REST API 在命令行或 AI 智能体中直接读写 SAP 系统的 ABAP 代码和元数据,支持 ECC、S/4HANA、BTP。

🔗 sap-trench-skill:https://github.com/shrek-abaper/sap-trench-skill10 年以上 SAP 咨询经验蒸馏而成的 AI Skill,覆盖 ABAP、MM、SD、FICO、PP、WM、PM、QM、集成等核心模块。

相关学习资料