SAP BTE和訊息(事件處理)
小技巧-業務交易事件BTE
BTE是什麼,當然不是BT的ERP, E文全稱Business Transaction Event,業務交易事件,我們知道一般的增強(Tcode:SMOD|CMOD)依舊使用ABAP,BTE則可提供了RFC呼叫其它產品的可能(Tcode:FIBF),舉一個檢查物料主資料的例項說明BTE用法,簡化為三個步驟.
第一步:建立附加產品(Tcode:BF24)
圖1,建立產品ZMM01-2,選圖1-[2]表示啟用.
第一步:連線事件到產品(Tcode:BF34).
系統預定義了很多事件,00001250是儲存物料主資料的事件,系統似乎並沒有為物料主資料的維護設定增強而是留下了這個BTE,輸入函式ZMM01_2_CHECK.
第三步:建立檢查函式(Tcode:SE37).
你可以輸入00001250*快速找到類似SAMPLE_INTERFACE+EVENT號的函式,Copy一個出來,如圖3.
下面是一個限制某工廠只能輸入某利潤中心和不允許使用者修改利潤中心的參考程式碼.
DATA: I_MSG1(60) TYPE C, I_MSG2(50) TYPE C. * Never let user change profit center of material . if ( I_MARC_NEW-PRCTR <> I_MARC_OLD-PRCTR ) and ( I_MARC_OLD-PRCTR <> '' ) . CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE' EXPORTING I_ARBGB = 'ZFI' I_DTYPE = '' I_MSGNR = '003' IMPORTING E_MSGTY = SY-MSGTY. CHECK E_MSGTY <> '-' . MESSAGE ID ' ZFI ' TYPE SY-MSGTY NUMBER '003' with 'Change Material profit center not allowed!' . ENDIF. IF ( I_MBEW_NEW-BWKEY = 'FRA1' AND I_MARC_NEW-PRCTR <> '9233110000' ). CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE' EXPORTING I_ARBGB = 'ZFI' I_DTYPE = '' I_MSGNR = '002' IMPORTING E_MSGTY = SY-MSGTY. CHECK E_MSGTY <> '-' . I_MSG1 = 'FRA1 profit center should be 9233110000!'. CONCATENATE 'However,Your input is :' I_MBEW_NEW-BWKEY '&' I_MARC_NEW-PRCTR into I_MSG2 . MESSAGE ID ' ZFI ' TYPE SY-MSGTY NUMBER '002' with I_MSG1 I_MSG2. ENDIF. |
注:此處程式碼僅供參考。如果涉及多個工廠,可以使用case語分工廠一一檢查業務範圍和利潤中心是否一致,訊息號設定成可配置型的。
關於訊息請參考如下:
關於訊息,請看下一個小技巧-訊息,介紹如何使用參考程式碼中使用到的訊息類”ZFI”.
小技巧-訊息
訊息這詞還用在比如PO,SO列印傳真等所謂的output message,但是這節的訊息則是指程式邏輯出現異常丟擲的訊息,有點類似其他開發工具的try..catch..finally 語句.
為了說明訊息的意思,我也分幾個部分闡述.
第一部分:定義和檢視訊息(Tcode:SE91).
使用Tcode SE91可自定義和檢視系統的訊息,
圖1中建立了訊息類ZFI,訊息類相當於一個應用區域,如果訊息使用了&符號,表示是在程式呼叫時可使用文字變數替代這符號.
第二部分:呼叫訊息(Tcode:SE38).
呼叫訊息的方法.
(1).可在程式Title中使用MESSAGE-ID加入訊息類.
REPORTZMSGTEST1 MESSAGE-ID ZFI .
MESSAGE I001.
(2).在程式碼中指定訊息類.
REPORTZMSGTEST2 .
MESSAGE I001(ZFI).
(3). 在訊息類傳輸文字.
REPORT ZMSGTEST3 .
MESSAGE I002(ZFI) with ‘文字1’ ‘文字2’ .
或者
MESSAGEID ' ZFI ' TYPE 'I' NUMBER '002' with ‘文字1’ ‘文字2’ .
訊息的型別一般有以下幾種
I:資訊視窗 W:警告 E:錯誤 S:成功 A:終止程式.
(4).將訊息設成為配置訊息
PROGRAM ZMSGTEST4 .
CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE'
EXPORTING
I_ARBGB ='ZFI'
I_DTYPE = ''
I_MSGNR = '0002'
IMPORTING
E_MSGTY =SY-MSGTY.
CHECK E_MSGTY <> '-' .
MESSAGE ID ' ZFI ' TYPE SY-MSGTY NUMBER '002' with ‘文字1’ ‘文字2’ .
3常用訊息表格和各模組常用訊息配置Tcode.
在訊息配置中,Application Area和SE91的Message Class實際上是同一概念.
第三部分:配置訊息(Tcode:OBA5|OMRM等).
(1).訊息相關表格.
Table蘊藏著豐富的資訊,看看訊息相關表格
T100: 系統能用到的訊息都應該在此表中找到.
T160M :MM模組相關訊息表,此表可完全直接維護.就是說只要記住它,MM的訊息配置直接使用SE16就可以.
T100C: FI模組中使用者自定義的訊息,比如使用OBA5, OFMG等自定義的訊息會寫入此表,CO配置訊息不在此表.
T100S: 此表儲存著允許使用者更改的應用區域和訊息號,一個簡單例項,假設你刪除了KI 005則在Tcode:OBA5中將再不能配置此訊息.
此表也可直接維護.和T160M不同的是,你必須在SE16輸入T100S按新建按鈕 才可維護,這表是跨Client的.
T100U: 哪個使用者最後更改了訊息,從此表能找到.
設定可配置訊息
圖2是一個合成圖,現在要將自定義的訊息類ZFI的幾個訊息設定成可配置的,輸入表T100S,然後點選圖2-[1]的新建按紐,也就是說設定可配置訊息首先需要在T100S折騰一番。
圖2-[3]表示ZFI-002|003訊息允許配置的訊息型別,選上圖2-[4]”關閉”標誌表示該訊息能被關閉.
現在你就可以使用Tcode:OBA5設定訊息ZFI 002和ZFI 003是錯誤警告還是關閉等,而函式READ_CUSTOMIZED_MESSAGE正是根據配置決定訊息型別的.
(2).各模組常用訊息相關Tcode
FI: OBA5|OFMG|OFPM
MM: OMRM|OKZZ|OMT4|OMCQ |O04C|
SD: OVAH
CO: OPR4_ACT|OPR4_CK|OPR4_CKML|OPR4_CKPF|OPR4_KKA|OPR4_KKP|OPR4_KKS|
OPR4_KKS1|OPR4_PPCOPP
其它:
OPR5|OPR1|OPR3|OPR6|OPR7|OPR8|OPR9|OPRCMFE|MSW1|MSW2
圖3是OMRM配置後勤發票校驗的訊息的,可以在供應商主設計設定其發票校驗是” 基於收貨的發票驗證”->自動帶到PO->設定M8 504|M8081為錯誤訊息,這樣如果不企業未收到貨三單不匹配將不能進行發票校驗確定應付.