4灵活运用消息. 对于消息的运用,除了可配置消息类别外,另外一个重要用处就在于,可根据消息找到程序弹出消息的确切行,然后稍微花点时间看看程序逻辑就可大概知道异常发生的根本原因. 从某种程度来讲,即使对某模块很陌生,只要掌握得好,依旧可排除一些问题. 5 配置自定义的消息. 俩方法可模妨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去判断消息类型将更好些. 6实例介绍
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.
***在大多数情况下追踪消息能发现问题所在,然而在一些特定情况下,SAP显示的消息似乎和实际业务并不符合.好比一个人咳嗽的厉害,以为是感冒结果其实不过是有写异物进入其喉咙而已.
14.使用用户授权
15.调用外部程序和程序动态生产 16.选择屏幕
17.使用程序运行变式
18.制作Tcode
二.加强篇.
1.CATT