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

一、sapjoc3.jar获取

由于sap官网提供的链接需要合作公司提供账号密码,如果商用请索要正确的用户名密码下载,如果只是想做测试使用,可以使用我这里提供的链接,资源失效请及时提醒我,谢谢

点击这里下载windows版 密码:1u0t

点击这里下载linux版 密码:7zuv

点击这里下载macOS版 密码:lafl

二、测试项目环境准备

  1. 新建项目
    这个就不多谈了,直接上图,我这里新建了一个空的测试项目,新建lib文件夹,准备把需要用到的jar包丢进来

  2. windows和macOS环境配置

    1. windows
      直接把 sapjco3.jar sapjco3.dll sapjco3.pdb 拷贝至lib下,然后add library把他们都添加进去
    2. macOS
      把 sapjco3.jar 和 libsapjco3.jnilib 拷贝至lib下,同样add libray添加进去,这里只需要add sapjco3.jar 即可。

WARNING: 这里很多博客讲到需要添加classpath在变量里面,这是参照了官方提供的安装方式,这里的话我们只需要将上述文件拷贝至lib文件夹下即可

三、源码编写及测试

首先编写用来放置sap连接信息的SapConn实体类

SapConn

  

  1. /**
  2. * Created by gang.xu01@hand-china.com on 2018/12/6
  3. */
  4. public class SapConn {
  5.  
  6. // SAP服务器
  7. private String JCO_ASHOST;
  8. // SAP系统编号
  9. private String JCO_SYSNR;
  10. // SAP集团
  11. private String JCO_CLIENT;
  12. // SAP用户名
  13. private String JCO_USER;
  14. // SAP密码
  15. private String JCO_PASSWD;
  16. // SAP登录语言
  17. private String JCO_LANG;
  18. // 最大连接数
  19. private String JCO_POOL_CAPACITY;
  20. // 最大连接线程
  21. private String JCO_PEAK_LIMIT;
  22. // SAP ROUTER
  23. private String JCO_SAPROUTER;
  24.  
  25. public SapConn(String JCO_ASHOST, String JCO_SYSNR, String JCO_CLIENT, String JCO_USER,
  26. String JCO_PASSWD, String JCO_LANG, String JCO_POOL_CAPACITY, String JCO_PEAK_LIMIT,
  27. String JCO_SAPROUTER) {
  28. this.JCO_ASHOST = JCO_ASHOST;
  29. this.JCO_SYSNR = JCO_SYSNR;
  30. this.JCO_CLIENT = JCO_CLIENT;
  31. this.JCO_USER = JCO_USER;
  32. this.JCO_PASSWD = JCO_PASSWD;
  33. this.JCO_LANG = JCO_LANG;
  34. this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;
  35. this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;
  36. this.JCO_SAPROUTER = JCO_SAPROUTER;
  37. }
  38.  
  39. public SapConn() {}
  40.  
  41. public String getJCO_ASHOST() {
  42. return JCO_ASHOST;
  43. }
  44.  
  45. public void setJCO_ASHOST(String JCO_ASHOST) {
  46. this.JCO_ASHOST = JCO_ASHOST;
  47. }
  48.  
  49. public String getJCO_SYSNR() {
  50. return JCO_SYSNR;
  51. }
  52.  
  53. public void setJCO_SYSNR(String JCO_SYSNR) {
  54. this.JCO_SYSNR = JCO_SYSNR;
  55. }
  56.  
  57. public String getJCO_CLIENT() {
  58. return JCO_CLIENT;
  59. }
  60.  
  61. public void setJCO_CLIENT(String JCO_CLIENT) {
  62. this.JCO_CLIENT = JCO_CLIENT;
  63. }
  64.  
  65. public String getJCO_USER() {
  66. return JCO_USER;
  67. }
  68.  
  69. public void setJCO_USER(String JCO_USER) {
  70. this.JCO_USER = JCO_USER;
  71. }
  72.  
  73. public String getJCO_PASSWD() {
  74. return JCO_PASSWD;
  75. }
  76.  
  77. public void setJCO_PASSWD(String JCO_PASSWD) {
  78. this.JCO_PASSWD = JCO_PASSWD;
  79. }
  80.  
  81. public String getJCO_LANG() {
  82. return JCO_LANG;
  83. }
  84.  
  85. public void setJCO_LANG(String JCO_LANG) {
  86. this.JCO_LANG = JCO_LANG;
  87. }
  88.  
  89. public String getJCO_POOL_CAPACITY() {
  90. return JCO_POOL_CAPACITY;
  91. }
  92.  
  93. public void setJCO_POOL_CAPACITY(String JCO_POOL_CAPACITY) {
  94. this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;
  95. }
  96.  
  97. public String getJCO_PEAK_LIMIT() {
  98. return JCO_PEAK_LIMIT;
  99. }
  100.  
  101. public void setJCO_PEAK_LIMIT(String JCO_PEAK_LIMIT) {
  102. this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;
  103. }
  104.  
  105. public String getJCO_SAPROUTER() {
  106. return JCO_SAPROUTER;
  107. }
  108.  
  109. public void setJCO_SAPROUTER(String JCO_SAPROUTER) {
  110. this.JCO_SAPROUTER = JCO_SAPROUTER;
  111. }
  112.  
  113. @Override
  114. public String toString() {
  115. return "SapConn{" +
  116. "JCO_ASHOST='" + JCO_ASHOST + '\'' +
  117. ", JCO_SYSNR='" + JCO_SYSNR + '\'' +
  118. ", JCO_CLIENT='" + JCO_CLIENT + '\'' +
  119. ", JCO_USER='" + JCO_USER + '\'' +
  120. ", JCO_PASSWD='" + JCO_PASSWD + '\'' +
  121. ", JCO_LANG='" + JCO_LANG + '\'' +
  122. ", JCO_POOL_CAPACITY='" + JCO_POOL_CAPACITY + '\'' +
  123. ", JCO_PEAK_LIMIT='" + JCO_PEAK_LIMIT + '\'' +
  124. ", JCO_SAPROUTER='" + JCO_SAPROUTER + '\'' +
  125. '}';
  126. }
  127. }

