使用JCo连接SAP远程函数的简单方法

上网查了很久,都没找到JCo连接sap最简单的方法调用(指知道方法名和参数的情况下直接调用得到返回值),所以自己写了一点。

首先要调用JCo就必须先安装JCo(安装过程网上很多,转载一下)

JCo的安装
很不幸,虽然JCo是用Java语言编写的但却是平台相关的。(具体来说,JCo的Java包sapjco.jar确实是平台无关的,但是运行JCo需要RFC库支持,而RFC库是平台相关的)
目前为止我还只有在Windows系统中安装的版本,因为JCo不是一个开源组件,甚至在SAP官方下载它是需要SAP Service MarketPlace的用户帐号的。目前我手上的是JCo2.1.6Windows版本。
除了API文档和一些DEMO程序,你需要用到的有3个文件:librfc32.dll,sapjcorfc.dll,sapjco.jar。

安装配置步骤如下:
(1).将sapjco.jar导入到你的项目库路径中。SAP官方的指导是要你配置CLASSPATH,这种方法在我看来不值得提倡,因为eclipse或netBeans这样的IDE可以帮你轻松导入jar库而无需摆弄系统环境变量。
(2).将sapjcorfc.dll文件拷贝至sapjco.jar所在的文件夹中。注意,这两个文件必须放在同一个文件夹里,它们俩必须像热恋中的情人一样一直黏在一起才能使JCo正常工作。
(3).将librfc32.dll文件拷贝至C:\WINDOWS\system32中。如果系统中已安装过SAP客户端,那么可能本来就已经有一个librfc32.dll在那里了,SAP官方要求你覆盖那个文件,这是一种很不负责的方法。当你覆盖这个文件后很可能你的SAPLogon就无法工作了。正确的做法是备份原来的文件,然后尝试覆盖后使用SAPLogon,如果出问题了,把原来那个文件找回来。我在安装了710 Final Release版本的SAPLogon机器上使用原来的librfc32.dll运行JCo目前还没有发生什么异常。

现在开始是我调用函数的类文件

import com.sap.mw.jco.IFunctionTemplate;
import com.sap.mw.jco.JCO;
import java.util.Properties;

public class Example1 {

	public static void main(String[] args) {
		/* 获得一个到SAP系统的连接 START */
		Properties logonProperties = new Properties();
		logonProperties.put("jco.client.ashost", "XXX.XXX.XXX.XXX"); // 系统的IP地址
		logonProperties.put("jco.client.client", "800"); // 要登录的客户端
		logonProperties.put("jco.client.sysnr", "00"); // 系统编号
		logonProperties.put("jco.client.user", "user"); // 登录用户名
		logonProperties.put("jco.client.passwd", "password"); // 用户登录口令
		// 用上述条件创建一个连接对象
		JCO.Client myConnection = JCO.createClient(logonProperties);
		/* 获得一个到SAP系统的连接 END */
		System.out.println("--------connection start----------");
		try {
			myConnection.connect(); // 进行实际连接
			System.out.println("--------connection success----------");
		} catch (Exception ex) {
			System.out.println("--------connection failed----------");
		}

		// 如果连接不为null并且处于活动状态
		if (myConnection != null && myConnection.isAlive()) {
			// 从连接获得一个逻辑意义上的“仓库”对象(Repository)
			JCO.Repository myRepository = new JCO.Repository("Repository", // 只是一个名字
					myConnection); // 活动的连接
			// 要调用的SAP函数名称
			String strFunc = "X_BAPI_TEST";
			// 从“仓库”中获得一个指定函数名的函数模板
			IFunctionTemplate ft = myRepository.getFunctionTemplate(strFunc.toUpperCase());
			// 从这个函数模板获得该SAP函数的对象
			JCO.Function function = ft.getFunction();
			// 获得函数的import参数列表
			JCO.ParameterList input = function.getImportParameterList();

			// 设定一个import参数的值。参数名为"TEST_ID",设定值为"123456"
			input.setValue("123456", "TEST_ID");
			// 执行方法
			myConnection.execute(function);
			// 获得函数的export参数列表
			JCO.ParameterList output = function.getExportParameterList();

			System.out.println("------------x_name=" + output.getString("X_NAME") + "--------------");
			System.out.println("------------x_age=" + output.getString("X_AGE") + "--------------");

			myConnection.disconnect();
		} else {
			System.out.println(false);
		}
	}
}



猜你喜欢

转载自blog.csdn.net/aaron_luchen/article/details/6852471
今日推荐