ASSIGN - writable_exp
Short Reference
ABAP Syntax ... NEW
class( ... )- attr | CAST type(
... )- dobj
| table_exp ...
ABAP_ALTERNATIVES:
1 ... NEW class( ... )- attr | CAST type( ... )- dobj
2 ... table_exp
What does it do? The operand position after ASSIGN is a
result position in which
writable expressions can be
specified.
Latest notes: Writable expressions can be specified for the memory areas
but no other expressions, since these can have a non-temporary result.
Assigning a temporary data object to a field symbol would not make
sense.
ABAP_ALTERNATIVE_1
... NEW class( ... )->attr | CAST type( ...
)- dobj
What does it do? This alternative to specifying the memory area
mem_area of the statement
ASSIGN assigns the result of a
constructor expression
NEW class( ... )- attr
CAST type( ... )- dobj
to the field symbol. The same rules apply as when
statically specifying the memory
area, but no offsets/lengths can be specified.
Latest notes: Assigning an attribute attr of an object created
using NEW to a field symbol persists this object as long as the
field symbol points to the attribute.
In this variant, the constructor expression in question sets the
return code sy-subrc , not the statement ASSIGN .
If the object is created successfully, the instance operator NEW
sets the return code sy-subrc to 0.
The casting operator CAST does not set the return code
sy-subrc .
Example
Constructor expression with NEW in the specified memory area of
the statement ASSIGN . The assignment of the attribute attr
to a field symbol persists the object.
CLASS class DEFINITION.
PUBLIC SECTION.
DATA attr TYPE string VALUE 'foo'.
ENDCLASS.
START-OF-SELECTION.
ASSIGN NEW class( )->attr TO FIELD-SYMBOL(<(><<)>fs>).
cl_demo_output=>display( <(><<)>fs> ).
Example
Constructor expression with CAST in the specified memory area of
ASSIGN statements.
TYPES: BEGIN OF t_struc,
col1 TYPE i,
col2 TYPE i,
END OF t_struc.
DATA dref TYPE REF TO data.
DATA struc TYPE t_struc.
dref = NEW t_struc( ).
ASSIGN CAST t_struc( dref )->col1 TO FIELD-SYMBOL(<(><<)>col1>).
ASSIGN CAST t_struc( dref )->col2 TO FIELD-SYMBOL(<(><<)>col2>).
ABAP_ALTERNATIVE_2 ... table_exp
What does it do? This alternative way of specifying the memory area
mem_area of the statement
ASSIGN assigns the result of the
table expression
table_exp or
table expression chaining to the field
symbol. The result of a table expression in these positions is always a
temporary field symbol.
If a single table expression is specified, or a
chaining whose last position is a table
expression, the entire row that was found is assigned to the field
symbol.
If a chaining is specified whose last
position is a structure component after a structure component selector,
this component is assigned to the field symbol. No offsets/lengths,
however, can be specified for the structure component here.
In this variant, the statement ASSIGN sets the return code
sy-subrc .
If the specified row is not found, sy-subrc is set to 0.
If the row is not found, sy-subrc is set to 4, except when the
end of the table is reached in binary searches in
sorted tables . In this case,
sy-subrc is set to 8.
If the assignment is not successful, the field symbol keeps its
previous state. In this variant, it is therefore not enough just to
evaluate the predicate expression
fs IS ASSIGNED ;
sy-subrc needs to be checked as well.
In the case of this variant of the statement ASSIGN , the
addition CASTING can only be specified
in assignments to an existing field symbol and not in
inline declarations , and only as
a standalone addition. The addition RANGE
cannot be specified.
Latest notes: The statement ASSIGN used with this variant to
specify the memory area can be viewed as a different form of
READ TABLE ... ASSIGNING ... .
More specifically, the value sy-subrc is set as in the statement
READ TABLE and
the addition CASTING cannot be
specified after an inline
declaration for the field symbol.
Unlike READ TABLE , chainings can be used here to assign
components of read rows or rows from nested internal tables.
The constructor operators VALUE and REF used to control
the result of the table expression cannot
be used here.
If the specified row is not found, an exception is not raised (unlike
in other uses of table expressions).
Example ABAP Coding This example works in the same way as the example for
READ TABLE ... ASSIGNING ... .
Here, the READ statement is replaced by an ASSIGN
statements and the required component is assigned directly.
PARAMETERS: p_carrid TYPE sflight-carrid,
p_connid TYPE sflight-connid,
p_fldate TYPE sflight-fldate.
DATA sflight_tab TYPE SORTED TABLE OF sflight
WITH UNIQUE KEY carrid connid fldate.
SELECT *
FROM sflight
INTO TABLE sflight_tab
WHERE carrid = p_carrid AND
connid = p_connid.
IF sy-subrc = 0.
ASSIGN sflight_tab[ KEY primary_key COMPONENTS
carrid = p_carrid
connid = p_connid
fldate = p_fldate ]-price
TO FIELD-SYMBOL(<(><<)>price>).
IF sy-subrc = 0.
<(><<)>price> = <(><<)>price> * '0.9'.
ENDIF.
ENDIF.
Documentation extract taken from SAP system, � Copyright SAP AG. All rights reserved