# 关于PCE项目经验分享
原创 郭翔 [ 建广技师 ](javascript:void\(0\);)
__ _ _ _ _
经历过了2个PCE的项目,就开发而言,基本上和在OP系统上开发体验一致。我们在项目上接口大部分都是在使用RFC、webservice、HTTP
POST之类的技术,对于双方系统的开发而言,对接起来方便,可以查询的文档也比较丰富,基本上没有什么难度。当然,差异还是有的。这里我就给大家简单介绍下开发中常用的问题。
**** **第三方RFC直接调用SAP的BAPI**
PCE项目开发周期都比较短,所以一些接口开发已经由外围系统直接调用BAPI函数来做。优点是省去了SAP的开发时间,不再做机械封装BAPI函数的工作;缺点是SAP这边记录日志会比较复杂,另外有一定的安全风险。
PCE默认是禁止外部系统调用系统的远程函数。我们需要在RZ10固化参数:ucon/rfc/check_blacklist = 0(参考NOTES:
https://launchpad.support.sap.com/#/notes/2295840 )。之后外围系统就可以自由的调用BAPI了。
**** **画屏幕DUMP**
毕竟是公网上的系统,SAP在安全性上做了很多限制。我们在使用绘制Dialog屏幕的时候会不停的被这类型的Dump信息干扰:
可以看到,绘制屏幕时,系统内部也是在调用一些远程函数,但是被SAP的安全机制给拦截了。我们需要打开SM59-TCP/IP连接-
EU_SCRP_WN32,来添加一些白名单信息:
RS_SCRP_GF_PROCESS_640 RFC_GET_FUNCTION_INTERFACE
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_PROCESS_640RFC_GET
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_RBUILDINFO
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_RDDICFIELDS
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_RELEMTABLE
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_RICONS
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_RKEYS
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_RKEYTEXTS
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_RMESSAGES
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_RPROPTABLE
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_RSTATUS_40
RS_SCRP_GF_PROCESS_640 RS_SCRP_GF_RTEXTS
常见的错误(我报过错的)有上面这些,添加过后基本上就不会再报错了。如果报了,就打开ST22参考dump提供的信息添加白名单即可。
**** **LTMC批导**
过去做ECC和OP的项目,我们需要自己开发批导程序,来完成一些主数据接口的批导工作,现在SAP提供了LTMC工具来完成批导。LTMC服务和应用服务器并不在一起(我们GUI登录的服务器就是应用服务器),因此直接事务代码登录可能无法打开。登录可能需要顾问自己配置hosts文件。LTMS的工作原理实际上就是在调用我们的BAPI程序,因此这里就有一些限制,比如物料主数据,增强字段是无法导入的,但是像设备的主数据就可以实现增强字段的导入。为了导入增强字段,我们需要在事务代码LTMOM对BAPI进行增强。增强分为两部分,一部分是传统的对BAPI进行增强,另一部分是在LTMOM这里进行字段的映射。如果你想批导大量含有增强字段的主数据,不太建议使用LTMC。此外LTMC的批导速度相对于自开发程序,会慢一些,但是因为时上传文件后完全在服务器上执行,稳定性会比前台使用GUI导入要高出很多。
**** **BP创建的奇葩错误**
批导毕竟少不了增强字段,所以有时候放弃才是最省时省力的方案。毕竟我们有成熟的批导解决方案,又不是不能用,对吧!
对吧?
最近BP创建供应商发生了一个很奇怪的事情。BAPI_BUPA_CREATE_FROM_DATA创建完BP基础视图,需要先扩充角色BAPI_BUPA_ROLE_ADD_2,BAPI_TRANSACTION_COMMIT,然后才能写入银行数据,不然会DUMP。
可疑的一点是,参考过两套2020年版本的S4系统,可以先创建基础视图,写银行数据,最后扩充角色,一次性提交,没有问题。但是现在手上的这台2021年版本的系统会出现这样的错误。
这个问题需要大家后面注意并验证一下。LTMC的批导本身分视图,并且没有增强字段,可能体现不出来这个问题。BP相关的批导程序在2021年之后的版本可能需要改造,也可能使用之前的导入过程不报错。
**** **复杂网络环境建议使用中间件**
上次烦恼接口的时候,还是因为复杂的业务处理逻辑和加锁,秃了我一半的头发,今天我另一半头发,秃在了企业复杂的内网环境。PCE服务器是在网络运营商手中,通过代理配置实现与企业内网的信息通讯。但是,这个连接是以白名单的形式,指定网段连接。如果企业内网本身是异地分布,并试图这样连接SAP,就非常考验企业IT的网络技术能力了:
我自己比较建议使用中间件,或接口直连:
建议在上SAP系统之前,先处理好企业内部的网络问题,保证分布式或者其他形式存在的企业内网畅通,然后再上SAP,这样可以一次性将网络相关的内容配置好。后期因为网络相关的问题再与SAP相关部门沟通,会比较困难,花费的时间也会比较多。
**** **接口直连的准备工作:配置负载均衡器(Loadbalancer)**
https://sapvideoa35699dc5.hana.ondemand.com/?entry_id=1_z9b5cxrk
虽然是私有云系统,但可以通过向SAP提交工单,配置负载均衡器,也可以实现例如HTTP POST、Webservice接口的互相调用。
你可以向SAP
ECS部门邮件联系(sap.ecs.private.cloud.customer.center@sap.com),申请Loadbanlancer的模板和根据你实际业务需求的教学指导。模板我这里介绍其中的2个Sheet页。它可以帮助你完成SAP应用服务器与第三方系统之间的互联。
Internet Proxy (Outbound HTTPS)
这个SHEET页维护的是SAP调用第三方接口的信息。
Source System SIDs,主要是为了区分这个是哪个系统,生产还是非生产,测试还是开发。
Destination URLs or IP Addresses,填写第三方接口地址或者IP地址,SAP给出的建议是填上第三方系统的接口地址。
Destination Protocol / Port:第三方系统提供接口地址的端口号,没有指定的话,一般是默认HTTP 80端口,HTTPS 433端口。
Backend Server host names or IP addresses those needs
outbound,是SAP哪个服务器在调用第三方的接口,是GUI的应用服务器,还是某些SAP的中间件产品或者应用产品所在的服务器IP。这里放心的填写你所知道的内网IP即可。
Application Gateway (External)
这个SHEET页维护的是外围系统连接SAP的配置。这里的配置会比较复杂,我们需要手上有一个PCE Lauchpad权限的账号。登录网站SAP Support
Portal Home,点击Access My Launchpad。
后面的操作可能有差异,请大家注意。
找到System Operations and Maintenance的My Landscape。
在弹出的新页面找到Landscape Applications,点击HEC Landscape。
弹出的新窗口里,我们可以看到这样的界面。
这里默认是只会看到生产系统相关的内容,如果你想看到其他系统的内容,需要修改下这里的筛选:
我们需要了解这些服务器直接的关系。以这里的系统为例,我们的接口是通过SAP Web
Dispatcher先连接,进行负载均衡,然后才进入SAP的应用服务器。比如生产机PS4有WS3和WS4两个服务器做负载均衡,开发机DS4和测试机QS4共用一个WS1服务器做负载均衡。
SAP Web Dispatcher的介绍看这里:
SAP Web Dispatcher - SAP Documentation
我们需要收集的信息都在SAP Web Dispatcher上。以WS1为例。
打开WS1的页面,点击Additional
Information页签,可以看到一个网址。请注意,SAP也是会犯错的,如果打不开,且端口号是44380,请自行使用https来进行访问。如果需要配置hosts文件,首先点击Application
Instances页签,确定Instance Type为Web Dispatcher的行,记住他的Host Name是什么。
然后点击Computer Systems页签,点击IPs的图标,根据Host Name来查看对应FQDN的IP。
这里我们还需要下载一个PDF文件,这里记录了一些信息。
现在我们看着文件填写模板了。如果是使用SAP提供的默认信息,并且是系统直接的直连,表格的填写会简单很多。
Tier Type (PROD / non-PROD):这里选择你是生产系统还是非生产系统。
Backend System ID:填写负载均衡器和应用服务器之间的关系。
Internet FQDN:打开刚才的PDF,Location-Dependent
Domain是你的三级域名,大部分情况下,这个三级域名所有系统都是一样的,你需要自定义加些东西,使它成为一个四级域名。比如dev-
cust.chn1.sap.XXXXX.com。红色部分随便起名,区分开生产开发测试即可,蓝色部分请参考你的文档。
Application Gateway Listener Port:一般来说保持默认即可。
Public IP Address (Frontend):保持默认,这个IP是云服务器供应商提供的。
Pool Members to be Assigned (IP
Address):这里一行填写你的FQDN地址,一行填写对应的IP地址,如果你的应用服务器有多个SAP Web Dispatcher,就全部依次填上即可。
这里的信息和网页Computer Systems页签里的信息一样。另外吐槽一下,这里的FQDN显示不完整,我只好用Host Name和Location-
Dependent Domain拼接成完整的四级域名。
Backend Communication Protocol / Ports:这里填写的是对应SAP Web
Dispatcher的端口号,要获取准确的端口号,需要登录刚才从网页Additional Information页签看到的网址才能获取信息。
点击菜单MENU-Core System-Paramenters,然后点击右侧窗口的Instance
Profile页签,在Filter筛选wdisp/system,然后注意观察下面的SID和SRCSRV=*,然后对应的填写端口号。
表格部分基本填写完成,如果是使用默认的设置,后面还需要下载SAP Web Dispatcher的证书。下载证书还是在SAP Web
Dispatcher的网页里完成。
登录网站后,请先确定右上角的权限提示,这里必须是ADMIN权限,如果不是,直接发SAP工单索要权限。后面下载证书需要管理员权限。
(你不想知道为了这个权限我经过了什么)
点击Menu-SSL and Trust Configuration-PSE Management,然后选择右面的SAPSSLS.pse,点击Export
Own Certificate。
.textContent = new Date().getFullYear();