about bapi「建议收藏」

about bapi「建议收藏」1BAPI的优点bapi是面向对象的设计;bapi是固定的,一般不能修改;bapi可以被sap内部部件和非sap程序使用;bapi的成功和错误信息始终通过RETURN返回;bapi可以被许多开发平台使用;2何时该考虑使用BAPI设计程序用VB/JAVA?C++等语言编写非SAPGUI程序访问和处理sap数据;SAP不同部件之间通讯;与…

大家好,又见面了,我是你们的朋友全栈君。

1 BAPI的优点

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

2 何时该考虑使用BAPI设计程序

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

3 关于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 account the 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

 

4 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

5 相关函数

‘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

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

3release ObjectModule。使在BAPI Browser 中可以看到。也就是外部能够调用。

三,调用

1,如在另一系统中用ABAP调用,先在SM59中建RFC联到有BAPIR/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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163907.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python 打开文件对话框「建议收藏」

    Python 打开文件对话框「建议收藏」以下内容来自http://interactivepython.org/runestone/static/thinkcspy/GUIandEventDrivenProgramming/02_standard_dialog_boxes.html#file-chooserimporttkinterastkfromtkinterimportfiledialogimportosa…

    2022年8月30日
    2
  • 利用139邮箱的免费短信提醒作为报警接口「建议收藏」

    利用139邮箱的免费短信提醒作为报警接口「建议收藏」各位开发者手机短信里肯定都收到过线上业务报警短信,邮箱里肯定有更多报警邮件,很多公司都把报警信息通过邮件发送,但是这样不能保证接收到。通过短信发送的话,即使很多短信接口很便宜,但是每条也有四五分钱,而且报警信息通过不会单个出现,所以,万一bug集中出现,就亏大了。然后我发现了个神器,以前一直没有注意的垃圾信息:移动提供的默认139邮箱,每次收到邮件都会发送免费短信,既然这样,为何不把报警邮件发到13

    2022年10月13日
    3
  • 用Attributes.Add添加事件

    用Attributes.Add添加事件1、(textbox2.Visible=true)JS的寫法:    textbox2.Attributes.Add(“onfocus”,”document.getElementById(‘textbox2’).style.display=”);2、(textbox2.Visible=false)JS的寫法:    textbox2.Attributes.Add(“onfocus”,”document.getElementById(‘textbox2’).style.display=’no

    2022年9月26日
    2
  • 脚手架专项施工方案范本_脚手架搭建方案

    脚手架专项施工方案范本_脚手架搭建方案前言如何快速搭建一个httprunner项目呢?我们可以使用脚手架,脚手架就是自动地创建一些目录,形成一个项目的架构,不需要我们再手动的去创建查看创建新项目的命令先来查看一下帮助命令httpr

    2022年7月30日
    6
  • JSP九大内置对象

    JSP九大内置对象

    2020年11月12日
    182
  • 百度分享异步加载问题、分页,无效果解决[通俗易懂]

    百度分享异步加载问题、分页,无效果解决[通俗易懂]使用百度分享的时候,如果所涉及到的html部分是后加载进来的,如ajax等异步请求成功后,加载进来,那么百度分享就有可能出现错误。我在使用的时候,遇到了两个问题。在这里记录一下。1、无法把所需要分享的内容传值到百度分享里。  百度分享的配置里有两个值,bdText,bdDesc,这两个内容,分别分享标题和内容。  内容是异步加载进来的,所以在百度分享相关代码是在加载成功后运

    2022年10月8日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号