ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SAP CRM SSF财务共享配置:从T-code到Web UI的跨系统集成实践

SAP CRM SSF财务共享配置:从T-code到Web UI的跨系统集成实践

简介:面向SAP CRM顾问与实施人员的SSF财务共享配置讲解,聚焦于财务共享服务与外部系统集成场景。内容以1个pptx演示文稿呈现,压缩包大小约692KB,适合需要快速理解配置脉络的读者。资料围绕SAP CRM SSF(财务共享)展开,重点说明创建事务启动器(Transaction Launcher)的前提条件,涵盖SM59定义RFC连接、BD54定义逻辑系统、BD97分配RFC至逻辑系统、CRMS_IC_CROSS_SYS配置ITS服务URL等关键步骤。同时介绍ITS(Internet Transaction Server)的协议转换原理,以及通过SWO1创建BOR对象、在SSF中创建事务启动器与逻辑链接、定义通用出站插件映射来调用ERP T-code的完整流程。已有301人学习该资源,对于正在实施SAP CRM财务共享或需要打通CRM与ERP外部系统连接的团队,这份演示文稿能提供从底层配置到集成调用的结构化指引,帮助减少摸索时间、规避常见配置遗漏。

1. SAP CRM SSF 财务共享配置:从 T-code 到 Web UI 的一次跨系统打通

在做财务共享项目时,最常遇到的一个需求是:财务人员在 CRM Web UI 上操作,但真正要跑的凭证逻辑还在 ERP 里,事务代码(T-code)也还在 SAP GUI 上。你不可能让财务同事一边开 Web UI、一边再挂个 SAP GUI 去敲 FK10 或者 FB50,这既不安全也不好审计。SAP CRM SSF(Shared Service Framework)里的**事务启动器(Transaction Launcher)**就是干这个的——它把 ERP 里的事务代码通过 ITS 转换成 Web 页面,嵌到 CRM 的 IC(Interaction Center)界面里,用户在一个浏览器窗口里完成跨系统操作。

这篇文章我从配置前提、BOR 对象创建、SSF 逻辑链接到通用出站插件映射,把整条链路拆开讲。适合正在做 SAP CRM 与 ERP 集成的顾问、ABAP 开发,以及被财务共享项目搞得焦头烂额的实施人员。配置不复杂,但坑很多,尤其是 RFC 和逻辑系统那几步,错一个后面全白搭。

2. 事务启动器原理与创建前提:先搞懂数据是怎么跨系统的

2.1 为什么需要 ITS 和事务启动器

SAP GUI 上的事务代码本质上是 SAP 专有协议(DIAG)的客户端操作,浏览器不认识这个东西。ITS(Internet Transaction Server)起的作用是翻译官:它把来自 Web 浏览器的 HTTP 请求翻译成 SAP 能理解的内部协议,再把 SAP 返回的屏幕流翻译回 HTML 页面回给浏览器。事务启动器就是建立在 ITS 之上的一层封装,它让你不必为每个 T-code 单独开发 Web 页面,而是直接通过配置,把已有的 GUI 事务代码暴露成 Web 链接。

我一般会把事务启动器理解成「一个壳」——它本身不包含业务逻辑,只是把 ERP 里那个 T-code 的初始屏幕在 Web 上渲染出来,后续的字段校验、数据保存、凭证生成全在 ERP 那边完成。这对财务共享这种「要快速上线、不想动 ERP 逻辑」的场景特别合适。

配置它需要四个前置对象,缺一个配置就断一条:

  • SM59:定义到 ERP 的 RFC 连接
  • BD54:定义逻辑系统名称
  • BD97:把 RFC 连接分配给逻辑系统
  • CRMS_IC_CROSS_SYS:配置该逻辑系统对应的 ITS 服务 URL

2.2 配置 RFC 连接:逻辑系统和目的地分配的细节

RFC 连接是事务启动器调用 ERP 时的通道。在 SM59 里创建 ABAP 连接时,我习惯把目标主机填 ERP 应用服务器的地址,但这里有个容易忽略的点:事务启动器不仅要能调用过去,ERP 那边还要能认得调用方的系统标识,否则后续的权限检查会直接失败。

