ASSIGN - casting_spec
Short Reference
ABAP Syntax ABAP_KEY ... { }
| { CASTING { { }
| {TYPE type|(name)}
| {LIKE dobj}
| {[TYPE p] DECIMALS dec}
| {TYPE HANDLE handle} } }
| { obsolete_casting } ... .
ABAP_ALTERNATIVES:
1 ... { }
2 ... CASTING ...
What does it do? The casting_spec specification determines with the
data type that handles the memory area
mem_area assigned to the field symbol if a statement contains the
field symbol at an operand position. Either the addition CASTING
can be specified or nothing at all. Outside of classes, the obsolete
variants obsolete_casting are
also possible.
In assignments of table
expressions , the first alternative can be used without further
additions.
ABAP_ALTERNATIVE_1 ... { }
What does it do? If nothing is specified for casting_spec , the
field symbol is given the data type of the data object used in
mem_area and the assigned memory
area is handled accordingly. This data type must
match the typing
of the field symbol.
ABAP_ALTERNATIVE_2 ... CASTING ...
ABAP_ADDITIONS:
1 ... { }
2 ... TYPE type|(name)
3 ... LIKE dobj
4 ... [TYPE p] DECIMALS dec
5 ... TYPE HANDLE handle
What does it do? If you use the addition CASTING in
casting_spec , the memory area is handled as if it had the type
specified by CASTING . When specifying CASTING , the field
symbol must not be typed with the obsolete STRUCTURE addition of
the FIELD SYMBOLS statement.
Casting can either take place implicitly using the typing of the field
symbol or explicitly using one of the additions TYPE , LIKE
or DECIMALS . In explicit castings, the field symbol cannot be
specified in full; instead it must be specified generically.
Latest notes: If the data type specified by CASTING is
deep , the deep components have to appear in the
assigned memory area in exactly the same way in terms of type and
position. In particular, this means that individual
reference variables can be
assigned to only one field symbol that is typed as a reference variable
by the same static type .
The static check of the ASSIGN statement using the CASTING
addition is done is such a way that all errors are identified for
Unicode and non- Unicode systems and
for all platforms, regardless of the system and the platform on which
the check is run. A runtime check only checks the data against the
current system or the current platform. These checks likewise always
take place if the field symbol fs is typed with the
obsolete STRUCTURE addition of the FIELD SYMBOLS
statement.
If the addition CASTING is used, the result of the ASSIGN
statement may be platform-dependent. The internal
byte order of characters in Unicode systems can
for example be platform-dependent, which becomes obvious during a cast
to a byte-like data type.
The memory area mem_area must meet
the alignment requirements of the data type
specified by the casting. When flat elementary data types are specified,
for example, the memory address mem_area must be divisible as
follows:
Divisible by 2 for the character-like data types c , n ,
d , and t (in Unicode systems).
By 4 for the numeric data type i .
By 8 for the numeric data types
int8 ,
f and decfloat16 .
By 16 for the numeric data type decfloat34 .
ABAP_ADDITION_1 ... { }
What does it do? If the CASTING addition is specified without any
further additions, the assigned memory area is cast to the type of the
field symbol. The field symbol must be either fully typed, or typed with
one of the generic predefined ABAP types c , n , p ,
or x .
ABAP_ADDITION_2 ... TYPE type|(name)
What does it do? After TYPE , a data type type can be
specified directly, or a character-like data object name in
parentheses, which must contain the name of a data object in uppercase
when the statement is executed. The assigned memory area is cast to the
specified type. The data type specified after TYPE cannot be
generic. The exceptions to this rule are the predefined ABAP types
c
, n , p and x . However, table categories cannot
be specified, nor REF TO .
If a generic character-like type c or n is specified
after TYPE , the length of the assigned memory area must be a
multiple of the length of a character in the memory when the statement
is executed in Unicode programs.
Example ABAP Coding In the following example, one of the two ASSIGN
statements produces a runtime error, since the alignment requirement for
the type c is not met. Which of the statements produces the
runtime error is not generally defined and depends on the preceding
declarations.
DATA hex TYPE x LENGTH 10.
FIELD-SYMBOLS <(><<)>fs> TYPE any.
ASSIGN hex+0(4) TO <(><<)>fs> CASTING type c.
ASSIGN hex+1(4) TO <(><<)>fs> CASTING type c.
ABAP_ADDITION_3 ... LIKE dobj
What does it do? The following can be specified after LIKE :
A data object dobj based on the rules for
TYPES ... LIKE . The assigned memory
area is cast to the data type of the data object.
A generically typed field symbol.
If a memory area is assigned to the field symbol, the data type used to
handle the memory area is the object of the cast.
If no memory area is assigned to the field symbol, a
standard type produced by the following
rules is used:
any , c , clike , csequence , data , and
simple produce c with length 1.
decfloat produces decfloat34 .
n produces n with length 1.
numeric and p produce p with length 8 and no
decimal places.
x and xsequence produce x of the length 1.
Generic table types raise an exception of the class
CX_SY_ASSIGN_CAST_ILLEGAL_CAST .
A generically typed formal parameter.
If an actual parameter is assigned to the formal parameter, the data
type of this parameter is the object of the cast.
If no actual parameter is assigned to an optional formal parameter, its
assigned
standard type is used.
Latest notes:s You can use LIKE to refer to the data objects in
its own program, and also to the public attributes of global classes.
The standard type for generically typed field symbols specified after
CASTING LIKE displays some differences to the
standard type for generic field symbols and
formal parameters (length 1 not 4 if any and data are used
and no standard type for generic table types).
If a generically typed field symbol is specified after CASTING
LIKE , a memory area should be assigned to it when the statement is
executed.
ABAP_ADDITION_4 ... [TYPE p] DECIMALS dec
What does it do? A numeric data object dec must be specified after
DECIMALS . The assigned memory area is cast to the data type p
, whereby the number of decimal
places is determined by the content of dec . The number of
decimal places must not exceed the number of
decimal digits . TYPE does not
need to be specified for DECIMALS . If TYPE is used, only
the data type p (which is used anyway) can be specified.
Example ABAP Coding Calculating the quotient from the packed number pack
and the field symbol pack demonstrates the effect of
casting with the addition DECIMALS . Factors between 10 and 100
000,000 are determined. When using pack in operand
positions, a different value is used than when using pack .
DATA output TYPE TABLE OF string WITH EMPTY KEY.
DATA pack TYPE p LENGTH 8 DECIMALS 0 VALUE '12345678'.
FIELD-SYMBOLS <(><<)>pack> TYPE p.
DO 8 TIMES.
ASSIGN pack TO <(><<)>pack> CASTING DECIMALS sy-index.
APPEND CONV string( pack / <(><<)>pack> ) TO output.
ENDDO.
cl_demo_output=>display( output ).
ABAP_ADDITION_5 ... TYPE HANDLE handle
What does it do? After TYPE HANDLE , a reference variable handle
of the static type of the
CL_ABAP_DATADESCR class or its subclasses is specified and it
points to a type description object of
the RTTS . The assigned memory area is
cast to the type described by the type description object.
The addition CASTING TYPE HANDLE cannot be used with the
addition RANGE .
Latest notes: The type description object object may have been created
using the RTTS methods on existing data objects, or using the
definition of a new data type.
Documentation extract taken from SAP system, � Copyright SAP AG. All rights reserved