FIELD SYMBOLS
Introducción:
ABAP permite acceder a los objetos (data object) que hayan sido
declarados bien de forma estática (por el nombre que les hayamos
dado), o bien de forma indirecta, a través de un field symbol.
El field symbol es un nombre simbólico que nos permite operar con los
distintos campos (fields). En realidad se trata de un puntero cuyo
contenido es la dirección de un objeto (data object), es decir, el field
symbol apunta a un objeto (cualquier tipo de objeto). El sistema no
reserva espacio en memoria para un field symbol.
Características:
Todas las instrucciones con field symbols se ejecutan en los campos
asignados. Así, una sentencia MOVE (copiar) de un field symbol a otro
se ejecuta haciendo que el segundo field symbol apunte al mismo objeto
Podemos forzar un field symbol de un tipo para que sea compatible con
un objeto de otro tipo (casting).
Declaración:
Para declarar un field-symbol usamos la instrucción FIELD-SYMBOLS y le
damos un nombre que debe estar entre dos signos <…> (angle
brackets).
Asignación:
Para que el field symbol apunte a una variable primero declaramos la
variable y luego asignamos al field symbol la dirección de esa variable:
DATA x TYPE i.
ASSIGN x TO <f>.
<f> = 5.
WRITE: / x.
WRITE: / <f>.
columna1(1) TYPE c,
END OF estructura.
<f>-columna1 = <f>-columna2.
estructura-columna1 = estructura-columna2.
Acceso dinámico:
El field symbol permite acceder dinámicamente (en tiempo de
ejecución) a los distintos objetos que existen en SAP. De esta forma
podemos acceder a objetos cuyo nombre no se conoce hasta el
momento en que se ejecuta el programa:
END OF direccion.
WRITE: / <numero>.
En este caso asignamos al field symbol tan sólo los 4 dígitos que
corresponden al número.
Comprobación de asignación:
Para comprobar si un field symbol ha sido asignado correctamente
podemos usar la expresión lógica <f> IS ASSIGNED.
IF <f> IS ASSIGNED,
ENDIF.
UNASSIGN <f>.
Asignación dinámica:
Podemos asignar los componentes de una estructura a un field symbol
de forma dinámica:
WRITE. / <f>.
WRITE. / <f>.
FIELD-SYMBOLS <f>.
DO 1000 times.
ENDDO.