具体操作时,先在 BD54 里定义逻辑系统,命名规则一般遵循CLNT000这类格式,但这取决于项目规范。然后在 BD97 里把 SM59 建的 RFC 目的地分配给这个逻辑系统。很多人在这里翻车——RFC 目的地建好了,逻辑系统也建了,但忘了 BD97 这一步,结果事务启动器报「无法解析逻辑系统」。

提示:BD97 的分配是双向的。如果 CRM 和 ERP 之间要做后续的 IDoc 或 RFC 回调,两边都要做分配。有些项目的安全团队会限制 RFC 信任关系,这块尽早找 Basis 沟通,别等配置完再补。

2.3 CRMS_IC_CROSS_SYS:ITS URL 的配置位置

这个配置项在事务代码CRMS_IC_CROSS_SYS里维护。它的作用是把「逻辑系统 + 事务代码」映射到一个可访问的 ITS URL。ITS 服务在 ERP 那边通过 SICF 激活,URL 的路径一般形如/sap/bc/bsp/sap/its_webGui这样的结构。

需要注意的是,这个 URL 有内部访问和外部访问两种场景。我的做法是:先确认 CRM 应用服务器能不能直接访问 ERP 的 ITS URL,如果能,就把内部 URL 填进去;如果中间有负载均衡或反向代理,就填对外发布的地址。这个配置在后续创建事务启动器时会被读取,填错了启动器页面会白屏或报 HTTP 404。

3. 创建 ERP 侧 BOR 对象与 SSF 事务启动器:核心配置实操

3.1 SWO1 创建 BOR 对象:为什么要包一层

事务启动器调用的是 ERP 的BOR(Business Object Repository)对象,而不是直接调 T-code。BOR 对象是 SAP 早期面向对象的业务对象封装,一个 BOR 对象内部可以绑定事务代码、函数模块或者方法。直接调 T-code 在 Web 场景下不够灵活,而 BOR 对象把「事务启动器 → 业务对象 → T-code」这条链路统一了起来。

用 SWO1 创建 BOR 对象的步骤一般是:

  1. 在 SWO1 里选择「创建」,对象类型输入一个以业务含义命名的名称,比如ZSSF_FB50。
  2. 在「程序」栏关联一个 function group 或者直接绑定 T-code。
  3. 保存并激活对象,系统会生成对象类型和对应的对象 key。

这里的关键是:对象类型名不能跟系统已有的 BOR 对象冲突,而且程序类型要选对。我见过有人在程序类型里选了「事务代码」却把 T-code 写错,结果启动器调用时报「对象类型未定义」。

3.2 CRM 侧 SSF 事务启动器创建流程

  • 进入 SSF 事务(事务代码 SSF),选择「事务启动器」。
  • 创建一个新的事务启动器,输入名称、描述。
  • 选择一个 BOR 对象类型,系统会读取该对象绑定的 T-code。
  • 保存时,SSF 会要求分配逻辑链接(Logical Link)。

事务启动器本身只是定义「我要调哪个对象」,真正的跨系统映射在逻辑链接里完成。逻辑链接的作用是把 CRM 侧的事务启动器绑定到 ERP 侧的 RFC 目的地和逻辑系统上。创建逻辑链接时,系统会要求你选择 BOR 对象类型和逻辑系统——这个逻辑系统就是前面 BD54/BD97 配的。选完逻辑系统后,系统会把该逻辑系统对应的事务启动器清单拉出来,你勾选能用的即可。

3.3 事务启动器调用 ERP T-code 的完整链路

整条链路可以梳理为下图这样(不用画图,文字描述):

浏览器 → Web UI 的 IC 组件 → SSF 事务启动器 → 逻辑链接 → RFC 目的地 → ERP 的 BOR 对象 → 内部调用 T-code → ITS 生成 HTML → 返回浏览器

这个链路里最值得注意的点是:BOR 对象在 ERP 侧执行,CRM 侧的 SSF 只负责路由和封装。所以事务启动器的调试不能只盯 CRM,ERP 侧的后台日志(事务代码 SLG1,或者 ST22)往往更能说明问题。

4. 定义通用出站插件映射:把 T-code 参数传对

4.1 为什么需要出站插件映射

事务启动器能拉起 T-code 的初始屏幕,但它并不知道这个屏幕上有哪些字段、值从哪来。财务共享场景里,用户点击一个按钮,系统应该自动把当前客户或合同编号带过去,这就需要在事务启动器和 ERP T-code 之间定义一个映射层——通用出站插件(Generic Outbound Plug)映射。

