
Pour accéder à un composant d'une structure, vous devez placer un signe moins (-) entre le nom de la structure et le nom du composant.
Remarque
En accédant ainsi à un composant de structure, vous pouvez l'utiliser à n'importe quelle position d'opérande dans laquelle vous pouvez utiliser une variable du même type. La composante airport_from_id de la connexion de structure dans l'exemple ci-dessus est de type /DMO/AIRPORT_FROM_ID. Par conséquent, vous pouvez utiliser ce composant à n'importe quelle position d'opérande dans laquelle vous pouvez utiliser une variable simple de type /DMO/AIRPORT_FROM_ID ; non seulement à gauche d'une valorisation comme dans l'exemple, mais également à droite, dans le transfert de paramètres d'un appel de méthode, dans la clause INTO ou la clause WHERE d'une instruction SELECT, etc.

Si le composant d'une structure est lui-même une structure, vous accédez aux sous-composants en utilisant à nouveau le sélecteur de composant après le nom du composant principal. La première valorisation de l'exemple accède au composant MSGTY de MESSAGE, qui est lui-même un composant de la structure imbriquée CONNECTION_NESTED.
Astuce

L'expression VALUE #( ) est un moyen élégant d'affecter des valeurs à un objet de données structuré.
Si vous voulez renseigner une structure entière, vous pouvez adresser chaque composant individuellement comme vous l'avez vu dans l'exemple précédent.
Cependant, vous pouvez également utiliser une expression VALUE #( ) pour remplir la structure. L'expression construit une structure, la renseigne avec des valeurs et affecte la structure renseignée à une variable, dans ce cas connection. Le symbole dièse (#) indique à l'environnement d'exécution ABAP de construire une structure du même type que la variable cible connection. Dans les parenthèses, vous répertoriez les composants de la structure que vous voulez renseigner (il n'est pas nécessaire qu'ils soient tous) et leur affectez une valeur.
Lorsque vous renseignez une structure de cette manière, le système d'exécution supprime toutes les valeurs existantes de la structure avant de la renseigner avec les valeurs de votre expression.
Remarque

En ABAP, vous pouvez uniquement copier le contenu d'une structure directement dans une autre structure à l'aide de la notation <target structure> = <source structure> si les deux types de structure sont compatibles. Ce n'est généralement le cas que si les deux structures ont le même type. Si les structures ont des types différents, deux choses peuvent se produire :
- Si l'une des structures a un composant autre qu'un caractère à une position où l'autre structure a un composant de type caractère, l'affectation directe entraîne une erreur de syntaxe.
- Si les deux structures correspondent à des caractères ou, en d'autres termes, si les deux structures sont constituées uniquement de composants de type caractère, l'affectation directe est techniquement possible. Mais généralement, le résultat sera faux.
Dans l'exemple, la structure source et la structure cible sont des caractères. Par conséquent, l'affectation directe est techniquement possible. Mais comme elles ne sont pas compatibles, le résultat est erroné : le contenu du composant carrier_name est copié dans le composant message dans la structure cible.
Comme il n'y a pas d'erreur de syntaxe, vous devez être très prudent lorsque vous travaillez avec des structures de type caractères non compatibles.
Lorsque vous copiez des données entre des structures, vous voulez généralement copier des informations d'une zone dans la zone correspondante de la structure cible - airport_from_id vers airport_from_id, airport_to_id vers airport_to_id, etc. Pour ce faire, utilisez l'expression CORRESPONDING dans ABAP. Cela affecte les valeurs de <source_structure> aux composants correspondants, c'est-à-dire aux composants de nom identique de <target_structure>. Vous devez vous souvenir des points suivants :
- Les zones doivent avoir des noms identiques.
- Les composants ne doivent pas nécessairement avoir la même position ou séquence dans les deux structures.
- Si les zones ont des types différents, ABAP tente une conversion de type en fonction de l'ensemble de règles prédéfini.
L'expression CORRESPONDING dans l'exemple crée une structure de type st_connection_nested. Les valeurs des composants portant le même nom provenant de la structure connection sont ensuite affectées à cette structure. Toutes les autres composantes restent initiales. La structure ainsi construite est ensuite affectée à la structure connection_nested. Cela affecte des valeurs initiales à la composante message.