然后编写用来建立sap连接的SapConn作为连接类

编写连接类SAPConnUtils 下面是源码

  1. /**
  2. * Created by gang.xu01@hand-china.com on 2018/12/4
  3. */
  4. public class SAPConnUtils {
  5.  
  6. private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
  7.  
  8. /**
  9. * 创建SAP接口属性文件。
  10. * @param name ABAP管道名称
  11. * @param suffix 属性文件后缀
  12. * @param properties 属性文件内容
  13. */
  14. private static void createDataFile(String name, String suffix, Properties properties){
  15. File cfg = new File(name+"."+suffix);
  16. if(cfg.exists()){
  17. cfg.deleteOnExit();
  18. }
  19. try{
  20. FileOutputStream fos = new FileOutputStream(cfg, false);
  21. properties.store(fos, "for tests only !");
  22. fos.close();
  23. }catch (Exception e){
  24. System.out.println("Create Data file fault, error msg: " + e.toString());
  25. throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
  26. }
  27. }
  28.  
  29. /**
  30. * 初始化SAP连接
  31. */
  32. private static void initProperties(SapConn sapConn) {
  33. Properties connectProperties = new Properties();
  34. // SAP服务器
  35. connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, sapConn.getJCO_ASHOST());
  36. // SAP系统编号
  37. connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, sapConn.getJCO_SYSNR());
  38. // SAP集团
  39. connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, sapConn.getJCO_CLIENT());
  40. // SAP用户名
  41. connectProperties.setProperty(DestinationDataProvider.JCO_USER, sapConn.getJCO_USER());
  42. // SAP密码
  43. connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, sapConn.getJCO_PASSWD());
  44. // SAP登录语言
  45. connectProperties.setProperty(DestinationDataProvider.JCO_LANG, sapConn.getJCO_LANG());
  46. // 最大连接数
  47. connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, sapConn.getJCO_POOL_CAPACITY());
  48. // 最大连接线程
  49. connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, sapConn.getJCO_PEAK_LIMIT());
  50. // SAP ROUTER
  51. connectProperties.setProperty(DestinationDataProvider.JCO_SAPROUTER, sapConn.getJCO_SAPROUTER());
  52.  
  53. createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
  54. }
  55.  
  56. /**
  57. * 获取SAP连接
  58. * @return SAP连接对象
  59. */
  60. public static JCoDestination connect(SapConn sapConn){
  61. System.out.println("正在连接至SAP...");
  62. JCoDestination destination = null;
  63. initProperties(sapConn);
  64. try {
  65. destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
  66. destination.ping();
  67. System.out.println("已成功建立sap的连接");
  68. } catch (JCoException e) {
  69. System.out.println("Connect SAP fault, error msg: " + e.toString());
  70. }
  71. return destination;
  72. }
  73.  
  74. }

