Quelquepart

Blog d'un développeur ABAP

Vous êtes ici : Accueil>Général>MOVE-CORRESPONDING à la sauce objet

MOVE-CORRESPONDING à la sauce objet

Rédigé par Sébastien Hermann dans Général -

L'instruction

MOVE-CORRESPONDING A TO B

permet de copier les champs d'une structure A vers les champs d'une structure B, pour peu qu'ils portent le même nom. Les champs de A n'existant pas dans B sont ignorés.

Vous pouvez écrire la même chose en utilisant field symbol et abap objet :

DATA : lo_descr TYPE REF TO cl_abap_structdescr,
       ls_compx type abap_compdescr.
lo_descr ?= cl_abap_typedescr=>describe_by_data( A ).
LOOP AT lo_descr->components INTO ls_compx.
  CONCATENATE 'A-' ls_compx-name INTO lv_fsname.
  ASSIGN (lv_fsname) TO <lfs_component1>.
  CHECK sy-subrc = 0
  CONCATENATE 'B-' ls_compx-name INTO lv_fsname.
  ASSIGN (lv_fsname) TO <lfs_component2>.
  CHECK sy-subrc = 0
  <lfs_component2> = <lfs_component1>.
ENDLOOP.

Et la vous dites : "Waou c'est merveilleux, mais pourquoi irai-je remplacer une ligne de code simple, lisible et éprouvée contre 10 lignes aux performances incertaines ?"

Dans l'exemple simpliste présenté ici cela n'a aucun intérêt. En revanche, quand les structures A et B sont assez larges, et qu'il y a des règles spéciales à appliquer sur certains champs, cela peut s'avérer intéressant : quand vous ne voulez pas écraser un champs de B par son homonyme de A ou que vous voulez mettre un champs de A dans un champs portant un autre nom dans B...

A ne surtout pas utiliser de manière systématique, mais peut être utile lorsque les règles sont complexes ;-)

Les commentaires sont fermés.