1.首先需要在SAP事务码SE37中新建一个可以被远程调用的RFC

事务码:SE37

新建一个函数组:输入事务码SE37回车后,来到函数构建器屏幕,到上面一排菜单栏:转到 -> 函数组 -> 创建组

输入描述信息,方便以后使用,以后功能相似的函数都可以放到该函数组下

函数组创建完毕后,回到SE37初始界面,创建函数,键入函数名后,点击创建按钮

在属性页签下,输入函数的描述,将远程启用的模块选上

在导入导出参数页签下设置输入输出参数(远程调用模块的注入,输出),要注意参考类型,可选性和传递值

在源代码中

 FUNCTION zchenh001.
*"----------------------------------------------------------------------
*"*"局部接口:
*" IMPORTING
*" VALUE(P1) TYPE INT4 DEFAULT 0
*" VALUE(P2) TYPE INT4 DEFAULT 0
*" VALUE(OPERATOR) TYPE CHAR1 DEFAULT '+'
*" EXPORTING
*" VALUE(RESULT) TYPE INT4
*" VALUE(MSG) TYPE CHAR255
*"----------------------------------------------------------------------
DATA:err_text TYPE string,
e TYPE REF TO cx_root.
TRY .
CASE operator.
WHEN '+'. result = p1 + p2.
WHEN '-'. result = p1 - p2.
WHEN '*'. result = p1 * p2.
WHEN '/'. result = p1 / p2.
WHEN OTHERS.
CONCATENATE '操作符' operator ',SAP无法识别' into msg.
ENDCASE.
CATCH cx_root INTO e.
err_text = e->get_text( ).
msg = err_text. ENDTRY. ENDFUNCTION.

在SAP中测试如下:

测试一:

测试二:

测试三:

测试四:

接下来需要下载连接SAP的驱动sapjco3.jar包,

本处提供下载:sapjco3.jar

  解压密码:1187163927

激活后可以在SAP内部测试 ,至此SAP部分已完成

2在eclipse(myeclipse)新建的项目中将sapjco3.jar导入,记得build path.

打开该项目树状图,将下载好的sapjco3.jar直接拖到该项目中,然后鼠标左键选中该文件,右键Build Path即可。

2.1 配置与SAP系统的连接(此处最好在SAP系统中新建一个RFC用户)

 package com.cee.conn;

 import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.logging.Logger; import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.ext.DestinationDataProvider; /**
* 与SAP连接配置
*
* @author jay
*/
public class SAPConn {
private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
static {
Properties connectProperties = new Properties();
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxxx.xxxx.xxxx.xxxx");// 服务器
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx"); // 系统编号
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); // SAP集团
connectProperties.setProperty(DestinationDataProvider.JCO_USER, "xxxx"); // SAP用户名
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "xxxxx"); // 密码
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 登录语言:ZH EN
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大连接数
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大连接线程 createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
} /**
* 创建SAP接口属性文件。
*
* @param name
* ABAP管道名称
* @param suffix
* 属性文件后缀
* @param properties
* 属性文件内容
*/
private static void createDataFile(String name, String suffix, Properties properties) {
File cfg = new File(name + "." + suffix);
if (cfg.exists()) {
cfg.deleteOnExit();
}
try {
FileOutputStream fos = new FileOutputStream(cfg, false);
properties.store(fos, "for tests only !");
fos.close();
} catch (Exception e) {
System.out.println("Create Data file fault, error msg: " + e.toString());
throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
}
} /*
* * 获取SAP连接
*
* @return SAP连接对象
*/
public static JCoDestination connect() {
JCoDestination destination = null;
try {
destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
} catch (JCoException e) {
System.out.println("Connect SAP fault, error msg: " + e.toString());
}
return destination;
}
}

2.2 在java代码中测试连接

 package com.cee.test;
import java.io.ObjectInputStream.GetField;
import com.cee.conn.SAPConn;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoParameterList;
import com.sap.conn.jco.JCoTable; public class CheckSnFromSAP {
public static void main(String[] args) {
JCoFunction function = null;
JCoDestination destination = SAPConn.connect();
int result=0;//调用接口返回状态
String message="";//调用接口返回信息
try {
//调用ZCHENH001函数
function = destination.getRepository().getFunction("ZCHENH001");
JCoParameterList input = function.getImportParameterList();
input.setValue("P1", 10);
input.setValue("P2", 2);
input.setValue("OPERATOR", "?"); // 输入参数
function.execute(destination);
result= function.getExportParameterList().getInt("RESULT");//调用接口返回结果
message= function.getExportParameterList().getString("MSG");//调用接口返回信息
System.out.println("调用返回结果--->"+result+";调用返回状态--->"+message);
}catch (Exception e) {
e.printStackTrace();
}
}
}

