JAVA 使用JCO3调用SAP RFC函数
下载安装SAP JCO3依赖
解压后找到 sapjco3.jar引入JAVA项目中;sapjco3.dll放到系统目录下
实现DestinationDataProvider
此Provider用以提供连接SAP目标的属性
public class JCODestinationDataProvider implements DestinationDataProvider {
// 目标连接属性
Map<String, JCODestinationEntity> destMap = new HashMap<>();
public JCODestinationDataProvider(Map<String, JCODestinationEntity> destMap) {
this.destMap = destMap;
}
@Override
public Properties getDestinationProperties(String destinationName) throws DataProviderException {
JCODestinationEntity jcoDestinationEntity = destMap .get(destinationName);
if (jcoDestinationEntity != null) {
return toProperties(jcoDestinationEntity);
}
throw new DataProviderException(DataProviderException.Reason.INTERNAL_ERROR, "Destinantion is not avaliable: " + destinationName, null);
}
private Properties toProperties(JCODestinationEntity jcoDestinationEntity) {
Properties connProps = new Properties();
// 两种连接模式 消息服务器/应用服务器
if (StringUtils.isNotBlank(jcoDestinationEntity.getMshost())) {
// 消息服务器地址
connProps.setProperty(JCO_MSHOST, jcoDestinationEntity.getMshost());
// 服务器组
connProps.setProperty(JCO_GROUP, jcoDestinationEntity.getSgroup());
} else {
// 应用服务器地址
connProps.setProperty(JCO_ASHOST, jcoDestinationEntity.getAshost());
}
// R3名称
connProps.setProperty(JCO_R3NAME, jcoDestinationEntity.getR3name());
// 实例编号
connProps.setProperty(JCO_SYSNR, jcoDestinationEntity.getSysnr());
// 用户名
connProps.setProperty(JCO_USER, jcoDestinationEntity.getSapUsername());
// 密码
connProps.setProperty(JCO_PASSWD, jcoDestinationEntity.getSapPassword());
// 客户端
connProps.setProperty(JCO_CLIENT, jcoDestinationEntity.getClient());
// 语言
connProps.setProperty(JCO_LANG, jcoDestinationEntity.getLang());
// 最大活动连接数
connProps.setProperty(JCO_PEAK_LIMIT, "10");
// 最大空闲连接数
connProps.setProperty(JCO_POOL_CAPACITY, "3");
return connProps;
}
@Override
public boolean supportsEvents() {
return false;
}
@Override
public void setDestinationDataEventListener(DestinationDataEventListener destinationDataEventListener) {
throw new UnsupportedOperationException();
}
}
注册DestinationDataProvider
// 注册
Environment.registerDestinationDataProvider(new JCODestinationDataProvider(
destMap // 传入目标属性配置数据
));
调用RFC函数
// 获取JCO目标
JCoDestination jcoDestination = JCoDestinationManager.getDestination(destinationName);
// 获取RFC函数
JCoFunction jcoFunction = jcoDestination.getRepository().getFunction(functionName);
// 获取传入参数接口,具体赋值方法变化较多可以参考JCO包中提供的官方API文档
JCoParameterList pImlist= function.getImportParameterList();
JCoParameterList pTmlist= function.getTableParameterList();
JCoParameterList pCmlist= function.getChangingParameterList();
// 调用RFC函数
jcoFunction.execute(jcoDestination);
// 获取返回结果接口,具体取值方法变化较多可以参考JCO包中提供的官方API文档
JCoParameterList rEmlist= function.getExportParameterList();
JCoParameterList rTmlist= function.getTableParameterList();
JCoParameterList rCmlist= function.getChangingParameterList();