CORRESPONDING (Tabelle mit Defaultwert)

In dem Beitrag CORRESPONDING habe ich gezeigt, wie mit dem neuen Schlüsselwort CORRESPONDING Werte einer Struktur in eine andere übertragen werden können. Interessant dabei ist die Option, einen Defaultwert übergeben zu können, der in der Quellstruktur nicht gefüllt ist.

In diesem Beitrag zeige ich dir einen Codeschnipsel, der eine ganze Tabelle mit Corresponding überträgt.

Beispiel: Baumknoten ändern

Das GUI-Control CL_LIST_TREE_MODEL zur Darstellung eines Trees hat die Methode UPDATE_ITEMS mit der die einzelnen Felder eines Knotens geändert werden können.

Es könnte sein, dass eine Methode die Änderungen bereitstellen möchte, aber die ID des Knotens nicht weiß. Die Methode zur Änderung der ITEMS bekommt dann zum Beispiel folgendes:

obj->update_the_node( VALUE treemlitad(
    ( item_name = '1' 
      chosen    = abap_true
      u_chosen  = abap_true )
    ( item_name = '2' 
      text      = 'I changed!'
      u_text   = abap_true ) ) ).

Variante 1a

Die Knoten-ID (NODE_KEY) ist nicht gefüllt. Die Methode muss diese nun dazu mappen:

DATA(lt_items_upd) = VALUE treemlitad(
  FOR item IN it_items (
    VALUE #( BASE CORRESPONDING #( item )
                                   node_key = ‘MyNodeKey’ ) ) ) .

Variante 1b

Es kann anstelle eines festen Default-Wertes auch eine Bedingung verwendet werden:

DATA(lt_items_upd) = VALUE treemlitad(
  FOR item IN it_items (
    VALUE #( BASE CORRESPONDING #( item )
       node_key = COND #(
WHEN item-disabled = ' '
THEN 'MyNodeKey-Normal' 
ELSE 'MyNodeKey-Disabled' ) ) ) ).

Variante 2

Eine andere mögliche Variante, die Daten schnell mit der Knoten-ID anreichern zu können, ist diese hier:

DATA(lt_items_upd) = it_items.

MODIFY lt_items_upd 
  FROM VALUE treemlitef( node_key = 'MyNodeKey' ) 
  TRANSPORTING node_key 
  WHERE node_key = space.

Enno Wulff