JAVA连接SAP
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的更多相关文章
- (一)通过JAVA连接SAP (sapjco3.jar在Windows和MacOS上的配置)
(一)通过JAVA连接SAP调用接口 (sapjco3.jar在Windows和MacOS上的配置) 一.sapjoc3.jar获取 由于sap官网提供的链接需要合作公司提供账号密码,如果商用请索要正 ...
- Java连接Sap系统调并调用RFC函数
参考博客:https://blog.csdn.net/qq_36026747/article/details/81287462 https://www.cnblog ...
- (二)通过JAVA调用SAP接口 (增加一二级参数)
(二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...
- 最新.net和Java调用SAP RFC中间件下载
还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或Web ...
- 使用 SSL 加密的 JDBC 连接 SAP HANA 数据库
近期客户为满足安全要求,提了让业务应用使用 SSL 方式连接 SAP HANA 数据库的需求.本人查询 SAP官方文档 发现数据库支持 SSL 连接,有参数直接加到 JDBC 的 URL 后边就行了, ...
- Java连接远程Redis
redis-server & //后台启动redis redis-cli //使用redis 打开redis.conf文件在NETWORK部分有说明 /usr/local/src ...
- Java连接SQLServer2008终极解决办法(亲身上机演练版)
今天我一学妹问我,Java连接SQLServer2008数据库的问题,一直无法连接成功.想起自己刚开始学习的时候,在网上找各种文章,然后实际上机验证操作,花了一两天时间才搞定,一把辛酸泪呀!记得当时是 ...
- java连接mysql
Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件 ...
- java连接mysql数据库详细步骤解析
java连接mysql数据库详细步骤解析 第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar 第二步:导入下载的J ...
随机推荐
- Struts2实现文件上传报错(一)
1.具体报错如下 2014-5-1 23:02:38 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service( ...
- am335x在ubuntu下使用StarterWare编写裸机程序并在CCS中用Jlink调试
StarterWare在AM335X上的烧录运行 步骤:1.下载安装StarterWare,我们团购的SK需要02.00.00.07版本.最近外网访问慢,我上传到论坛.2.找一张miniSD卡,不需要 ...
- Linux显示目前登入系统的用户信息
Linux显示目前登入系统的用户信息 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ who youhaidong :0 2015-01-26 22:43 (: ...
- tar (child): jdk-7u71-linux-x64.tar.gz:无法 open: 没有那个文件或目录
1 错误描述 youhaidong@youhaidong:~$ sudo mkdir /usr/lib/jvm [sudo] password for youhaidong: youhaidong@y ...
- Flex中对表格中某列的值进行数字格式化
1.问题背景 一般的,表格中展示的比率,对比率的处理是:保留两位小数,并向上保留 2.实现实例 <?xml version="1.0" encoding="utf- ...
- Django学习-25-图片验证码实例
处理流程 用户请求网页 --> 后台发送登录界面的静态页面 --> 后台在内存中生成验证码 --> 验证码保存在用户对应的Session中 --> 返回验证码图片到前端 用户登 ...
- vue常用的网址
http://cn.vuejs.org/v2/guide/routing.html#官方路由 https://unpkg.com/vue-router@2.3.1/dist/vue-router.js
- [前端]如何写一个水平导航栏?(浮动、inline-block+消除间距)
在看W3school时,看到一个很好的例子,如何制作一个水平的导航栏?没有任何要求,只需要达到下面的效果: 我认为这个例子包含了很多css布局需要了解的知识,因此单独写一下. W3school上面的方 ...
- 【BZOJ4552】排序(线段树,二分答案)
[BZOJ4552]排序(线段树,二分答案) 题面 BZOJ 题解 好神的题啊 直接排序我们做不到 怎么维护? 考虑一下,如果我们随便假设一个答案 怎么检验它是否成立? 把这个数设成\(1\),其他的 ...
- [BZOJ1096] [ZJOI2007] 仓库建设 (斜率优化)
Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用.突然有一天, ...