JCo 指南
http://blog.csdn.net/asdfak/article/details/5834731
JAVA 调用SAP端接口
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
该范例主要执行两个操作:
- 通过BAPI_COMPANYCODE_GETLIST获取所有的COMP_CODE,然后显示
 - 通过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代码太多,一时半会读不懂,只好自己写个简单的。
JCo 指南的更多相关文章
- JavaScript权威指南 - 函数
		
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
 - UE4新手之编程指南
		
虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...
 - JavaScript权威指南 - 对象
		
JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...
 - JavaScript权威指南 - 数组
		
JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...
 - const extern static 终极指南
		
const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...
 - Atitit.研发管理软件公司的软资产列表指南
		
Atitit.研发管理软件公司的软资产列表指南 1. Isv模型下的软资产1 2. 实现层面implet1 3. 规范spec层1 4. 法则定律等val层的总结2 1. Isv模型下的软资产 Sof ...
 - HA 高可用软件系统保养指南
		
又过了一年 618,六月是公司一年一度的大促月,一般提前一个月各系统就会减少需求和功能的开发,转而更多去关注系统可用性.稳定性和管控性等方面的非功能需求.大促前的准备工作一般叫作「备战」,可以把线上运 ...
 - 第六代智能英特尔® 酷睿™ 处理器图形 API 开发人员指南
		
欢迎查看第六代智能英特尔® 酷睿™ 处理器图形 API 开发人员指南,该处理器可为开发人员和最终用户提供领先的 CPU 和图形性能增强.各种新特性和功能以及显著提高的性能. 本指南旨在帮助软件开发人员 ...
 - Visual Studio Code 配置指南
		
Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器.在我看来它是「一款完美的编辑器」. 本文是有关 VS Code 的特性介绍与配置指 ...
 
随机推荐
- 记一次MySQl 安装1067错误
			
1.今天阿里云windows server 2008 r2服务器上安装mysql,配置完发现无法启动mysql服务(并发设置的是500),查询windows日志提示 Unknown/unsupport ...
 - 使用HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
			
之前发布了一款简易的计算器,今天做了一下修改,添加了键盘监听事件,不用再用鼠标点点点啦 JS代码: var yunSuan = 0;// 运算符号,0-无运算;1-加法;2-减法;3-乘法;4-除法 ...
 - Jquery获取背景图片src路径
			
例如获取body的背景: Jquery代码如下: var back = $('body').css('backgroundImage'); back.substring(start,end); //截 ...
 - win7开机密码忘记了
			
开机到欢迎界面时,出现输入用户名密码的提示框,按Ctrl+Alt+Delete,跳出帐号窗口,输入用户名:administrator,回车即可. 如果这个administrator帐号也有密码,那么可 ...
 - SQL WHILE 循环中的游标 用例,SQL中实现循环操作
			
--声明两个应用变量 declare @USERID_ int declare @ORGANISEUNITID_ int --声明一个变量计数用,开发中可以忽略 declare @i int=0 -- ...
 - win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装
			
win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装 http://blog.csdn.net/jiangzeyun/article/details/41676639
 - Yii 引入 js和css
			
//向控制器指定的页面注册新的css文件 Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/css/my ...
 - 《OpenCL异构计算》新版中译本派送中!
			
<OpenCL异构计算1.2>新鲜出炉,目前市面上仍一书难求!我们已向清华出版社订购到第一批新书.关注异构开发社区,积极参与,就有可能免费获取新书! 1.如果您异构社区的老朋友,请关注:1 ...
 - rsyslog 解决日志截断不读取问题
			
reopenOnTruncate [on/off] (requires v8.16.0+) Default: off 这是一个实验性的东西告诉rsyslog 重新input file 当它被trunc ...
 - VS2010发布、打包安装程序
			
1. 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1.“应 ...