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();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?