Makros

Noch einen Schritt weiter als Variablen hinsichtlich der Wiederverwendbarkeit gehen Makros. Mit ihnen lassen sich eigentliche parametrisierbare Funktionen innerhalb der Morph-Datei definieren. Wie Variablen werden sie ausserhalb des <rules>-Elementes definiert, in diesem Fall im <macros>-Tag:

<macros>
  <macro name="eindeutiger_name">
  <!-- Makro -->
  </macro>
  <!-- Weitere Makros -->
</macros>
<!-- <rules> ... -->

Ein Makro muss zwingend mit einem eindeutigen Namen (name=) versehen werden, damit es später im <rules>-Block aufgerufen werden kann.

Makros können einen beliebigen Block an Metamorph-Definitionen enthalten, also Literale mit ihren Funktionen, collectors sowie eine Kombination davon. Parameter werden wie Variablen in eckigen Klammern mit führendem Dollarzeichen geschrieben ($[param1]). Ein Beispiel eines einfachen Makros:

<macro name="makro1">
  <concat delimiter=" " name="$[ccName]" flushWith="$[abschickenMit]">
    <data source="$[dsSource]" >
      <case to="upper"/>
    </data>
  </concat>
</macro>

Makros werden mit dem Element <call-macro> aufgerufen. call-macro umfasst ein obligatorisches Attribut, der Name des Makros (name=). Alle weiteren Attribute werden als Argumente des Makros interpretiert. Das obige Makro wird also beispielsweise folgendermassen aufgerufen>

<combine name="name" value="${vorname} ${nachname}">
  <call-macro name="makro1" ccName="vorname" dsName="feldA" abschickenMit="nachname" />
  <data source="feldB" name="nachname"/>
</combine>