如何实现SAP的RFC函数调用(原创)
连接sap系统需要通过sap javaconnect来连接,对于sapjco.jar系列文件有32位与64位之分【32位用的JAR版本是 2.1.10 (2011-05-10) ,64位用的JAR版本是 2.1.7 (2006-06-12)】。即对jdk有严格要求。现说明客户端32位部署及服务端64位部署两种情况:
一、 我本地是32位,部署本地客户端 sapjco32.zip
a) 将附件相对应位数的librfc32.dll、sapjcorfc.dll、msvcp71.dll、msvcr71.dll四个文件拷贝至system32,其中前两个文件是必须拷贝(后面2个可以不用)。
b) 将相对应位数的sapjco-2.1.7.jar拷贝至对应模块lib下,然后将其部署好。
这里我把它配置到我们的pom.xml里面了,如下:
- 首先把相应的JAR文件放在项目的\WEB-INF\lib目录下面。
2. 在pom.xml里面指向该文件。
<dependency>
<groupId>com.sap</groupId>
<artifactId>sapjco</artifactId>
<version>2.1.7</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/sapjco-2.1.7.jar</systemPath>
</dependency>
二、 服务器是64位 sapjco64.zip
a) 将附件相对应位数的librfc32.dll、sapjcorfc.dll、msvcp71.dll、msvcr71.dll四个文件拷贝至system32及SysWOW64文件夹下
b) 将相对应位数的sapjco-2.1.10.jar拷贝至服务端的lib下,然后将其部署好。同上。
<dependency>
<groupId>com.sap</groupId>
<artifactId>sapjco</artifactId>
<version>2.1.10</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/sapjco-2.1.10.jar</systemPath>
</dependency>
如何在JAVA里面调用RFC函数,简单的demo如下:[详细的工具类 SapUtil.java]
package org.jeecgframework.core.util;
import com.sap.mw.jco.IFunctionTemplate;
import com.sap.mw.jco.JCO;
import com.sap.mw.jco.JCO.Structure;
public class SapUtil {
public static double getRate(String rateType, String fromCurrency, String toCurrency, String date) {
JCO.Client client = null;
double rate = 0;
try {
client = addClientPool();
JCO.Function func = getFunction(client, "BAPI_EXCHANGERATE_GETDETAIL");
JCO.ParameterList inputParameterList = func.getImportParameterList();
inputParameterList.getField("RATE_TYPE").setValue(rateType);
inputParameterList.getField("FROM_CURR").setValue(fromCurrency);
inputParameterList.getField("TO_CURRNCY").setValue(toCurrency);
inputParameterList.getField("DATE").setValue(date);
client.execute(func);
JCO.ParameterList outputParameterList = func.getExportParameterList();
Structure rateStructure = outputParameterList.getStructure("EXCH_RATE");
rate = rateStructure.getDouble("EXCH_RATE");
System.out.println(rate);
} catch (JCO.Exception e) {
e.printStackTrace();
} finally {
if (client != null) {
JCO.releaseClient(client);
}
}
return rate;
}
private static JCO.Client addClientPool() {
String client = "800";
String user = "crmuser1";
String password = "CRM1";
String language = "1";
String host = "10.10.1.80"; //正式机
String sysnr = "00";
JCO.Client sapclient = null;
try {
sapclient = JCO.createClient(client, user, password, language, host, sysnr);
sapclient.connect();
} catch (JCO.Exception e) {
throw new RuntimeException("SAP连接错误:" + e.getMessage());
}
return sapclient;
}
private static JCO.Function getFunction(JCO.Client client, String funcName) {
String repositoryName = "repository";
JCO.Function func = null;
try {
JCO.Repository repository = new JCO.Repository(repositoryName, client);
IFunctionTemplate ft = repository.getFunctionTemplate(funcName);
func = ft.getFunction();
} catch (JCO.Exception e) {
e.printStackTrace();
}
return func;
}
public static void main(String[] args) {
getRate("M", "USD", "CNY", "20141001");
getRate("M", "USD", "CNY", "00000000");
getRate("M", "EUR", "CNY", null);
getRate("M", "EUR", "CNY", "20141001");
}
}
PS:可能遇到的问题(都是32位和64位所用文件不一致问题)
java.lang.ExceptionInInitializerError:
JCO.classInitialize(): Could not load middleware layer
'com.sap.mw.jco.rfc.MiddlewareRFC'JCO.nativeInit():
Could not
initialize dynamic link library sapjcorfc
[C:\Windows\System32\sapjcorfc.dll: Can't load AMD 64-bit .dll on a IA
32-bit platform].java.lang.ExceptionInInitializerError:
JCO.classInitialize(): Could not load middleware layer
'com.sap.mw.jco.rfc.MiddlewareRFC'JCO.nativeInit():
Could not
initialize dynamic link library sapjcorfc. Found version "2.1.7
(2006-06-12)" but required version "2.1.10 (2011-05-10)".
如何实现SAP的RFC函数调用(原创)的更多相关文章
- 访问SAP的RFC
.NET 环境Xp(sp3) vs2010, win2003 EN 32bit(sp2)winform,webform 引用sapnco.dll,sapnco_utils.dll(自动引用)配置文件需 ...
- SAP 调用RFC 的时候记录异常报错方式
DATA: lv_error TYPE char100. CALL FUNCTION 'ZRFC_WM_ZEL001' DESTINATION lv_desc EXPORTING process_fl ...
- SAP ABAP RFC接口通用日志工具:abap fm logger
很早之前就想写个能记录函数模块日志的通用工具,最早尝试时,没有想清楚插入代码的体积问题.在一些群友的提醒下,了解到可以用宏来处理这一问题.不过当时比较忙,就没有动笔.最近又想起这件事,花了2天完成了一 ...
- 一个完整的SAP RFC调用接口封装
因为经常需要访问sap操作数据,就封装了一个类方便调用,运行条件需要安装sap客户端,在sap客户端安装之后会带有一个com接口,本接口就通过这个com访问sap,因为com的后期绑定问题故使用了vb ...
- SAP学习日志--RFC REMOTE FUNCTION CALL
RFC Remote function Call 远程功能调用, 是SAP系统之间以及非SAP系统之间程序通信的基本接口技术. 例如BAPI , ALE都是基于RFC实现的 SAP系统提供了三种外部 ...
- C#通过RFC调用SAP
using System;using System.Collections.Generic;using SAP.Middleware.Connector;using System.Data;using ...
- .NET连接SAP系统专题:.NET调用RFC几种方式(一)
本来今天是要写一篇关于NCO3.0的东西,就是关乎.NET调用SAP的RFC的,支持VS2010和.NET 4.0等.现在网上到处都是充斥着NCO1.X和NCO2.0,需要用VS2003来使用,都是一 ...
- 还在写SQL做SAP二开?通过RFC调用NetWeaver,让HANA数据库操作更可靠
相比于从零开始构建全套信息化系统,基于成熟的ERP等行业软件做二次开发是更多中大型企业应对个性化软件需求的首选方案.如何在二开模块中,可靠地对成品软件的数据库进行读写操作,以满足单据自动创建.元数据自 ...
- Java(JCo3)与SAP系统相互调用
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
随机推荐
- xcode不能连接svn以及不能导入的解决方法
配置svn的方法不多说,网上一堆.这里要说的是怎么解决连接不上svn以及在xcode中不能修改svn目录的问题. 首先,xcode连接不上linux的svn,一般来说,问题就出在端口上.svn的默 ...
- MyEclipse使用手册(详细版)
0. 快捷键================================================================================编辑:Ctrl+Shift+ ...
- 获取屏幕分辨率(C/C++)
C/C++获取屏幕分辨率的方法 int main(int argc, char* argv[]) { // 需要添加头文件: // #include <Windows.h> system( ...
- Vue.js学习 Item1 --快速入门
我们以 Vue 数据绑定的快速导览开始.如果你对高级概述更感兴趣,可查看这篇博文. 尝试 Vue.js 最简单的方法是使用 JSFiddle Hello World 例子.在浏览器新标签页中打开它,跟 ...
- LVS+keepalived实现负载均衡
背景: 随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要 的浪费?同时实现商业硬件一样的 ...
- QQl聊天消息
Activity: package com.zzw.qqchat; import java.util.ArrayList; import java.util.HashMap; import andro ...
- 【easuyi】---easyui中的验证validatebox自定义
这里比较简单的使用就不再多说,主要说一下自定义的validatebox. 1.验证密码是否相等,这个直接参考给定的列子就行,这里主要学习这种灵活使用的方式和方法. <input id=" ...
- Oracle 分区表的统计信息实例
ORACLE的统计信息在执行SQL的过程中扮演着非常重要的作用,而且ORACLE在表的各个层次都会有不同的统计信息,通过这些统计信息来描述表的,列的各种各样的统计信息.下面通过一个复合分区表来说明一些 ...
- Python常用内建模块
Python常用内建模块 datetime 处理日期和时间的标准库. 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import da ...
- Oracle 12c 数据库中scott用户不存在的解决方法
-- 使用超级管理员登录CONN sys/change_on_install AS SYSDBA ;-- 创建c##scott用户CREATE USER c##scott IDENTIFIED BY ...