JCo在java中调用abap服务
SAP ABAP与JAVA之间通过RFC传递数据实例

str[i][j++] = field.getString();
}else
if(field.getName().equals("LTEXT")){
str[i][j] = field.getString();
}
System.out.println(field.getName() +
":\t" + field.getString());
图6 特别要注意的是,下面图要默认 Unicode,因为这个标示影响 Java 代码中的 Unicode 设置。
4
SAP ABAP 与 JAVA 之间通过 RFC 传递数据实例 作者的 EMAIL:ebahaimei@ ebahaimei
图7 上述配置完成即可。 测试连接
5
SAP ABAP 与 JAVA 之间通过 RFC 传递数据实例 作者的 EMAIL:ebahaimei@ ebahaimei
}
s.nextRow();
}
JCO.Table
inputTable
=
function.getTableParameterList().getTable("ZT001T_T"); //SAP 回传表名
for(int i=0;i<str.length;i++){
13
SAP ABAP 与 JAVA 之间通过 RFC 传递数据实例 作者的 EMAIL:ebahaimei@
inputTable.insertRow(i);
inputTable.setRow(i);
ebahaimei
"BUKRS");
inputTable.setValue(100, "MANDT"); inputTable.setValue(str[i][0],
SAP JCO使用指导

SAP Java Connector1.目的SAP Java Connector (SAP JCo)是个中间件组件,用于SAP组件和JAVA程序的开发。
SAP JCO 支持两种方向连接SAP 服务器:inbound calls (Java calls ABAP) and outbound calls (ABAP calls Java)。
SAP JCO可以用于桌面应用和WEB应用程序也可以作为组件嵌入到一下程序中:SAP Business Connector:用于与外边的JAVA程序的连接SAP Web Application Server:通过ABAP环境连接到嵌入式J2EE服务2.实现SAP 提供SAP JCO 各种版本✧作为单独的独立于SAP环境软件组件,可以从/connectors.下载安装文件✧当你使用SAP Business Connector 或者SAP Web Application Server for Java时SAP JCO 会自动安装。
3.SAP JCO 体系结构从JAVA程序开始,JAVA 业务方法通过JCO 核心API,再通过RFC和JNI层,发送到SAP系统,系统响应了请求,并把相应信息通过以上路径返回到JAVA程序中。
4.SAP JCo情景图1:使用SAP JCo在SAP Web AS中融合J2EE 和ABAP图2:使用CPI-C/fRFC 连接ABAP和J2EE.5.SAP JCO 安装SAP JCo 2.0需要JDK 1.2和更高,如果你需要用JDK1.1需要使用1.1.04或者更高过程:创建目录,例如C:\\SAPJCo,抽取JCo .zip到该目录中在SAP JCo目录中复制librfc32.dll到C:\WINNT\SYSTEM32放置sapjco.jar到程序的类路径中6.SAP JCO 客户端编程SAP JCo主要的操作活动建立到SAP 服务器的连接SAP JCo有两种方式连接到SAP服务器:直接连接和连接池直接连接打开连接:调用函数和关闭连接:连接池创建连接池:获取和释放连接:JCO.Repository:用于存取RFMs的元数据创建Repository创建JCO.FUNCTION执行JCO.FUNCTION映射JAVA和ABAP数据类型存取表BAPI函数调用。
最新Jco 3.0技术详解---Java EE连接SAP

本内容由【菊花频道】特别提供---------------- 版权所有,盗版必爆菊花=================================================================SAP的ERP平台很强大,这是毋庸置疑的,它被运用于个个行业领域,也正因如此,所以公司上线SAP后,总需要花费很多时间去培养用户,有时候,在SAP上,用户的操作需求很简单,但在SAP平台上,却不得不进行许多复杂的操作。
=============================================================================== ========在我们公司,许多Sales和“老大们”都是电脑白痴,SAP虽然很强大,但是在他们自己用来,却觉得很复杂繁琐,他们想查看一下报表、操作一些功能,总要记住各种T-CODE,随着开发人员开发的T-CODE越来越多,用户要记住的也就越多。
SAP虽然很强大,但是也有不少不方便的地方,因为它不是针对某个公司去设计的,所以它也有很多不完善和不能满足公司需求的地方。
随着公司的用户越来越多,公司SAP购买的帐号分配和权限分配也不断被需求,很多时候几十个用户,虽然他们有很多时候对SAP的操作需求是一样的,但是公司却不得不为他们购买和分配SAP帐号...基于公司内部的需求,我们希望能把SAP上一些简单的功能模块抽取出来,架设一个Web平台,该平台旨在:打造一个更加符合本公司需求、提高用户效率、便捷、主流的接口平台。
经过比较和分析,我们决定使用JCO技术,我作为一个Java出身的ABAP开发员,从来没有真正去了解过JCO技术,上网才发现,JCO技术早已经更新到了3.0版本了,可是在中文网上(百度、360搜索)的许多资料却都是关于JCO 2.0技术的,关于JCO3.0的资料寥寥无几,谷歌上虽然也有不少,可是在开发过程遇到的许多问题,在谷歌上回答的人也不多。
java 操作sap标准表

java 操作sap标准表在Java 中,要操作SAP 标准表,通常需要使用SAP 的Java 连接器(SAP Java Connector,SAP JCo)。
SAP JCo 是SAP 提供的用于在Java 中与SAP 系统进行通信的库。
以下是使用SAP JCo 操作SAP 标准表的一般步骤:1. 导入SAP JCo 库:-首先,你需要下载SAP JCo 库并将其包含在你的Java 项目中。
你可以从SAP 官方网站下载JCo 库,然后将相关的JAR 文件包含到你的项目中。
2. 建立连接:-使用SAP JCo 创建连接到SAP 系统的连接对象。
```javaimport com.sap.conn.jco.*;public class SAPConnector {private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";public static JCoDestination connect() {try {JCoDestination destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);return destination;} catch (JCoException e) {e.printStackTrace();return null;}}}```3. 获取SAP 表数据:-通过连接对象获取SAP 表的数据。
```javaimport com.sap.conn.jco.*;public class SAPTableReader {public static void readSAPTable(JCoDestination destination, String tableName) { try {JCoFunction function = destination.getRepository().getFunction("RFC_READ_TABLE");if (function == null) {throw new RuntimeException("Function RFC_READ_TABLE not found in SAP system.");}// 设置参数function.getImportParameterList().setValue("QUERY_TABLE", tableName);// 执行函数function.execute(destination);// 获取结果JCoTable resultTable = function.getTableParameterList().getTable("DATA");// 处理结果for (int i = 0; i < resultTable.getNumRows(); i++) {resultTable.setRow(i);String rowData = resultTable.getString("WA");System.out.println(rowData);}} catch (JCoException e) {e.printStackTrace();}}}```4. 关闭连接:-在完成SAP 表的操作后,关闭连接。
JCO基本介绍

阅读提示:SAP的R/3系统与Java平台一样有着许多类似的技术理念,以及同样广泛的企业级用户,但是它们完全是两个不同的世界。
当用户面临流程或者数据整合方面的需求的时候,就迫切需要一种高效的方式,在R/3系统和Ja.....SAP的R/3系统与Java平台一样有着许多类似的技术理念,以及同样广泛的企业级用户,但是它们完全是两个不同的世界。
当用户面临流程或者数据整合方面的需求的时候,就迫切需要一种高效的方式,在R/3系统和Java平台之间实时地交换数据。
基于这样的需求,SAP 提供了一套高效的基于RFC的ABAP和Java进程间通讯组件:SAP Java Connector(JCo)。
本文将介绍JCo组件的架构,配置,基本使用方法以及调试,同时还将讨论如何对RFC方式调用的ABAP函数进行远程调试。
JCo组件的基本架构如下图所示:如图所示,JCo库提供了可以直接在Java程序中使用的API。
该API通过JNI调用部署在客户端的SAP的RFC库。
该RFC库是用C语言实现的,并且与JCo库相互独立发布。
但是,在下载的JCo库压缩包中也会提供。
该组件支持Inbound(在Java代码中调用ABAP函数)和Outbound(在ABAP代码中调用Java)两种模式。
本文只专注于介绍Inbound 模式中,如何在Java代码远程调用ABAP函数。
安装与配置最新版本的JCo库可以在如下网址下载(请选择适合你的软件和硬件平台的版本,本文的示例都基于32位Windows操作系统):你可能需要提供SAP Service MarketPlace的用户帐号。
解压缩以后,将名为librfc32.dll的文件复制到目录{windows-dir}\system32下面。
如果该文件已经存在,则覆盖它。
这个文件就是SAP的RFC协议实现。
然后,确保CLASSPATH环境变量中包含文件sapjco.jar所在的目录。
因为这个JAR包中含有在Java程序中需要直接调用的类和接口。
JCO 使用简介

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操作系统):/connectors你可能需要提供SAP ServiceMarketPlace的用户帐号。
解压缩以后,将名为librfc32.dll的文件复制到目录system32下面。
如果该文件已经存在,则覆盖它。
这个文件就是SAP的RFC协议实现,可以在http://s /connectors下载其最新版本。
然后,确保CLASSPATH环境变量中包含文件sapjco.jar所在的目录。
因为这个JAR包中含有在Java程序中需要直接调用的类和接口。
下载的压缩包中还包含了JavaDoc,文档以及示例程序供参考。
建立连接在执行任何操作之前,必须先建立到SAP系统的连接。
本文示例使用的用户名是“DDIC”,登录密码是“min isap”类JCO是Jco库中最主要的一个入口,它提供了许多静态方法。
JCo-在Java中调用ABAP服务

