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 的特性介绍与配置指 ...
随机推荐
- 极度郁闷的错误调试——ajax jquery
今天在写一个简单邮件验证的页面时,本来以为二十分钟的事情,却调试了一个半小时,简直郁闷,具体的错误如下: 在页面中,有一段如下的代码: <td colspan="3"> ...
- Delphi XE7下 Intraweb 发布为ASP.NET应用程序
一.XE7下Intraweb开发这里就不说了,重点是在开发Intraweb时与ISAPI不同之处要选择 IW library,编译成DLL文件. 二.网站的配置 1.这是站点的物理路径,c:\site ...
- 基于python的接口测试学习笔记一(初出茅庐)
第一次写博客笔记,讲一下近来学习的接口自动化测试.网上查阅了相关资料,最后决定使用python语言写接口测试,使用的是python的第三方库requests.虽然python本身标准库中的 urlli ...
- Nt内核函数原型and中文
NtLoadDriver 服务控制管理器加载设备驱动. NtUnloadDriver 服务控制管理器支持卸载指定的驱动程序. NtRegisterNewDevice 加载新驱动文件. NtQueryI ...
- 转:VC中UpdateData()函数的使用
VC中UpdateData()函数的使用 UpdateData(FALSE)与UpdateData(TRUE)是相反的过程 UpdateData(FALSE)是把程序中改变的值更新到控件中去 ...
- ionic ng-src 在网页显示,但是导出apk在android手机中运行不显示图片
解决方法参照: http://stackoverflow.com/questions/29896158/load-image-using-ng-src-in-android-ionic-aplicat ...
- 无法关闭的QT程序(覆盖closeEvent,新建QProcess并脱离关系)
做一个无法关闭的QT程序(想关闭时要在任务管理器里关闭),看似很难, 其实它并不难,只要让程序在关闭时启动它自身就可以了. 上代码: #include <QtGui> class Temp ...
- [置顶] Android系统移植与调试之------->如何修改Android设备添加3G上网功能
1.首先先来看一下修改前后的效果对比图 step1.插上3G设备前 step2.插上3G设备后,获取信号中.... step3.插上3G设备后,获取到信号 step4.使用3G信号浏览网页 2.下面讲 ...
- 8.2.1.5 Engine Condition Pushdown Optimization 引擎条件下推优化
8.2.1.5 Engine Condition Pushdown Optimization 引擎条件下推优化 这种优化改善了直接比较在一个非索引列和一个常量比较的效率. 在这种情况下, 条件是 下推 ...
- ETL工具框架开源软件
http://www.oschina.net/project/tag/453/etl 开源ETL工具 Kettle Talend KETL CloverETL Apatar Scriptella ET ...