外行假装内行,我也来谈谈SAP BAPI和BADI
外行假裝內行,我也來談談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
總結
以上是生活随笔為你收集整理的外行假装内行,我也来谈谈SAP BAPI和BADI的全部內容,希望文章能夠幫你解決所遇到的問題。