java rfc调用_Java 调用SAP RFC函数 | 学步园

最近项目需要和SAP对接,将项目中的数据写入到SAP系统中,和SAP沟通下决定使用SAP提供的RFC函数,具体调用方法如下:

import java.util.ArrayList;

import java.util.List;

import java.util.Properties;

import org.apache.log4j.Logger;

import com.hafx.codesure.tqs.sap.model.SapStock;

import com.hafx.codesure.tqs.util.PropertiesUtils;

import com.sap.mw.jco.IFunctionTemplate;

import com.sap.mw.jco.JCO;

/**

* 与SAP RFC对接类

* @author lyh

* @version 2013-8-1

* @see SapJco

* @since

*/

public class SapJco

{

/**

* 日志

*/

private static Logger log = Logger.getLogger(SapJco.class);

/**

* SAP对接函数名

*/

private static String functionName = "zfm_crm_set_Quty";

/**

* 函数对应要写入数据的Table名

*/

private static String tableName = "LT_TABLE";

/**

* SAP连接

*/

private static JCO.Client mConnection = null;

/**

* SAP应答

*/

private static JCO.Repository mRepository;

/**

* Properties

*/

private static Properties p = new Properties();

static

{

p = new PropertiesUtils().getProperties("/config/TQS.properties");

//SAP配置从配置文件中获得

mConnection = JCO.createClient(

p.getProperty("jco.client.client"),// SAP client

p.getProperty("jco.client.user"), // userid

p.getProperty("jco.client.passwd"), // password

"en", // language (null for the default language)

p.getProperty("jco.client.ashost"), // application server host name

p.getProperty("jco.client.sysnr") // system number

);

}

/**

*

* Description:

* Implement:

*

* @param stocks 经销商库存集合

* @return X代表成功 其他代表失败

* @see

*/

public static String callRemote(List stocks)

{

String sapReturn = "";

try

{

/* //SAP配置从配置文件中获得

mConnection = JCO.createClient("121",// SAP client

"jsydj", // userid

"123456jsy", // password

"en", // language (null for the default language)

"192.168.2.22", // application server host name

"01"); // system number

*/

//连接

mConnection.connect();

JCO.Function function = SapJco.createFunction(functionName);

JCO.Table codes = null;

codes = function.getTableParameterList().getTable(tableName);

/* DIS_BP //经销商编码 10位固定

MATNR //物料编码 40位

ZYEAR //年度 4位

ZMONTH //月度 2位

CYCLE //周期 01 02 03 04 一号累加 最后多余的时间放到04周

QUANTITY_QUAN //库存数量 瓶

DATUM //当前日期 yyyyMMdd

UZEIT //当前时间 hhMMss

DIS_BP_DESC //经销商名称

MATNR_DESC //物流名称

*/

for(SapStock stock: stocks)

{

codes.appendRow();

codes.setValue(stock.getDisbp(), "DIS_BP");

codes.setValue(stock.getMatnr(), "MATNR");

codes.setValue(stock.getZyear(), "ZYEAR");

codes.setValue(stock.getZmonth(), "ZMONTH");

codes.setValue(stock.getCycle(), "CYCLE");

codes.setValue(stock.getQuantityquan(), "QUANTITY_QUAN");

codes.setValue(stock.getDatum(), "DATUM");

codes.setValue(stock.getUzeit(), "UZEIT");

codes.setValue(stock.getDisbpdesc(), "DIS_BP_DESC");

codes.setValue(stock.getMatnrdesc(), "MATNR_DESC");

//codes.

}

//执行

mConnection.execute(function);

//获得sap返回值

sapReturn = function.getExportParameterList().getString("EV_FLAG");

log.info("SAP 经销商库存返回值:" + sapReturn);

return sapReturn;

}

catch (Exception ex)

{

log.error("SAP RFC 经销商库存对接出现异常!异常信息:" + ex.getMessage());

}

finally

{

mConnection.disconnect();

}

return sapReturn;

}

/**

*

* Description: SAP 函数

* Implement:

*

* @param name

* @return

* @throws Exception

* @see

*/

private static JCO.Function createFunction(String name)

throws Exception

{

mRepository = new JCO.Repository("ARAsoft", mConnection);

try

{

IFunctionTemplate ft = mRepository.getFunctionTemplate(name.toUpperCase());

if (ft == null)

{

return null;

}

return ft.getFunction();

}

catch (Exception ex)

{

throw new Exception("Problem retrieving JCO.Function object.");

}

}

}

public class PropertiesUtils

{

/**

* 日志

*/

private static final Logger logger = Logger.getLogger(PropertiesUtils.class);

/**

*

* Description: 读入properties文件

*

* @param pPath

* @return Properties

* @throws IOException

* @see

*/

public Properties getProperties(String pPath)

{

Properties p = null;

try

{

InputStream is = getClass().getResourceAsStream(pPath);

if (is == null)

{

logger.error("Path==" + pPath + "== properties file stream is null");

}

p = new Properties();

p.load(is);

}

catch (Exception e)

{

logger.error(e.getMessage());

}

return p;

}

}

需要将sapjco.jar添加到项目中。

同时需要将librfc32.dll和sapjcorfc.dll放到javahome\jre\bin\下,否则会出现如下异常:[no sapjcorfc in java.library.path]. java.library.path

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值