JCo 指南

来源:互联网 发布:linux tmp目录用途 编辑:程序博客网 时间:2024/04/28 04:43
 http://blog.csdn.net/asdfak/article/details/5834731
  1. Java Connector and BAPI

前些日子想去深入的研究下Portal Development,但是载了一个周末也没有把NetWeaver Developer Studio弄下来。闲暇时间,浏览了下JCo的API文档和几个简单的DEMO,开始尝试着自己去用JCo做一些操作,并记录下整个过程,以供大家参考。

一些理论性的东西源自SAP的官方培训教材和一些高手的笔记,英文不佳,翻译的有些拗口,见谅…

1.1 What is JCo

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服务

而我们的Portal中,也正是使用JCo与SAP系统或者其他系统进行交互。

1.2 JCo OverView

  • High-performance JNI-based middleware
  • Support R/3 3.1H and higher.
  • Supports inbound and outbound calls.
  • Supports client pooling.
  • Supports desktop and web/application server applications.
  • Multi-platform
  • Complete and correct code page handling
  • Easy to install and deploy

1.3 JCo's Architecture

从下图可以清楚的看到,JCo不过是通过JNI提供与SAP系统的RFC连接

1.4 What is BAPI

BAPI Business Application Programming Interface)是在Business Applications Systems(例如SAP R/3)中,被精确定义的进程或数据的访问接口。

1.5 Benefits of BAPI

  • 可以被用于不同的语言或者开发环境(ABAP, Visual Basic, Java, C++, etc.)
  • 可以被不同的平台调用 (COM, CORBA, Unix)
  • 缩减开发和维护的开支

图:BAPI可以被广泛使用

1.5 SAP的T-CODE

  • BAPI    Business Object Browser (BAPIs only)
  • SWO1    Business Object Builder (all objects)
  • SWO2    Business Object Browser (all objects)
  • SE11    Data Dictionary
  • SE37 Function Builder

二、使用SAP JCo连接到服务器

2.1 JCo主要的操作活动

2.2建立到SAP 服务器的连接

SAP JCo有两种方式连接到SAP服务器:直接连接和连接池

注:下文的例子中使用的是JCo2.1.9版本,最新版本为3.0.4

 

  • 直接连接

打开连接:

调用函数和关闭连接:

  • 连接池

创建连接池:

获取和释放连接:

JCO.Repository:用于存取RFMs的元数据

2.3 Jco2.1.9中的范例,COMANY_CODE

该范例主要执行两个操作:

  1. 通过BAPI_COMPANYCODE_GETLIST获取所有的COMP_CODE,然后显示
  2. 通过BAPI_COMPANYCODE_GETDETAIL对操作1中的COMP_CODE进行明细查询,得到所对应的COUNTRY和CITY

2.3.1创建Repository

2.3.2创建JCO.FUNCTION

2.3.3执行JCO.FUNCTION

2.3.4映射JAVA和ABAP数据类型

2.3.5存取表

2.3.6 BAPI函数调用

2.3.7 运行结果

测试时,使用的是咱们R/3,212系统,下面是部分结果:

COMP_CODE和COMP_NAME

 

 

COMP_CODE、COUNTRY和CITY

 

三、Jco For Web Service

下面是自己写的一个小测试,使用Jco调用ABAP函数ZTESTCHEN1,并获得输出结果

服务器使用的是Apache Tomcat6.0,页面为JSP,通过Servlet与服务器进行交互。

OK,开始!

3.1 RFM:ZTESTJCOFUN

RFM,RFC-enabled Function Modules,所有的ABAP函数,勾选上Remote-Enable Module就是一个RFM,显而易见,所有的BAPI也都是RFM,只不过依据特定的规则,被定义为SAP的Business Object Repository (BOR)的对象型方法。如下图:

函数是自己比着葫芦画的,比较简单,主要功能是查表LFA1,通过供应商的ID获取相关信息

  • 输入字符串LIFNR参考LFA1-LIFNR
  • 输出字符串RETURN参考BAPIRETURN,返回参数,S为成功,E为出错
  • 查询内容存放在表ITAB中,此表参考自建结构ZTESTJCO,详情如下图:

  • 核心ABAP代码如下,当输入ID为空时,查询所有供应商,ID不为空时,查询单个,查询不到时报错,详情如下图:

3.2 Servlet and JSP

本测试的服务器配置比较简单,使用单纯的Servlet配合JavaBean,做JSP页面与后台的请求处理。

    其中,文件结构如下图:

3.3 运行结果:

  • 提交页面:

  • 结果显示:(ED2,212系统,如果是222的话,会有很多...)

  • 报错

四、总结

BAPI自身提供了很多强大的借口,供SAP系统自身或者Jco等中间件从外部来调用。本文简单的展示了Jco通过WebService来调RFM的过程,简单来说就是通过RFC来调用SAP中函数,然后显示返回信息。是SAP外围开发或者自身功能增强的一种解决方案。

类似于阿PENG同志前段时间演示的那个.Net通过WebService调RFM来操作交货单,不过那个的ABAP代码太多,一时半会读不懂,只好自己写个简单的。