运行结果如下:

测试一: 注入参数分别为:10,2,?

    

测试二: 注入参数分别为:10,2,/

    

JAVA连接SAP的更多相关文章

  1. (一)通过JAVA连接SAP (sapjco3.jar在Windows和MacOS上的配置)

    (一)通过JAVA连接SAP调用接口 (sapjco3.jar在Windows和MacOS上的配置) 一.sapjoc3.jar获取 由于sap官网提供的链接需要合作公司提供账号密码,如果商用请索要正 ...

  2. Java连接Sap系统调并调用RFC函数

    参考博客:https://blog.csdn.net/qq_36026747/article/details/81287462                   https://www.cnblog ...

  3. (二)通过JAVA调用SAP接口 (增加一二级参数)

    (二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...

  4. 最新.net和Java调用SAP RFC中间件下载

    还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或Web ...

  5. 使用 SSL 加密的 JDBC 连接 SAP HANA 数据库

    近期客户为满足安全要求,提了让业务应用使用 SSL 方式连接 SAP HANA 数据库的需求.本人查询 SAP官方文档 发现数据库支持 SSL 连接,有参数直接加到 JDBC 的 URL 后边就行了, ...

  6. Java连接远程Redis

    redis-server &  //后台启动redis redis-cli //使用redis   打开redis.conf文件在NETWORK部分有说明   /usr/local/src   ...

  7. Java连接SQLServer2008终极解决办法(亲身上机演练版)

    今天我一学妹问我,Java连接SQLServer2008数据库的问题,一直无法连接成功.想起自己刚开始学习的时候,在网上找各种文章,然后实际上机验证操作,花了一两天时间才搞定,一把辛酸泪呀!记得当时是 ...

  8. java连接mysql

    Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件 ...

  9. java连接mysql数据库详细步骤解析

    java连接mysql数据库详细步骤解析      第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar      第二步:导入下载的J ...

随机推荐

  1. XP硬盘读写速度很慢的解决方法

    05购入的电脑,今日仍在发挥余热,但系统速度慢得出奇.今日检测了硬盘读写速度还不到2m/s,实在令人难以接受.一查之下,硬盘被置为PIO模式了,难怪. 用以下方法得以解决: 1.对桌面"我的 ...

  2. 【mongodb系统学习之十】mongodb查询(三)

    6).特殊类型的查询: A).查询键为null的文档:查询时,如果按常规的key:null的方式做条 件,不仅会匹配到值为null的,还会匹配到不存在这个键的:如果只是要值为null的文档,就必须使用 ...

  3. dojo加载树报错

    1.错误描述    error loading undefined children.    TypeError:this._arrayOfTopLevelItems is undefied. 2.错 ...

  4. day8(字符串操作)

    一.字符串操作 1.index  #返回字符串的索引值 s = "Hello word" print(s.index('o')) 2.isalnum #检测字符串是否由字母和数字组 ...

  5. Openstack_O版(otaka)部署_网络服务Neutron部署

    控制节点配置 1. 建库建用户 CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO '; GRANT ALL PRIVILEGE ...

  6. 【BZOJ4827】【HNOI2017】礼物(FFT)

    [BZOJ4827][HNOI2017]礼物(FFT) 题面 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每 ...

  7. [Luogu2463][SDOI2008]Sandy的卡片

    BZOJ权限题qwq Luogu sol "两个子串长度相同且一个串的全部元素加上一个数就会变成另一个串" 其实就是差分一波以后完全相同 所以对输入的数据进行差分,同时记一下每一个 ...

  8. 【CJOJ2484】【Luogu2805】最小函数值(函数最小值)

    题面 Description 有n个函数,分别为F1,F2,...,Fn.定义 Fi(x)=Aix2+Bix+Ci(x∈N∗)Fi(x)=Aix2+Bix+Ci(x∈N∗) .给定这些Ai.Bi和Ci ...

  9. Office 365 Connectors 的使用与自定义开发

    前言 我相信很多人都看过<三国演义>,里面有很多引人入胜的故事和栩栩如生的人物,对我而言,曹操手下的一员猛将典韦实在让我印象深刻.例如,书中有一段描写典韦的作战经历: 时西面又急,韦进当之 ...

  10. PHP之工厂方法模式(三)

    定义 ​ 定义一个用于创建对象的接口(抽象工厂类),让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到其子类(抽象工厂类的子类). ​ 工厂方法模式是简单工厂模式的进一步抽象和推广.在简单工厂 ...