一、项目搭建

  1. 创建项目,添加依赖
  2. 引入maven依赖
  3. 编写工具类
  4. 测试是否成功
  5. 注意事项

二、打包部署

一、项目搭建

1、创建Maven项目,在src/main/resource目录下创建lib文件夹,导入sap依赖

2、pom.xml中引入以下依赖

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</version><relativePath /></parent><properties><!-- 文件拷贝时的编码 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- 编译时的编码 --><maven.compiler.encoding>UTF-8</maven.compiler.encoding><java.version>1.8</java.version></properties><dependencies><!--  springboot 整合web组件--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Hutool依赖--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.1.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- alibaba JSONObject 依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.30</version></dependency><!--引入sap依赖--><dependency><groupId>com.sap</groupId><artifactId>sapjco3</artifactId><version>3.1.0</version><scope>system</scope><!--这是我项目中依赖地址,可根据自己依赖修改对应目录--><systemPath>${project.basedir}/src/main/resources/lib/sapjco3.jar</systemPath></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--设置为true,以便把本地的system的jar也包括进来--><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins></build>

3、创建工具类,SapUtils

package com.wang.sap.util;import com.sap.conn.jco.*;
import com.sap.conn.jco.ext.DestinationDataProvider;
import lombok.extern.slf4j.Slf4j;import java.io.File;
import java.io.FileOutputStream;
import java.util.*;/*** @author wanggang* @date 2023/3/2*/
@Slf4j
public class SapUtils {public static JCoFunction getJCoFunction(JCoDestination jCoDestination, String functionName) throws JCoException {JCoFunctionTemplate functionTemplate = jCoDestination.getRepository().getFunctionTemplate(functionName);return functionTemplate.getFunction();}/*** 获取JCoDestination* @param functionName  SAP函数名称* @return JCoDestination*/public static JCoDestination getJcoConnection(String functionName) throws Exception {Properties properties = new Properties();properties.setProperty(DestinationDataProvider.JCO_ASHOST, "127.0.0.1");//sap服务器地址properties.setProperty(DestinationDataProvider.JCO_SYSNR, "00");//系统编号,找SAP核对写00就可以了properties.setProperty(DestinationDataProvider.JCO_CLIENT, "800");//集团号,不知道就问你们的sap basisproperties.setProperty(DestinationDataProvider.JCO_USER, "root");//帐号properties.setProperty(DestinationDataProvider.JCO_PASSWD, "123123");//密码properties.setProperty("jco.client.lang", "zh");    //语言//使用连接池properties.setProperty("jco.destination.peak_limit", "10"); //最大活动连接数,0表示无限制properties.setProperty("jco.destination.pool_capacity", "3");   //空闲连接数,如果为0,则没有连接池效果,默认为1log.info("properties = " + properties.toString());//生成配置文件,JCoDestinationManager.getDestination()调用时会需要该连接配置文件,后缀名需要为jcoDestinationFileOutputStream fos = null;String suffix = "jcoDestination";File cfg = new File(functionName + "." + suffix);if (!cfg.exists()) {try {fos = new FileOutputStream(cfg, false);properties.store(fos, "for tests only !");fos.close();} catch (Exception var9) {throw new Exception("Unable to create the destination file " + cfg.getName(), var9);} finally {if (null != fos) {fos.close();}}}return JCoDestinationManager.getDestination(functionName);}}

4、测试

import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoParameterList;
import com.sap.conn.jco.JCoTable;
import com.wang.sap.util.SapUtils;
import lombok.extern.slf4j.Slf4j;/*** @author wanggang* @date 2023/3/3*/
@Slf4j
public class SapTest {public static void main(String[] args) throws Exception {String functionName="ZHRFU_KQYC_OA";    //函数名String tableName="ET_DATA"; //表名JCoDestination jcoConnection = SapUtils.getJcoConnection(functionName);JCoFunction function = SapUtils.getJCoFunction(jcoConnection, functionName);//获取接口参数格式String toXML = function.toXML();log.info("接口参数:"+toXML);//SAP接口参数分为INPUT和TABLES两种,赋值方式不一样//INPUT类型的参数赋值JCoParameterList inputParams = function.getImportParameterList();inputParams.setValue("IV_BEGDA","20230301");inputParams.setValue("IV_ENDDA","20230303");//TABLES表参数赋值JCoTable jCoFields = function.getTableParameterList().getTable(tableName);for (int i = 1  ; i <=2; i++) {//给表格的第几行写入数据,写入第一行的下标是1jCoFields.setRow(i);jCoFields.setValue("MANDT","8000");jCoFields.setValue("ZINDEX",i);}function.execute(jcoConnection);log.info("返回结果="+function.toXML());JCoParameterList tableParameterList = function.getTableParameterList();//获取SAP标准返回结果OUTPUTObject ev_type = function.getExportParameterList().getValue("EV_TYPE"); //状态码Object ev_message = function.getExportParameterList().getValue("EV_MESSAGE");   //文本信息//获取SAP返回的表数据,ET_DATA是表名JCoTable et_data = tableParameterList.getTable("ET_DATA");log.info("et_data="+et_data.toXML());int numRows = et_data.getNumRows(); //返回数据行数for (int j = 0; j < numRows; j++) {//读取数据,第一行的下标是0et_data.setRow(j);et_data.getString("MANDT");}}
}

5、注意事项

