Windows环境配置
1、将sapjco3.jar引入
2、配置sapjco3.dll文件
32位系统:将sapjco3.dll放到C:\Windows\System32下 或者放到jdk/bin下
64位系统:将sapjco3.dll放到C:\Windows\SysWOW64下 或者放到jdk/bin下
Linux环境配置
1、将sapjco3.jar复制到 $JAVA_HOME/lib/sapjco3.jar(我是直接打包到war)
2、将libsapjco3.so放到 $JAVA_HOME/jre/lib/amd64/server/libsapjco3.so
工程配置
1、pom.xml导入依赖
<dependency>
<groupId>com.sap</groupId>
<artifactId>sapjco</artifactId>
<version>3</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/sapjco3.jar</systemPath>
</dependency>
2、SAP配置文件导入
把ABAP_AS_WITH_POOL.jcoDestination(默认命名)配置文件直接复制到Tomcat的bin目录下。
以下为对应的参数信息,你只需要把对应的参数填上即可。
sap.host=
sap.sysnr=
sap.client=
sap.user=
sap.passwd=
sap.lang=
sap.poolcapacity=
sap.peaklimit=
连接测试代码
连接
package com.connectSAP;
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;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
public class ConnectToSAP {
private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
private static JCoDestination destination = null;
static {
Properties connectProperties = new Properties();
ApplicationContext ctx =new ClassPathXmlApplicationContext("*****.xml");
BaseForSAP base = (BaseForSAP) ctx.getBean("sapBaseSource");
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, base.getJcohost());// 服务器
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, base.getJcosysnr()); // 系统编号
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, base.getJcoclient()); // SAP集团
connectProperties.setProperty(DestinationDataProvider.JCO_USER, base.getJcouser()); // SAP用户名
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, base.getJcopasswd()); // 密码
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, base.getJcolang()); // 登录语言:ZH EN
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, base.getJcopool()); // 最大连接数
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, base.getJcolimit()); // 最大连接线程
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() {
try {
if(null == destination)
destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
} catch (JCoException e) {
System.out.println("Connect SAP fault, error msg: " + e.toString());
}
return destination;
}
}
package com.connectSAP;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
public class BaseForSAP {
private String jcohost;
private String jcosysnr;
private String jcoclient;
private String jcouser;
private String jcopasswd;
private String jcolang;
private String jcopool;
private String jcolimit;
public String getJcosysnr() {
return jcosysnr;
}
public void setJcosysnr(String jcosysnr) {
this.jcosysnr = jcosysnr;
}
public String getJcopool() {
return jcopool;
}
public void setJcopool(String jcopool) {
this.jcopool = jcopool;
}
public String getJcolang() {
return jcolang;
}
public void setJcclang(String jcolang) {
this.jcolang = jcolang;
}
public String getJcopasswd() {
return jcopasswd;
}
public void setJcopasswd(String jcopasswd) {
this.jcopasswd = jcopasswd;
}
public String getJcouser() {
return jcouser;
}
public void setJcouser(String jcouser) {
this.jcouser = jcouser;
}
public String getJcoclient() {
return jcoclient;
}
public void setJcoclient(String jcoclient) {
this.jcoclient = jcoclient;
}
public String getJcolimit() {
return jcolimit;
}
public void setJcolimit(String jcolimit) {
this.jcolimit = jcolimit;
}
public String getJcohost(){
return jcohost;
}
public void setJcohost(String jcohost){
this.jcohost = jcohost;
}
}
测试获取sap的table数据
package com.connectSAP;
import com.sap.conn.jco.*;
public class CheckSnFromSAP {
public static void main(String[] args) {
JCoFunction function = null;
JCoDestination destination = ConnectToSAP.connect();
int result=0;//调用接口返回状态
String message="";//调用接口返回信息
try {
function = destination.getRepository().getFunctionTemplate("ZFKYMOM002").getFunction();
JCoParameterList input = function.getImportParameterList();
input.setValue("I_MATNR","300190002");//输入参数
// input.setValue("I_ADD","X");
function.execute(destination);
// result= function.getExportParameterList().getInt("RESULT");//调用接口返回结果
// message= function.getExportParameterList().getString("MSG");//调用接口返回信息
JCoTable table = function.getTableParameterList().getTable("IT_DATA");
for(int i = 0; i<table.getNumRows(); i++){
table.setRow(i);
// System.out.println(table.getString("GERNR01").replaceFirst("^0*", ""));
// System.out.println("物料号:"+table.getString("MATNR"));
System.out.println("电压范围:"+table.getString("ZMIAOSHU2"));
// System.out.println(table.getString("IDAT2").equals("0000-00-00"));
}
System.out.println("调用返回结果--->"+result+";调用返回状态--->"+message);
}catch (Exception e) {
e.printStackTrace();
}
}
}