它的原理是:通过调用 ERP 侧 BOR 对象的方法,把 CRM 上下文里的字段值传给 T-code 屏幕上的字段。以 FB50(总账科目过账)为例,你希望从 CRM 传过去的是公司代码、过账日期、凭证货币,而不是让用户在现场一个个重填。

4.2 配置映射参数和代码示例

在 CRM 侧,通用的做法是写一个 ABAP 类实现接口IF_BSP_WD_EXT_LAUNCH(不同版本接口名可能不同,但思路一致)。核心代码如下:

METHOD if_bsp_wd_ext_launch~execute. DATA: lt_params TYPE ti_http_nvam, ls_param LIKE LINE OF lt_params. " 从 CRM 上下文取值,这里以公司代码和过账日期为例 ls_param-name = 'BUKRS'. " ERP 屏幕字段:公司代码 ls_param-value = iv_company_code. " CRM 侧传入值 APPEND ls_param TO lt_params. ls_param-name = 'BDATJ'. " 过账日期(FB50 屏幕字段) ls_param-value = iv_posting_date. APPEND ls_param TO lt_params. " 调用事务启动器的执行方法,传参 CALL METHOD super->execute EXPORTING it_parameters = lt_params. ENDMETHOD.

逻辑说明:这段代码的核心逻辑有两个——第一个是把 CRM 上下文里的字段值组装成参数表,这里我用iv_company_code和iv_posting_date代表从 CRM 页面传入的公司代码和过账日期;第二个是调用父类的 execute 方法把参数表传给事务启动器,启动器再通过 ITS 把这些参数写到 T-code 的初始屏幕字段上。

参数说明:BUKRS和BDATJ是 ERP 屏幕的字段名(技术上通常是屏幕字段的技术名称),这个必须和你要调用的 T-code 屏幕字段完全一致,多一个空格都不行。it_parameters是标准参数表,不需要额外定义,直接复用接口的传输结构。super->execute是调用父类实现,确保标准的事务启动器逻辑不被破坏。

这里有个实际项目中的坑:如果 T-code 的初始屏幕上有必填字段没被映射,用户点提交时会被 ERP 的屏幕逻辑挡住。所以上线前最好把 T-code 初始屏幕的字段清单拉出来,逐个核对哪些是必填、哪些有默认值、哪些可以从 CRM 传。

4.3 映射的边界:哪些参数适合传

不是所有参数都适合从 CRM 传。我的经验是三类参数值得做映射:

  • 上下文参数:如客户编号、订单编号,这类从 CRM 业务数据里直接带过去的
  • 固定值参数:如公司代码,财务共享中心通常凭证只走固定的几个公司代码
  • 日期类参数:如过账日期,取当天或者期间最后一天

而不适合传的参数包括:ERP 内部自动计算的字段(如凭证编号)、有权限校验的敏感字段(如审批人)。这类传过去反而会报权限错误,用户会以为系统坏了,实际上是参数越过了 ERP 的权限校验逻辑。

5. 事务启动器配置避坑:五个亲测踩过的坑

5.1 启动器列表是空的,看不到刚创建的 BOR 对象

现象:在 SSF 事务启动器里创建逻辑链接时,选择 BOR 对象类型后列表是空的,刚用 SWO1 创建的 Z 对象不在里面。

原因:BOR 对象的创建和激活状态不一致,或者对象类型没有生成对应的 object type 版本。另一个常见原因是 CRM 侧和 ERP 侧的 BOR 对象列表缓存不同步。

解决:先在 ERP 侧确认 SWO1 中对象是激活状态;然后在 CRM 侧用事务代码SWO1也查看一次(如果 CRM 和 ERP 在同一环境则共用);最后重新进入 SSF 事务启动器页面。如果还不行,清一下 SAP 的缓冲区(事务代码SXDA或重启应用服务器的工作进程,但这要 Basis 操作)。

5.2 启动器页面打开后白屏,浏览器控制台报 404

现象:在 Web UI 里点事务启动器的链接,页面跳转后是空白,F12 看网络请求,ITS URL 返回 404。