般 的情 况 下 ,在 S AP服 务 器上 通过 事务 代 码 S 3 激 活 J 的 AB E7 C0 AP调 试 功 能 。
如果一 个连接 池 的 AB AP调试 功 能被 激活 ,那么其 中
可 以 测 试 AB AP函 数 。 在 保 证 AB AP函 数 的 正 确 性 之 后 ,
念 ,以 及 同样 广 泛 的 企 业 级 用 户 ,但 是 它 们 完 全 是 两 个 合 你 的 软 件 和 硬 件 平 台 的 版 本 , 本 文 的 示 例 都 基 于 3 2位
的世 界。当用户面临流程或者数据整合方面 的需求的时 Wid ws 作系统) no 操 : 就迫 切需要一种高 效的方式 ,在 R 3系统和 J v / a a平台
Jv a a客 户 端 只 需要 检 查 输 入 输 出 参 数 是 否 正 确 即 可 。 这 时 的所 有连接 的 AB AP调试 功能都 会被激 活。使用 这样一个 可以利用 J Co库 为 了方 便 调 试 而 提 供 的 了 一 个 很 强 大 的功 连 接 来 调 用 AB AP函 数 的 时 候 ,S AP系 统 会 ,必须先建立到 S AP系统的连接。 类 J CO 是 J o库 中最 主要的一个入口 ,它提供 了许 多 c
静 态 方 法 。 其 中 有 一 系 列 重 载 的 c e t Cl n 方 法 可 以用 rae i t e
来创建 与 S AP系统 的连接信 息 。这 些信息都 保存在 返回 的
的 AP。 该 AP 通 过 J 调 用 部 署 在 客 户 端 的 S I I NI AP的 和 允 许 同时 激 活 的 最 大 连 接 数 。
库 。该 R C库 是用 C语 言实 现 的 ,并 且与 J F Co库 相 立发布 。但是 ,在下载的 J Co库压缩包 中也会提供 。
Java和ABAP接口对应关系

