连接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里面了,如下:

  1. 首先把相应的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位所用文件不一致问题)

    1. 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].

    2. 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函数调用(原创)的更多相关文章

  1. 访问SAP的RFC

    .NET 环境Xp(sp3) vs2010, win2003 EN 32bit(sp2)winform,webform 引用sapnco.dll,sapnco_utils.dll(自动引用)配置文件需 ...

  2. SAP 调用RFC 的时候记录异常报错方式

    DATA: lv_error TYPE char100. CALL FUNCTION 'ZRFC_WM_ZEL001' DESTINATION lv_desc EXPORTING process_fl ...

  3. SAP ABAP RFC接口通用日志工具:abap fm logger

    很早之前就想写个能记录函数模块日志的通用工具,最早尝试时,没有想清楚插入代码的体积问题.在一些群友的提醒下,了解到可以用宏来处理这一问题.不过当时比较忙,就没有动笔.最近又想起这件事,花了2天完成了一 ...

  4. 一个完整的SAP RFC调用接口封装

    因为经常需要访问sap操作数据,就封装了一个类方便调用,运行条件需要安装sap客户端,在sap客户端安装之后会带有一个com接口,本接口就通过这个com访问sap,因为com的后期绑定问题故使用了vb ...

  5. SAP学习日志--RFC REMOTE FUNCTION CALL

    RFC  Remote function Call 远程功能调用, 是SAP系统之间以及非SAP系统之间程序通信的基本接口技术. 例如BAPI , ALE都是基于RFC实现的 SAP系统提供了三种外部 ...

  6. C#通过RFC调用SAP

    using System;using System.Collections.Generic;using SAP.Middleware.Connector;using System.Data;using ...

  7. .NET连接SAP系统专题:.NET调用RFC几种方式(一)

    本来今天是要写一篇关于NCO3.0的东西,就是关乎.NET调用SAP的RFC的,支持VS2010和.NET 4.0等.现在网上到处都是充斥着NCO1.X和NCO2.0,需要用VS2003来使用,都是一 ...

  8. 还在写SQL做SAP二开?通过RFC调用NetWeaver,让HANA数据库操作更可靠

    相比于从零开始构建全套信息化系统,基于成熟的ERP等行业软件做二次开发是更多中大型企业应对个性化软件需求的首选方案.如何在二开模块中,可靠地对成品软件的数据库进行读写操作,以满足单据自动创建.元数据自 ...

  9. Java(JCo3)与SAP系统相互调用

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

随机推荐

  1. 对C语言中va_list,va_start,va_arg和va_end的一点理解

    这几个函数和变量是针对可变参数函数的,什么是可变参数函数呢,最经典的莫过于printf和scanf,这两个函数的声明如下: int printf(const char *format, ...); i ...

  2. C++ 三种工厂模式

    工厂模式是将带有继承于基类的子类的创建过程交于一个工厂来创建,通过赋予不同的创建标识来创建不同的子类. 基于自己的理解和使用这里巩固一下工厂模式. 我们的项目目前使用最多的是简单工厂模式,不过其他两种 ...

  3. html Doctype作用?

    Doctype它主要的作用来声明html的版本 <!Doctype html>这是html5的 不写可能会造成html5的功能不能用(具体会不会出错就要看浏览器的容错性)

  4. CSS3中颜色线性渐变实战

    css3线性渐变可以设置3个参数值:方向.起始颜色.结束颜色.最简单的模式只需要定义起始颜色和结束颜色,起点.终点和方向默认自元素的顶部到底部.下面举例说明: CSS Code复制内容到剪贴板 .te ...

  5. 【项目相关】MVC中使用WebUploader进行图片预览上传以及编辑

    项目中需要用到多图片上传功能,于是在百度搜了一下,首先使用了kissy uploader,是由阿里前端工程师们发起创建的一个开源 JS 框架中的一个上传组件...但,后面问题出现了. 在对添加的信息进 ...

  6. C#中判断字符串中包含某个字符

    C#判断字符串是否存在某个字符,如果存在进行替换.   //定义一个字符串 string  str=".net/Java/asp.net"; //检验“/” if(str.Cont ...

  7. 三个有用的SQL辅助工具

    三个有用的SQL辅助工具 编写人:CC阿爸 2015-1-23 工欲善其事必先利其器,今天在这里,我想与大家一起分享三个有用的SQL辅助工具.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 相信 ...

  8. Cassandra 备份 - 1 - 节点镜像恢复

    之前比较关注如何使用Cassandra,但是真正想大规模使用前提还是需要搞清楚备份机制,确保数据安全. 本文主要内容来自文档 "Cassandra2.2"的翻译.最后部分为真实操作 ...

  9. java作用域public ,private ,protected 及不写时的区别(转)

    在说明这四个关键字之前,我想就class之间的关系做一个简单的定 义,对于继承自己的class,base class可以认为他们都是自己的子 女,而对于和自己一个目录下的classes,认为都是自己的 ...

  10. javascript jquery each 影响 函数返回值

    实例如下: $(function(){ if(chkInput()){ alert('OK!') } }); function chkInput(){ var data = jsonData(略); ...