SAP-PO服务器:7.4sp14
本文将逐步向您解释实现SOAP-to-RFC同步场景的清晰过程。
作者:Sajith P,SAP-PO顾问
本文将解释使用SAP-PI的SOAP-to-RFC通信场景。发送方使用SOAP适配器,接收方使用RFC适配器通过RFC更新sapecc中的记录。这里使用映射java类的用户定义函数(UDF)根据输入请求Id从数据库表中读取数据。如果记录在ECC中被联合,大数据入门,我们可以知道RFC发回的响应。
在本文档中,我试图从FLIGHT\u SAVE db table w.r.读取数据到输入请求id,并将此数据传递给RFC,大数据存储技术有哪些,以便在ECC中进行辛迪加。请求id值将作为输入传递到java映射UDF,它将从DB表中读取记录,并将这些数据发送到RFC。
java映射类将作为XML数据接收输入,并将其转换为object。基于此java程序将从DB表中获取数据,并将其转换为输出XML数据格式。JAXB Marshaller和Unmarshaller java类用于将XML转换为对象和将对象转换为XML。
SAP PO 7.4 SP13用于此示例。在这个场景中使用了oracledbserver11g。数据库表FLIGHT\保存,请求Id为主键,悠哉返利机器人,大数据网,其他字段包括航空公司Id、连接Id、航班日期、价格、货币、货币iso、飞机类型。SAP PO服务器中的JDBC自定义数据源连接到数据库。SAP ECC连接详细信息和RFC BAPI\ U FLIGHT\ U SAVEREPLICA
导入软件组件。在此软件组件下创建企业服务存储库对象。
创建名称空间-
创建文件夹–FLIGHT\u TEST.
导入RFC BAPI\u FLIGHT\u SAVEREPLICA
右键点击导入对象并导入RFC BAPI\u FLIGHT\u SAVEREPLICA.
请注意,RFC应在ECC中远程启用。
使用输入请求ID和Teset运行元素创建飞行请求数据类型。
请求消息类型:MT飞行请求
响应消息类型:BAPI飞行_保存副本。响应
请求报文类型:BAPI\航班\保存副本
响应报文类型:BAPI\ U航班_保存副本。响应
Java映射将执行以下任务
注意:使用JRE系统库中的jdk而不是JRE。
这将在提供的相应包下生成Java类。
请注意:由于我的NWDS 7.3 SP13不支持生成JAXB类,因此作为一种解决方法,我已经使用eclipsemars生成JAXB类,并将这些类复制粘贴到NWDS java项目文件夹
包中com.flight.mapping公司.jaxb;
导入输入流;
导入java.io.OutputStream输出流;
导入java.math.BigDecimal文件;
导入com.flight.marsheler公司.jaxb.JAXBMarshaler文件;
导入com.flight.marsheler公司.jaxb.jaxb编组程序;
进口com.flight.request请求.jaxb.FlightRequest文件;
导入com.flight.response公司.jaxb.BAPIFLIGHTSAVEREPLICA副本;
导入com.flight.response公司.jaxb.BAPISFLREP文件;
导入com.sap.aii公司.映射.api.AbstractTransformation;
导入com.sap.aii公司.mapping.api.StreamTransformationException异常;
导入com.sap.aii公司.映射.api.TransformationInput;
进口com.sap.aii公司.映射.api.TransformationOutput;
public class FlightJavaMapping extensed AbstractTransformation{
@SuppressWarnings("unchecked")
@Override
public void transform(TransformationInput TransformationInput,TransformationOutput TransformationOutput)throws StreamTransformationException{
try{
InputStream InputStream=转换输入.getInputPayload().getInputStream();
OutputStream OutputStream=转换输出.getOutputPayload().getOutputStream();
FlightRequest FlightRequest=new FlightRequest();
//从输入XML文件
jaxbunmarcherjaxbunmarcher=new jaxbunmarcher(inputstream,FlightRequest)读取输入;
飞行请求=jaxbunmarshaller.getUnmarshalledObject();
字符串需求=flightRequest.getRequestID();
字符串testRun=flightRequest.getTestRun运行();
ReadDataFromDB ReadDataFromDB=new ReadDataFromDB();
FlightSaveDto FlightSaveDto=new FlightSaveDto();
FlightSaveDto=readDataFromDB.getDataFromDB(需求ID);
//Set output XML
BAPIFLIGHTSAVEREPLICA BAPIFLIGHTSAVEREPLICA=new BAPIFLIGHTSAVEREPLICA();
BAPISFLREP BAPISFLREP=new BAPISFLREP();
bapisflrep.setAIRLINEID(flightSaveDto.getAIRLINEID());
BAPISFLEP.setCONNECTID(flightSaveDto.getCONNECTID文件());
BAPISFREP.setFLIGHTDATE文件(flightSaveDto.getFLIGHTDATE文件());
BAPISFREP.setPRICE公司(新BigDecimal(飞行保存到.getPRICE()));
BAPISFLEP.设置货币(飞行保存到.getCURR());
BAPISFLEP.setCURRISO公司(飞行保存到.getCURR\u ISO());
bapisflrep.setPLANETYPE(flightSaveDto.getPLANETYPE());
bapiflightsavereplica.setFLIGHTDATA文件(bapisflrep);
bapifrightsaveplica.setTESTRUN文件(测试运行);
JAXBMarshaler JAXBMarshaler=new JAXBMarshaler();
字符串输出xmlstring=jaxbMarshaler.marshalJAXBToXMLString(bapiflightsavereplica);
outputstream.write文件(outPutXMLString.getBytes输出());
}捕获(异常){
getTrace().addDebugMessage(异常.getMessage());
抛出新的StreamTransformationException(异常.toString());
}
}
}
导出为jar时,请检查以下内容。
导入存档ESR对象中的Java映射jar文件
选择FlightJavaMapping.class类文件
在请求中创建消息映射ESR对象
,选择映射程序类型为Java类,使用导入的存档ESR对象
在响应中使用MM\U Flight\U Request\U Res消息映射
需要创建和配置以下项目集成目录中该接口的所有ESR对象
业务组件请求端
通信通道发送方:适配器类型SOAP
接收方通信通道:适配器类型RFC
业务组件配置
接收方
发送方
集成配置
入站处理
接收方接口
出站处理
获取PI接口的WSDL链接创建
文档的下一部分将解释,如何在BPM自动化活动中实现此接口
谢谢
Sajith P
SAP PO(PI,大数据下,BPM,BRM)顾问