message
原文
http://blog.sina.com.cn/s/blog_4ee1cd4201000axh.html
组装错误消息
DATA WA_BDCRETURN2 LIKE TABLE OF BDCMSGCOLL WITH HEADER LINE.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = WA_BDCRETURN2-MSGID
MSGNR = WA_BDCRETURN2-MSGNR
MSGV1 = WA_BDCRETURN2-MSGV1
MSGV2 = WA_BDCRETURN2-MSGV2
MSGV3 = WA_BDCRETURN2-MSGV3
MSGV4 = WA_BDCRETURN2-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = EX_MESS.
13.消息和错误处理
尽管消息这词还用在其他地方比如PO,SO打印传真等所谓的output message(请看ABAP百夜谈),系统出现异常,在这里消息只谈在程序运行逻辑异常处理时的消息.
1定义消息(参考图7-7).
使用Tcode SE91可自定义包含多消息号的消息类,在图7-7中就定义了一个消息类ZFIMSG,同时消息号017 中使用了俩&消息变量
2运用消息.
1.可在程序Title中使用MESSAGE-ID加入消息类. REPORT ZMSGTEST MESSAGE-ID ZFIMSG . MESSAGE I017. 使用消息IMG有这样的画面,[1][2]的appl和work area实际上对应的就是程序的message_id(SE91:message class). 2.在程序Title中定义直接在语句中使用. REPORT ZMSGTEST . MESSAGE I017(ZFIMSG). 1. 将变量赋给消息. REPORT ZMSGTEST . MESSAGE I017(ZFIMSG) with ‘Var1’ ‘Var2’ ‘Var3’ . 或者 MESSAGE ID ' ZFIMSG ' TYPE 'I' NUMBER '0171' with ‘Var1’ ‘Var2’ ‘Var3’ .
尽管017只定义了两消息变量,但是可With多个值,当然只有前俩生效. 4.SAP程序消息类型有下列几种. I:信息窗口 W:警告 E:错误 S:成功 A:终止程序或Tcode X:未知. 5.和标准SAP一样,你可配置消息,比如你需要由用户决定消息类型,使用下面程序. PROGRAM ZMSGTEST . CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE' EXPORTING I_ARBGB = 'ZFIMSG' I_DTYPE = '' I_MSGNR = '017' IMPORTING E_MSGTY = SY-MSGTY. 假设你做了Tcode和OBA5一样可配置消息类型,在程序中你就可根据返回值SY-MSGTY判断下步工作,E停止处理,A退出程序等. 在标准程序中,接下来会PERFORM MESSAGE_SEND来决定发送消息类型. |
3常用消息表格和各模块常用消息配置Tcode.
在消息配置中,Application Area和SE91的Message Class实际上是同一概念.
1消息相关最常用的table: T100: SAP能用到的消息都应该在此表中找到. T160M :MM模块相关消息表,此表可完全直接维护.就是说只要记住它,MM的消息配置直接使用SE16就可以. T100C: FI模块中用户自定义的消息,比如使用OBA5, OFMG等自定义的消息会写入此表,CO配置消息不在此表. T100S: 此表保存着允许用户更改的应用区域和消息号,举例假设你删除了KI 005则在OBA5中再不能配置此消息.(对MM模块有些例外,M7不在此表,使用OMCQ依旧可设置,M3不在此表,OMT4依旧可设置)
此表也可直接维护.和T160M不同的是,你必须在SE16输入T100S按新建按钮 才可维护.查询时只可Display. T100U: 哪个用户最后更改了消息,从此表能找到. T100W: For Workflow 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 Others: OPR5|OPR1|OPR3|OPR6|OPR7|OPR8|OPR9|OPRCMFE|MSW1|MSW2 3应用举例. 物料价格维护问题 [Case 1]如何在物料价格未维护时依旧可估算成本. 比如在CK11N(CK40N)计算成品标准成本时,其中有一些Component没维护价格.就可使用 OPR4_CK将默认的错误消息Switch Off掉(从Tcode OKKN->Misc.->Error Management按钮也可). ***另外临时处理方法一是将相关component的物料Cost 1 View选上Do not Costing. 对需要计算标准成本的材料选上它就不再允许计算标准成本,不妥,但是对原材料无所谓,因为系统会这样处理,如此材料没维护价格,BOM用到它的成品不计算其成本,但是如此物料维护了价格后,还是以物料价格为先的.(当然CK11N去估算此原材料是不行的,用户也不需如此做).二是按SAP推荐的如果将price设成0.01,price unit设置成100. [Case 2]如何限定物料价格必须维护. (1)对采用S price control的.SAP默认是Warning(Tcode :OMT4 M3-132,如需要限定必须维护价格,将其改成W就可. (2)对采用V price control的,OMT4找不到其消息号M3-131,但系统默认是Warning,如果用户认为也有相关配置就有犯了认为SAP万能的错误,再次强调SAP只是一堆代码并不神秘.好让我们看看其逻辑. ***实际上直接使用SE16:T160M可直接配置MM相关. 如图:[1]SE38找到程序LMG11F01 [2]在此处设置断点 [3]如价格为0(空格) 写死的,当然配置无效. 再看S Price control(如下图,显然从T160M表读了IMG数据). 4 配置自定义的消息. 俩方法可模妨SAP的消息配置 1从上我们已经知道既然T160M是可直接使用SE16维护的,我们就可直接将相关设置写入T160M.然后就可根据相关设置取得消息类别(如上图我们使用函数ME_CHECK_T160M),这样比类似MESSAGE E017(ZFIMSG)—Hard code要安全得多,假设不管三七二十一就给出错误消息,除非在程序中确信已考虑了所有情况,否则还是在T160M这样设置比较好(万一在生产环境还可更改E成W什么的). 2我们知道T100C是所谓的可配置消息表,我们可使用SE16:T100C和V_T100C. (1)SE16:T100S定义消息可配置信息. 如图[1]在此新建.(进去browse数据似乎不可新建) 设置消息.如下图. [1]Appl Area消息类ZFIMSG. [2]表示允许配置的消息类型 [3]没选则表示不能关闭消息. (2)SE16:V_T100C配置消息. 如图: [1]表示直接使用程序(Tcode)的消息类型[2]当当程序以BDC方式运行时的消息类型 [3]就是上图设置的允许的消息类型,可看到警告和关闭都没出现(T100C没允许) 同样在程序中避免使用泪水MESSAGE E017(ZFIMSG)而采用 CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE' EXPORTING I_ARBGB = 'ZFIMSG' I_DTYPE = '' I_MSGNR = '017' IMPORTING E_MSGTY = SY-MSGTY. 根据返回的SY-MSGTY去判断消息类型将更好些. 5实例介绍 PO在有发票校验后禁止修改价格,假设无PO release策略,使用User-exit步骤如下: (1)找合适的用户出口 发现EXIT_SAPMM06E_017比较合适,SMOD 输入enhancement name :MM06E005 (2)编写代码. *&---------------------------------------------------------------------* *& Include ZXM06U42 * *&---------------------------------------------------------------------* DATA : ZWATEKPO like BEKPO , ZIEINFO LIKE EINFO OCCURS 0 WITH HEADER LINE, ZERMSG(73) TYPE C. TABLES EKBE . ***TEKPO records all the old PO item date . *** I_EKPO records currently processed PO item . READ TABLE TEKPO INTO ZWATEKPO WITH KEY EBELP = I_EKPO-EBELP . ***只对ME22N才生效. CHECK SY-TCODE = 'ME22N '. ***EKBE是PO history 表,如有Q,R表示有发票校验历史,不允许更改价## SELECT SINGLE * FROM EKBE WHERE EBELN = I_EKPO-EBELn AND EBELP = I_EKPO-EBELP AND ( BEWTP = 'Q' OR BEWTP = 'R'). CHECK SY-SUBRC = 0 . ***如果SY-SUBRC =0表示发票已经校验,不允许更改价格,否则还是可更改价格## IF I_EKPO-NETPR <> ZWATEKPO-NETPR . *** Change e017(ZFIMSG) accordingly * MESSAGE e017(ZFIMSG)."使用下面函数代替. CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE' EXPORTING I_ARBGB = 'ZFIMSG' I_DTYPE = '' I_MSGNR = '017' IMPORTING E_MSGTY = SY-MSGTY. CHECK SY-MSGTY NE '-' . REFRESH ZIEINFO. ZIEINFO-MSGID = 'ZFIMSG'. ZIEINFO-MSGNO = '017' . ZIEINFO-MSGV1 = 'VAR1'. ZIEINFO-MSGV2 = 'VAR2'. APPEND ZIEINFO . CALL FUNCTION 'MESSAGE_GET_TEXT' EXPORTING IEINFO = ZIEINFO ILANGU = SY-LANGU IMPORTING ETEXT = ZERMSG . MESSAGE ZERMSG TYPE SY-MSGTY . ENDIF.
|
推荐阅读
-
Appium新版本遇到的问题,不能通过 name 去定位元素抛 Message: Locator Strategy 'name' is not supported for this session
-
优化 Git Commit Message
-
最新版利用CDO.Message做的vbs下载者
-
[视频]Facebook iOS客户端 新增Message转账汇款功能
-
C# WPF遮罩对话框(Popup Message Overlay/ Dialog Host)
-
HMAC(Hash-based Message Authentication Code)实现原理
-
mac下运行selenium出错解决(selenium.common.exceptions.WebDriverException:Message:'geckod
-
SQL state ‘23000‘, error code ‘1062‘, message [Duplicate entry ‘2‘ for key ‘PRIMARY‘]-batch批处理问题小结
-
跨浏览器 HTML5 postMessage 方法以及 message 事件模拟实现
-
动手写一个angular版本的Message组件的方法