外行假裝內行,我也來談談SAP BAPI和BADI
A, 什麼是BAPI?
BAPI是business application programming interface的縮寫,是物件導向程式設計方法中的一組程式介面。它允許程式設計師透過SAP將第三方軟體整合成R/3專有產品。為了完成一些特殊的商業任務,如上傳交易資料等,R/3系統中內建了BAPI。
1.BAPI – business application programming interface。
2.它實際上是一種特殊的Remote Function Modules (RFC)是為了提供使用外部程式來進行交易活動, BAPI是SAP以外程式訪問SAP內部資料和程式的標準方式。
3.它提供的基於企業目標(Business Object) 技術的介面應用介面。
4.SAP採用了Object-oriented技術,邏輯定義了SAP R/3系統的所有功能目標,並且將所有的目標(Objects) 和BAPIs儲存於企業物件庫(Business Objects Repository)。
5.SAP R/3 企業目標的目標型別(Object Type) 相當於目標設計語言中類(Class) 的概念,其定義結構由以下幾部分組成:基本資料,介面介面,鍵(Key Fields),方法(Methods),特徵(Attributes),事件(Events)。
6.BAPI在SAP系統內部以Function Module的方式實現.所有的BAPI Function都支援Remote Function Call (RFC),處理過程中不啟用對話視窗。
7.BAPI是被定義為Business Object Repository(BOR)中的SAP Business Object型別或SAP interface型別的方法,並且以Function Module方式實現的. 這種定義和實現分離的方式是我們可以透過2種方式訪問BAPI:
- 透過物件導向的方法呼叫BOR中的BAPI
- 透過RFC直接呼叫Function Module
需要注意的事項:
在T-CODE:SE11中建立的結構必須儲存在開發類中,不可儲存為本地物件。
BAPI業務應用程式介面(Business Application Programming Interface,簡稱BAPI)是物件導向程式設計方法中的一組程式介面。它允許程式設計師透過SAP將第三方軟體整合成R/3專有產品。為了完成一些特殊的商業任務,比如上傳交易資料等,系統中內建了BAPI。
BAPI業務應用程式介面是一個標準化的開放介面。有了BAPI,使用者可以透過瀏覽器、Exchange電子郵件來使用ERP系統,使用者可以將這些軟體模組與非ERP軟體混合匹配使用。
使用者可以按需求單獨更新某一個模組,而沒有必要為了增強某一個功能對系統進行全面升級。使用者用逐個模組更新的辦法增強系統的功能,而不必更換整個系統。
BAPI技術對ERP軟體的開發商來說是非常重大的進步。從MRPII到ERP,系統功能越來越多,一個軟體公司無論多麼強大,也無法獨自開發包括企業全部專業的全部管理功能的軟體。在技術上必須有能力把第三方軟體接到自己的核心軟體上。SAP的BAPI和Oracle應用的30多個API能夠使自己的軟體具有“無限”的擴充套件能力。
BAPI是SAP提供的基於業務物件的函式,關鍵是它們處理的物件是R/3的業務相關物件,比如單據類銷售訂單,它們是一系列實體,RFC則是一種系統間通訊的方式(Remote Fcuntion Call),一個BAPI函式是一個RFC函式。
B, 如何建立BAPI程式?
主要有如下幾個步驟:
1.定義BAPI Structure (Structure不能在BAPI中重複使用,因為一旦BAPI被釋放,其Structure被凍結)。事務程式碼 SE11。
2.建立FUNCTION MODULE。事務程式碼SE80。
每個BAPI必須有自己的Function Group,Function Group屬性必須為RFC。
3.建立Business Object。事務程式碼 SWO1。
4.使用BAPI WIZARD建立API Method。
這樣BAPI可以被外部程式呼叫。
5.Function Module符合BOR Method。
4.釋放BAPI Function Module, 事務程式碼 SE37、SWO1。
釋放Business Object Type,釋放BAPI作為BOR的一種Method。
C,BADI 和BAPI 的區別
BADI是一種物件導向的增強方式,SE19可以實現SAP已定義好的BADI。
而BAPI是SAP業務物件的一個方法,底層多以Function Module來實現。所以在ABAP裡更多地是作為FM來使用。
BAPI 是函式,你可以輸入T-code:BAPI,查詢系統裡的BAPI函式。比如採購申請的審批的勾打上,就可以呼叫BAPI函式來實現。
BADI 是ABAP的一種增強,他的呼叫方式是CALL METHOD (instance),(相關的TCODE是SE18和SE19),你可以透過EXIT_HANDLER這個單詞查詢BADI。
建立增強有多種方法,用CMOD可以建立,用SPRO也可以建立。網上有這段:
針對BADI的增強
1、BADI物件的資訊儲存在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 這四個表中。
2、SAP程式都會呼叫cl_exithandler=>get_instance來判斷物件是否存在,並返回例項;其實get_instance就是對上述幾個表和他們的檢視(V_EXT_IMP 和 V_EXT_ACT)進行查詢和搜尋。
3、基於這個機理,我查用ST05來監控一個TCODE來跟蹤,然後選擇查詢有關上述幾個表和檢視的操作,就可獲得相關BADI。
4、se18 查詢介面,se19 實現介面就可以實現使用者增強。
在程式中,查詢BAdI的常用方法:
使用事務程式碼 SE84 :Repository information system
使用事務程式碼 SPRO: Customizing Guide, SAP標準釋出的BAdI會在相關應用配置點中說明
在程式中搜尋關鍵字CL_EXITHANDLER=>GET_INSTANCE或關鍵字GET BADI
在程式中搜尋BAdI相關的介面名稱,其介面的命規範通常為IF_EX_
事務程式碼CODE_SCANNER, 可指定在特定的package、program中所有相關的字串
D: SAP 各模組常用的BAPI
MM模組
1、 BAPI_MATERIAL_SAVEDATA 建立物料主資料
注意引數EXTENSIONIN的使用,可以建立自定義欄位
例如:WA_BAPI_TE_MARA-MATERIAL = ITAB_UP-MATNR.
T_EXTENSIONIN-STRUCTURE = 'BAPI_TE_MARA'.
T_EXTENSIONIN-VALUEPART1 = WA_BAPI_TE_MARA.
APPEND T_EXTENSIONIN.
WA_BAPI_TE_MARAX-MATERIAL = ITAB_UP-MATNR.
T_EXTENSIONINX-STRUCTURE = 'BAPI_TE_MARAX'.
T_EXTENSIONINX-VALUEPART1 = WA_BAPI_TE_MARAX.
APPEND T_EXTENSIONINX.
2、 BAPI_OBJCL_CREATE 分類檢視的建立
3、 BAPI_OBJCL_GETCLASSES 分類檢視得到詳細資訊
4、 BAPI_MATERIAL_SAVEREPLICA 物料檢視的擴充
5、 BAPI_GOODSMVT_CREATE 建立物料憑證 注意表T158G可以決定goodsmvt_code
GOODSMVT_CODE引數對應值:
01 MB01
02 MB31
03 MB1A
04 MB1B
05 MB1C
06 MB11
07 MB04
6、 BAPI_GOODSMVT_CANCEL 沖銷物料憑證
7、 BAPI_PR_CREATE 建立PR
8、 BAPI_PO_CREATE1 建立PO
9、 BAPI_PO_CHANGE 修改PO和刪除PO
10、WS_REVERSE_GOODS_ISSUE 沖銷交貨單的過賬發貨
11、BAPI_RESERVATION_CREATE1 建立預留 如果要檢查ATP,必須使用
BAPI_RESERVATION_CREATE
12、BAPI_RESERVATION_CHANGE 修改和刪除預留
13、PRICES_CHANGE PRICES_POST 更改物料移動平均價或者標準價格
SD模組
1、 BAPI_SALESORDER_CREATEFROMDAT2 建立銷售訂單
2、 SD_SALESDOCUMENT_CREATE 建立銷售訂單 (如果要檢查ATP,必須使用這個)
3、 BAPI_OUTB_DELIVERY_CREATE_SLS 根據銷售訂單建立交貨單
4、 BAPI_BILLINGDOC_CREATEMULTIPLE 建立發票,注意引數ref_doc_ca
5、 BAPI_SALESORDER_CHANGE 修改或者刪除銷售訂單
6、 MB_CANCEL_GOODS_MOVEMENT 沖銷交貨單的過賬發貨
7、 BAPI_BILLINGDOC_CANCEL1 發票的沖銷
8、 BAPI_OUTB_DELIVERY_CHANGE 修改外向交貨單
9、 SD_DELIVERY_UPDATE_PICKING 修改外向交貨單揀配數量
10、WS_DELIVERY_UPDATE 外向交貨單的發貨過賬
11、SD_CUSTOMER_MAINTAIN_ALL 建立客戶 。
PM模組
1、BAPI_OBJCL_CREATE 、
BAPI_OBJCL_CHANGE、
BAPI_OBJCL_GETDETAIL
計量點通用屬性匯入
2、MEASUREM_DOCUM_RFC_SINGLE_001 計量憑證建立
FI模組
1、K_HIERARCHY_TABLES_READ 成本要素組明細
2、BAPI_ACC_DOCUMENT_POST 建立會計憑證
3、BAPI_ACC_DOCUMENT_REV_POST 反衝會計憑證 可以沖銷自開發程式生成的憑證 必須傳入交易碼引數
BAPI_ACC_GL_POSTING_REV_POST 只能沖銷標準TCODE生成的憑證
4、 FCOM_COSTCENTER_CHANGEMULTIPLE
FCOM_COSTCENTER_CREATEMULTIPLE
BAPI_COSTCENTER_CHANGEMULTIPLE :Change One or More Cost Centers
BAPI_COSTCENTER_CHECKMULTIPLE :Check One or More Cost Centers
BAPI_COSTCENTER_CREATEMULTIPLE :Create One or More Cost Centers
BAPI_COSTCENTER_DELETEMULTIPLE :Delete One or More Cost Centers
4、BAPI_INCOMINGINVOICE_CREATE 發票檢驗(miro)
5、BAPI_INCOMINGINVOICE_CANCEL 發票校驗沖銷(mr8m)
PS模組
1、BAPI_PS_INITIALIZATION、BAPI_BUS2001_CREATE、BAPI_PS_PRECOMMIT 建立專案定義
2、BAPI_PS_INITIALIZATION、BAPI_BUS2054_CREATE_MULTI、BAPI_PS_PRECOMMIT 建立WBS
建立WBS的時候,注意引數 wbs_left和 wbs_up,這個是建立有層級的WBS必須要填寫的
3、KBPP_EXTERN_UPDATE_CO 修改專案和WBS的預算
PP模組
Routing(工藝路線)
BAPI_ROUTING_CREATE 建立工藝路線BAPI - ca03
BAPI_ROUTING_EXISTENCE_CHECK 檢查工藝路線是否存在
Reference operation set:(參考操作集)
BAPI_REFSETOFOPERATIONS_CREATE 建立參考參考工序集
BAPI_REFSETOFOPR_EXISTENCE_CHK 檢查參考參考工序集
Planned order:(計劃訂單)
BAPI_PLANNEDORDER_CHANGE 更改計劃訂單 -md04
BAPI_PLANNEDORDER_CREATE 建立計劃訂單
BAPI_PLANNEDORDER_DELETE 刪除計劃訂單
BAPI_PLANNEDORDER_EXIST_CHECK 檢查計劃訂單是否存在
BAPI_PLANNEDORDER_GET_DETAIL 獲取計劃訂單詳細資訊(計劃訂單)
BAPI_PLANNEDORDER_GET_DET_LIST 獲得計劃訂單資訊
Planned Independent Requirement:(計劃獨立需求)
BAPI_REQUIREMENTS_CHANGE 更改計劃獨立需求 -md61
BAPI_REQUIREMENTS_CREATE 建立計劃獨立需求
BAPI_REQUIREMENTS_GETDETAIL 顯示計劃獨立需求
Production order:(生產訂單)
BAPI_PRODORD_WM_MAT_STAGING WM材料分期
BAPI_PRODORD_SETUSERSTATUS 設定使用者狀態
BAPI_PRODORD_SET_DEL_INDICATOR 設定刪除標識
BAPI_PRODORD_SET_DELETION_FLAG 設定刪除標識
BAPI_PRODORD_SCHEDULE 進行調整
BAPI_PRODORD_REVOKEUSERSTATUS 取消使用者狀態
BAPI_PRODORD_RELEASE 釋出
BAPI_PRODORD_GET_LIST 列表抬頭訂單
BAPI_PRODORD_GET_DETAIL 抬頭訂單明細
BAPI_PRODORD_EXIST_CHECK 確認檢查性
BAPI_PRODORD_CREATE_FROM_REF 建立模板
BAPI_PRODORD_CREATE_FROM_PLORD 建立帶有計劃訂單
BAPI_PRODORD_CREATE_CAP_REQ 產生能力需求
BAPI_PRODORD_CREATE 建立生產訂單
BAPI_PRODORD_COSTING 建立成本估計
BAPI_PRODORD_COMPLETE_TECH 完整的技術
BAPI_PRODORD_CLOSE 關閉訂單
BAPI_PRODORD_CHECK_MAT_AVAIL 檢查物料可用性
BAPI_PRODORD_CHANGE 更改生產訂單
Production order confirmation:(生產訂單確認)
BAPI_PRODORDCONF_GET_TT_PROP 確認計工單
BAPI_PRODORDCONF_GET_TE_PROP 確認計工單
BAPI_PRODORDCONF_GETLIST 生產訂單確認
BAPI_PRODORDCONF_GETDETAIL 生產訂單確認詳細資訊
BAPI_PRODORDCONF_GET_HDR_PROP 確認計劃訂單
BAPI_PRODORDCONF_EXIST_CHK 檢查工單是否存在
BAPI_PRODORDCONF_CREATE_TT 確認計劃工單
BAPI_PRODORDCONF_CREATE_TE 確認計劃工單
BAPI_PRODORDCONF_PDC_UPLOAD_TT PP 確認計工單
BAPI_PRODORDCONF_PDC_UPLOAD_TE PP 確認計工單
BAPI_PRODORDCONF_CREATE_HDR 輸入訂單確認
BAPI_PRODORDCONF_CREATE_ACT 輸入訂單啟用確認
BAPI_PRODORDCONF_CANCEL 取消生產訂單
BDC Download & Upload for production order: (下載和上傳的BDC的生產訂單)
BAPI_RCVPRORDCF_RECEIVEPRODORD PP-PDC: 下載生產訂單
BAPI_RCVPRORDCF_RECEIVEWORKC PP-PDC: 下載工作中心
BAPI_RCVPRODCF_REQUEST_CONF PP-PDC: 上傳請求
KANBAN: (看板)
BAPI_KANBAN_CHANGE 更改kanban資料
BAPI_KANBAN_CHANGESTATUS 更改kanban狀態
BAPI_KANBAN_CHANGESTATUS1 更改kanban狀態1
BAPI_KANBAN_GETLIST 匹配選擇標準KANBAN的測定BAPI_KANBAN_GETLIST_ALL 匹配選擇標準KANBAN的測定
BAPI_KANBAN_GETLISTFORSUPPLIE1 匹配選擇標準KANBAN的測定
BAPI_KANBAN_GETLISTFORSUPPLIER 為供應商提供kanban資料
BAPI_KANBAN_SETINPROCESS 為供應商提供kanban資料
KANBAN CONTROL CYCLE: (看板)
BAPI_KANBANCC_ADDEVENTDRKANBAN Create Event-Driven KANBAN for Control Cycle
BAPI_KANBANCC_CHANGE Change Control Cycle
BAPI_KANBANCC_CREATE Create Control Cycle
BAPI_KANBANCC_DELETE Delete Control Cycles
BAPI_KANBANCC_EXISTCHECK Check Existence of Control Cycle
BAPI_KANBANCC_GETLIST Determine Kanban Control Cycles with Selection Criteria
BAPI_KANBANCC_GETLIST_ALL Determine Kanban Control Cycles with Selection Criteria
BAPI_KANBANCC_WITHDRAWQUANTITY Quantity Signal for Kanban Control Cycle
REM Confirmation: ( REM確認)
BAPI_REPMANCONF_CANCEL 處理的重複製造取消
BAPI_REPMANCONF_CREATE_MTO 銷售訂單執行重複製造情況
BAPI_REPMANCONF_CREATE_PLOT 執行生產成本
BAPI_REPMANCONF_CREATE_MTS 在很多情況下,執行生產成本
BAPI_REPMANCONF_EXIST_CHK 檢查物件存在
REM Confirmation1:
BAPI_REPMANCONF1_CANCEL 處理的重複製造取消
BAPI_REPMANCONF1_CREATE_MTO 銷售訂單執行重複製造情況
BAPI_REPMANCONF1_CREATE_MTP 在很多情況下,執行生產成本
BAPI_REPMANCONF1_CREATE_MTS 在很多情況下,執行生產成本
BAPI_REPMANCONF1_EXIST_CHK 檢查物件存在
-完-
整理於2021-12-30