  • 修改连接配置需要删除之前生成的文件,否则不会生效
  • 参数赋值时注意是什么类型的参数,返回数据也是同样的
  • 如果没有接口文档,获取function后执行function.toXML()方法,可以看到所有参数和数据
  • pom.xml中一定要加入以下依赖,否则项目打包sap的依赖包不会引入jar中
        <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--设置为true,以便把本地的system的jar也包括进来--><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins></build>

二、打包部署

因为我们创建的是Maven项目,使用的是外部依赖,打包的时候会导致外部依赖名称和jar中的依赖名称不一致,这时候运行jar或者执行相关代码就会报一个错误

解决方法:

第一种:打成jar包后,用解压文件打开,找到apjco3-3.1.0.jar重命名apjco3.jar

第二种:修改pom.xml,在build——>resources节点中加入以下代码(推荐)

            <resource><!--外部jar存放路径--><directory>${project.basedir}/src/main/resources/lib</directory><targetPath>BOOT-INF/lib/</targetPath><includes><include>**/*.jar</include></includes></resource><resource><directory>src/main/resources</directory><targetPath>BOOT-INF/classes/</targetPath></resource>

这样打包后jar文件中级会有一个没有重命名的sap依赖包,直接运行即可

sap依赖:https://pan.baidu.com/s/1rC_xJ_vqDbOkk4lS0vlEPw?pwd=1234

项目地址:https://gitee.com/wzzwg_admin/wang-sap

参考博客:https://blog.csdn.net/bj_chengrong/article/details/109498275

SpringBoot调用SAP接口(搭建部署)相关推荐

  1. SpringBoot项目使用JCO实现调用SAP接口实例

    一.JCO接口介绍 JCO采用的是中间式接口,即外部系统将SAP系统所需的信息生成中间数据表,SAP系统直接读取中间文件或将中间表中的信息写入数据库中,中间式接口是比较常用的一种方式,这种方式外部系统 ...

  2. springboot 对接sap接口,不生成连接配置文件文件的方法。

    springboot 对接sap接口,不生成连接配置文件文件的方法. 网上大部分都是要生成两个连接文件,导致部署的时候,要考虑jar和文件怎么部署,很不方便.本文只记录,不生成连接文件这一种方式. 1 ...

  3. sapjco3调用sap接口

    一.环境 准备环境,本文用的是springboot项目,需要sapjco3.jar和sapjco3.dll文件,sqpjco3.dll文件需要放在system32文件夹下,sapjco3.jar因为m ...

  4. JAVA调用SAP接口地址_Java以webservice方式调用SAP接口传输数据

    Java以webservice方式调用SAP接口传输数据,在SAP中生成 会计凭证/冲销会计凭证 1.生成会计凭证(已完成) 2.冲销会计凭证(以下教程截图以该接口为例) Java调用sap的webs ...

  5. C#如何连接SAP调用SAP接口函数

    在项目中我们经常会遇到SAP与其他应用系统对接的情况,如OA对接SAP的FI.HR模块,生产系统对接SAP的MM模块等等.这里和大家介绍下C#如果调用SAP接口,从而调用SAP接口函数. 下面先贴出代 ...

  6. SpringBoot 调用python接口

    SpringBoot调用Python脚本 一.前言 二.方法 1.代码 2.运行 一.前言 SpringBoot作为后端开发框架,有强大且方便的处理能力.但是作为一个结合数据分析+前台展示的网站来说, ...

  7. java使用JCO调用SAP接口

    博客参考:http://blog.csdn.net/jay_1989/article/details/51821069 (可以说我是基本照抄,所以本篇博客为转载) 其实在写这篇博客之前,已经有很多前辈 ...

  8. linux下 部署调用SAP接口

    转载:https://blog.csdn.net/yunfei1992/article/details/80995223 1.     配置 操作系统:Linux 处理器64位 JDK:1.5 SAP ...

  9. linux 部署调用SAP接口

    1.     配置 操作系统:Linux 处理器64位 JDK:1.5 SAP JCo:sapjco3-linuxintel-3.0.5.tgz 安装步骤: 1.将libsapjco3.so复制到JD ...

最新文章

  1. 【FPGA】SRIO中的关键问题总结(一)SRIO中的关键数据包格式总结
  2. sscanf操作字符串和整型的区别
  3. angular2新手学习笔记(1)概述
  4. spring源码分析之spring-web http详解
  5. android sqlite3_open_v2( data/data//database ,handle,1,null)
  6. 游戏中DDA算法和Bresenham算法的应用
  7. LeetCode 2185. 统计包含给定前缀的字符串
  8. margin-top失效的解决办法
  9. java调用nodejs程序,从java里面调用node.js脚本
  10. 改变checkbox样式问题
  11. 西部开源学习笔记《unit 2》
  12. JS中5秒中跳转到其他页面
  13. [00011]-[2015-08-26]-[00]-[Windows 程序设计 ---MFC 截屏---BMP格式 ---JPG格式]
  14. 多组测试数据01字典树「模板」
  15. android平板和ipad区别,iPad和安卓平板差距大吗?亲身经历告诉你,平板该如何挑选...
  16. DB、DBMS、SQL分别是什么,有什么关系?
  17. linux 消息队列的单工通信,半双工通信
  18. scp 远程拷贝文件
  19. 极客巅峰2021 web opcode
  20. 高红梅 第二章 第二节 性别焦虑、两性关系与个人身份认同的困境

热门文章

  1. 【Zookeeper】分布式集群(详细图文)
  2. c语言中字母与allse,六年级小学英语_所有字母组合的发音__(音标归类总结)
  3. 去空格/去空白行在线工具
  4. python_爬虫 16 Scrapy框架之(二)快速入门
  5. 21个有用的python工具
  6. tf.transpose详解(能懂版)
  7. android 百度转码,关于百度移动端转码的问题与解决办法
  8. 米家电磁炉显示e10_米家电磁炉深度使用解析 这才是我想要的
  9. 无为才能够无不为-曾仕强
  10. 新手如何快速入门node.js