Show TOC Anfang des Inhaltsbereichs

Syntaxdokumentation Typdefinitionen  Dokument im Navigationsbaum lokalisieren

Die in einem ST-Programm verwendeten Datenwurzeln können, müssen aber nicht mit Typangaben versehen werden. Im allgemeinen werden hierfür Typen aus dem Repository (ABAP Dictionary, Typen globaler Klassen) verwendet, es können aber auch Typdefinitionen im ST-Programm selbst vorgenommen werden. Hierfür kann ein ST-Programm außerhalb eines Templates eine oder mehrere Definitionen von Typen mit der Anweisung tt:type enthalten. Die Syntax ist:

 

<tt:type name="..." [[line-]type="..." [length="..."] [decimals="..."]]
  [
extensible=extensible_flag]>
  [<tt:front>
     <tt:node name="..." [[line-]type="
..." [...]]
       [
extensible=extensible_flag]>
       [...]
     </tt:node>
     ...
   </tt:front>]
  [<tt:node name="..." [[line-]type="
..." [...]]
     [
extensible=extensible_flag]>
     [.
..]
   </tt:node>
  ...]
</tt:type>

 

Über das Attribut name wird ein symbolischer Name deklariert, über den der definierte Typ für die Typisierung von Datenwurzeln und in anderen Typdefinitionen verwendet werden kann.

Es können elementare, strukturierte und tabellarische Typen definiert werden, die teilweise oder vollständig generisch sein können. Weiterhin ist der Bezug auf global definierte Datentypen des Repository und auf mit tt:type definierte Typen des gleichen ST-Programms möglich. Referenztypen können nicht selbst definiert, aber über den Bezug auf Referenztypen des ABAP Repository angelegt werden.

Namensräume

Für die Angabe von Typen aus dem Repository und des gleichen ST-Programms müssen folgende XML-Namensräume des asXML-Formats verwendet werden:

      http://www.sap.com/abapxml/types/dictionary bezeichnet das ABAP Dictionary.

      http://www.sap.com/abapxml/types/type-pool/name  bezeichnet die Typgruppe name.

      http://www.sap.com/abapxml/types/class-pool/class  bezeichnet die globale Klasse class.

      http://www.sap.com/abapxml/types/defined/name  bezeichnet den im aktuellen ST-Programm mit tt:type definierten Typ.

Der in [line-]type angegebene Typname muss dann die Form p:NAME haben, wobei das Namensraumpräfix p an eine dieser. URIs gebunden sein muss und NAME der Name des eigentlichen Typs in Großbuchstaben ist. p gibt also an, wo der Typ definiert ist.

Definition elementarer Typen

Für die Definition elementarer Typen werden für den Wert des Attributs type hinter tt:type oder tt:node die elementaren ABAP-Typen C, D, F, I, N, P, STRING, T, X  oder XSTRING (in Großbuchstaben) angegeben.

Bei den Typen C, N, P und X kann zusätzlich die Länge in einem Attribut length und bei Typ P die Zahl der Nachkommastellen in einem Attribut decimals angegeben werden. Wenn decimals ohne length angegeben ist, hat decimals keinen Effekt. Wenn length oder decimals nicht angegeben sind, sind Länge und Nachkommastellen generisch.

C ohne Längenangabe entspricht dem generischen ABAP-Typ csequence, d.h. er umfasst c mit beliebiger Länge und string. Entsprechendes gilt für X ohne Längenangabe und xsequence.

Für den Wert des Attributs type kann auch der Name eines elementaren Typs aus dem Repository oder dem ST-Programm angegeben werden.

Definition strukturierter Typen

Für die Definition strukturierter Typen wird die Anweisung tt:node als Element von tt:type verwendet, wobei der Name einer Komponente durch den Wert des Attributs name und sein Typ über den Wert des Attributs [line-]type. bestimmt wird. Eine Anweisung tt:node, die Element einer anderen Anweisung tt:node ist, definiert eine Unterstruktur. Ein Element tt:type oder tt:node, das Unterelemente tt:node enthält, darf keine Typangaben außer [line-]type="?" enthalten. In diesem Fall wird mit line-type="?" ein tabellarischer Typ mit strukturiertem Zeilentyp definiert.

Über die Typangabe [line-]type hinter tt:node können die Typen einer Komponente elementar (siehe oben), tabellenartig (siehe unten) oder durch Bezug auf einen strukturierten Typ des Repository oder des ST-Programms selbst strukturiert sein.

Der Typ einer Komponente kann teilweise oder vollständig generisch sein. Weiterhin ist ein strukturierter Typ standardmäßig bezüglich der Anzahl und Reihenfolge seiner Komponenten generisch. D.h., eine mit einem strukturierten Typ typisierte Datenwurzel kann an eine ABAP-Struktur angebunden werden, die die angegebenen Komponenten in anderer Reihenfolge und/oder weitere Komponenten enthält.

Um die Anzahl und Reihenfolge der Komponenten des Anfangsstücks eines strukturierten Typs oder des gesamten strukturierten Typs lückenlos festzuschreiben, können die entsprechenden Komponentendefinitionen tt:node als Unterelemente der Anweisung tt:front aufgeführt werden. Eine Anweisung tt:type oder tt:node darf genau eine Anweisung tt:front als erstes Unterelement haben.

Um die Anzahl der Komponenten einer Struktur auf die im ST-Programm definierten Komponenten zu beschränken, kann das Attribut extensible der Anweisungen tt:type oder tt:node verwendet werden. Für das Attribut können folgende Werte angegeben werden:

 

... ″on|deep|off|deep-off″ ...

 

Der Wert on drückt aus, dass das aktuelle Element direkte Unterelemente haben darf, die nicht explizit angegeben sind. Der Wert deep drückt aus, dass das aktuelle Element und seine Unterelemente erweiterbar sind und entspricht der Standardeinstellung. Mit dem Wert off wird die Erweiterbarkeit für das aktuelle Element aber nicht für seine Unterelemente deaktiviert; d.h. es ist selbst nicht um direkte Unterelemente erweiterbar, jedoch seine (angegebenen) Unterelemente sind es wieder. Mit dem Wert deep-off wird die Erweiterbarkeit für das aktuelle Element und seine Unterelemente abgeschaltet. Diese Einstellungen können in einzelnen Unterelementen lokal überschrieben werden.

Definition tabellarischer Typen

Für die Definition tabellarischer Typen wird das Attribut line-type hinter tt:type oder tt:node verwendet. Dieses Attribut definiert den Typ bzw. die Komponente als Tabelle des als Wert des Attributs angegebenen Zeilentyps.

Als Zeilentyp können elementare Typen (siehe oben) oder beliebige Typen Repository oder des ST-Programms angegeben werden. Weiterhin kann ein strukturierter Zeilentyp dadurch deklariert werden, dass "?" als Wert von line-type angegeben wird. Wenn das aktuelle Element dann tt:node–Anweisungen als Unterelemente enthält, definieren diese die Komponenten des Zeilentyps.

Der Zeilentyp eines tabellarischen Typs kann teilweise oder vollständig generisch sein. Letzteres wird dadurch definiert, dass die Typangabe line-type="?" gemacht wird, ohne dass mit tt:node Komponenten definiert werden.

 

Definition von Referenztypen

Für die Definition von Referenztypen gibt es im Moment keinen Zusatz ref-type zu tt:types. Ein eigenständiger Referenztyp kann nur über Bezug zu einem Referenztyp im ABAP Repository angelegt werden. Es gibt aber einen Zusatz ref-type zu tt:parameter und tt:variable.

 

Definition generischer Typen

Alle Typen, deren Eigenschaften nicht vollständig festgelegt sind, sind bezüglich der fehlenden Eigenschaften generisch.

      Ein Typ ist vollständig generisch, wenn das Attribut type entweder gar nicht oder mit dem Wert "?" angegeben ist. Die Angabe type="?" ist gleichbedeutend mit keiner Angabe, sollte aber aus Gründen der Lesbarkeit immer gemacht werden. Weiterhin wird line-type="?" benötigt, um ein tabellarischen Typ direkt mit strukturiertem Zeilentyp zu definieren.

      Ein elementarer Typ N oder P ist teilweise generisch, wenn Länge oder bei P Nachkommastellen nicht angegeben sind.

      In strukturierten Typen können die einzelnen Komponenten generisch sein und weiterhin ist die Anzahl der Komponenten generisch.

      Tabellarische Typen können bezüglich des Zeilentyps teilweise oder ganz generisch sein.

Beispiel

Der im folgenden definierte Typ T1 ist eine Struktur, die mindestens die Komponente C enthält, welche eine interne Tabelle ist, deren Zeilentyp mindestens die Komponenten C1 (mit Dictionary-Typ DDT1) und C2 (mit definiertem Typ T2) enthält. Der Strukturtyp T2 enthält die Komponente D, deren Unterkomponente D1 eine interne Tabelle beliebigen Zeilentyps ist.

<tt:transform xmlns:tt="http://www.sap.com/transformation-templates"

 xmlns:ddic="http://www.sap.com/abapxml/types/dictionary"
 xmlns:def="http://www.sap.com/abapxml/types/defined" >

  <tt:type name="T1">
    <tt:node name="C" line-type="?">
      <tt:node name="C1" type="ddic:DDT1"/>
      <tt:node name="C2" line-type="def:T2"/>
    </tt:node>
  </tt:type>

  <tt:type name="T2">
    <tt:node name="D">
      <tt:node name="D1" line-type="?"/>
    </tt:node>
  </tt:type>

 

Ende des Inhaltsbereichs