ABAP Keyword Documentation → ABAP − Reference → Text Repositories → Messages → MESSAGE
MESSAGE - msg
Other versions: 7.31 | 7.40 | 7.54
Syntax
... { tn }
| { tn(id) }
| { ID mid TYPE mtype NUMBER num }
| { oref [TYPE mtype] } ...
Alternatives
3. ... ID mid TYPE mtype NUMBER num ...
4. ... oref [TYPE mtype] ...
Effect
msg
specifies a message from the database table
T100 either by specifying id
and n
directly or by using the content of the data objects mid
and num
for the message class and the message number. Alternatively, an object reference variable oref
is specified whose
dynamic type implements the interface
IF_T100_MESSAGE. One of the possible message types
"A", "E", "I", "S", "W", or "X" must be specified, either by specifying t
directly or as content of the data object mtype
. This controls the
behavior of the message. An invalid type produces a syntax error or runtime error.
If the specified message is not found for the logon language of the current user, a search is made in the secondary language in AS ABAP and then in English. If it is still not found, the specified message type, message class, and message number are used as short text in uppercase letters and separated by a colon ":".
The system fields of the statement MESSAGE
are always supplied with the specified values.
Notes
-
The maximum length of a message is 269 and is determined from the short text of the message in the database table
T100 (with a maximum of 73 characters) including
up to four single-character placeholders &. These placeholders can
be replaced by strings with a maximum of 50 characters using the addition
WITH
). -
The extended program check checks the existence of statically specified messages.
Alternative 1
... tn ...
Effect
t
and n
are used to specify the single-character
message type and the three-digit message number directly in a row (static short form). The message class
must be specified with the addition MESSAGE-ID
in the statement that introduces the program.
Example
Displays the short text of the message with the number 014 from the message class SABAPDOCU as an information message.
REPORT rep MESSAGE-ID sabapdemos.
...
MESSAGE i014.
Alternative 2
... tn(id) ...
Effect
The same applies to t
and n
as to the static short
form. In the static long form, the message class is specified directly in parentheses using id
.
Note
Specifying the message class explicitly overrides the addition MESSAGE-ID
of the statement that introduces the program.
Specifying the message class in parentheses does not signify here that the content of id
is used. In fact, the message class is used that has the name that was specified directly with id
.
Example
As in the example for alternative 1, with the message class specified explicitly.
REPORT ...
...
MESSAGE i014(sabapdemos).
Alternative 3
... ID mid TYPE mtype NUMBER num ...
Effect
The message class, the message type, and the message number are specified as content of the data objects
mid
, mtype
, and num
(dynamic form). mid
and mtype
expect character-like
data objects that must contain the message class or the message type in uppercase letters. Invalid message
types raise a non-handleable exception. num
expects a data object of the type n
and length 3.
Note
Specifying the message class explicitly overrides the addition MESSAGE-ID
of the statement that introduces the program.
Example
As in the example for alternative 2, with the message and the message type specified dynamically.
DATA: mid TYPE sy-msgid VALUE 'SABAPDEMOS',
mtype TYPE sy-msgty VALUE 'I',
num TYPE sy-msgno VALUE '014'.
MESSAGE ID mid TYPE mtype NUMBER num.
Alternative 4
... oref [TYPE mtype] ...
Effect
For oref
, an object reference variable can be specified which, when the statement MESSAGE
is executed, points to an object whose class implements the system interface
IF_T100_MESSAGE. This in turn contains the
component interface IF_MESSAGE. oref
is a
functional operand
position. If oref
is specified, the addition
WITH
and the variant with INTO
are not allowed.
The statement MESSAGE
analyzes the components of the structured attribute T100KEY of the interface IF_T100_MESSAGE in the referenced object:
- The message class is taken from the component MSGID and the message number from the component MSGNO. If the messages is not found, a short text is generated that counts the message class and messages number used plus the placeholder texts.
-
The names of attributes of the object are taken from the components ATTR1 to ATTR4. The placeholders
"&1" to "&4" and "&" of the short text or "&V1&" to "&V4&" of the message
long text are replaced with the content of these attributes in accordance with rules of the addition
WITH
. If an attribute does not exist or an attribute cannot be converted to a placeholder text, the character "&" is added to the start and the end of the attribute name and used as a placeholder text. Initial components ATTR1 to ATTR4 produce initial placeholder texts.
The message type is either specified explicitly or determined implicitly.
-
The type is specified explicitly using
TYPE mtype
, wheremtype
expects a character-like data object containing a valid message type in uppercase letters. -
If
oref
points to an object that implements the system interface IF_T100_DYN_MSG and this is known statically, the additionTYPE
can be omitted and the message type in MSGTY is used.
Notes
-
If field symbols or formal parameters of the generic type
any
ordata
are specified fororef
, the variantMESSAGE text
is used, which has identical syntax. - This variant is mainly intended to be used with exception objects. If a global exception class implements the interface IF_T100_MESSAGE, the components of the structure T100KEY are filled in accordance with the definition of the associated exception text when such an exception is raised in the interface method GET_TEXT (which is implemented in the superclass CX_ROOT). In local exception classes, you must fill the components yourself. To do this, do not redefine the interface method GET_TEXT, but use the instance constructor instead.
- The system interface IF_T100_DYN_MSG includes IF_T100_MESSAGE and objects from classes that implement IF_T100_DYN_MSG can be used accordingly. IF_T100_MESSAGE is intended to be used on its own for statically predefined exception texts of exception classes and IF_T100_DYN_MSG enables exception objects to be associated with messages.
-
If the
TYPE
addition is omitted for an object with the system interface IF_T100_DYN_MSG, the additionTYPE oref->if_t100_dyn_msg~msgty
is added implicitly. -
For compatibility reasons, this variant can still be used for classes that only implement the interface
IF_MESSAGE. In this case, the interface methods GET_TEXT and GET_LONGTEXT are called automatically in
the referenced object and their return value is used as the short text or long text of the message.
In this case, the system fields
sy-msgid
andsy-msgno
are not filled specifically. The root class of all exception classes, CX_ROOT, implements the interface IF_MESSAGE. In exception classes that do not implement the interface IF_T100_MESSAGE, the interface methods GET_TEXT and GET_LONGTEXT get the exception texts of exception objects stored in OTR (Online Text Repository ), which then can be issued by using the variant of theMESSAGE
statement as a message.
Example
Sends a messages using an object of the class cls
created using the instance
operator NEW
that includes the system interface
IF_T100_DYN_MSG. The message is specified in full by interface attributes of the object.
CLASS cls DEFINITION.
PUBLIC SECTION.
INTERFACES if_t100_dyn_msg.
ALIASES:
t100_key FOR if_t100_message~t100key,
msgty FOR if_t100_dyn_msg~msgty.
METHODS constructor
IMPORTING msgid TYPE symsgid
msgno TYPE symsgno
msgty TYPE symsgty.
ENDCLASS.
CLASS cls IMPLEMENTATION.
METHOD constructor.
me->t100_key-msgid = msgid.
me->t100_key-msgno = msgno.
me->msgty = msgty.
ENDMETHOD.
METHOD if_message~get_text.
result = cl_message_helper=>get_text_for_message( me ).
ENDMETHOD.
METHOD if_message~get_longtext.
result = cl_message_helper=>get_longtext_for_message( me ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
MESSAGE NEW cls( msgid = 'SABAPDEMOS'
msgno = '001'
msgty = 'I' ) DISPLAY LIKE 'S'.