原因:CRMS_IC_CROSS_SYS 里配置的 ITS URL 不对,或者 ERP 侧的 SICF 服务没有激活。最常见的是把 URL 配了外部地址,但 CRM 应用服务器访问不到那个地址(网络隔离)。

解决:先用浏览器手动访问一下配置的 ITS URL,确认在 CRM 应用服务器所在网络里能打开。如果打不开,让网络团队放通端口,或者改用内部地址。SICF 服务路径检查事务代码/nSICF,找到对应的 ITS Web GUI 服务节点,确认「激活」状态。

5.3 启动器能打开但登录不了,提示用户不存在或密码错误

现象:启动器页面能渲染,但跳到一个登录框,输入 ERP 账号后提示密码错误。

原因:ITS 传递的登录凭证没有正确转发到 ERP,或者 CRM 和 ERP 的 SSO 没有配置。常见的是仅配置了 RFC 信任,没配 ITS 的 SSO(SPNego 或者 logon ticket)。

解决:如果项目允许,最简单的方式是让 ITS 使用 HTTP 基本认证,账号密码在启动器 URL 拼接参数里传(但这有安全风险);正规做法是配置 SAP 的 Common Crypto 库和 SNC/SSO,这块要 Basis 一起做。短期临时用可以,长期必须接 SSO,否则财务天天被密码重置折磨。

5.4 参数传过去了但 ERP 屏幕字段没收到

现象:出站插件映射的 ABAP 代码调试时参数值是对的,但 ERP T-code 屏幕上对应字段是空的。

原因:屏幕字段的技术名称不对。最常见的错误是把字段的「显示标签」当成「技术名称」去映射。比如 FB50 的公司代码字段,显示了「公司代码」但你映射时要写BUKRS,写「GMBKT」这类显示文本是不认的。

解决:在 ERP 侧用事务代码SE93查 T-code,找到它的屏幕号,再用SM30或者SHDB录屏看屏幕字段的技术名称。核对后再改出站插件映射的代码。

5.5 调用后返回短转储(short dump)

现象:点启动器后,ERP 那边报 ABAP short dump,错误类型类似OBJECTS_OBJREF_NOT_ASSIGNED或SYSTEM_CANCELED。

原因:BOR 对象里的方法实现有问题,常见的是在方法里调用了不存在的函数模块,或者 T-code 本身在 ERP 环境里不可用(比如没有授权)。

解决:先看 ST22 里的 short dump 明细,定位到具体对象和方法;再用 SE24 检查 BOR 对象对应的类,找到报错行。很多时候问题不在启动器而在 BOR 方法本身。我的习惯是先回 ERP 用手工跑一遍这个 T-code,确认 T-code 本身没问题再排查集成层。

6. 事务启动器上线后的验证方法:三个操作确认配置是真的通

配置完成后,不要直接甩给财务用户,先做一轮自测。我的验证套路是三步走。

第一步,单体验证:在 CRM Web UI 里找到启动器的入口,点击后确认页面能正常渲染,所有参数都已正确填入 ERP T-code 的初始屏幕。这里我一般会先让开发人员用一个带完整业务数据的测试账号跑,而不是用空账号——很多参数映射的问题是「数据为空时没触发异常」导致的假成功。

第二步,权限验证:用财务共享中心实际用户的角色去测,确认这个用户能通过启动器打开 T-code 并且能正常保存凭证。这一步特别容易暴露事务启动器的「逻辑系统 + 用户」联合权限问题。如果报权限不足,去 ERP 的 SU01 里检查该用户的授权参数文件,注意事务启动器的调用用户和实际执行业务操作的用户可能不是同一个——这是个容易混淆的点。

第三步,回写验证:在 ERP 里查凭证,确认从 CRM 启动器创建的凭证会计凭证号、过账日期、金额字段与 Web 界面显示的一致。很多项目在这里发现「界面显示到了 ERP 但数据串了」的集成 bug,通常是日期的时区转换问题或字段映射错位导致的。建议做一张「ERP 凭证 vs CRM 启动器输入」的对照表,逐字段核对一遍。

从那以后,我每次给客户配完事务启动器,都会强制执行这三步验证再交文档。看起来多花了半天时间,实际上省掉了财务用户上线后一星期的报障。特别是第三步,我甚至建议做成每周抽检的例行工作——跨系统配置这东西,没人敢保证 ERP 升级后 ITS URL 不变、BOR 对象不失效。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进