GET REFERENCE OF dobj INTO dref.
This statement gets a reference
to a data object
dobj and places it into the reference variable
The reference variable
dref must be declared as a data reference variable.
The static type of the data reference variable must be more general than or the same as the data type
dobj, according to the
conversion rules for reference variables.
The data object is specified directly and in accordance with the rules described in the section
Data Objects in Operand Positions. If you have
an offset/length specification, the data type
dobj here must not be
GET REFERENCEstatement and the addition
REFERENCE INTOare the only options available to statements for internal tables to generate stack references. Stack referencescan become invalid if the referenced data object is deleted.
When applied to data objects in the heap
GET REFERENCEcreates memory-retaining heap references.
The content of two reference variables filled with
GET REFERENCEis only the same if the remaining administration information is the same, apart from the referenced data objects. For example, a reference that is retrieved directly by specifying the data object is not the same as a reference that is retrieved by specifying a field symbol if this has a different data type due to a casting.
When an internal table has a header line, a data reference variable can only point to this or the
table body. In the
GET REFERENCE statement, the name of an internal table with a header line addresses the header
line. To address the table body,
must be appended to the name in the usual way. A dereferenced data reference to which a table body is assigned behaves in the same way in operand positions as a table without a header line.
The context in which a data reference is retrieved using
GET REFERENCEdetermines whether the referenced data object can be changed. If the data object can be changed in the context of
GET REFERENCE, it can be changed at any position, also using the reference. For example, a reference to a private attribute of a class can be retrieved in a method, and passed to external destinations. Since the attribute can be changed in the class, it can also be changed outside of the class using the reference. Conversely, a constant or a non-changeable input parameter can also be made non-changeable by passing on its reference.
A data reference retrieved using
GET REFERENCEthat references a data object in the shared objects memory can also be stored in a closed area instance version. The restrictions described for the addition AREA HANDLE of the statement
CREATE DATAmust not be ignored.
Creating data references to the individual characters of a data object
and storing them in an internal table. Direct dereferencing at an operand position is possible because the data reference is fully typed.
TYPES c1 TYPE c LENGTH 1. DATA: dref TYPE REF TO c1, dref_tab LIKE TABLE OF dref. DATA: text TYPE c LENGTH 10 VALUE '0123456789', off TYPE i. DO 10 TIMES. off = sy-index - 1. GET REFERENCE OF text+off(1) INTO dref. APPEND dref TO dref_tab. ENDDO. LOOP AT dref_tab INTO dref. WRITE / dref->*. ENDLOOP.
Cause: The data object specified after
INTOis not a reference variable.
GET REFERENCEis not permitted for a substring.