Show TOC

Dokumentation zur SyntaxLängenangabe Dieses Dokument in der Navigationsstruktur finden

Verwendung

Mit den Attributen minLength und maxLength können bei tt:value sowie bei tt:write und tt:read Längenangaben lengthgemacht werden, um bei der Serialisierung bzw. Deserialisierung die Länge der zu übertragenden Daten einzuschränken.

Für length können positive ganze Zahlen angegeben werden. Längenangaben können für Datenknoten bzw. Variablen der ABAP-Typen c, x, string und xstring gemacht werden. Bei anderen Datentypen hat eine Längenangabe keine Wirkung.

Die Angabe des Attributs length wirkt bei tt:value und tt:write immer so, als seien minLength und maxLength gleichzeitig mit dem in length angegebenen Wert aufgeführt.

Serialisierung

Das Attribut minLength bzw. length legt fest, dass der resultierende XML-Wert mindestens die in length angegebene Anzahl an Zeichen bzw. Bytes darstellt. Falls ein übergebener Wert weniger Zeichen bzw. Bytes enthält wird er rechts mit Leerzeichen bzw. 0x00 auf die angegebene Länge verlängert und daraus ein XML-Wert erzeugt. Mit dem Attribut maxLength bzw. length wird die maximale Anzahl an Zeichen bzw. Bytes festgelegt, die übergeben werden dürfen. Wenn der zu serialisierende XML-Wert mehr Zeichen oder Bytes enthält als durch length angegeben, kommt es zur Ausnahme CX_ST_CONSTRAINT_ERROR, außer es sind nur schließende Leerzeichen oder Null-Bytes bei der Serialisierung eines Datenobjekts vom Typ c bzw. x betroffen.

Deserialisierung

Bei der Deserialiierung hat das Attribut minLength keine Wirkung. Mit dem Attribut maxLength bzw. length wird die maximale Anzahl an Zeichen bzw. Bytes festgelegt, die im XML-Wert erwartet werden. Wenn der zu deserialisierende XML-Wert mehr Zeichen oder Bytes enthält als durch length angegeben, kommt es zur Ausnahme CX_ST_CONSTRAINT_ERROR, außer es sind nur schließende Leerzeichen oder Null-Bytes bei der Deserialisierung in ein Datenobjekt vom Typ c bzw. x betroffen.

Hinweis Hinweis

Die Ausnahme CX_ST_CONSTRAINT_ERROR kann beim Aufruf von CALL TRANSFORMATION nicht direkt abgefangen werden, sondern ist in CX_ST_SERIALIZATION_ERROR bzw. CX_ST_DESERIALIZATION_ERROR verpackt.

Ende des Hinweises.
Beispiel

Die folgende Transformation führt Serialisierung und Deserialisierung mit unterschiedlichen Längenangaben aus:

Syntax Syntax

  1. <?sap.transform simple?>
  2. <tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
  3.   <tt:root name="ROOT"/>
  4.   <tt:template>
  5.     <tt:serialize>
  6.       <Text>
  7.         <tt:value length="8" ref="ROOT"/>
  8.       </Text>
  9.     </tt:serialize>
  10.     <tt:deserialize>
  11.       <Text>
  12.         <tt:value length="4" ref="ROOT"/>
  13.       </Text>
  14.     </tt:deserialize>
  15.   </tt:template>
  16. </tt:transform>
Ende des Codes

Folgendes ABAP-Programm kann die Transformation aufrufen:

Syntax Syntax

  1. DATA: text        TYPE string VALUE `1234`,
  2.       xml_xstring TYPE string,
  3.       exc_trafo   TYPE REF TO cx_transformation_error,
  4.       exc_prev    TYPE REF TO cx_root.
  5. CALL TRANSFORMATION ... SOURCE root = text
  6.                         RESULT XML xml_xstring.
  7. cl_abap_browser=>show_xml( xml_string = xml_xstring
  8.                            modal       = 'X' ).
  9. TRY.
  10.     CALL TRANSFORMATION ... SOURCE XML xml_xstring
  11.                             RESULT root = text.
  12.   CATCH cx_st_deserialization_error INTO exc_trafo.
  13.     MESSAGE exc_trafo TYPE 'I' DISPLAY LIKE 'E'.
  14.     IF exc_trafo->previous IS NOT INITIAL.
  15.       exc_prev = exc_trafo->previous.
  16.       MESSAGE exc_prev TYPE 'I' DISPLAY LIKE 'E'.
  17.     ENDIF.
  18. ENDTRY.
Ende des Codes

Das Ergebnis der Transformation ist:

<Text>1234 </Text>

Da bei der Deserialisierung mehr Zeichen als erwartet übertragen werden, kommt es zur Ausnahme CX_ST_CONSTRAINT_ERROR, die in die Ausnahme CX_ST_DESERIALIZATION_ERROR verpackt ist.