A partir de la versión 7.57, la nueva adición ELSE UNASSIGN se puede especificar en varios casos de la instrucción ASIGNARcomo asignaciones/accesos dinámicos, asignaciones de componentes dinámicos o expresiones de tablas.
Una asignación pasa el contenido de un origen a un objeto de datos de destino. La sintaxis general es
ASIGNAR mem_area A
Que asigna el área de memoria especificada usando mem_area al símbolo del campo
El símbolo de campo “apunta a” el contenido del campo mem_area en tiempo de ejecución, es decir, cada cambio en el contenido de mem_area se refleja en y viceversa. Si el símbolo de campo no está escrito (ver SÍMBOLO DE CAMPO ), el símbolo del campo adopta el tipo y los atributos del campo mem_area en tiempo de ejecución, particularmente la salida de conversión. De lo contrario, cuando se realiza la asignación, el sistema verifica si el tipo de campo mem_area coincide con el tipo del símbolo de campo. Después de una asignación exitosa, el símbolo de campo se refiere al área de memoria asignada y se puede usar en posiciones de operandos.
El área de la memoria mem_area se puede especificar inactivamenteen el que se asigna un objeto de datos conocido estáticamente o parte de dicho objeto, o dinamicamenteque se utiliza para acceder dinámicamente a objetos de datos, especialmente para acceso dinámico a atributos de clases e interfaces o componentes de estructuras. En tales variantes, la declaración ASSIGN establece el código de retorno «sy-subrc». Si la asignación tiene éxito, sy-subrc se establece en 0, de lo contrario, en 4. En estas variantes, no se produce ninguna excepción en caso de una asignación fallida.
Además, la variante para especificar el área de memoria de la declaración ASSIGN también puede asignar el resultado de la expresión de la tabla table_exp o expresión de tabla encadenada al símbolo de campo. El resultado de una expresión de tabla en estas posiciones es siempre un símbolo de campo temporal. En esta variante, la declaración ASSIGN establece el código de retorno sy-subrc. Si se encuentra la línea especificada, sy-subrc se establece en 0. Si la asignación no tiene éxito, sy-subrc se establece en 4, excepto cuando se alcanza el final de la tabla en búsquedas binarias en tablas ordenadas. En este caso, sy-subrc se establece en 8.
Las variantes difieren en cuanto al comportamiento del sistema después de una asignación fallida. En tal caso, el comportamiento depende de la asignación mem_area y sobre la adición DE LO CONTRARIO NO ASIGNAR:
Algunas especificaciones dinámicas no válidas en la asignación de componentes dinámicos no establecen sy-subrc sino que generan una excepción.
Si una asignación daría lugar a accesos ilegales a la memoria, se genera una excepción para las instrucciones ASSIGN tanto estáticas como dinámicas.
Después de una asignación exitosa, la siguiente asignación no es exitosa debido a una especificación dinámica incorrecta.
FINAL(field) = `exists`.
ASSIGN ('field') TO FIELD-SYMBOL(<fs>) ELSE UNASSIGN.
ASSERT sy-subrc = 0 AND <fs> IS ASSIGNED.
ASSIGN ('exists') TO <fs> ELSE UNASSIGN.
ASSERT sy-subrc = 4 AND <fs> IS NOT ASSIGNED.
aquí sy-subrc se establece en 4 y el símbolo de campo que se asignó antes no está asignado. Se produce el error de tiempo de ejecución.
Para obtener más información sobre la asignación en ABAP, consulte Documentación de palabras clave ABAP y los enlaces proporcionados en el texto.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073