简介:本资源是一份面向SAP CRM系统实施顾问与财务共享中心IT配置人员的实操型技术资料,聚焦SSF(Shared Service Framework)财务共享模块中事务启动器(Transaction Launcher)的完整配置流程及与外部ERP系统的集成方案。内容覆盖SM59 RFC连接定义、BD54逻辑系统配置、BD97连接分配、CRMS_IC_CROSS_SYS ITS服务URL配置等关键前提,并详解BOR对象创建、逻辑链接设置、通用出站插件映射及ERP事务代码调用实现,具备强落地性与排错参考价值。资源为单文件PPTX格式,共1个演示文稿(692KB),结构清晰、图文并茂,每页标注PwC编号,便于按步骤对照学习与现场实施复用。目前已有301人学习下载,适合中高级SAP CRM开发者快速掌握SSF环境下Web UI与SAP GUI事务集成的核心配置路径与系统间协同要点。
1. SAP CRM SSF 财务共享配置:不是配个URL就能连上ERP,而是把Web UI变成可编排的财务服务总线
你有没有遇到过这种场景:财务共享中心上线了SAP CRM Web UI,业务人员点开客户主数据页面,想顺手查一笔应付账款余额,却得切回SAP GUI、输事务码FB03、再手动输凭证号——来回切换三次,单据处理时间多出90秒。这不是体验问题,是架构断层。这份「SAP CRM SSF 财务共享配置」资源,解决的正是这个断层:它不只教你怎么在SSD(Service Specific Definition)里填个RFC destination,而是完整交付一套可落地的跨系统服务编织方案——用事务启动器(Transaction Launcher)作为轻量级适配器,把ERP端的T-code(如FB03、FBL1N、FK03)封装成Web UI可调用、可参数化、可审计的HTTP服务。核心价值在于:财务人员在CRM界面点击“查看供应商余额”,背后自动触发SSF逻辑链接→调用ITS网关→透传RFC连接→执行ERP事务→将HTML渲染结果嵌入CRM iframe。整套配置覆盖SM59/BDD4/BD97/CRMS_IC_CROSS_SYS四大关键节点,且所有操作均基于标准SAP功能,无需ABAP开发。适合正在推进财务共享中心与ERP系统深度集成的SAP Basis顾问、CRM技术配置员,以及需要快速验证SSO+服务调用链路的实施团队。
2. 事务启动器底层机制:为什么必须用ITS做协议桥接,而不是直接RFC调用
2.1 事务启动器的本质:GUI事务的HTML化封装器
事务启动器(Transaction Launcher)在SAP CRM SSF中并非一个独立模块,而是CRM Web UI框架(IC Web Client)与后端SAP系统之间的一层声明式服务代理。它的核心任务不是执行业务逻辑,而是完成三件事:
- 协议转换:将Web UI发起的HTTP GET/POST请求,转换为SAP系统内部可识别的GUI事务调用指令;
- 上下文透传:把当前CRM会话中的用户身份、语言、客户端参数(如
~client)、业务对象键值(如BU_PARTNER=1000001)安全注入到ERP事务环境中; - 结果嵌入:将ERP端ITS网关返回的HTML片段,以iframe或AJAX方式动态加载到CRM页面指定区域,保持UI一致性。
这决定了它和传统RFC调用有本质区别:RFC面向函数模块(BAPI/FM),返回结构化数据;而事务启动器面向GUI事务(T-code),返回的是带交互能力的HTML视图。若强行用RFC调用FB03,你只能拿到凭证抬头数据,但无法呈现凭证行项目表格、无法点击行项目跳转明细、无法使用FB03自带的筛选/导出功能——这些恰恰是财务人员最依赖的操作。
2.2 ITS:不可绕过的协议翻译官
Internet Transaction Server(ITS)在此架构中承担唯一协议翻译角色。它不是可选组件,而是SAP官方定义的GUI-to-Web转换标准栈。其工作流如下:
- CRM Web UI向ITS服务器发送HTTP请求(如
/sap/bc/gui/sap/its/webgui?~transaction=FB03&BUKRS=1000); - ITS接收请求后,解析URL参数,构造SAP GUI协议报文(
sapgui://...格式); - ITS通过RFC连接(SM59中定义)将报文转发至目标ERP系统;
- ERP系统执行T-code,生成HTML响应;
- ITS截获HTML,剥离SAP GUI专属标签(如
<script src="/sap/public/bc/its/...">),注入CRM兼容的CSS/JS上下文,再返回给CRM。
提示:ITS必须部署在与CRM系统同域的ABAP应用服务器上(通常为CRM系统自身或专用ITS服务器),否则跨域iframe将被浏览器拦截。若试图用外部反向代理(如Nginx)替代ITS,会导致SAP GUI脚本加载失败、按钮点击无响应等玄学问题——这是无数团队翻车的第一步。
2.3 SSF与事务启动器的绑定关系
SSF(Service Specific Framework)在CRM中负责定义服务元数据,而事务启动器是其具体实现载体。二者通过CRMS_IC_CROSS_SYS事务配置强关联:
- 在SSF中创建服务时,服务类型必须选
Transaction Launcher; - 服务URL字段填写格式为:
/sap/bc/gui/sap/its/webgui?~transaction={T_CODE}&{PARAMS}; CRMS_IC_CROSS_SYS中需为该服务指定逻辑系统(Logical System)、RFC目的地(RFC Destination)及ITS服务URL(ITS Service URL);- 最终CRM前端通过
cl_crm_ic_service_factory=>get_service( )获取服务实例,调用execute( )方法触发ITS请求。
这种设计使事务启动器成为SSF服务生态中最轻量、最易维护的集成方式——无需维护单独的Web Service WSDL,无需编写RFC函数模块,所有配置均可在SAP GUI中完成。
3. 创建事务启动器四步法:从RFC连接到逻辑链接的完整链路
3.1 第一步:配置RFC连接(SM59)——连接池的“身份证”
RFC连接是事务启动器与ERP通信的物理通道,必须在CRM系统中配置(非ERP端)。进入事务SM59,创建新条目:
Connection Name: Z_ERP_FIN_001 " 命名规范:Z_系统_业务域_序号 Connection Type: 3 (TCP/IP Connection) " 必须选3,选1(G/W)会导致ITS无法识别 Target Host: 10.20.30.40 " ERP应用服务器IP(非数据库IP) System Number: 00 " ERP系统编号 System ID: ERP " ERP SID Client: 800 " ERP客户端号 User: Z_CRM_INTEGRATION " 专用集成用户(权限见避坑章节) Password: ******** " 密码需加密存储(勾选"Encrypted")参数说明:
Connection Type = 3是硬性要求,因ITS仅支持TCP/IP模式RFC连接;若误选1(Gateway),ITS在建立连接时会报RFC_ERROR_COMMUNICATION;User必须是ERP中已授权的账号,且该账号需具备S_TCODE(执行T-code权限)、S_GUI(GUI访问权限)、S_SERVICE(ITS服务权限)三个关键权限对象;- 测试连接务必点击
Remote Logon按钮,而非仅Connection Test——后者只测网络连通性,前者才真正模拟ITS调用流程。
3.2 第二步:定义逻辑系统(BD54)——跨系统通信的“户籍登记”
逻辑系统(Logical System)是SAP中标识不同系统的唯一ID,用于区分CRM与ERP的身份。进入BD54:
Logical System: Z_CRM_FSCM_01 " 格式:Z_系统_业务域_序号 Description: CRM Financial Shared Center注意:此逻辑系统必须在ERP端也通过
BD54创建并保持名称一致,否则后续BD97分配将失败。常见错误是CRM端建了Z_CRM_FSCM_01,ERP端却建了Z_ERP_FSCM_01,导致RFC调用时系统无法识别对方身份。
3.3 第三步:分配RFC连接到逻辑系统(BD97)——建立“户口与身份证”的绑定
BD97是关键枢纽,它将RFC连接(物理通道)与逻辑系统(身份标识)关联:
| Logical System | RFC Destination | Description |
|---|---|---|
| Z_CRM_FSCM_01 | Z_ERP_FIN_001 | Connects CRM FSCM to ERP Finance |
执行后,系统自动生成
LS(Logical System)与DEST(Destination)的映射关系。此步骤完成后,在SM59中该RFC连接的状态会显示Assigned to logical system,表示已可用于跨系统调用。
3.4 第四步:配置ITS服务URL(CRMS_IC_CROSS_SYS)——服务发布的“门牌号”
进入CRMS_IC_CROSS_SYS,创建新服务条目:
| Field | Value | 说明 |
|---|---|---|
| Service Name | Z_FB03_SUPPLIER_BALANCE | 服务名,将用于CRM前端调用 |
| Service Type | Transaction Launcher | 固定选此项 |
| Logical System | Z_CRM_FSCM_01 | 必须与BD97中分配的逻辑系统一致 |
| RFC Destination | Z_ERP_FIN_001 | 必须与SM59中定义的RFC连接名一致 |
| ITS Service URL | /sap/bc/gui/sap/its/webgui | ITS网关根路径,CRM与ERP共用此URL |
| Service URL Parameters | ~transaction=FB03&BUKRS={{company}}&LIFNR={{vendor}} | 动态参数模板,{{company}}等占位符由CRM前端JS注入 |
关键细节:
ITS Service URL末尾不能加斜杠,写成/sap/bc/gui/sap/its/webgui/会导致ITS返回404;Service URL Parameters中必须包含~transaction=前缀,否则ITS无法识别目标T-code;- 动态参数(如
{{company}})需与CRM前端调用时传入的JSON key完全匹配,大小写敏感。
4. 避坑:事务启动器配置中5个血泪经验换来的典型故障排查
4.1 现象:点击事务启动器链接,弹出空白iframe或“Page cannot be displayed”
原因:ITS服务URL配置错误或ITS服务器未启动。
排查:
- 检查
CRMS_IC_CROSS_SYS中ITS Service URL是否为/sap/bc/gui/sap/its/webgui(无尾部斜杠); - 在CRM系统中执行
SMICM,确认ITS服务状态为Active(端口8000/8001默认); - 直接在浏览器访问
http://<CRM_HOST>:8000/sap/bc/gui/sap/its/webgui,若返回SAP登录页则ITS正常,否则需检查SICF中/sap/bc/gui/sap/its节点是否激活。
4.2 现象:iframe中显示“Logon failed”或“Invalid user/password”
原因:RFC连接中配置的用户在ERP端无权限,或密码未加密存储。
解决:
- 在
SM59中该RFC连接下,勾选Encrypted复选框,重新输入密码并保存; - 登录ERP系统,用该用户执行
SU01,检查其权限对象:必须包含S_TCODE(授权FB03等T-code)、S_GUI(授权GUI访问)、S_SERVICE(授权ITS服务); - 若使用SNC认证,需在
SM59中启用SNC选项并配置SNC name。
4.3 现象:事务启动器能打开FB03,但供应商编号(LIFNR)参数未传入,显示全部供应商列表
原因:CRMS_IC_CROSS_SYS中参数占位符与前端JS传参key不一致。
排查:
- 检查
Service URL Parameters中是否为LIFNR={{vendor}},而非LIFNR={vendor}(少一个花括号); - 在CRM前端调试控制台中,确认JS调用
cl_crm_ic_service_factory=>get_service( )时传入的参数对象为{ vendor: "1000001" },key必须为vendor; - 使用浏览器开发者工具Network标签,捕获事务启动器发出的HTTP请求,检查URL中是否包含
&LIFNR=1000001。
4.4 现象:FB03页面打开后,点击“行项目”按钮无反应,或导出Excel功能失效
原因:ITS未正确剥离SAP GUI专属脚本,导致CRM iframe中JS冲突。
解决:
- 进入
SICF事务,定位节点/sap/bc/gui/sap/its,右键Edit Service→ITS Settings→ 勾选Strip ITS scripts; - 在
CRMS_IC_CROSS_SYS中,为该服务勾选Use Secure Communication(启用HTTPS),避免混合内容被浏览器拦截; - 若仍无效,需在ITS模板中手动注释掉
<script>标签(路径:/usr/sap/<SID>/SYS/global/its/webgui/下的HTML模板)。
4.5 现象:同一事务启动器在Chrome正常,但在IE11中报错“Object doesn't support property or method 'assign'”
原因:CRM前端JS使用ES6语法(如Object.assign),IE11不支持。
解决:
- 在CRM Web UI的
bsp_application中,引入core-jspolyfill(<script src="/sap/public/bc/ur/mimes/ur/js/core-js.min.js"></script>); - 或修改前端调用代码,用
jQuery.extend替代Object.assign; - 更彻底方案:在
CRMS_IC_CROSS_SYS中启用Legacy Browser Support选项(若SAP版本支持)。
5. 外部系统连接实战:用BOR对象封装事务启动器调用逻辑
5.1 为什么需要BOR对象?——解耦前端与配置的“中间件”
事务启动器配置(CRMS_IC_CROSS_SYS)是静态的,但业务场景常需动态决策:比如“当客户信用等级为A时,调用FB03查余额;为B时,调用FBL1N查明细”。若前端JS硬编码所有分支逻辑,一旦T-code变更或参数规则调整,需全量发布前端代码。BOR(Business Object Repository)对象提供了一种服务编排层:将事务启动器调用封装为BO方法,前端只需调用统一接口,具体路由逻辑由ABAP层控制。
5.2 创建BOR对象(SWO1):定义可复用的服务契约
进入SWO1,创建新BO:
| Field | Value | 说明 |
|---|---|---|
| Object Name | ZFIN_TRANS_LAUNCHER | 前缀Z+业务域+功能 |
| Description | Financial Transaction Launcher | |
| Super Object | BusinessPartner | 继承标准BO,复用其事件与方法 |
在Methods标签页添加方法:
| Method Name | Type | Description |
|---|---|---|
| LAUNCH_FB03 | Instance | Launch FB03 with dynamic parameters |
在Parameters中定义输入参数:
| Parameter | Type | Direction | Description |
|---|---|---|---|
| IV_BUKRS | CHAR10 | Import | Company Code |
| IV_LIFNR | CHAR10 | Import | Vendor Number |
| IV_DISPLAY | CHAR1 | Import | Display mode ('X'=popup) |
5.3 实现LAUNCH_FB03方法:动态拼装事务启动器URL
在SE24中打开该BO,双击LAUNCH_FB03方法,编写ABAP代码:
METHOD launch_fb03. DATA: lv_service_name TYPE crms_ic_service_name VALUE 'Z_FB03_SUPPLIER_BALANCE', lv_service_url TYPE string, lv_params TYPE string. " 构造动态参数字符串 CONCATENATE '~transaction=FB03' '&BUKRS=' iv_bukrs '&LIFNR=' iv_lifnr INTO lv_params SEPARATED BY space. " 获取事务启动器服务URL CALL FUNCTION 'CRMS_IC_GET_SERVICE_URL' EXPORTING iv_service_name = lv_service_name iv_parameters = lv_params IMPORTING ev_service_url = lv_service_url. " 返回URL供前端iframe使用 ev_service_url = lv_service_url. ENDMETHOD.关键点说明:
CRMS_IC_GET_SERVICE_URL是SAP标准FM,自动读取CRMS_IC_CROSS_SYS中配置的ITS URL并拼接参数;- 此方法不直接执行RFC,只返回URL,确保前端可控性;
- 若需后台执行(如定时查余额),可改用
CALL FUNCTION 'CRMS_IC_EXECUTE_SERVICE'触发同步调用。
5.4 前端调用BOR方法:一行JS搞定动态服务路由
在CRM Web UI的HTML模板中,调用BOR方法:
// 获取BOR对象实例 var oBo = new sap.crm.ic.bo.ZFIN_TRANS_LAUNCHER(); // 调用方法,传入动态参数 oBo.launch_fb03({ iv_bukrs: "1000", iv_lifnr: "1000001", iv_display: "X" }, function(oResult) { // oResult.ev_service_url 即拼装好的ITS URL document.getElementById("fb03_iframe").src = oResult.ev_service_url; });此方案优势:
- 前端无需知道任何T-code或参数规则,所有业务逻辑在ABAP层维护;
- 新增T-code(如FBL1N)只需在
CRMS_IC_CROSS_SYS中配新服务,并在BOR中新增方法,前端零改动;- 权限控制可细化到BOR方法级别(通过
S_DEVELOP对象授权),比直接暴露RFC连接更安全。
6. 验证与压测:用真实财务场景检验事务启动器的健壮性
6.1 构建三类验证场景:覆盖90%财务共享高频操作
事务启动器的价值不在“能连上”,而在“连得稳、参数准、响应快”。我一般会用以下三类场景做闭环验证,每类场景都对应真实财务共享中心日报表需求:
| 场景类型 | 对应T-code | 验证重点 | 参数组合示例 |
|---|---|---|---|
| 主数据查询 | FK03 | 供应商主数据实时性、地址/银行信息完整性 | LIFNR=1000001,BUKRS=1000 |
| 凭证查询 | FB03 | 凭证余额准确性、行项目分页加载性能 | BUKRS=1000,BELNR=1234567890,GJAHR=2024 |
| 明细账查询 | FBL1N | 大数据量下HTML渲染速度、导出功能可用性 | BUKRS=1000,HKONT=0000123456,BUDAT=20240101 |
执行步骤:
- 在CRM Web UI中打开对应事务启动器链接;
- 使用浏览器Network面板记录完整请求链路(DNS→TCP→TLS→HTTP→ITS→ERP);
- 记录首字节时间(TTFB)、DOM加载完成时间、交互可操作时间;
- 对比直接登录ERP GUI执行相同T-code的耗时,差异应≤1.5秒(网络延迟合理范围)。
6.2 压测关键指标:并发数、错误率、内存泄漏
财务共享中心高峰期常有200+用户同时查供应商余额,事务启动器必须扛住压力。我用JMeter模拟并发,监控以下指标:
| 指标 | 合格阈值 | 超标根因与对策 |
|---|---|---|
| 平均响应时间 | ≤2.5秒 | 超时多因ITS服务器CPU超80%,需增加ITS应用服务器实例 |
| 错误率(HTTP 5xx) | 0% | 常见于RFC连接池耗尽,需在SM59中增大Max. no. of connections |
| 内存占用(ITS进程) | ≤1.5GB/实例 | 内存泄漏多因HTML模板未关闭<script>标签,需检查ITS模板清理逻辑 |
| RFC连接等待时间 | ≤300ms | 超时说明SM59中Connection pool配置过小,建议设为50+ |
实操技巧:在
SM50中观察ITS工作进程(disp+work),若发现大量进程状态为WAIT且Time列持续增长,即为RFC连接池瓶颈。
6.3 审计追踪:让每一次事务调用都可追溯
财务系统对审计要求极高,事务启动器调用必须留痕。SAP提供两种原生审计方式:
方式一:启用ITS日志(推荐)
- 进入
SICF→/sap/bc/gui/sap/its→Edit Service→Logging→ 勾选Log all requests; - 日志路径:
/usr/sap/<SID>/SYS/global/its/webgui/log/; - 日志内容含:调用时间、CRM用户、ERP用户、T-code、完整URL参数、响应状态码;
方式二:增强BOR方法写审计表
在LAUNCH_FB03方法末尾添加:
INSERT INTO zfin_trans_log VALUES ( sy-datum, sy-uzeit, sy-uname, iv_bukrs, iv_lifnr, 'FB03', sy-subrc ).从那以后我每次上线新事务启动器,都强制走一遍这三类验证场景+压测+审计配置,哪怕客户说“先上线再优化”。因为财务数据的误差没有后悔药——一次参数传错导致的余额显示偏差,可能引发整个共享中心的对账风暴。希望帮到你。
本文还有配套的精品资源,点击获取