ABAP Dialog开发疑难解析(一)——屏幕编辑器启动失败的深度排查
1. 症状屏幕编辑器为何突然罢工最近在开发ABAP Dialog程序时突然发现图形布局编辑器死活打不开。点击屏幕编辑按钮后要么直接闪退要么默默切换到了字符模式。这种问题在SAP GUI 7.4以后的版本特别常见尤其是当你的开发环境涉及跨系统RFC调用时。具体表现可能有以下几种情况点击布局按钮后毫无反应就像没点过一样弹出错误提示无法启动图形布局编辑器RFC版本编辑器窗口闪现一下就自动关闭系统自动回退到字符模式的布局编辑器遇到这种情况先别急着重启SAP GUI因为问题很可能出在RFC通信环节。我遇到过最典型的情况是开发机和应用服务器之间突然网络抽风导致RFC连接建立失败。这时候去查系统日志通常能在dev_eusp进程ID和dev_rfc.trc这两个跟踪文件里找到蛛丝马迹。2. 深度排查六种常见死法分析2.1 防火墙拦路虎在dev_eusp跟踪文件里看到RFCMgr_accept出错未接受同时在dev_rfc.trc里发现ERROR路由许可被拒绝的提示这八成是防火墙在作怪。现代企业网络为了安全通常会在前端开发机和应用服务器之间设置防火墙。图形布局编辑器需要用到33nn端口nn是你的系统编号如果防火墙没开这个口子RFC连接就会被无情拒绝。我去年给某客户做开发时就踩过这个坑。他们的安全团队刚更新了防火墙策略把33开头的端口全禁了。解决方案有两个要么让网络管理员把这个端口加入白名单要么在本地开发环境安装应用服务器组件。考虑到安全性我们最终选择了后者。2.2 服务名对不上号跟踪文件报错服务sapgw服务ID未知这说明参与RFC通信的某台主机不认识这个服务名。常见于以下几种场景前端开发机的services文件缺少sapgw条目网关主机配置不完整系统升级后服务名变更但配置未更新上周我就帮同事解决了这个问题。他刚换了新电脑SAP GUI装好后一直没法用图形编辑器。检查发现是他本机的services文件里少了sapgw00 3300/tcp这行配置。补上这行后立即就能用了。2.3 网关超时设置太短gw/cpic_timeout这个参数控制着网关等待RFC连接建立的超时时间默认20秒在高负载网络中可能不够用。表现症状是连接建立超时跟踪文件里会记录超时错误。这个问题在跨国开发团队中特别常见因为网络延迟较高。建议把这个值调到60秒RZ10 - 选择实例配置文件 - 修改gw/cpic_timeout60改完后别忘了重启网关服务。我在给日本客户做远程支持时就经常需要调整这个参数。2.4 系统参数误配置abap/no_sapgui_rfc这个参数如果被设为非空或非0值就会禁止通过RFC启动图形布局编辑器。检查方法事务码SU3 - 参数标签页 - 输入abap/no_sapgui_rfc如果发现被设置了赶紧改成空格或0。记得改完后重启应用服务器否则不生效。2.5 权限检查的坑即使auth/rfc_authority_check参数设为不检查系统仍可能报用户xxxxxx没有RFC权限。这是SAP的一个老bug了从4.5版本就存在。需要通过应用Note 93254的补丁来解决或者直接给用户分配RFC权限。2.6 Unicode系统的特殊问题在Unicode系统里如果EU_SCRP_WN32这个RFC目标的通信类型设成了Unicode就会报EU_SCRP_WN32连接已关闭无数据错误。解决方法运行SM59找到EU_SCRP_WN32目标在MDMP Unicode标签页将通信类型改为非Unicode这是因为图形布局编辑器本身不支持Unicode字符编辑。我在处理韩国客户的系统时就遇到过这个问题改完设置立即见效。3. 解决方案对症下药3.1 防火墙问题的破解之道如果确定是防火墙问题可以尝试以下方案联系网络管理员开放33nn端口在开发机本地安装应用服务器组件使用SAProuter并正确配置路由表对于方案3需要修改SAProuter的权限表添加类似这样的条目P 前端IP 后端IP 服务 密码记得测试时先用临时密码确认没问题再设正式密码。3.2 服务缺失的补救措施针对服务名识别问题需要检查所有相关主机的services文件。在Windows上这个文件通常位于C:\Windows\System32\drivers\etc\services需要确保包含类似这样的条目sapgw00 3300/tcp # SAP Gateway在Unix系统上还要检查/etc/services文件。改完后建议重启SAP GUI和相关服务。3.3 超时参数优化方案除了调整gw/cpic_timeout还可以考虑以下优化增加gw/max_conn参数值优化网络质量减少丢包在非高峰时段进行图形编辑操作对于跨国团队建议在本地搭建开发环境避免跨洲际使用图形编辑器。3.4 参数配置最佳实践修改系统参数时要注意先在测试系统验证记录修改前的原始值修改后立即备份参数文件监控修改后的系统表现特别是abap/no_sapgui_rfc这类敏感参数改动前最好先和BASIS团队沟通。3.5 权限问题的终极解决方案对于顽固的权限检查问题可以尝试应用最新的支持包手动分配S_RFC权限创建专门的RFC用户使用SU01给用户添加RFC相关权限对象记得检查SAP Note 93254的适用性有些新版本已经修复了这个bug。3.6 Unicode环境的特殊处理在Unicode系统中使用图形布局编辑器时还需要注意屏幕元素不要使用Unicode字符字段标签等文本内容也要用非Unicode考虑使用SE51的字符模式作为替代方案定期检查EU_SCRP_WN32目标的配置对于多语言项目建议先在非Unicode系统中开发屏幕再迁移到Unicode系统。4. 预防措施让问题不再发生经过多次踩坑后我总结了一套预防措施新环境部署检查清单验证services文件配置检查防火墙设置测试RFC连接确认系统参数默认值开发机标准化配置统一安装SAP GUI版本预配置services文件设置合理的网关参数禁用不必要的防火墙规则定期健康检查每月验证图形编辑器功能检查关键RFC目标状态审核系统参数变更更新支持包团队知识共享建立内部知识库记录典型问题案例开展定期培训制定应急预案最近我们团队在新项目启动前都会先跑一遍这个检查清单把问题扼杀在萌芽状态。特别是对于外包开发团队这套预防措施能省去很多后期调试的麻烦。