Je vous conseille d’aller lire cet article à sa nouvelle adresse : MOVE-CORRESPONDING à la sauce objet

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 :

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 ;-)