• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
assign  ·  Assignments in ABAP  ·  ELSE UNASSIGN  ·  Technical Articles

ASIGNAR, DE LO CONTRARIO UNA ASIGNAR en ABAP

By s4pcademy 


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 [ELSE UNASSIGN].

Que asigna el área de memoria especificada usando mem_area al símbolo del campo . La referencia en un símbolo de campo se establece mediante la asignación de un área de memoria al símbolo de campo mediante la declaración «ASIGNAR» y se elimina mediante la declaración «UNASIGN» que inicializa el símbolo de campo. . La adición recién definida DE LO CONTRARIO NO ASIGNAR a la instrucción ASSIGN, anula la asignación del símbolo de campo si la asignación no es exitosa, es decir, en caso de que sy-subrc no sea inicial.

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:

  • Si una asignación estática no tiene éxito, sy-subrc no se establece. No se asigna ningún área de memoria al símbolo de campo. El símbolo de campo tiene el estado sin asignar después de la sentencia ASSIGN. La adicion DE LO CONTRARIO NO ASIGNAR se usa implícitamente y no debe especificarse.
  • Si una asignación dinámica, una asignación de componentes dinámicos, un acceso dinámico o una asignación de una expresión de tabla no tiene éxito, sy-subrc se establece en 4 u 8 y:
    • Si DE LO CONTRARIO NO ASIGNAR no se especifica, el símbolo de campo mantiene su estado anterior.
    • Si DE LO CONTRARIO NO ASIGNAR se especifica, no se asigna ningún área de memoria al símbolo de campo. El símbolo de campo tiene el estado sin asignar después de la sentencia ASSIGN.

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.

  • Una asignación de los operadores constructores NUEVO o CASO tiene éxito o conduce a una excepción y la adición DE LO CONTRARIO NO ASIGNAR no debe ser utilizado.

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.

Ejemplo

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.




ABAPASIGNARCONTRARIOuna

Artículos relacionados


#communication  ·  #leadership  ·  career growth  ·  employee growth  ·  Personal Insights
“Cuéntalo como es”: una estrategia de comunicación que ahorra tiempo y gana credibilidad.
XAMS
Simplificación de la gestión de identidades en su entorno SAP ABAP: descubra el poder de Xiting Central Workflows
#SAPEndorsedApps  ·  DataXStream  ·  multi channel order management  ·  order management  ·  Personal Insights  ·  SAPEndorsedapp
Simplificar las ventas para los clientes de SAP y lograr una mejor experiencia del cliente
Anuncio de Graph en SAP Integration Suite
Previo
Labs Talk Community: IA generativa y computación cuántica
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.