about bapi

weixin_34304013發表於2007-12-29

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

相關文章