Unter-Templates werden wie das Haupt-Template mit tt:template definiert.
<tt:template
name=“tmpl“>
[<tt:context>
[<tt:root
name="root1" [[line-]type=...] />
<tt:root name="root2" [[line-]type=...] />
...]
[<tt:parameter
name="para1" [[s-|d-]val="def1"] [kind="knd1"] />
<tt:parameter name="para2" [[s-|d-]val="def2"] [kind="knd2"] />
...]
[<tt:variable
name="vari1" [[s-|d-]val="val1"] />
<tt:variable
name="vari2" [[s-|d-]val="val2"] />
...]
</tt:context>]
...
</tt:template>
Über name muss ein eindeutiger Name tmpl für das Unter-Template definiert werden.
In einem Unter-Template können optional eigene Daten deklariert werden, indem mit tt:context ein Kontext für tt:root–, tt:variable– und tt:parameter-Befehle definiert wird. Der Befehl tt:context ist nur in Unter-Templates und die Befehle tt:root, tt:variable– und tt:parameter sind innerhalb eines Templates nur innerhalb von tt:context erlaubt.
Analog zum Haupt-Template gibt es drei Arten von Daten, die alle in einem Namensraum liegen:
· Datenwurzeln
Die mit tt:root deklarierten Datenwurzeln haben für das Unter-Template genau die gleiche Bedeutung wie die auf der höchsten Hierarchiestufe der Transformation deklarierten Datenwurzeln für das Haupt-Template. D.h. sie spannen ebenfalls unabhängige Baumstrukturen auf. Im Unterschied zu den Datenwurzeln des Haupt-Templates bilden die lokalen Datenwurzeln von Unter-Templates keine Schnittstelle der Simple Transformation zum ABAP-Programm, sondern eine Schnittstelle zum einbindenden Template, an die mit tt:with-root ein ABAP-Datenobjekt angebunden werden kann.
Die Datenwurzeln des Unter-Templates können genau wie die des Haupt-Templates mit dem Attribut [line-]type typisiert werden.
· Parameter
Die mit tt:parameter deklarierten Parameter sind Formalparameter des Unter-Templates, an die mit tt:with-parameter ein Wert übergeben werden kann. Ansonsten gilt das Gleiche wie für die Parameter des Haupt-Templates.
· Variablen
Die mit tt:variable deklarierten Variablen sind lokale Variablen des Unter-Templates und nur dort sichtbar. Ansonsten gilt das Gleiche wie für die Variablen des Haupt-Templates.
In Unter-Templates können keine lokalen Typen mit tt:type definiert werden.
Ein Unter-Template ohne eigene Datenwurzeln spannt eine eigene Baumstruktur von Datenknoten auf, deren Wurzelknoten der aktuelle Knoten an der Aufrufstelle im aufrufenden Template ist. Voraussetzung für den Aufruf eines solcjen Templates ist, dass der aktuelle Knoten an der Aufrufstelle definiert ist. Zu Beginn des Unter-Templates ist dieser Wurzelknoten auch der aktuelle Knoten des Unter-Templates. In einem solchen Unter-Template kann der aktuelle Knoten wie für Haupt-Templates beschrieben gesetzt werden, ist aber im Gegensatz zu Haupt-Templates nie undefiniert. Datenknoten außerhalb der Baumstruktur des Unter-Templates können nicht adressiert werden. Insbesondere sind auch die Datenwurzeln des Haupt-Templates nicht über “.name“ ansprechbar.
Die Adressierung der Datenknoten eines Unter-Templates mit eigenen Datenwurzeln ist genau wie für das Haupt-Template beschrieben. Solange kein aktueller Knoten definiert ist, sind die Datenwurzeln des Unter-Templates über “name“ ansprechbar. Nach der Verschattung durch einen aktuellen Knoten sind sie nur noch über “.name“ ansprechbar.
Bildlich gesprochen arbeitet ein Unter-Template ohne eigene Datenwurzeln ausschließlich auf der Unterstruktur der Baumstruktur des Haupt-Templates, an deren Wurzelknoten es eingebunden wurde.