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

事务码:SE37

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

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

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

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

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

在源代码中

  1. FUNCTION zchenh001.
  2. *"----------------------------------------------------------------------
  3. *"*"局部接口:
  4. *" IMPORTING
  5. *" VALUE(P1) TYPE INT4 DEFAULT 0
  6. *" VALUE(P2) TYPE INT4 DEFAULT 0
  7. *" VALUE(OPERATOR) TYPE CHAR1 DEFAULT '+'
  8. *" EXPORTING
  9. *" VALUE(RESULT) TYPE INT4
  10. *" VALUE(MSG) TYPE CHAR255
  11. *"----------------------------------------------------------------------
  12. DATA:err_text TYPE string,
  13. e TYPE REF TO cx_root.
  14. TRY .
  15. CASE operator.
  16. WHEN '+'. result = p1 + p2.
  17. WHEN '-'. result = p1 - p2.
  18. WHEN '*'. result = p1 * p2.
  19. WHEN '/'. result = p1 / p2.
  20. WHEN OTHERS.
  21. CONCATENATE '操作符' operator ',SAP无法识别' into msg.
  22. ENDCASE.
  23. CATCH cx_root INTO e.
  24. err_text = e->get_text( ).
  25. msg = err_text.
  26.  
  27. ENDTRY.
  28.  
  29. 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用户)

  1. package com.cee.conn;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.util.Properties;
  6. import java.util.logging.Logger;
  7.  
  8. import com.sap.conn.jco.JCoDestination;
  9. import com.sap.conn.jco.JCoDestinationManager;
  10. import com.sap.conn.jco.JCoException;
  11. import com.sap.conn.jco.ext.DestinationDataProvider;
  12.  
  13. /**
  14. * 与SAP连接配置
  15. *
  16. * @author jay
  17. */
  18. public class SAPConn {
  19. private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
  20. static {
  21. Properties connectProperties = new Properties();
  22. connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxxx.xxxx.xxxx.xxxx");// 服务器
  23. connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx"); // 系统编号
  24. connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); // SAP集团
  25. connectProperties.setProperty(DestinationDataProvider.JCO_USER, "xxxx"); // SAP用户名
  26. connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "xxxxx"); // 密码
  27. connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 登录语言:ZH EN
  28. connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大连接数
  29. connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大连接线程
  30.  
  31. createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
  32. }
  33.  
  34. /**
  35. * 创建SAP接口属性文件。
  36. *
  37. * @param name
  38. * ABAP管道名称
  39. * @param suffix
  40. * 属性文件后缀
  41. * @param properties
  42. * 属性文件内容
  43. */
  44. private static void createDataFile(String name, String suffix, Properties properties) {
  45. File cfg = new File(name + "." + suffix);
  46. if (cfg.exists()) {
  47. cfg.deleteOnExit();
  48. }
  49. try {
  50. FileOutputStream fos = new FileOutputStream(cfg, false);
  51. properties.store(fos, "for tests only !");
  52. fos.close();
  53. } catch (Exception e) {
  54. System.out.println("Create Data file fault, error msg: " + e.toString());
  55. throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
  56. }
  57. }
  58.  
  59. /*
  60. * * 获取SAP连接
  61. *
  62. * @return SAP连接对象
  63. */
  64. public static JCoDestination connect() {
  65. JCoDestination destination = null;
  66. try {
  67. destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
  68. } catch (JCoException e) {
  69. System.out.println("Connect SAP fault, error msg: " + e.toString());
  70. }
  71. return destination;
  72. }
  73. }

2.2 在java代码中测试连接

  1. package com.cee.test;
  2. import java.io.ObjectInputStream.GetField;
  3. import com.cee.conn.SAPConn;
  4. import com.sap.conn.jco.JCoDestination;
  5. import com.sap.conn.jco.JCoFunction;
  6. import com.sap.conn.jco.JCoParameterList;
  7. import com.sap.conn.jco.JCoTable;
  8.  
  9. public class CheckSnFromSAP {
  10. public static void main(String[] args) {
  11. JCoFunction function = null;
  12. JCoDestination destination = SAPConn.connect();
  13. int result=0;//调用接口返回状态
  14. String message="";//调用接口返回信息
  15. try {
  16. //调用ZCHENH001函数
  17. function = destination.getRepository().getFunction("ZCHENH001");
  18. JCoParameterList input = function.getImportParameterList();
  19. input.setValue("P1", 10);
  20. input.setValue("P2", 2);
  21. input.setValue("OPERATOR", "?"); // 输入参数
  22. function.execute(destination);
  23. result= function.getExportParameterList().getInt("RESULT");//调用接口返回结果
  24. message= function.getExportParameterList().getString("MSG");//调用接口返回信息
  25. System.out.println("调用返回结果--->"+result+";调用返回状态--->"+message);
  26. }catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. }

运行结果如下:

测试一: 注入参数分别为: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. Struts2实现文件上传报错(一)

    1.具体报错如下 2014-5-1 23:02:38 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service( ...

  2. am335x在ubuntu下使用StarterWare编写裸机程序并在CCS中用Jlink调试

    StarterWare在AM335X上的烧录运行 步骤:1.下载安装StarterWare,我们团购的SK需要02.00.00.07版本.最近外网访问慢,我上传到论坛.2.找一张miniSD卡,不需要 ...

  3. Linux显示目前登入系统的用户信息

    Linux显示目前登入系统的用户信息 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ who youhaidong :0 2015-01-26 22:43 (: ...

  4. tar (child): jdk-7u71-linux-x64.tar.gz:无法 open: 没有那个文件或目录

    1 错误描述 youhaidong@youhaidong:~$ sudo mkdir /usr/lib/jvm [sudo] password for youhaidong: youhaidong@y ...

  5. Flex中对表格中某列的值进行数字格式化

    1.问题背景 一般的,表格中展示的比率,对比率的处理是:保留两位小数,并向上保留 2.实现实例 <?xml version="1.0" encoding="utf- ...

  6. Django学习-25-图片验证码实例

    处理流程 用户请求网页 --> 后台发送登录界面的静态页面 --> 后台在内存中生成验证码 --> 验证码保存在用户对应的Session中 --> 返回验证码图片到前端 用户登 ...

  7. vue常用的网址

    http://cn.vuejs.org/v2/guide/routing.html#官方路由 https://unpkg.com/vue-router@2.3.1/dist/vue-router.js

  8. [前端]如何写一个水平导航栏?(浮动、inline-block+消除间距)

    在看W3school时,看到一个很好的例子,如何制作一个水平的导航栏?没有任何要求,只需要达到下面的效果: 我认为这个例子包含了很多css布局需要了解的知识,因此单独写一下. W3school上面的方 ...

  9. 【BZOJ4552】排序(线段树,二分答案)

    [BZOJ4552]排序(线段树,二分答案) 题面 BZOJ 题解 好神的题啊 直接排序我们做不到 怎么维护? 考虑一下,如果我们随便假设一个答案 怎么检验它是否成立? 把这个数设成\(1\),其他的 ...

  10. [BZOJ1096] [ZJOI2007] 仓库建设 (斜率优化)

    Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用.突然有一天, ...