GET REFERENCE
Short Reference
ABAP Syntax_11 GET REFERENCE OF dobj INTO dref.
What does it do? This statement sets the
reference in the reference variable dref in a way that makes
it point to the data object dobj . The following can be specified
for dref :
An existing 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
assignment rules for reference variables
.
An inline declaration DATA(var) . This
declares a data reference variable whose static type is the data type of
dobj . The data type of dobj must be statically
recognizable as complete or as the generic type data . Field
symbols and formal parameters with other generic types, in particular
any , are not possible.
The data object is specified directly and in accordance with the rules
described in the section Reader
Positions . If offsets/lengths ( +off(len)
) are specified, the data type dobj here cannot be
string or xstring .
Latest notes: Alongside the reference operator
REF and the addition
REFERENCE INTO , the statement
GET REFERENCE is the only option available to statements for internal
tables to create stack references
. Stack references can become invalid if the referenced data
object is deleted.
When applied to data objects in the heap
GET REFERENCE creates memory-retaining
heap references .
The content of two reference variables filled with
GET REFERENCE
is 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 statement GET
REFERENCE , 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.
If references are set using GET REFERENCE , permission to access
the data object in question is only checked at the position of the
statement. After that, the references can be passed on to any
destination and the associated data objects can be accessed from any
position using the references. To prevent access to private and
read-only attributes using references outside classes, do not publish
references to these attributes externally. A constant or read-only input
parameter, however, can never be made modifiable by passing its
reference.
A data reference retrieved using GET REFERENCE that 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 DATA must be respected.
The reference operator
REF functions like the
statement GET REFERENCE and can be used in
general expression positions .
Example ABAP Coding Creates data references to the individual characters of
a data object text and saves 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.
cl_demo_output=>write( |{ dref->* }| ).
ENDLOOP.
Runtime Exceptions
Non-catchable Exceptions
Reason for error: The data object specified after INTO is not a
reference variable.
Runtime error: GET_REF_REFERENCE_EXPECTED
Reason for error: GET REFERENCE is not permitted for a substring.
Runtime error: GET_REF_SUBSTRING_NOT_ALLOWED
Documentation extract taken from SAP system, � Copyright SAP AG. All rights reserved