
Para acceder a un componente de una estructura, debe colocar un signo menos (-) entre el nombre de la estructura y el nombre del componente.
Nota
Al acceder a un componente de estructura de este modo, puede utilizarlo en cualquier posición de operando en la que pueda utilizar una variable del mismo tipo. El componente airport_from_id de la conexión de estructura en el ejemplo anterior es del tipo /DMO/AIRPORT_FROM_ID. En consecuencia, puede utilizar este componente en cualquier posición de operando en la que pueda utilizar una variable simple del tipo /DMO/AIRPORT_FROM_ID; no solo en la parte izquierda de una valoración como en el ejemplo, sino también en la parte derecha, en el paso de parámetros de una llamada de método, en la cláusula INTO o la cláusula WHERE de una sentencia SELECT, etc.

Si el componente de una estructura es en sí mismo una estructura, accederá a los subcomponentes utilizando de nuevo el selector de componentes después del nombre del componente principal. La primera valoración en el ejemplo accede al componente MSGTY de MESSAGE, que a su vez es un componente de la estructura anidada CONNECTION_NESTED.
Consejo

La expresión VALUE #( ) es una forma elegante de asignar valores a un objeto de datos estructurado.
Si desea rellenar toda una estructura, puede dirigirse a cada componente individualmente como ha visto en el ejemplo anterior.
Sin embargo, también puede utilizar una expresión VALUE #( ) para rellenar la estructura. La expresión construye una estructura, la rellena con valores y asigna la estructura rellenada a una variable, en este caso connection. El signo de almohadilla (#) indica al entorno de tiempo de ejecución ABAP que construya una estructura con el mismo tipo que la variable de destino connection. Entre paréntesis, enumere los componentes de la estructura que desea rellenar (no tiene que ser todos ellos) y asígneles un valor.
Cuando cumplimente una estructura de este modo, el sistema de tiempo de ejecución elimina todos los valores existentes de la estructura antes de la recarga con los valores de su expresión.
Nota

En ABAP, solo puede copiar el contenido de una estructura directamente en otra estructura utilizando la notación <target structure> = <source structure> si los dos tipos de estructura son compatibles. Este normalmente solo es el caso si ambas estructuras tienen el mismo tipo. Si las estructuras tienen diferentes tipos, pueden suceder dos cosas:
- Si una de las estructuras tiene un componente que no es de carácter en una posición en la que la otra estructura tiene un componente de carácter, la asignación directa provoca un error de sintaxis.
- Si ambas estructuras son similares a caracteres o, en otras palabras, ambas estructuras constan solo de componentes similares a caracteres, la asignación directa es técnicamente posible. Pero por lo general, el resultado será incorrecto.
En el ejemplo, la estructura de origen y la estructura de destino son similares a caracteres. Por lo tanto, la asignación directa es técnicamente posible. Pero como no son compatibles, el resultado es incorrecto: El contenido del componente carrier_name se copia en el componente message en la estructura de destino.
Debido a que no hay ningún error de sintaxis, debe tener mucho cuidado al trabajar con estructuras de caracteres no compatibles.
Cuando copia datos entre estructuras, normalmente desea copiar información de un campo en el campo correspondiente de la estructura de destino - airport_from_id a airport_from_id, airport_to_id a airport_to_id, etc. Para lograr esto en ABAP, utilice la expresión CORRESPONDING. Esto asigna valores de <source_structure> a los componentes correspondientes, es decir, componentes con el mismo nombre de <target_structure>. Debe recordar los siguientes puntos:
- Los campos deben tener nombres idénticos.
- Los componentes no tienen que estar en la misma posición o secuencia en las dos estructuras.
- Si los campos tienen diferentes tipos, ABAP intenta una conversión de tipo según el conjunto de reglas predefinido.
La expresión CORRESPONDING del ejemplo crea una estructura del tipo st_connection_nested. Los valores de los componentes con el mismo nombre de la estructura connection se asignan a esta estructura. Todos los demás componentes siguen siendo iniciales. La estructura así construida se asigna a la estructura connection_nested. Esto asigna valuesvalores iniciales al componente message.







