Show TOC Anfang des Inhaltsbereichs

Syntaxdokumentation Längenangabe  Dokument im Navigationsbaum lokalisieren

Mit den Attributen  minLength und maxLength können bei tt:value sowie bei tt:write und tt:read Längenangaben length gemacht 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

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.

 

Beispiel

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

 

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
  <tt:root name="ROOT"/>
  <tt:template>
    <tt:serialize>
      <Text>
        <tt:value length="8" ref="ROOT"/>
      </Text>
    </tt:serialize>
    <tt:deserialize>
      <Text>
        <tt:value length="4" ref="ROOT"/>
      </Text>
    </tt:deserialize>
  </tt:template>
</tt:transform>

 

Folgendes ABAP-Programm kann die Transformation aufrufen:

 

DATA: text        TYPE string VALUE `1234`,
      xml_xstring TYPE string,
      exc_trafo   TYPE REF TO cx_transformation_error,
      exc_prev    TYPE REF TO cx_root.

CALL TRANSFORMATION ... SOURCE root = text
                        RESULT XML xml_xstring.

cl_abap_browser=>show_xml( xml_string = xml_xstring
                           modal       = 'X' ).

TRY.
    CALL TRANSFORMATION ... SOURCE XML xml_xstring
                            RESULT root = text.
  CATCH cx_st_deserialization_error INTO exc_trafo.
   
MESSAGE exc_trafo TYPE 'I' DISPLAY LIKE 'E'.
    IF exc_trafo->previous IS NOT INITIAL.
      exc_prev = exc_trafo->previous.
      MESSAGE exc_prev TYPE 'I' DISPLAY LIKE 'E'.
    ENDIF.
ENDTRY.

 

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.

 

 

 

 

 

 

 

 

 

 

Ende des Inhaltsbereichs