`
dellsoft
  • 浏览: 112923 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

message

    博客分类:
  • sap
阅读更多

原文

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.

 

 

分享到:
评论

相关推荐

    error message_errormessage_

    "error message_errormessage_" 这个标题可能是指一个特定的错误处理机制或者函数,其核心是创建一个与具体硬件或系统设备无关的错误传递方式。这样的设计使得程序的错误处理代码更加通用,适应性更强,可以在不同的...

    C# MessageQueue示例

    MessageQueue,又称消息队列,是C#中处理异步通信和解耦组件的重要技术。它允许应用程序之间通过消息传递数据,而无需彼此直接交互。下面将详细介绍C#中的MessageQueue以及如何使用它来发送和接收消息。 1. **...

    matlab开发-message

    在MATLAB编程环境中,`message`函数是一个非常实用的工具,尤其在开发过程中用于输出调试信息或用户提示。本文将深入探讨`message`函数的使用、功能及其与`fprintf`和`warning`的区别。 首先,`message`函数是...

    活用Android的Message Queue

    在Android开发中,Message Queue是一种重要的机制,用于在不同线程间进行异步通信和任务调度。理解并熟练运用Message Queue、Looper和Handler是构建高效、响应性良好的Android应用的关键。 1. **Message Queue...

    DELPHI POSTMESSAGE后台模拟按键源代码

    DELPHI POSTMESSAGE后台模拟按键源代码是一种编程技术,主要用于在 Delphi 开发环境中实现程序间的通信和控制。这一技术的核心在于使用 Windows API 中的 `PostMessage` 函数,该函数允许一个进程向另一个进程发送...

    SAP Message发送手册

    《SAP Message发送手册》详述了如何向SAP官方提交技术问题,这对于处理与SAP系统相关的疑难问题至关重要。SAP Message服务是为A1客户提供的一种支持方式,只有这类客户的问题可以通过特定的账号发送消息。在不确定...

    Microsoft Message Analyzer.zip

    微软消息分析器(Microsoft Message Analyzer,简称MMA)是一款由微软公司开发的强大网络通信日志分析工具。它为IT专业人员提供了深入洞察网络通信过程的能力,帮助他们诊断、调试和优化网络性能。这款工具能够捕获...

    Message解压打包工具

    在IT行业中,"Message解压打包工具"是一种用于处理消息数据的软件,它集成了解压和打包的功能,便于用户对消息文件进行管理和传输。在最新版本中,该工具引入了"透明功能选项",这使得操作过程更加简便且不易察觉,...

    抓包工具MessageAnalyzer

    **MessageAnalyzer:微软的强大网络分析工具** MessageAnalyzer是微软推出的一款高级网络诊断和分析工具,专为IT专业人员设计,用于捕获、查看、解析和分析各种网络协议和消息数据。这款工具集成了多种功能,使得对...

    微信小程序webview与h5通过postMessage实现实时通讯的实现

    在做 React Native 应用时,如果需要在 App 里面内嵌 H5 页面,那么 H5 与 App 之间可以通过 Webview 的 PostMessage 功能实现实时的通讯,但是在小程序里面,虽然也提供了一个 webview 组件,但是,在进行 post...

    Halcon disp_message报错.rar

    在使用Halcon进行编程时,有时会遇到与disp_message相关的错误,尤其是在C#环境下。本文将深入探讨这个问题及其解决方法。 标题中的"Halcon disp_message报错.rar"指的是用户在尝试使用C#语言调用Halcon库中的disp_...

    PostMessage or SentMessage 的消息创建

    本文档将详细介绍如何在两个C++类之间通过自定义消息来实现数据的传递,主要涉及`PostMessage`和`SendMessage`函数的使用。 首先,我们需要创建自定义的消息。在MFC中,这通常通过类向导完成。打开DLG(Dialog)类...

    在C#中SendMessage和PostMessage的参数传递

    在C#中SendMessage和PostMessage的参数传递 在C#中可以使用Window API提供的SendMessage和PostMessage来传递参数。两者的区别简单介绍下:返回值的不同,我们先看一下 MSDN 里的声明: LRESULT SendMessage( HWND ...

    Message,MessageQueue,Looper,Handler详解

    ### Message,MessageQueue,Looper,Handler详解 #### 一、几个关键概念 ##### 1、MessageQueue:消息队列 MessageQueue是一种数据结构,顾名思义,它充当了一个消息队列的角色,用来存放各种消息对象。每一个线程...

    END_MESSAGE_MAP宏的内部实现原理

    ### END_MESSAGE_MAP宏的内部实现原理深度解析 在深入探讨`END_MESSAGE_MAP`宏的内部实现之前,我们首先需要理解MFC(Microsoft Foundation Classes)框架如何处理Windows消息。MFC框架设计了一套高效的机制来映射...

    js中窗口的postMessage方法1

    window.postMessage() 方法的语法为:`otherWindow.postMessage(message, targetOrigin, [transfer])`,其中 `otherWindow` 是其他窗口的一个引用,`message` 是要发送到其他窗口的数据,`targetOrigin` 是指定哪些...

    Android的Message机制(Handler、Message、Looper)

    ### Android的Message机制详解 #### 一、概述 在Android开发中,消息机制是一个非常重要的概念,它由多个核心组件组成,包括`Handler`、`Message`、`Looper`等。这一机制支持了应用程序内部以及应用程序间的通信。...

    关于alert,message,confirm三种弹出层的说明

    关于alert、message、confirm三种弹出层的说明 alert、message、confirm三种弹出层是JavaScript中常用的交互方式,它们都是基于JQuery拓展控件SimpleModal实现的。SimpleModal提供了弹出层的主要功能,我们只要调节...

    原生JS消息提示特效插件Message.js.zip

    Message.js 是一个专为实现这种功能而设计的原生JavaScript插件。这个插件允许开发者轻松地在网页上添加各种样式和动画效果的消息提示,无需依赖其他大型库如jQuery,从而提高页面加载速度并降低资源消耗。 Message...

    PostMessage 后台模拟按键 MOUSE VC原码

    `PostMessage`函数就是这样的一个工具,它允许程序在目标窗口的message queue中放置一个消息,而不是立即处理它。这个功能在自动化测试、游戏外挂、远程控制软件等领域有广泛应用。在VC++(Microsoft Visual C++)...

Global site tag (gtag.js) - Google Analytics