ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

SAP CRM WebClient 稳定 Deep Link 直达订单创建界面实战

SAP CRM WebClient 稳定 Deep Link 直达订单创建界面实战 SAP CRM WebClient 用久了你迟早会遇到这样一个需求希望用一个稳定的 Deep Link点一下就直接打开 Sales Order 的创建界面而不是先登录工作台、再进销售订单列表、再点新建按钮。这个需求听起来简单但真正落地过的人都知道坑全藏在 URL 的参数细节里——同一个链接上午还能用下午就跳回起始页了在 IE 里正常换到 Chrome 又不行给同事发过去对方点开直接报错。这篇内容就是把我实际调试过程中踩过的坑、验证过的方法和最终沉淀下来的稳定链接模板完整讲清楚如果你正在做 CRM WebClient UI 的门户集成、书签直达或流程入口优化可以少走很多弯路。1. 为什么一键直达会成为刚需业务成本与技术选型1.1 每天多点的那几下一年下来是几天的工作量先算一笔账。销售助理每天录入销售订单平均一天二十单左右。每次都要登录 CRM 工作台点击销售订单模块进入订单列表再点新建最少四次点击如果系统响应慢一点每次大约多花三十秒。二十单就是十分钟一个月就是三个多小时一年下来接近两天的工作量。这还只是一个人。一个销售团队十个人成本直接乘以十。可能有人会说这也不过是两天而已。但业务侧的真实痛点不只是多点几下——关键是高频重复动作会明显加重使用者的疲倦感而且点错菜单、进错界面的概率也更高。很多企业做 CRM 推广时销售对录入订单这件事本身不抵触抵触的是每次都要在复杂菜单里绕路。这时候一个点开就是这个界面的直达链接本质上是在降低工具的使用门槛属于性价比极高的体验优化。1.2 稳定二字的真实含义市面上能打开 SAP CRM WebClient 的 URL 并不少随便复制浏览器的地址栏都会得到一个非常长的链接但绝大多数都不具备稳定这个属性。这里说的稳定至少包含四层含义链接不依赖当前浏览器会话状态换台电脑、换个浏览器同一个链接贴出去仍然能从登录页正常走通。直达目标界面而不是先弹出一个搜索列表或者工作台首页让使用者还得再点一次。参数不包含动态会话段避免因为 URL 中嵌入了临时会话 ID 导致链接三天后彻底失效。在不同客户端、语言环境下都能自动适配不会出现用户明明坐在中国区配了中文环境打开却是英文界面的情况。把这四条标准列出来之后你就可以理解为什么直接从地址栏复制出来的 URL 不够用——它往往包含当前会话的临时标识而这个标识一旦失效整个链接就废了。1.3 核心选型思路实现稳定 Deep Link的路径大体上有三条直接拼 WebClient UI 的 BSP URL 参数、在角色菜单中维护快捷项生成内部链接、通过门户 iView 封装。三条路径本质上都在做同一件事——构造一个符合 BSP 导航协议的无状态 URL。理解这个协议是你手工拼出稳定链接的前提也是排查异常的根本依据。所以下面先把这个 URL 的组成机制说清楚。2. 先搞懂 WebClient UI 的 URL 是怎么组成的2.1 入口 BSP 应用与 default.htmSAP CRM WebClient UI 的前身是基于 BSPBusiness Server Pages的 Web 应用框架所有界面统一由一个入口应用加载。这个入口应用就是你看到的 URL 里那串/sap/bc/bsp/sap/crm_ui_start/路径所在的 BSP 应用默认页面通常是default.htm或者default.aspx。不论你最后打开的是销售订单、客户主数据还是服务工单浏览器地址栏里永远都带着这个入口路径。所以一个完整的 Deep Link 必然以类似下面的形态开头https://your.crm.server.com:44300/sap/bc/bsp/sap/crm_ui_start/default.htm这里有一个经常被忽略的点注意是https还是http。如果用错了协议即使后续参数完全正确也可能因为网关配置的端口差异导致页面无法访问。建议在正式环境固定使用系统管理员给出的统一入口地址不要自己猜测端口。2.2 三个核心导航参数命令、模块、对象进入 BSP 应用之后页面根据什么来决定显示什么内容答案是一组导航参数。WebClient UI 的导航机制虽然封装得比较深但对外暴露的参数核心就是三个参数名含义典型值说明crm_bsp_cmd导航命令open、create、search决定执行的是打开、新建还是搜索动作crm_bsp_module目标组件名CRM_ORDER决定加载哪个业务组件销售订单在这里crm_bsp_object业务对象类型SALES决定组件内的业务操作类型SALES 对应销售订单这三个参数通常需要同时出现。crm_bsp_moduleCRM_ORDER决定组件crm_bsp_objectSALES决定是销售订单这个业务对象crm_bsp_cmdopen决定以打开/新建的模式进入。用生活化的类比来说命令参数是你要干什么模块参数是你要去哪个大厅对象参数是在大厅里找哪个柜台。三者组合在一起才能唯一定位到在销售订单组件里新建销售订单这个交互场景。值得注意的是crm_bsp_cmd的具体支持值在不同 CRM 版本、不同 UI 组件上会有差异。有些版本用create有些版本用new还有一些版本需要在open的基础上通过额外参数触发创建模式。所以这里我不建议你死记硬背某个固定的参数组合而是要把下面第 3 节讲的抓真实 URL方法学会拿到你系统里实际生成出来的参数组合作为基准。2.3 会话、客户端与语言参数最容易埋雷的地方除了导航参数URL 上还要带一组环境参数最常用的是sap-client和sap-language。前者指定 SAP 客户端编号比如100后者指定登录语言比如EN或ZH。为什么要显式带这两个参数因为 Deep Link 的使用者可能分布在不同的客户端环境。如果链接里不写sap-client系统会取用户默认客户端这本来就还好但如果你把链接发给另一个客户端的同事对方打开后可能进入完全不同的数据环境。同理sap-language不写也不会有大问题但实际测试中我发现某些版本会默认跳到系统语言导致英文环境下打开中文界面或者反过来。所以稳定链接上显式带上这两个参数算是一种防御性写法。环境参数中最大的雷是动态会话段。当你登录后从浏览器地址栏复制 URL经常会得到类似这样的地址https://your.crm.server.com:44300/sap(bD40xxxxxxxx)/bc/bsp/sap/crm_ui_start/default.htm?...路径里那串(bD40xxxxxxxx)就是 ABAP 会话 ID。这个会话 ID 一旦过期或换一台机器访问链接就无法复用。构造稳定 Deep Link 时必须把这个段去掉。后面第 4 节我会专门讲这个问题的表现和排查思路。3. 拿到创建销售订单的真实 URL抓取与清洗3.1 用浏览器开发者工具捕获真实请求既然不同版本参数有差异最稳妥的办法不是猜而是让自己系统里生成一个真实可用的 URL然后作为模板。操作路径很简单打开 WebClient UI手工进入新建销售订单的创建界面在浏览器开发者工具中打开网络面板定位最后一次页面跳转请求的 URL。具体步骤可以这样操作在你的工作环境里登录 CRM使用 IE 模式或 Edge 浏览器打开 WebClient UI。按 F12 打开开发者工具切到 Network / 网络选项卡勾选 Preserve log。按正常路径操作进入销售订单模块 - 点击新建销售订单直到创建界面完整加载出来。在网络记录里找到以crm_ui_start开头的文档请求一般是 Doc 或 Fetch/XHR 类型点开查看完整的请求 URL。这个请求 URL 就是系统在当前版本、当前配置下真正使用的 Deep Link。把它复制出来你会看到里面既有导航参数又有很多额外的视图状态参数比如crm_bsp_scope、crm_bsp_context、视图 ID、字段默认值之类的。这些参数多数是当前界面上下文的一部分不能直接全删。3.2 用 WebClient 自带的 URL 查看功能如果觉得开发者工具太麻烦还有另一个更省事的办法。WebClient UI 的界面工具栏上某些版本自带一个显示 URL 的小功能具体入口通常是视图图标或URL按钮点击后会把当前视图对应的完整导航 URL 显示在一个弹窗里。这个 URL 比地址栏里的更干净因为它往往已经剥离了部分会话信息。我个人的习惯是把开发者工具抓到的 URL 和系统自带功能显示的 URL 放在一起比对这样能快速分辨哪些参数是导航必需的、哪些是当前视图临时附加的。两边的交集往往就是要保留的最小参数集合。3.3 参数减法把长 URL 洗成最小可用集拿到完整 URL 之后接下来的工作就是做减法。这里的经验法则是一次只删一个参数删完立刻在当前浏览器里强制刷新测试看是否还能正确打开创建界面。不能为了省事一次性删掉多个参数否则一旦出错你不知道是哪个参数导致的。以我实际处理过的一个链接为例原始 URL 大概长这样https://your.crm.server.com:44300/sap/bc/bsp/sap/crm_ui_start/default.htm?sap-client100sap-languageENcrm_bsp_cmdopencrm_bsp_moduleCRM_ORDERcrm_bsp_objectSALEScrm_bsp_scopeSCcrm_bsp_contextFIRSTcrm_bsp_fieldsTYPE,STANDARD经过逐参数删除测试最终能稳定直达创建界面的最小集是https://your.crm.server.com:44300/sap/bc/bsp/sap/crm_ui_start/default.htm?sap-client100sap-languageENcrm_bsp_cmdopencrm_bsp_moduleCRM_ORDERcrm_bsp_objectSALES但不是说我这个案例里的最小集放在任何系统上都适用。有些系统里crm_bsp_scope和crm_bsp_context是必需的删掉后系统会退回工作台首页。所以正确做法是用你自己的系统数据做减法验证把测试通过的组合记为基准链接。这个过程大约十五分钟换来的是长期稳定的入口值得做。4. 真实环境里影响链接稳定性的四个因素4.1 动态会话段进入 URL为什么复制的链接过几天就失效这是最常见的翻车场景。你在系统里复制了地址栏 URL放进邮件发给业务同事前两三天还能正常打开某一天开始点击后先是跳到登录页登录完又回不到目标界面甚至直接 404。根因就是 URL 路径里那串sap(bD...)动态会话段。这段会话 ID 的工作原理是用户登录后SAP ICMInternet Communication Manager会在 URL 中加入当前 ABAP 会话的标识系统靠它维护状态。一旦这个会话在服务器端超时或被清理URL 中写死的 ID 就成了死链接。所以我在第 3 节清洗链接时第一步就是检查路径中是否有sap(...)这样的括号段有就删掉。删除之后的效果是链接不再绑定某个特定会话用户每次点击时如果浏览器里没有有效登录 cookie系统会先引导登录登录成功后自动继续导航如果有有效会话则直接复用。这才是稳定 Deep Link应该有的行为。4.2 登录前置与 cookie 的关系删掉会话段之后新的问题来了用户点击链接时如果根本没有登录会发生什么SAP WebClient UI 有一个默认行为——未登录时会重定向到登录界面登录完成后往往会回到登录前试图访问的路径。但这个回跳逻辑在不同版本、不同配置下表现不一致。有些版本登录后会掉回工作台首页而不是你原本要直达的销售订单创建界面。针对这个问题有两种处理思路。一种是在 Deep Link 的推广说明里明确要求用户先登录一次再使用书签这样浏览器里已经种下了有效的会话 cookie后续再访问无会话段的链接时就能直接复用。另一种是依赖企业级单点登录SSO环境通过登录票据或反向代理自动登录让用户完全无感知登录。前者实施成本极低适合小范围推广后者体验最好但需要网络和安全团队配合。从我的经验看如果只是为了内部提效先让用户登录一次再收藏书签已经足够。真正的拦路虎反而是下面这个浏览器兼容问题。4.3 浏览器兼容性Chrome 打开后的种种怪现象SAP CRM WebClient UI 这套 BSP 框架出身比较早底层交互大量依赖 IE 内核特性。官方支持的浏览器以 IE 和 Edge 为主Chrome 下不是说完全不能用但经常出现一些诡异现象界面加载到一半报脚本错误、工具栏按钮点了没反应、下拉框无法打开等。我在给团队推广 Deep Link 的时候就吃过这个亏——我自己用 Edge 调得好好的发给一个用 Chrome 的同事对方说点开链接后界面是空的。后来的解决办法是引导同事使用 Edge 浏览器的 IE 模式打开链接或者直接把系统地址加入 Edge 的允许在 IE 模式下重新加载的站点列表。如果你们是门户集成环境也可以考虑在 iView 层面设置浏览器兼容策略。这一步属于落地推广前的必要准备不然后面一定会收到一大波链接坏了的反馈。4.4 版本差异与参数容错能力SAP CRM 经过多年演进WebClient UI 在不同版本上的导航参数解析逻辑存在细微差别。同样是crm_bsp_cmd有的版本默认走搜索列表有的版本直接进创建页。这种差异靠记忆解决不了唯一的办法是回归到第 3 节的抓包方法在你自己的系统里抓出真实参数。另外要注意 Enhancement Pack 和 Add-on 的影响某些行业解决方案会在订单组件上挂额外的启动参数所以在拼链接时不要迷信网上搜到的官方模板一切以本地实测为准。5. 落地为团队可用的入口书签、门户 iView 与推广验证5.1 浏览器书签与桌面快捷方式当你的系统里已经清洗出一个最小稳定链接最简单粗暴的落地方式就是发给团队让大家存为浏览器书签。如果你还想再进一步可以做一个小工具用.hta文件或者浏览器策略配置让同事双击桌面图标就能用默认浏览器打开这个链接。对于绝大多数销售助理来说桌面放一个图标双击直接进新建订单页面的接受度比收藏夹里找到一个书签高得多。不过这里我强烈建议把链接发给同事之前至少完成一次多浏览器测试。尤其是确认 Edge 的正常模式和 IE 模式行为是否一致。如果只在 Edge 正常而团队里有人用 Chrome就需要把浏览器环境要求一并写清楚避免后续产生的链接打不开问题最后都堆到你这里。5.2 门户与 OA 集成如果你公司有 SAP NetWeaver Portal 或者企业 OA 门户也可以把稳定 Deep Link 封装为一个 iView 或门户链接。这样用户登录一次门户后直接点击门户里的新建销售订单图标就能打开 CRM 创建界面。门户集成的好处是前台入口统一用户不直接接触 URL 参数即使后台需要调整参数也只需要改 iView 配置不需要重新培训用户。这里要特别注意连接协议。门户和 CRM 系统如果是不同的域名浏览器跨域访问时有可能会丢弃 cookie导致用户从门户点击链接后又被要求登录。这种情况下需要在门户侧配置协议桥接或者使用反向代理让两个系统在用户视角下处于同一个域名下。这不是 Deep Link 本身的问题而是门户集成的经典坑提前做好预期管理。5.3 上线前验证清单最后分享一张我在推广前必做的验证清单你可以直接抄作业检查项预期结果失败时的常见原因未登录状态下点击链接跳转到登录页登录后能继续进入目标界面无会话段未删除干净或回跳逻辑失效已登录状态下点击链接直接进入新建销售订单界面导航参数缺失或浏览器不兼容换一台电脑测试行为与主电脑一致浏览器兼容设置未配置或用户权限不足第二天再次测试链接依然有效不会报 404链接带动态会话段需要清洗不同客户端用户各测一次都能进入与客户端对应的数据环境sap-client参数被遗漏或系统级默认客户端不一致这套验证不用全自动手工跑一遍大约二十分钟但能拦截绝大多数上线即翻车的问题。我个人的习惯是做完上述所有工作之后再把链接放进浏览器收藏夹、模拟业务人员每天第一次打开时的场景完整走一遍确认从登录到进入创建界面不需要额外点击。经过这一轮验证的 Deep Link才算真正可以交给业务团队长期使用。
RELATED READING

延伸阅读

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