Java和ABAP接口对应关系Java 和ABAP 接口对应关系Java调用ABAP1.表单发送Java:sendSheetT oFinance(int type, HashMap map)ABAP:ZRFC_(type)其中type是表单类型id2.表单回滚Java:rollbackSheetSubmit(String djbh)ABAP:ZRFC_DJ_REV其中djbh是单据编号3.立项Java:sendProjectT oFinance(Vector projects)ABAP:ZRFC_WBS_ZJ (如果资产分类是8000-资产证券化)ZRFC_LIXIANG (其他)4.立项补偿Java:rollbackProjectSubmit (Vector projects)ABAP:ZRFC_WBS_ZJ_REV (如果资产分类是8000-资产证券化)ZRFC_LIXIANG_REV (其他)5.固定资产查询Java:queryGDZC(GDZC_Cond condition)ABAP:ZRFC_FIXEDASSET_GETDETAIL6.转清理固定资产查询Java:queryZQLGDZC (GDZC_Cond condition)ABAP:ZRFC_FIXEDASSET_GETDETAIL_BF7.无形资产查询Java:queryWXZC (WXZC_Cond condition)ABAP:ZRFC_WXZC_GETDETAIL8.银行账户查询Java:queryYHZH(YHZH_Cond condition)ABAP:ZRFC_BANK_DETAIL9.递延所得税查询Java:queryDYSDS(Date kjqsr, Date kjjzr, String type) ABAP:ZRFC_SELECT_DYJDC1其中,kjqsr 是会计起始日,kjjzr是会计截止日,type 为“101”是查询递延所得资产,”102”查询递延所得负债10.未分配利润余额查询Java:QueryWFPLRYE(String jgbm)ABAP:ZRFC_WFPLR其中,jgbm是机构代码11.费用科目查询Java:queryKMXX(List types)ABAP:ZRFC_GET_ACC_NUM_BY_ETYPE其中,types 是费用类型列表12.公允价值查询(附表13-收入信息录入单-投资业务)Java:queryGYJZ13(String type, String zcbh, String jrzcfl)ABAP:ZRFC_KMYEHJ13其中,type是查询类型,zcbh 是资产编号,jrzcfl是金融资产分类13.公允价值查询(附表22-公允价值变动信息录入单)Java:queryGYJZ22 (String type, String zcbh, String jrzcfl)ABAP:ZRFC_KMYEHJ22其中,type是查询类型,zcbh 是资产编号,jrzcfl是金融资产分类14.公允价值查询(附表23-金融资产处置信息录入单)Java:queryGYJZ23 (String type, String zcbh, String jrzcfl)ABAP:ZRFC_KMYEHJ23其中,type是查询类型,zcbh 是资产编号,jrzcfl是金融资产分类15.公允价值查询(附表29-长期股权投资处置信息录入单)Java:queryGYJZ29 (String type, String zcbh, String jrzcfl)ABAP:ZRFC_KMYEHJ29其中,type是查询类型,zcbh 是资产编号,jrzcfl是金融资产分类16.帐面余额查询(附表25资产分类信息录入单_购入资产分类调整/附表25资产分类信息录入单_债券分类调整)Java:queryZMYEMX(Vector list)ABAP:ZRFC_KMYEHJ125其中,list 是要查询的帐面余额资产列表17.帐面余额查询(附表25资产分类信息录入单_购入资产分类调整/附表25资产分类信息录入单_债券分类调整)Java:queryZMYEMX2 (Vector list)ABAP:ZRFC_KMYEHJ225其中,list 是要查询的帐面余额资产列表18.利息试算Java:queryLXSS(String jgdm, String xybh, String ywlx, Date jsrq, String bz)ABAP:ZRFC_INTEREST_RZSS其中,jgdm 是机构编码,xybh 是协议编号,ywlx 是业务类型,jsrq是截止日期,bz是币种19.个贷系统同步Java:sendGDT oFinance(String type, JCO.Table table)ABAP:ZRFC_INTEREST_GDLX其中,type 1:计息2:计息补偿3:还款4:还款补偿5:还款冲正6:还款冲正补偿20.项目经理Java:sendXMJL(Vector list)ABAP:ZRFC_WBS_XMJL其中,list 是项目经理列表21.项目经理补偿Java:rollbackXMJL (Vector list)ABAP:ZRFC_WBS_XMJL_REV其中,list 是项目经理列表ABAP调用Java1.退单通知ABAP:ZRFC_TDTZJava(南天):ServiceForSap. Sheetconfirm(单据编号,”0”,退单原因,操作者,退单日期)2.退单补偿ABAP:ZRFC_TDTZ_REVJava(南天):ServiceForSap. Sheetconfirm(单据编号)3.过账通知ABAP:ZRFC_PZ_POSTJava(南天):ServiceForSap. Sheetconfirm(单据编号,”1”,””,操作者,退单日期) 4.过账补偿ABAP:ZRFC_PZ_POST_REVJava(南天):ServiceForSap. Sheetconfirm(单据编号)5.汇率同步ABAP:ZRFC_HL_POSTJava(南天):ServiceForSap. SendT oBus("101", 汇率列表);6.汇率补偿ABAP:ZRFC_HL_POST_REVJava(南天):ServiceForSap. SendT oBus("601", 汇率列表);7.部门同步ABAP:ZRFC_COST_POSTJava(南天):ServiceForSap. SendT oBus("201", 部门率列表);8.部门补偿ABAP:ZRFC_COST_POST_REVJava(南天):ServiceForSap. SendT oBus("701", 部门率列表);9.利息发送ABAP:ZRFC_INTEREST_NTJava(南天):ServiceForSap. sendlxtoyw (业务类型, 利息列表);其中:业务类型购入项目:101往来款项:102融资:103内部往来:104投资:10510.利息补偿ABAP:ZRFC_INTEREST_NT_REVJava(南天):ServiceForSap. sendlxtoyw (业务类型, 利息列表);其中:业务类型购入项目:601往来款项:602融资:603内部往来:604投资:60511.I T设备信息同步ABAP:ZRFC_IT_DEVICEJava(华科):HardwareService .getHardwareInfo(开始时间, 截止时间);12.人员信息同步ABAP:ZRFC_EMP_POSTJava(华科):UserService.getUserSynInfo (开始时间, 截止时间);13.归档ABAP:ZRFC_ATTACHMENT_ARCHIVEJava(华科):ArchivePreDeposer.asynSubmitCommonArchive(archiveList, parameter)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JCo–在Java中调用ABAP服务作者:CNET科技资讯网2008-05-09 12:10:31关键词:SAP Java概述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操作系统):/connectors你可能需要提供SAP Service MarketPlace的用户帐号。
解压缩以后,将名为librfc32.dll的文件复制到目录system32下面。
如果该文件已经存在,则覆盖它。
这个文件就是SAP的RFC协议实现,可以在/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");方法2:使用Java Properties:Properties logonProperties = newProperties(); logonProperties.put("jco.client.ashost","10.0.0.11"); logonPr operties.put("jco.client.client","000"); logonProperties.put("jco.client.passwd","mi nisap"); logonProperties.put("jco.client.sysnr","00"); logonProperties.put(" er","DDIC");JCO.Client myConnection = JCO.createClient( logonProperties ).第一种方式比较简单,所有的参数都直接写在代码中。
相比之下,第二种方式使用Java Properties,它好处在于,除了硬编码这种方式之外,用户也可以将连接信息保存在一个单独的.properties文件中。
这样即使连接信息改变也无需改变代码,只需要修改.properties文件中的数据即可。
关于.properties文件的用法,请参考相关的Java语言教程。
JCO.Client提供方法connect方法来建立从当前Java进程到SAP服务器的连接。
this.myConnection.connect();可以使用isAlive方法来获取一个连接的状态,还可以使用disconnect方法来关闭一个连接:if ( myConnection != null && myConnection.isAlive())很多情况下,频繁创建新的连接可能导致严重的性能问题。
典型的情况就是在Web应用程序中,如果每个session创建一个连接,那么用户数量很多的时候系对系统来说就是一场灾难。
JCo库支持以连接池的形式重用已创建的连接。
只需要调用JCO类的静态方法addClientPool即可创建一个连接池,并且可以在参数中指定连接池的名字和允许同时激活的最大连接数。
如下代码演示了如何创建一个名为“Sample_Pool”的JCo连接池:public static final String POOL_NAME = "Sample_Pool";public static final int max_connection = 2;……JCO.Pool pool = JCO.getClientPoolManager().getPool(POOL_NAME);if (pool == null) {Properties logonProperties = new Properties();logonProperties.put("jco.client.ashost","10.0.0.11"); logonProperties.put("jco.client .client","000"); logonProperties.put("jco.client.passwd","minisap"); logonP roperties.put("jco.client.sysnr","00"); logonProperties.put("er","DDIC" );JCO.addClientPool( POOL_NAME, // pool namemax_connection, // max num of connections,logonProperties); // properties}创建好连接池之后,可以通过如下代码来从连接池中获取一个连接:mConnection = JCO.getClient(POOL_NAME);在连接使用完毕之后,不要忘记使用releaseClient方法释放当前连接:JCO.releaseClient( myConnection ).如果需要移除连接池,则可以使用如下代码:JCO.removeClientPool(POOL_NAME);移除连接池将导致其中所有的活动连接被强行关闭,所以必须在确保连接池中所有的连接都不再被使用的时候才能执行该操作。
调用Function Modules为了演示如何使用JCo库来调用远程的ABAP函数,本文示例中使用NetWeaver ABAP试用版系统中的一个样例函数BAPI_FLIGHT_GETLIST。
JCo库使用RFC的方式来调用ABAP中的函数,所以被调用的函数必须已经勾选“Remot e-enabled”属性。
调用一个函数之前,需要知道函数的元数据,比如函数名字,输入输出参数等等。
在JCo 库中,必须通过类JCO.Repository来获取所有的ABAP函数的元数据,所以第一步是创建一个JCO.Repository类的对象:JCO.Repository myRepository = new JCO.Repository("Repository", myConnection);JCO.Repository类的构造函数有两个参数,第一个是可以任意指定的名字,第二个是当前使用的连接。
此处也可以直接指定一个连接池的名字,JCo库将自动从该连接池中获取连接。
此时,必须保证该连接使用的用户名在目标SAP服务器上有足够的权限。
获得JCO.Repository类的实例之后,就可以通过该实例来获得函数的信息。
如下代码演示了如何获取函数BAPI_FLIGHT_GETLIST的信息以及如何设置简单类型的参数:String strFunc = "BAPI_FLIGHT_GETLIST";IFunctionTemplate ft = myRepository.getFunctionTemplate(strFunc.toUpperCase()); JCO.Function funGetList = ft.getFunction();// set up scalar parameterJCO.ParameterList input = funGetList.getImportParameterList();input.setValue(10, "MAX_ROWS");JCO.Function对象提供了对应的方法来获取ABAP函数的参数列表。
例如,上例中的getImportParameterList方法返回该函数的Import参数列表。
在上面的示例代码中,仅仅设置了一个最简单的int类型的参数。
事实上,setValue方法有许多重载形式,允许设置各种复杂类型的参数,比如structure类型和table类型的参数。
而且,除了通过参数名字引用要设置的参数之外,还可以通过参数的索引来引用一个参数。
在设置structure和table类型的参数之前,需要通过JCO.Function对象的方法获取相应的JCO.Structure和JCO.Table对象,然后才可以使用对每个字段进行赋值。
在我们使用的函数BAPI_FLIGHT_GETLIST中,Import参数中的DESTINATION_FROM是一个structure,其中包含一个CITY字段。
如下代码演示了如何将CITY字段赋值为“NEW YORK”:// set up structure parameterJCO.Structure sFrom = input.getStructure("DESTINATION_FROM");sFrom.setValue("NEW YORK", "CITY");input.setValue(sFrom, "DESTINATION_FROM");类似地,可以使用JCO.Function对象的getTableParameterList方法拿到Table参数列表。