RFC方式对接SAP
金蝶云社区-云社区用户3J7f5885
云社区用户3J7f5885
0人赞赏了该文章 1,627次浏览 未经作者许可,禁止转载编辑于2019年06月11日 17:58:01

**************************************************************
package com.kingdee.sap;

public class SapConn {

// SAP服务器
private String JCO_ASHOST;
// SAP系统编号
private String JCO_SYSNR;
// SAP集团
private String JCO_CLIENT;
// SAP用户名
private String JCO_USER;
// SAP密码
private String JCO_PASSWD;
// SAP登录语言
private String JCO_LANG;
// 最大连接数
private String JCO_POOL_CAPACITY;
// 最大连接线程
private String JCO_PEAK_LIMIT;
// SAP ROUTER
private String JCO_SAPROUTER;

/**
*
* @param JCO_ASHOST SAP服务器
* @param JCO_SYSNR SAP系统编号
* @param JCO_CLIENT SAP集团
* @param JCO_USER SAP用户名
* @param JCO_PASSWD SAP密码
* @param JCO_LANG SAP登录语言
* @param JCO_POOL_CAPACITY 最大连接数
* @param JCO_PEAK_LIMIT 最大连接线程
* @param JCO_SAPROUTER SAP ROUTER
*/
public SapConn(String JCO_ASHOST, String JCO_SYSNR, String JCO_CLIENT, String JCO_USER,
String JCO_PASSWD, String JCO_LANG, String JCO_POOL_CAPACITY, String JCO_PEAK_LIMIT,
String JCO_SAPROUTER) {
this.JCO_ASHOST = JCO_ASHOST;
this.JCO_SYSNR = JCO_SYSNR;
this.JCO_CLIENT = JCO_CLIENT;
this.JCO_USER = JCO_USER;
this.JCO_PASSWD = JCO_PASSWD;
this.JCO_LANG = JCO_LANG;
this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;
this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;
this.JCO_SAPROUTER = JCO_SAPROUTER;
}

public SapConn() {}

public String getJCO_ASHOST() {
return JCO_ASHOST;
}

public void setJCO_ASHOST(String JCO_ASHOST) {
this.JCO_ASHOST = JCO_ASHOST;
}

public String getJCO_SYSNR() {
return JCO_SYSNR;
}

public void setJCO_SYSNR(String JCO_SYSNR) {
this.JCO_SYSNR = JCO_SYSNR;
}

public String getJCO_CLIENT() {
return JCO_CLIENT;
}

public void setJCO_CLIENT(String JCO_CLIENT) {
this.JCO_CLIENT = JCO_CLIENT;
}

public String getJCO_USER() {
return JCO_USER;
}

public void setJCO_USER(String JCO_USER) {
this.JCO_USER = JCO_USER;
}

public String getJCO_PASSWD() {
return JCO_PASSWD;
}

public void setJCO_PASSWD(String JCO_PASSWD) {
this.JCO_PASSWD = JCO_PASSWD;
}

public String getJCO_LANG() {
return JCO_LANG;
}

public void setJCO_LANG(String JCO_LANG) {
this.JCO_LANG = JCO_LANG;
}

public String getJCO_POOL_CAPACITY() {
return JCO_POOL_CAPACITY;
}

public void setJCO_POOL_CAPACITY(String JCO_POOL_CAPACITY) {
this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;
}

public String getJCO_PEAK_LIMIT() {
return JCO_PEAK_LIMIT;
}

public void setJCO_PEAK_LIMIT(String JCO_PEAK_LIMIT) {
this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;
}

public String getJCO_SAPROUTER() {
return JCO_SAPROUTER;
}

public void setJCO_SAPROUTER(String JCO_SAPROUTER) {
this.JCO_SAPROUTER = JCO_SAPROUTER;
}

@Override
public String toString() {
return "SapConn{" +
"JCO_ASHOST='" + JCO_ASHOST + '\'' +
", JCO_SYSNR='" + JCO_SYSNR + '\'' +
", JCO_CLIENT='" + JCO_CLIENT + '\'' +
", JCO_USER='" + JCO_USER + '\'' +
", JCO_PASSWD='" + JCO_PASSWD + '\'' +
", JCO_LANG='" + JCO_LANG + '\'' +
", JCO_POOL_CAPACITY='" + JCO_POOL_CAPACITY + '\'' +
", JCO_PEAK_LIMIT='" + JCO_PEAK_LIMIT + '\'' +
", JCO_SAPROUTER='" + JCO_SAPROUTER + '\'' +
'}';
}
}
*******************************************************************************************
package com.kingdee.sap;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;

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;

