How to use RFC Lookup in PI 7.1

在项目里遇到这样的一个需求,外围系统要先调用ECC端的RFC,取得某些值后发送邮件,以前如果有这样的需求,大概会想到下面三种解决方案:
1、 在发起方进行控制,PI提供两个接口,发起方先调用一个接口取得RFC返回值后,再调用另一个接口发送邮件:
2、 在PI进行控制,PI通过ABAP proxy,先调用RFC,取得返回值后在Proxy中调用发送邮件的接口
3、 通过ccBPM实现
使用PI7.1后发现Message Mapping中提供RFC Lookup的函数,这样就可以在Mapping的时候直接调用RFC取得返回值后发送邮件了。
于是做了个测试,大概的scenario是:接收到发起方传入customer NO,然后在mapping时调用BAPI_CUSTOMER_GETDETAIL2,将返回的Customer Name和输入的Customer No连接作为邮件内容发送。首先,在ESR中建立调用RFC的Date Type和Message Type:


 然后把要调用的RFC导入到ESR,并将SAP提供的标准Mail文件作为External Definitions导入,Mail文件可以到SAP Marketplace上通过SAP Note 748024下载:



接下来建立Service Interface,两个Interface都是异步的,Outbound Interface的Request Message就是我们建立的MT_Customer_Send,Inbound Interface的Request Message就是我们导入的外部文件ED_Mail。
再下来就是最重要的Message Mapping,使用RFC Lookup,要先在Signature下新建一个Parameter:



 然后在Definition选项卡下方Functions中,选择Conversions类型下的RFC Lookup双击Lookup进行配置,Communication Channel选择刚刚在Signature下新建的Parameter,RFC选择刚刚导入到ESR中的BAPI_CUSTOMER_GETDETAIL2,然后双击需要的输入输出参数即可:


 然后将输入的CustomerNo传给RFC Lookup函数并将它与返回的Name连接作为邮件内容,邮件的发送方、接收方等就先给固定值了:



 这时候在ID中新建一个RFC Receiver的Communication Channel,就可以测试Mapping了,在Test下,先在Document下输入测试数据,然后在Parameters下选择ID中新建的channel,点击测试就可以得到正确的返回结果了:



 然后建立Operation Mapping,在建Operation Mapping时也要新建一个parameter,然后在选择好Message Mapping后,点击Binding将两个Mapping的Parameter绑定:



 
在Operation Mapping也一样可以测试,方法和Message Mapping一样,要先在Parameter中选择RFC Receiver Channel。
接下来就可以在ID中进行配置了,先创建Mail Receiver Adapter,Transport Protocol选择SMTP,Message Protocol选择XIPAYLOAD,其中的URL格式为smtp://Mail Server IP:



 其他Sender Agreement、Receiver Agreement、Receiver Determination就正常配置即可,不过Interface Determination的配置与常见的有一点区别,就是要把Operation Mapping中建的Parameter绑定一个RFC Receiver Channel:


 在ID中配好激活后就可以测试了,在Mapping时指定的接收邮箱里会收到一封主题为Test RFC Lookup的邮件,内容就是Customer No@Customer Name: 



 

猜你喜欢

转载自zhangyy327.iteye.com/blog/1153410