接下来编写一个简单的测试类test

  1. /**
  2. * Created by gang.xu01@hand-china.com on 2018/12/9
  3. */
  4. public class testCon {
  5.  
  6. public static void main(String[] args) {
  7.  
  8. SapConn con = new SapConn(
  9. "127.0.0.1",
  10. "123",
  11. "456",
  12. "abc",
  13. "abc",
  14. "abc",
  15. "123",
  16. "321",
  17. "123456"
  18. );
  19.  
  20. // 测试连接
  21. SAPConnUtils.connect(con);
  22. }
  23. }

如果出现如下结果表明连接失败,请检查连接类。

此时如果调用结果如下则表明建立连接成功。

四、常见报错

  1. 缺少build path

    这个错误是因为缺少了上述提到的文件,请按照文中提到的顺序将其加入项目中即可。

(一)通过JAVA连接SAP (sapjco3.jar在Windows和MacOS上的配置)的更多相关文章

  1. JAVA连接SAP

    1.首先需要在SAP事务码SE37中新建一个可以被远程调用的RFC 事务码:SE37 新建一个函数组:输入事务码SE37回车后,来到函数构建器屏幕,到上面一排菜单栏:转到 -> 函数组 -> ...

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

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

  3. 官网下载Java连接MySql驱动jar包

    官网地址:http://dev.mysql.com/downloads/connector/ 1.选择下载驱动 2.选择下载 3.可以不登录直接下载 4.下载下来的是zip压缩包,解压之后,文件夹中有 ...

  4. java连接OPC之——Windows7 With SP1 网络OPC的DCOM配置

    由于 OPC(OLE for Process Control)建立在 Microsoft 的 COM(COmponent Model)基础 上,并且 OPC 的远程通讯依赖 Microsoft 的 D ...

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

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

  6. centos7中配置java + mysql +jdk +使用jar部署项目

    centos7中配置java + mysql +jdk  +使用jar部署项目 思维导图 1. 配置JDK環境 1.1下载jdk安装包 Java Downloads | Oracle 1.2 将下载j ...

  7. java call sap

    1.下载需要的jar,windows用dll,linux用so win下载地址     linux下载地址 win下载地址new 2.环境: windows -> sapjco3.dll放到wi ...

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

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

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

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

随机推荐

  1. jq-demo-购物车

    首页 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title& ...

  2. python-面向对象-01课堂笔记

    面向对象 ''''1.面向过程编程   核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么   基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式​   ...

  3. Go const 关键字

    Go const 关键字 package main import "fmt" func main() { const LENGTH int = 10 const WIDTH int ...

  4. AnalyticDB for PostgreSQL 6.0 新特性介绍

    阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务 ...

  5. 归并排序c语言

    void mergeAdd(int arr[], int left, int mid, int right, int *temp){ int i = left; ; int k = left;//临时 ...

  6. Python 爬取赶集网租房信息

    代码已久,有可能需要调整 #coding:utf-8 from bs4 import BeautifulSoup #有这个bs4不用正则也可以定位要爬取的内容了 from urlparse impor ...

  7. NOIp2018集训test-9-6(am)

    Problem A. divisor 发现x为k可表达一定可以表示成这种形式,如k=3,x=(1/3+1/2+1/6)x. 于是可以搜索k(k<=7)个1/i加起来等于1的情况,如果一个数是这些 ...

  8. 暑假集训test-8-29

    今天瓜成一坨了. 瓜的说不出话来. 直接退役算了我. T1 傻逼题,但是我傻逼地敲了一个线段树合并,然后把空间炸了,只剩20分, 直接dfs维护子树大小,子树中最大最小值即可统计答案. //Achen ...

  9. NX二次开发-UFUN获取球的参数UF_MODL_ask_sphere_parms

    NX11+VS2013 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> UF_initialize( ...

  10. iOS7 AVAudioRecorder不能录音

    今天写录音代码的时候,在iOS7以下就可以录音,但是iOS7上不可以,后来才知道iOS7录音方式变了,加上下面的代码就可以了,bingo AVAudioSession *audioSession = ...