最近遇到業務上一個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