`
yyys8517750
  • 浏览: 140923 次
  • 性别: Icon_minigender_1
  • 来自: 岳阳
社区版块
存档分类
最新评论

SAP:BAPI知识讲解1

 
阅读更多

 1.BAPI – business application programming interface
2.它实际上是一种特殊的Remote Function Modules (RFC)是为了提供使用外部程序来进行交易活动
3.它提供的基于企业目标(Business Object) 技术的接口应用界面
4.SAP采用了Object-oriented技术,逻辑定义了SAP R/3系统的所有功能目标,并且将所有的目标(Objects) 和BAPIs存储于企业目标库BOR(Business Objects Repository).
5.SAP R/3 企业目标的目标类型(Object Type) 相当于目标设计语言中类(Class) 的概念,其定义结构由以下几部分组成:基本数据,接口界面,键(Key Fields),方法(Methods),特征(Attributes),事件(Events)

--如何创建BAPI程序
1.定义BAPI Structure (Structure不能在BAPI中重复使用,因为一旦BAPI被释放,其Structure被冻结)
2.创建FUNCTION MODULE
  每个BAPI必须有自己的Function Group,Function Group属性必须为RFC
3.创建Business Object
4.使用BAPI WIZARD创建API Method
  这样BAPI可以被外部程序调用
5.Function Module符合BOR Method
4.释放BAPI Function Module,
  释放Business Object Type,
  释放BAPI作为BOR的一种Method

优点:
bapi是面向对象的设计;
bapi是固定的,一般不能修改;
bapi可以被sap内部部件和非sap程序使用;
bapi的成功和错误信息始终通过RETURN返回;
bapi可以被许多开发平台使用;

何时应该考虑使用bapi设计程序:
用VB/JAVA?C++等语言编写非SAPGUI程序访问和处理sap数据;
SAP不同部件之间通讯;
与非sap程序或者老系统交换数据:
使用异步通信分发数据如:ALE
可以通过SAP Business Connector or Internet Application Components 与因特网程序集成;


关于return:
RETURN用于BAPI返回错误和成功的消息,它可以是BAPIRETURN,BAPIRETURN,BAPIRET1,BAPIRET2和BAPIRET2_FIX中的一种类型.这些结构一般都包括以下字段:



TYPE   _char 1      S  = success message
                      E  = error message
                      W  = warning message
                      I  = information message
                      A  = termination message (abort)
ID     _char 20     Message ID The structure BAPIRET2 takes into ac_countthe name
                    space extension for the message class as of Release 4.0. If you
                    want messages to be compatible with earlier R/3 Releases, use
                    the message classes before Release 4.0.

NUMBER  NUMC 3      Message number

MESSAGE_char 220    Full message text from the message table. All variables (in fields                     Message_V1 to Message_V4) have been replaced with text.

MESSAGE_V1
MESSAGE_V2
MESSAGE_V3
MESSAGE_V4        _char 50       Fields for the variable texts of the message



bapi的程序框架:
Log on
       (Source code)
   Call BAPI
(Source code)
   Call BAPI
       (Source code)
Call BAPI BapiService.TransactionCommit()
       (Source code)
   Call BAPI
       (Source code)
   Call BAPI
       (Source code)
Call BAPI BapiService.TransactionCommit()
       (Source code)
Log off



相关函数:
'BALW_BAPIRETURN_GET2':取生成返回消息
    CALL FUNCTION 'BALW_BAPIRETURN_GET2'
         EXPORTING
              TYPE   = 'E'
              CL     = 'BC_BOR'
              NUMBER = 163
              PAR1   = MSG1_HLP
              PAR2   = MSG2_HLP
         IMPORTING
              RETURN = RETURN.
BAPI_TRANSACTION_COMMIT 和 API_TRANSACTION_ROLLBACK: BAPI事务函数

BUFFER_SUBSCRIBE_FOR_REFRESH和BUFFER_REFRESH_ALL: 缓冲区处理函数

'TRANSACTION_BEGIN ,'TRANSACTION_STATUS' 和'TRANSACTION_END' 的调用示例
    call function 'TRANSACTION_BEGIN'  "94702/KB
         importing                     "94702/KB
              transaction_id = transaction_id                  "94702/KB
         exceptions                    "94702/KB
              others         = 1.      "94702/KB
    call function 'BAPI_PO_Create'     "94702/KB
         exporting                     "94702/KB
              po_header                  = po_head             "94702/KB
         importing                     "94702/KB
              purchaseorder              = h_ebeln             "94702/KB
         tables                        "94702/KB
              po_items                   = po_item             "94702/KB
              po_item_schedules          = po_sched            "94702/KB
              po_item_account_assignment = po_acct             "94702/KB
              po_item_text               = po_text             "94702/KB
              return                     = return              "94702/KB
         exceptions                    "94702/KB
              others                     = 0.                  "94702/KB
    call function 'TRANSACTION_STATUS' "94702/KB
         importing                     "94702/KB
              status  = status_of_transaction                  "94702/KB
         exceptions                    "94702/KB
              others  = 1.             "94702/KB
    if status_of_transaction = commit_work.                    "94702/KB
      commit work and wait.            "94702/KB
    endif.                             "94702/KB
    call function 'TRANSACTION_END'    "94702/KB
         exporting                     "94702/KB
              transaction_id = transaction_id                  "94702/KB
         exceptions                    "94702/KB
              others         = 1.      "94702/KB





如何创建BAPI程序
1.定义BAPI Structure (Structure不能在BAPI中重复使用,因为一旦BAPI被释放,其Structure被冻结)
2.创建FUNCTION MODULE
每个BAPI必须有自己的Function Group,Function Group属性必须为RFC
3.创建Business Object
4.使用BAPI WIZARD创建API Method
这样BAPI可以被外部程序调用
5.Function Module符合BOR Method
4.释放BAPI Function Module,
释放Business Object Type,
释放BAPI作为BOR的一种Method




BAPI和RFC不是同一个层次上概念,不能说从字面上看到BAPI函数和RFC函数就认为他们之间有必然的联系和区别。打个比如,问一个问题:人可以分为哪几类,答曰:男人和老人,呵~~,大家都知道,男人是基于性别来说的,老人是基于年龄的。BAPI是SAP提供的基于业务对象的函数,关键是它们处理的对象是R/3的业务相关business object),比如单据类销售订单,组织:公司等,它们是一系列实体。RFC则是一种系统间通讯的方式(Remote Funciton Call),一个男人可能同时也是一个老人,一个BAPI函数往往能是一个RFC函数(不是所有BAPI都可以有基于RFC技术来调用,但是至少也可以说有1部分吧,JAVA里面用BAPI,就是因为这个BAPI函数具有RFC的特性)


--- BAPI是个SAP里一个很好的思想,把业务对象都对象化了。刚学ABAP/4时,并不能理解SAP所说”ABAP/4”中的‘4’,而觉得它更像是一种脚本语言,顶多也就是和C一样,但是自从我接触了BAPI之后,我才体会到SAP说ABAP是种4G语言的确不虚。 当在外部调用BAPI的时候,比如VB,就可以把SAP里的诸如订单,物料,员工,工厂等作为一个对象来处理,而且这种处理又是那么的简单,可能只要几句代码就可以了,最关键就是:1.收集BAPI函数所要的数据,也就是BAPI输入参数,VB也好,SAP本身的 Screen也好,甚至Web页面也好,只不过是一个数据收集器!(要作一些必要的数据检查保证它们是正确的,不过即使不正确也没有关系,BAPI会返回错误信息) 收集完成了,就送给BAPI作为参数,剩下的事都是BAPI给做了,你就不用管了! 2.接收BAPI返回的信息,也就是BAPI输出参数,并把它们“翻译”成恰当的形式给表达给用户。


BAPI的简单实现步骤
一,创建Function Module
1,在SE11,创建需要的structure
2,在SE80,建Function group
3,在SE37,创建Function Module
Note:一个Function Group只能包含一个BAPI;参数传值;必须有有一个BAPIRETURN类型的EXPORT参数
二,封装
1,在SWO1,建Object Type
2,把Function Module作为一个Method加入,utilities->API Methods->Add Method
3,release Object和Module。使在BAPI Browser 中可以看到。也就是外部能够调用。
三,调用
1,如在另一系统中用ABAP调用,先在SM59中建RFC联到有BAPI的R/3,(ZGOGO)
   在SE38的程序中调用,Call Function "ZBAPIXXXXX" DESTINATION ZGOGO EXPORTING ...
2,如用JAVA调用
引入包;(不一定要用IBM的)
import com.sap.rfc.*;
import com.sap.rfc.exception.*;
import com.ibm.sap.bapi.*;
import com.ibm.sap.bapi.generated.*;
建立连接;调用。。。(See CALL_BAPI.java)

分享到:
评论

相关推荐

    SAP 所有BAPI的清单

    SAP中很多情况下客户提出增强的需求时,我们通常会用到BAPI或者BADI。虽然你可以在SAP中直接输入TCd:BAPI来查找。但是并不是所有的BAPI都能查得到的。希望这个清单能够帮到你。

    SAP模块常用BAPI总结

    SAP开发过程中常用到的BAPI函数总结: 将服务器文件下载到本地 READ_TEXT 分类计量点和计量凭证处理 SAPOFFICE 通知单 修改用户状态的BAPI 修改服务订单的bapi 修改订单的bapi

    SAP_BAPI操作手册

    SAP_BAPI操作手册 SAP_BAPI操作手册是SAP系统中的一种编程接口,允许开发者通过编程方式来访问和操作SAP系统中的数据和业务逻辑。本手册将为读者提供一个关于BAPI的概述,包括BAPI的原理、用途和一些实践案例。 ...

    SAP BAPI的使用介绍.pptx

    2. SWO1:浏览业务对象类型的组件,SAP是以业务对象为单位组织BAPI的 3. SWO3:浏览所有的业务对象,这个事务代码在IDS下可用,结合SWO1基本可以查到所有可能使用到的BAPI 在BAPI调用时,需要了解以下几个选项: 1...

    ABAP_RFC_BAPI培训教程.docx

    ABAP_RFC_BAPI培训教程.docx

    如何根据SAP系统标准程序查找所用的BAPI

    如果我们找BAPI可以通过SAP标准事物代码:BAPI查询到已经释放的BAPI. 如果只知道事物代码,可以通过下面的方式查询相应的BAPI.

    SAP ABAP一步一步指导创建BAPI教程

    BAPI创建教程

    SAP BAPI 函数列表

    SAP BAPI 函数所有函数列表 花了不少心血整理来的

    SAP BAPI program example

    SAP BAPI program example

    sap abap常用bapi

    SAP ABAP开发过程中常用的bapi,供开发参照使用。。。

    SAP BAPI and RFC 使用总结

    SAP R/3的接口方式主要有RFC(Romote Function Call,远程函数调用)、IDOC、BAPI三种,BAPI实际上也是RFC函数,它处理一组业务。使用Tcode:BAPI/BAPIW在SAP系统中可查看到各模块的BAPI函数。

    sap bapi list

    sap bapi list 所以的SAP 自带的BAPI

    VB6开发的利用SAP R3 BAPI下载数据的服务软件

    SAP R3数据下载程序 使用VB6开发的,主要是利用R3自带的BAPI接口下载到指定的数据表中,然后做其它的应用。 使用环境必须安装有SAP R3 6.0以上,这样程序才可以调用到R3的相关资源。 代码中使用到的几个BAPI可能...

    C#通过NCO调用SAP BAPI

    C#通过NCO组建,直接调用SAP BAPI接口。app.config中配置SAP连接信息,代码中加入调用函数。注意引用的DLL是针对64位操作系统的。

    sap-bapi-adapter.rar

    sap-bapi-adapter.rar

    SAP BAPI & RFC Intro

    英文培训资料, PPT 格式,SAP BAPI & RFC Intro 简介

    SAP常用后台表&BAPI

    SAP常用后台表&BAPI

    sap bapi manual

    SAP bapi function step by step manual

    SAP常用的bapi

    bapi应用大全。去除加上前导零。收货bapi,领用bapi.根据领用凭证冲销领用的bapi.根据收货凭证进行冲销收货的bapi根据数量进行收货冲销的bapi,物料属性转移的bapi.

    sap BAPI操作手册

    刚刚开始学BAPI,不知道从什么地方入手,因此好多的东西都不知道怎么去做。前2天在网上看到一篇关于这样的文章,但是自己手动操作的时候还是出现了一些问题,现在把它整理成文档的形式,以供参考。

Global site tag (gtag.js) - Google Analytics