业务交易事件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为错误消息,这样如果不企业未收到货三单不匹配将不能进行发票校验确定应付.