• JCo 指南


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

  • 相关阅读:
    Nexus 3048的NX-OS升级方法
    ASA防火墙忘记密码之后的恢复步骤
    关闭AnyConnect登录安全警告窗口
    使用vASA842配置ASDM645
    SSL 证书格式普及,PEM、CER、JKS、PKCS12
    Python基础练习
    理解管理信息系统
    各大搜索引擎蜘蛛的UserAgent
    iOS应用程序内购/内付费
    iOS开发解决:iOS8.1中UIBarButtonItem的setTitleTextAttributes对Disabled颜色设置无效问题
  • 原文地址:https://www.cnblogs.com/javaMan/p/4055458.html
Copyright © 2020-2023  润新知