public class SAPConnUtils {

private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";

/**
* 创建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连接
*/
private static void initProperties(SapConn sapConn) {
Properties connectProperties = new Properties();
// SAP服务器
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, sapConn.getJCO_ASHOST());
// SAP系统编号
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, sapConn.getJCO_SYSNR());
// SAP集团
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, sapConn.getJCO_CLIENT());
// SAP用户名
connectProperties.setProperty(DestinationDataProvider.JCO_USER, sapConn.getJCO_USER());
// SAP密码
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, sapConn.getJCO_PASSWD());
// SAP登录语言
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, sapConn.getJCO_LANG());
// 最大连接数
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, sapConn.getJCO_POOL_CAPACITY());
// 最大连接线程
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, sapConn.getJCO_PEAK_LIMIT());
// SAP ROUTER
connectProperties.setProperty(DestinationDataProvider.JCO_SAPROUTER, sapConn.getJCO_SAPROUTER());

createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
}

/**
* 获取SAP连接
* @return SAP连接对象
*/
public static JCoDestination connect(SapConn sapConn){
System.out.println("正在连接至SAP...");
JCoDestination destination = null;
initProperties(sapConn);
try {
destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
destination.ping();
System.out.println("已成功建立sap的连接");
} catch (JCoException e) {
System.out.println("Connect SAP fault, error msg: " + e.toString());
}
return destination;
}
}

******************************************************************
package com.kingdee.sap;

import java.util.*;

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 TestSap {

public static void main(String[] args) {
setValue2Sap();

}


public static void setValue2Sap()
{
SapConn con = new SapConn(
"192.168.7.11",
"00",
"202",
"eassys",
"eas-123456",
"ZH",
"1",
"5",
""
);

JCoFunction function = null;
JCoDestination destination = SAPConnUtils.connect(con);
String result="";//调用接口返回状态
String message="";//调用接口返回信息
String zzkc="";
try {
//调用ZCHENH001函数
function = destination.getRepository().getFunction("Z_SDL_OA_ACCOUNTING_DOCUMENT");
JCoParameterList input = function.getImportParameterList();
input.setValue("ZOAID", "68270");
input.setValue("COMP_CODE", "1000");
input.setValue("PSTNG_DATE", "2019-05-06");
input.setValue("DOC_TYPE", "KZ");
input.setValue("HEADER_TXT", "付史丹利管理层闵祥吉业务借款");
input.setValue("REF_DOC_NO", "");
input.setValue("USERNAME", "朱艳");
input.setValue("CURRENCY", "CNY");
input.setValue("NAME1", "");
input.setValue("ORT01", "");
//input.setValue("XITEM", listMaps);
JCoTable fields = function.getTableParameterList().getTable("XITEM");
fields.appendRow();
fields.setValue("POSNR", "");
fields.setValue("BSCHL", "25");
fields.setValue("HKONT", "1221001000");
fields.setValue("ZHKONT", "");
fields.setValue("ZZCFI", "");
fields.setValue("ZFBDT", "2019-05-06");
fields.setValue("LIFNR", "200515");
fields.setValue("ZUONR", "JKYW2019050013");
fields.setValue("SGTXT", "付史丹利管理层闵祥吉业务借款");
fields.setValue("DMBT1", "2000");
fields.setValue("ZZCOST", "");
fields.appendRow();
fields.setValue("POSNR", "");
fields.setValue("BSCHL", "50");
fields.setValue("HKONT", "1002010303");
fields.setValue("ZHKONT", "");
fields.setValue("ZZCFI", "2003");
fields.setValue("ZFBDT", "2019-05-06");
fields.setValue("LIFNR", "200515");
fields.setValue("ZUONR", "JKYW2019050013");
fields.setValue("SGTXT", "付史丹利管理层闵祥吉业务借款");
fields.setValue("DMBT1", "2000");
fields.setValue("ZZCOST", "");


function.execute(destination);

result= function.getExportParameterList().getString("XBELNR");//调用接口返回结果
message= function.getExportParameterList().getString("XFLAG");//调用接口返回信息
zzkc= function.getExportParameterList().getString("XNOTE");//调用接口返回信息
//获取返回表数据
JCoTable fields = function.getTableParameterList().getTable("GT_PO");

List lists=new ArrayList();
for(int i=0;i {
fields.setRow(i);
Purchase purchase=new Purchase();
purchase.setEBELN(fields.getString("EBELN"));
lists.add(purchase);
}

System.out.println("调用返回结果--->"+result+";调用返回状态--->"+message);
}catch (Exception e) {
e.printStackTrace();
}


}
}

jar下载地址:https://pan.kingdee.com/s/MTA4NjI5MCw1OGRh#/share/0部署:sapjco.jar eas/server/lib/sp
sapjco.dll c:/windows/system32
*****BOS开发环境为32位,需要引用32位jar和dll,服务器环境视具体而定

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0