如何实现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,并以超链接形式标明文章原始出处,否则将 ...
随机推荐
- Distant Supervision for relation extraction without labeled data
Distant Supervision for relation extraction without labeled data 远程监督:使用未标注语料做关系抽取 1. 背景: 关系抽取(某个人是否 ...
- [原]POJ1141 Brackets Sequence (dp动态规划,递归)
本文出自:http://blog.csdn.net/svitter 原题:http://poj.org/problem?id=1141 题意:输出添加括号最少,并且使其匹配的串. 题解: dp [ i ...
- DPDK多核多线程机制简析
DPDK通过在多核设备上,创建多个线程,每个线程绑定到单独的核上,减少线程调度的开销,以提高性能. DPDK的线程分为控制线程和数据线程,控制线程一般绑定到MASTER核上,主要是接受用户配置,并传递 ...
- c#高效比对大量图片
比较图片的方法 以前传统的比较方式是遍历图片中的每一个像素,然后进行比对.这样的比对在少量图片的比对上虽然效率低一点,但是也没有什么不好.但是在大量图片比对的时候,过长的反应时间和对服务器比较高的消耗 ...
- 第一部分 CLR基础:第1章 CLR的执行模型
1.1将源代码编译成托管模块
- TFS build dotCover StyleCop
FS2010 – Customizing the Build Details View – Summary View http://blogs.msdn.com/b/jpricket/archive/ ...
- Bitmap.Config 详解
前言 Android是一个内存相当吃紧的系统,那么在做程序的过程中使用内存就需要相当谨慎,而我们接触最大的大对象估计就是Bitmap了,那么下面就根据Bitmap.Config值的介绍来看下Bitma ...
- php5.5新函数array_column
php5.5新增了一个新的数组函数,感觉挺使用的,低版本的实现按照如下实现 if(!function_exists('array_column')){ function array_column($i ...
- 清理文件默认打开方式.bat
@echo offsetlocal enabledelayedexpansionset "ext=%~x1":loopif defined ext set "ext=!e ...
- Android LogCat使用详解
Android的Logcat用于显示系统的调试信息,可在分别以下几个地方查看和调用logcat: 1.eclipse的Debug模式或DDMS模式下的会有一个Logcat窗口,用于显示log日志 只需 ...