http://blog.csdn.net/asdfak/article/details/5834731

JAVA 调用SAP端接口

  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代码太多,一时半会读不懂,只好自己写个简单的。

JCo 指南的更多相关文章

  1. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  2. UE4新手之编程指南

    虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...

  3. JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...

  4. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  5. const extern static 终极指南

    const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...

  6. Atitit.研发管理软件公司的软资产列表指南

    Atitit.研发管理软件公司的软资产列表指南 1. Isv模型下的软资产1 2. 实现层面implet1 3. 规范spec层1 4. 法则定律等val层的总结2 1. Isv模型下的软资产 Sof ...

  7. HA 高可用软件系统保养指南

    又过了一年 618,六月是公司一年一度的大促月,一般提前一个月各系统就会减少需求和功能的开发,转而更多去关注系统可用性.稳定性和管控性等方面的非功能需求.大促前的准备工作一般叫作「备战」,可以把线上运 ...

  8. 第六代智能英特尔® 酷睿™ 处理器图形 API 开发人员指南

    欢迎查看第六代智能英特尔® 酷睿™ 处理器图形 API 开发人员指南,该处理器可为开发人员和最终用户提供领先的 CPU 和图形性能增强.各种新特性和功能以及显著提高的性能. 本指南旨在帮助软件开发人员 ...

  9. Visual Studio Code 配置指南

    Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器.在我看来它是「一款完美的编辑器」. 本文是有关 VS Code 的特性介绍与配置指 ...

随机推荐

  1. 多线程12-CyclicBarrier、CountDownLatch、Exchanger

    1.CyclicBarrier 表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指定地点集合碰面 package org.lkl.thead.foo; import java.util.con ...

  2. 如何解决mysql数据库8小时无连接自动关闭

    windows下打开my.ini,增加: interactive_timeout=28800000 wait_timeout=28800000 专家解答:MySQL是一个小型关系型数据库管理系统,由于 ...

  3. Win10使用小技巧

    Win10技巧4.命令行支持Ctrl+V 这项功能使用的人不多,但绝对是跨时代的,因为你终于可以放心大胆地在命令提示符里使用Ctrl+V来粘贴剪贴板内容了.而在此之前,Ctrl+V换来的结果只是一个^ ...

  4. 对比iOS网络组件:AFNetworking VS ASIHTTPRequest

    对比iOS网络组件:AFNetworking VS ASIHTTPRequest 作者 高嘉峻 发布于 2013年2月28日 | 7 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件 ...

  5. java-Mysql-SQLServer数据类型匹配速查表

    java-Mysql-SQLServer数据类型匹配速查表 Mysql ************************************ 当前列 ClassName ColumnType Di ...

  6. 第三方账号登录--QQ登录,以及QQ微博账号登录

    在QQ登陆测试的时候,刚申请正常登陆,但是由于app未上线,或许是腾讯升级造成的个别时候QQ登陆无法成功会提示下图代码,功能上没啥问题,已经达到 测试效果了.附上腾讯错误代码图(大家测试QQ登陆的时候 ...

  7. javascript scroll事件

    http://developer.51cto.com/art/201107/277994.htm onscroll事件 window.onscroll|| document.onscroll var ...

  8. AD怎样画 board shape

    先用随便那一层的线,画出你想要的边框的形状,圆角可通过shift+空格来切换出来选中你刚刚话的形状(要是闭合面),design-board sharp-define from selected obj ...

  9. Leetcode:Largest Number详细题解

    题目 Given a list of non negative integers, arrange them such that they form the largest number. For e ...

  10. 为什么使用Redis

    原文地址:http://igoder.iteye.com/blog/1969848 先解释一下软件编程中常见的一些概念: 抽象先于具象.这个抽象并非虚无的抽象,而是指事物尚未分化为具象之前的那个前体存 ...