1.此处不涉及到sap端的开发,sap端接口写好了,只是通过JAVA直接调用接口名
2.sapjco3.jar,sapjco3.dll和sapjcorfc.dll要放在容器的lib下面,而不是项目的WEB-INF\lib,例如tomcat,D:\Program Files\Tomcat 6.0\lib,就是你tomcat安装路径下。
原因见 http://www.iteye.com/problems/96263
本文章中两个例子:1.读取SAP系统中的借款余额;2.生成SAP会计凭证
1.下载下面的jar和dll,放到容器的lib中;接着通过代码实现与sap连接
SAPConn.java即JAVA与sap连接代码
package rising.sap;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
import org.apache.log4j.Logger;
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;
/**
* 与SAP连接配置
* @author wy
*/
public class SAPConn {
private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
static{
Properties connectProperties = new Properties();
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "192.168.17.8");//服务器
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "00"); //系统编号
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "120"); //SAP集团
connectProperties.setProperty(DestinationDataProvider.JCO_USER, "OASERVICE"); //SAP用户名
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "oatest"); //密码
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "zh"); //登录语言
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); //最大连接数
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); //最大连接线程
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){
log.error("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(){
JCoDestination destination =null;
try {
destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
} catch (JCoException e) {
log.error("Connect SAP fault, error msg: " + e.toString());
}
return destination;
}
private static Logger log = Logger.getLogger(SAPConn.class); // 初始化日志对象
}
2.从sap取余额接口的文档
这个接口的功能是去sap中查询出个人借款余额
ZRFC_GET_REMAIN_SUM这个为接口名;
输入参数I_PARAM,I_KUNNR...这些表示你调用该接口时传入的参数
输出参数:
(1)E_STATUS 数据返回状态
S:成功读取余额
F:无余额
E:异常
(2)E_MESSAGE数据返回消息
E_STATUS 返回数据为E,错误信息存放于E_MESSAGE
(3)E_REMAIN_SUM 余额,就是你想要的余额
接口调用成功返回正确的余额数据
LoadBorrowMoneyBalanceFromSAP.java即JAVA调用sap获取余额
package rising.test;
import rising.sap.SAPConn;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.JCoFunction;
/**
* 从sap中取得借款余额
* @author kmd
* 2013-06-05
*
*/
public class LoadBorrowMoneyBalanceFromSAP {
/*
* balanceType 借款类型 01:个人借款余额 02:其他应付借款余额 03:供应商的应付款余额
* customerEmployeeNumber 客户员工编号
* supplierCode 供应商编码
* companyCode 公司代码(法人体)
* accountNumber 会计科目编号
* year 年
* month 月
*/
public static String LoadBorrowMoneyBalance(String balanceType,String customerEmployeeNumber,String supplierCode,String companyCode,String accountNumber,String year,String month){
String balance="";
JCoFunction function = null;
//连接sap,其实就类似于连接数据库
JCoDestination destination = SAPConn.connect();
try {
//调用ZRFC_GET_REMAIN_SUM函数
function = destination.getRepository().getFunction("ZRFC_GET_REMAIN_SUM");
//将当前传入的值赋予各个参数
function.getImportParameterList().setValue("I_PARAM", balanceType);
function.getImportParameterList().setValue("I_KUNNR", customerEmployeeNumber);
function.getImportParameterList().setValue("I_LIFNR", supplierCode);
function.getImportParameterList().setValue("I_BUKRS", companyCode);
function.getImportParameterList().setValue("I_KOBEZ", accountNumber);
function.getImportParameterList().setValue("I_YEAR", year);
function.getImportParameterList().setValue("I_MONTH", month);
function.execute(destination);
//获取借款余额
balance=function.getExportParameterList().getString("E_REMAIN_SUM");
//获返回状态
String state=function.getExportParameterList().getString("E_STATUS");
//获返回信息
String message=function.getExportParameterList().getString("E_MESSAGE");
System.out.println("调用返回状态--->"+state);
System.out.println("调用返回信息--->"+message);
} catch (JCoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return balance;
}
}
3.sap生成凭证接口的文档
该接口表示传入为一个表的形式,参数公司代码和凭证类型封装在表T_ACCDOCUMENT中
而输出来的有返回状态 ,返回消息和表T_ACCDOCUMENT,而从文档可以看出会附带得出会计凭证号和会计凭证行项目这两个参数。(为了简单方便,文档中有些参数省略了)
CreateVoucherFromSAP.java生成SAP会计凭证
package rising.test;
import rising.sap.SAPConn;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoTable;
/**
* 从sap中生成凭证
* @author kmd
* 2013-06-05
*
*/
public class CreateVoucherFromSAP {
public static void main(String[] args) {
JCoFunction function = null;
JCoDestination destination = SAPConn.connect();
String state="";//调用接口返回状态
String message="";//调用接口返回信息
String belnr="";//会计凭证号
String buzei="";//会计凭证行项目
try {
//调用ZRFC_GET_REMAIN_SUM函数
function = destination.getRepository().getFunction("ZRFC_OA_ACC_DOCUMENT");
//获取传入表参数T_ACCDOCUMENT
JCoTable T_ACCDOCUMENT = function.getTableParameterList().getTable("T_ACCDOCUMENT");
T_ACCDOCUMENT.appendRow();//增加一行
//给表参数中的字段赋值,此处测试,就随便传两个值进去
T_ACCDOCUMENT.setValue("BUKRS", "1000");
T_ACCDOCUMENT.setValue("BLART", "SA");
function.execute(destination);
state= function.getExportParameterList().getString("E_STATUS");//调用接口返回状态
message= function.getExportParameterList().getString("E_MESSAGE");//调用接口返回信息
System.out.println("调用返回状态--->"+state+";调用返回信息--->"+message);
T_ACCDOCUMENT.firstRow();//获取第一行的对象(此处看sap端如何写的,如果返回的可能有多行,那得循环)
belnr=T_ACCDOCUMENT.getString("BELNR");
buzei=T_ACCDOCUMENT.getString("BUZEI");
System.out.println("会计凭证号--->"+belnr+";会计凭证行项目--->"+buzei);
T_ACCDOCUMENT.clear();//清空本次条件,如果要继续传入值去或者还要循环,那得将之前的条件清空
}catch (Exception e) {
e.printStackTrace();
}
}
}
- 大小: 10.9 KB
- 大小: 10 KB
分享到:
相关推荐
Java 调用 SAP RFC 案例,附博客地址,SAP RFC开发一步一步 http://blog.csdn.net/iberr/article/details/40895453
JAVA 通过JCO调用SAP端接口的相关包(sapjco3.jar,sapjco3.dll,sapjcorfc.dll)打包下载
JAVA 调用SAP SOAP webservice需要注意的一些坑,请务必按步骤一步步来。
JAVA调用SAP ODATA服务.docx
非常实用的例子,一看就会,最近使用java连接RFC,把这个例子保存,以后方便查看。
Java 调用SAP的 RFC 接口源码,附带 jco3.0 的动态链接库。
Java通过Axis2调用SAP的Webservice 生成Java Proxy
Java以webservice方式调用SAP接口传输数据的pdf文档,仅供参考!
JAVA程序与SAP系统集成时,JAVA可以调用SAP RFC接口实现数据交互,JAVA需要添加sapjco3.ja支持库。通过maven的方式添加,或直接在java项目中添加jar包。
包括示例代码,代码说明,所需要的资源(sapjco.jar)文件。
JAVA对接SAP接口使用sapjco3.dll跟jar文件
Java rfc调用 sap 接口 sapjco.jar sapjco.dll 文件
JAVA调用SAP接口需要的sapjco3.dll和sapjco3.jar,包含了linux和windows的32位和64位,测试可用
java连接sap调用接口源码,提供各环境的依赖工具包,含mac、windows、linux系统; 内含源码,使用教程,示例接口,部署时遇到的问题及解决办法。 是一个完整的web服务,简单方便,更改一些配置项即可,开箱使用,...
Java调用SAP RFC驱动程序 Windows版本 亲测可用 sapjco30P_17-64-Windows 需要将DLL放到环境变量中
SAP 开发技术JAVA调用SAP函数指南.pdf
Axis2调用SAP Webservice源码 使用Axis2 org.apache.axis2.eclipse.codegen.plugin_1.6.2.jar插件生成本地Java Proxy同事生成同步和异步调用测试用例 更重要的是配备详细文档,实乃Java与SAP集成是宝典!
一、windows 环境设置 1.sapjco3.dll 需要与 sapjco3.jar 在同一目录 ...1.将sapjco3.jar 文件复制至 $JAVA_HOME/lib/sapjco3.jar 2.将 libsapjco3.so 文件复制至 $JAVA_HOME/jre/lib/amd64/server/libsapjco3.so
NULL 博文链接:https://gaozi131.iteye.com/blog/516309
用于kettle连接sap 包括sapjco3.dll,sapjco3.jar,sapjco3.pdb