// 获取RFC返回的字段值
11 JCoParameterList exportParam = function.getExportParameterList();
12 String exParamA = exportParam.getString("field_A");
13 String exParamB = exportParam.getString("field_B");
14 // 遍历RFC返回的表对象
15 JCoTable tb = function.getTableParameterList().getTable("table_name");
16 for (int i = 0; i < tb.getNumRows(); i++) {
17 tb.setRow(i);
18 System.out.println(tb.getString("field01"));
19 System.out.println(tb.getString("field02"));
20 }
21 }
SAP的R/3系统与Java平台一样有着许多类似的技术理念,以及同样广泛的企业级用户,但是它们完全是两个不同的世界。当用户面临流程或者数据整合方面的需求的时候,就迫切需要一种高效的方式,在R/3系统和Java平台之间实时地交换数据。基于这样的需求,SAP提供了一套高效的基于RFC的ABAP和Java进程间通讯组件:SAP Java Connector(JCo)。
本文将介绍JCo组件的架构,配置,基本使用方法以及调试,同时还将讨论如何对RFC方式调用的ABAP函数进行远程调试。
JCo库提供了可以直接在Java程序中使用的API。该API通过JNI调用部署在客户端的SAP的RFC库。该RFC库是用C语言实现的,并且与JCo库相互独立发布。但是,在下载的JCo库压缩包中也会提供。
该组件支持Inbound(在Java代码中调用ABAP函数)和Outbound(在ABAP代码中调用Java)两种模式。本文只专注于介绍Inbound模式中,如何在Java代码远程调用ABAP函数。
安装与配置
最新版本的JCo库可以在如下网址下载(请选择适合你的软件和硬件平台的版本,本文的示例都基于32位Windows操作系统):
http://service.sap.com/connectors
你可能需要提供SAP Service MarketPlace的用户帐号。解压缩以后,将名为librfc32.dll的文件复制到目录 system32下面。如果该文件已经存在,则覆盖它。这个文件就是SAP的RFC协议实现,可以在http://service.sap.com/connectors下载其最新版本。
然后,确保CLASSPATH环境变量中包含文件sapjco.jar所在的目录。因为这个JAR包中含有在Java程序中需要直接调用的类和接口。
下载的压缩包中还包含了JavaDoc,文档以及示例程序供参考。
建立连接
在执行任何操作之前,必须先建立到SAP系统的连接。本文示例使用的用户名是“DDIC”,登录密码是“minisap”
类JCO是Jco库中最主要的一个入口,它提供了许多静态方法。其中有一系列重载的createClient方法可以用来创建与SAP系统的连接信息。这些信息都保存在返回的JCO.Client类的实例中。常用的两种方式如下:
直接输入参数:
JCO.Client myConnection = JCO.createClient("000", "DDIC", "minisap", "EN", "10.0.0.11", "00");
使用Java Properties:
Properties logonProperties = new Properties(); logonProperties.put("jco.client.ashost","10.0.0.11"); logonProperties.put("jco.client.client","000"); logonProperties.put("jco.client.passwd",&#