`
康敏栋
  • 浏览: 171731 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

JAVA 调用SAP端接口

 
阅读更多
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
分享到:
评论
2 楼 lfyssm 2015-11-13  
GOOD
1 楼 yixi2166 2015-10-12  
写的真好 有帮助 

相关推荐

    Java 调用 SAP RFC 案例

    以下是一个简单的Java调用SAP RFC的示例代码片段: ```java import com.sap.conn.jco.*; public class SapRfcExample { public static void main(String[] args) { try { JCoDestination destination = ...

    JAVA 调用SAP端接口的相关包(sapjco3.jar,sapjco3.dll,sapjcorfc.dll)

    以上就是使用JCo调用SAP端接口的基本流程。需要注意的是,为了确保兼容性和安全性,开发者需要根据SAP系统版本和操作系统选择正确的JCo版本。此外,SAP官方提供了详细的API文档和示例代码,可以帮助开发者更好地理解...

    JAVA 调用SAP SOAP webservice.docx

    在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP 登录信息 在使用 JAVA 调用 SAP SOAP...

    java调用sap rfc说明

    Java调用SAP RFC(Remote Function Call)是一种技术,允许Java应用程序与SAP系统进行通信,执行SAP系统中的特定业务逻辑。SAP RFC是SAP NetWeaver平台提供的一种接口技术,它允许外部系统调用SAP的功能模块,就像...

    java连接RFC综合例子,java调用sap例子,泛微E8,E9调用SAP RFC例子

    RFC是SAP系统提供的一种接口技术,它允许外部系统与SAP系统交互,调用SAP的函数模块执行特定任务。在Java中,通过使用JCo(Java Connector)库,我们可以实现与SAP系统的RFC连接。 1. **JCo库的介绍**: - JCo是...

    JAVA调用SAP ODATA服务.docx

    ### JAVA调用SAP ODATA服务的关键知识点 在IT领域,特别是企业级应用开发中,Java与SAP系统的集成是一项非常重要的技术。SAP提供了多种API和服务来促进与其他系统的交互,其中ODATA(Open Data Protocol)是一种轻...

    JAVA连接SAP的官方接口文档

    JCo3是该库的第三版,它支持Java SE和Java EE环境,允许开发者在Java应用中调用SAP的ABAP函数模块、BAPIs(Business Application Programming Interfaces)以及IDocs(Intermediate Documents)。 1. **安装与配置...

    java在Linux下调用sap的RFC接口必备so文件 libsapjco3.so

    Java在Linux环境中调用SAP RFC接口涉及到的关键技术点包括Java与SAP的集成、Linux系统下的动态链接库(.so文件)以及SAP的RFC(远程功能调用)技术。这里将详细介绍这些知识点。 首先,SAP RFC是SAP提供的一种通信...

    Java以webservice方式调用SAP接口传输数据.pdf

    Java以webservice方式调用SAP接口传输数据的pdf文档,仅供参考!

    JAVA调用SAP ODATA服务

    总之,Java调用SAP ODATA服务涉及的身份验证、请求方法选择、跨域处理以及错误管理是关键步骤,理解并正确处理这些问题能够确保与SAP系统的顺利集成。同时,XML处理能力也是必不可少的,因为ODATA服务通常以XML格式...

    JAVA对接SAP接口使用sapjco3.dll跟jar文件

    总的来说,JAVA对接SAP接口使用`sapjco3.dll`和`jar`文件是一个涉及多个步骤的过程,包括环境配置、连接建立、接口调用以及资源管理和安全设置。理解这些核心概念和操作,能够帮助开发者有效地集成JAVA应用与SAP系统...

    .Net调用SAPRFC接口来读取数据实战纪实[汇编].pdf

    .Net 调用 SAP RFC 接口来读取数据实战纪实 在软件开发中,.Net 调用 SAP RFC 接口来读取数据是一种常见的应用场景。本文将详细介绍如何使用 .Net 框架调用 SAP RFC 接口来读取数据,并记录了调试的全过程。 关键...

    Net调用SAP RFC接口读取数据

    在本文中,我们将讨论如何使用.NET框架调用SAP RFC接口来读取数据。本文将分步骤地指导您完成整个过程,从安装所需的组件到编写代码调用RFC接口。 首先,需要安装以下组件: 1. Visual Studio 2003(VS2003):这...

    SAP的RFC接口调用

    要实现Java调用SAP RFC接口,我们需要以下步骤: 1. **配置JCO**:在Java项目中,需要引入SAP JCo库。这通常通过将JAR文件(如`jco3.jar`)添加到项目的类路径中完成。同时,确保系统环境变量中包含SAP JCo的本地库...

    JAVA调用SAP接口设置

    总的来说,Java调用SAP接口涉及到的关键步骤包括: 1. 获取并添加SAP JCo库(sapjco3.jar和对应的dll)。 2. 使用Maven或直接添加JAR包到项目。 3. 确保dll文件在系统路径中可访问。 4. 调整Maven本地仓库以匹配项目...

    DotNet调用SAP Rfc接口(Winform, Webservice, WebApp)

    ### DotNet调用SAP Rfc接口(Winform, Webservice, WebApp) #### 关键前提 为了确保能够顺利地实现.NET与SAP系统的集成,需要满足以下几点前提条件: 1. **安装Visual Studio 2003**:尽管.NET框架已经发展到更...

    java连接sap RFC函数 所需文件

    `sapjco3.jar`是该库的核心组件,包含了所有必要的Java类和接口,使得开发者可以编写代码来调用SAP的RFC函数。 2. `sapjco.jar`:这个文件可能是一个早期版本或者辅助库,通常包含了一些与SAP JCo相关的类和资源。...

    java连接sap调用接口源码

    java连接sap调用接口源码,提供各环境的依赖工具包,含mac、windows、linux系统; 内含源码,使用教程,示例接口,部署时遇到的问题及解决办法。 是一个完整的web服务,简单方便,更改一些配置项即可,开箱使用,...

    Java rfc调用 sap 接口 sapjco.jar sapjco.dll 文件

    在IT行业中,Java RFC(Remote Function Call)调用SAP接口是一种常见的企业级集成技术,尤其在企业系统间数据交互和流程自动化时。本话题主要关注如何使用Java通过RFC调用SAP系统,并涉及到关键库文件`sapjco.jar`...

Global site tag (gtag.js) - Google Analytics