BAPI的同步異步調用

最近遇到業務上一個BAPI程序,ALV報表中讀取BAPI更新後的結果,會出現取值錯誤(與數據庫中不一致的情況)。如果BAPI調用後,BAPI提交後,WAIT 2 SECONDS,等待2秒可以避免這種情況,但是不能滿足業務對實時性的性能要求。後來某人解決的方法是調整了BAPI的同步異步更新參數。採用同步更新的方式,解決了這個問題。

  CALL FUNCTION 'HU_POST'
    EXPORTING
*      IF_SYNCHRON = ' ' 
      IF_SYNCHRON = 'X'
      IF_COMMIT   = 'X'
      IS_OBJECT   = GS_OBJECT
    IMPORTING
      ET_MESSAGES = GT_MSG.

 

 

http://kb.cnblogs.com/a/1486612/

黃佳《SAP高級應用開發》,第二章BAPI和業務對象學習筆記,記錄如下:

BAPI:Business Application Programming Interface.

一,SAP Business Object

      A, SAP面向對象的架構:business component業務組件、business object type業務對象類型、BAPI

      B, 業務對象類型即SAP系統中的類

      C, 內核層:
          整合層:對象的業務邏輯
          接口層:屬性、普通方法、BAPI方法、事件
          外部訪問層:

       D, 業務對象倉庫 Business Object Repository BOR
           業務對象倉庫瀏覽器:Tcode---SWO3
           業務對象倉庫創建器:Tcode---SWO1

       E, 一個業務對象類型職能繼承一個唯一的父類型,一個對象可以實現多個接口

二,業務對象類型的組建

       A, 接口、關鍵字段、屬性、方法、事件

       B, 四種狀態:modeled、Implemented、released、object

三,SAP BAPI

       A, BAPI在業務對象類型中的實現方式是API Function。BAPI實質上是一種特殊的、支持遠程調用的業務對象方法,並通過遠程支持的功能模塊實現。

       B, BAPI作爲建立在RFC協議之上的,通過業務對象進行組織的系統接口,是在業務級別而不是技術層次定義的。

       C, BAPI的查找:   從業務對象創建器查看BAPI
                                通過BAPI瀏覽器查看BAPI Tcode:BAPI

       D. BAPI的事務模型ACID

               完整性(atomic)原則:事務調用時,其中所有數據庫操作將全部完成或者全部撤銷
               一致性(consistent)原則:如果一次事務被超過一次的重複調用,且每次條用都實現相同的結果,那麼其賞賜輸入的數據不應隱性地影響新的調用結果                  
        獨立性(isolated)原則:兩個事務不應該存在功能上的依賴關係
      持久性(durable)原則

   E, 在同一個LUW中,不能對同一個業務對象實例進行超過一次的重複操作,在BAPI內部數據庫更新操作必須通過同步或者異步的更新過程實現,BAPI內部不能觸發新的LUW,也不能包含Call transaction、submit report、submit reprot and return

       F, BAPI事務中的數據庫提交和回滾必須通過BAPIServices的BAPI方法BapiServices.TransactionCommit和Bapiservices.Transactionrollback實現

   G, BAPI的功能模塊不包含異常處理參數,其成功調用或者出錯信息通過輸出參數Return返回。Return參數可以BAPIRETURN、BAPIRETURN1、BAPIRET1、BAPIRET2等定義

五 業務對象的創建和BAPI的創建。

  SWO1創建業務對象,注意其中狀態的設置

  BAPI:首先創建RFM,然後再SWO1中可以通過嚮導實現。在SWO1中BAPI方法顯示爲綠色。

 

 

http://blog.csdn.net/zyh18918/archive/2008/10/30/3181777.aspx

 

1,SAP Business Framework 架構。

業務組件

SAP的業務組件提供由業務對象組成的自治業務功能,例如,業務對象員工和申請者屬於HR業務組件。業務過程既可以在單個業務組件裏面實現,也可以跨越一系列組件(分佈式業務過程)。

業務對象

R/3系統的OO結構是基於業務對象的,這些業務對象封裝了業務數據和功能並且定義了業務組件的範圍和界限。

業務應用程序接口(BAPI)

BAPI是業務對象接口,連同業務對象一起定義和歸檔了業務接口標準。

集成服務(ALE)

ALE集成服務使得由不同R/3系統和非SAP系統的集成得以實現。它包括使用ALE分佈式模型的跨系統對象。

 

2,訪問BAPI的兩種方式。

調用BOR裏面的BAPI可以通過OO的方法調用,也可以通過RFC調用BAPI所基於的FM的方式。

 

3,應用訪問BAPI在廣義上可以分爲兩類。

對話應用:調用者要等到方法處理結束。

分佈式應用:BAPI也可以被用在ALE裏用來交換和複製數據在分佈式系統裏面。

 

4,使用面向函數的方式反問BAPI的一般步驟。

在運行時應用程序使用RFC類庫,或者是C/C++的類庫產生一個針對BAPI所基於的FM的RFC調用。庫把客戶端調用轉換遵循RFC協議的通信步驟並且把客戶端請求導向到相關R/3服務器的功能模塊。

 

5,對話應用編程。

事務控制:沒一個使用BAPI去改變一個或多個對象數據的事務必須直接執行COMMIT WORK命令來保存數據。BAPIService.TransactionCommit()就是被用來將改變寫入到數據庫中的。如果數據沒有被更新到數據庫中,BAPI BAPIService.TransactionRollback()會重置這些改變。

 

6,分佈式應用編程。

從R/3 4.0版本開始 BAPIS就能夠被使用在ALE中去在兩個系統間交換和複製數據。當數據在兩個分佈式系統中傳輸時你要決定是使用同步還是異步的方式進行數據傳輸。

同步BAPI調用:同步調用一般被用來從一個遠端的邏輯系統讀數據。例如:顯示客戶清單。在調用BAPI前必須確定遠程系統的RFC終端或者是BAPI服務器,應用開發者必須訪問一個API去決定BAPI的RFC終端。

異步BAPI調用:異步調用一般被同來在多個邏輯系統上覆制數據。例如分佈式XX主數據。使用BAPI進行一個數據的異步傳輸,一個ALE IDOC接口必須被生成。這個接口控制了使用IDOC技術進行數據交互系統的所有數據通信。應用隨後只需調用本地的IDOC接口,代替了對BAPI的調用。和同步調用一樣,異步調用也需要在生成ALE-IDOC接口之前確定BAPI所對應的邏輯系統。這個系統將被當作參數傳遞到ALE-IDOC接口裏面。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zyh18918/archive/2008/10/30/3181777.aspx

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章