CL_ABAP_CONV_OUT_CE - Codepage- und Endian Konvertierung (Systemformat -> Extern)
SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up ROGBILLS - Synchronize billing plansDiese Dokumentation steht unter dem Copyright der SAP AG.
Funktionalität
Instanzen der Klasse CL_ABAP_CONV_OUT_CE ermöglichen die Konvertierung von ABAP Datenobjekten in Binärdaten. (D.h. Daten im Systemformat werden ausgegeben in ein Fremdformat.)
Unterstützt werden die Konvertierung von Zeichensätzen (für Textdaten) und die Konvertierung der Bytereihenfolge (für numerische Daten).
Ferner gibt es statische Methoden, um zu einem Zeichen in der aktuellen Codepage den zugehörigen hexadezimalen oder dezimalen Wert in der Unicode Codepage zu bestimmen. Dies sind die MethodenCL_ABAP_CONV_OUT_CE=>UCCP undCL_ABAP_CONV_OUT_CE=>UCCPI.
Beziehungen
- Konvertierung von Binärdaten in ABAP Datenobjekte.
- Konvertierung von ABAP Datenobjekten zwischen zwei externen Binärformaten.
- Diverse Attribute und Methoden zu Zeichensätzen und Bytereihenfolge.
- Korrektur der Ausrichtung von Strukturen in Containern vom Typ C (oder STRING). Diese Korrektur istnotwendig, wenn ostasiatische Zeichen ("full-width" Zeichen in Chinesisch, Japanisch und Koreanisch)von einem nicht-Unicode-System in ein Unicode-System oder umgekehrt übertragen werden. Die Korrektur ist nicht notwendig, wenn die Methode CONVERT_STRUC dieser Klasse verwendet wird.
Beispiel
Im folgenden Beispiel werden Text aus der Systemcodepage nach UTF-8 und Zahlen aus dem Systemformat in die little-endian Darstellung konvertiert.
DATA:
text(4) TYPE c VALUE 'ABC',
int TYPE i VALUE 258.
DATA:
buffer1 TYPE xstring,
buffer2 TYPE xstring,
conv TYPE REF TO cl_abap_conv_out_ce.
conv = cl_abap_conv_out_ce=>create(
encoding = 'UTF-8'
endian = 'L' ).
conv->convert( EXPORTING data = text
IMPORTING buffer = buffer1 ).
conv->convert( EXPORTING data = int
IMPORTING buffer = buffer2 ).
Hier wird zunächst durch Aufruf der Methode CREATEeine Konvertiererinstanz angelegt. Als Parameter können die Ziel-Codepage, die im Ausgabepufferzu verwendende Bytereihenfolge und die Art der Fehlerbehandlung spezifiziert werden. Der Parameter endianist nur für die Typen DECFLOAT34, DECFLOAT16, F, I und INT2 von Bedeutung.
Nach den Aufrufen von CONVERTenthält die Variable buffer1 die 4 Bytes 41424320, was die (hexadezimale) UTF-8-Darstellung des Textes"ABC" ist. Die Variable buffer2 enthält die 4 Bytes 02010000, die den Wert 258 im little-endian Format repräsentieren.
Details sind in der Dokumentation der jeweiligen Methoden erklärt.
Das folgende Beispiel zeigt, wie Strukturen konvertiert werden können.
DATA:
BEGIN OF struc,
text(5) TYPE c,
int TYPE i,
END OF struc.
DATA:
buffer TYPE xstring,
conv TYPE REF TO cl_abap_conv_out_ce,
view TYPE REF TO cl_abap_view_offlen.
view = cl_abap_view_offlen=>create_legacy_view( struc ).
conv = cl_abap_conv_out_ce=>create(
encoding = '0120'
endian = 'B' ).
struc-text = 'Abc12'.
struc-int = 65538.
conv->convert_struc( EXPORTING data = struc
view = view
IMPORTING buffer = buffer ).
Hier wird mit der Methode CREATE_LEGACY_VIEW das in einem Nicht-Unicode-System üblicheLayout bestimmt. (Um das in einem Unicode-System übliche Layout zu bestimmen, gibt es die MethodeCREATE_UNICODE16_VIEW.) Als Ziel-Codepage wird '0120' angegeben (SAP-ZeichensatznummerfÜr EBCDIC-Latin-1.) Am Schluß enthält buffer(5) die Bytes C18283F1F2 (für "Abc12") und buffer+8(4) die Bytes 00010002 (für 65538).
Die Klasse CL_ABAP_CONV_OUT_CE besitzt einige weitere Methoden, die ein Stream-orientiertes Modellimplementieren: Die ABAP Datenobjekte werden sequentiell in einen binären Ausgabepuffer geschrieben. Diese Methoden werden wie folgt verwendet:
- Siehe oben.
- Daten werden konvertiert. Aufeinanderfolgende Aufrufe dieser Methode ermöglichen das sequentielle Anfügen von Daten an das Ende des Ausgabepuffers.
- Holen des Ausgabepuffers (Binärstrings) zur weiteren Verarbeitung (Schreiben in eine Datei, Versenden per RFC, o.ä.).
- Einzelne Attribute der Konvertiererinstanz können neu gesetzt werden. (Diese Methode ist insbesondere zum Löschen des Ausgabepuffers unter Beibehaltung der übrigen Attribute gedacht.)
DATA:
text(100) TYPE C VALUE 'ABC',
int TYPE I VALUE 258.
DATA:
buffer TYPE XSTRING,
conv TYPE REF TO cl_abap_conv_out_ce.
conv = cl_abap_conv_out_ce=>create(
encoding = 'UTF-8'
endian = 'L'
).
CALL METHOD conv->write( data = text n = 4 ).
CALL METHOD conv->write( data = int ).
buffer = conv->get_buffer( ).
Die Variable buffer enthält nun den Hexadezimalstring "4142432002010000". Dieser setzt sich zusammen aus:
- 4 Bytes (hexadezimal "41424320"), welche den String "ABC" in UTF-8 repräsentieren.
- 4 Bytes (hexadezimal "02010000"), welche den Wert 258 im little-endian Format repräsentieren.
Wenn die gewünschte Bytereihenfolge in dem alten vonTRANSLATE ... NUMBER FORMAT erwarteten Format (als N(4) Wert) vorliegt, kann wie folgt vorgegangen werden:
TYPE-POOLS: ABAP.
CLASS cl_abap_char_utilities DEFINITION LOAD.
DATA:
number_format(4) TYPE N VALUE '0101'.
DATA:
endian TYPE ABAP_ENDIAN,
conv TYPE REF TO cl_abap_conv_out_ce.
endian = cl_abap_char_utilities=>number_format_to_endian(
number_format
).
conv = cl_abap_conv_out_ce=>create(
encoding = 'UTF-8'
endian = endian
).
Hinweise
Details sind in der Dokumentation der jeweiligen Methoden erklärt.
Weiterführende Informationen
SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up rdisp/max_wprun_time - Maximum work process run time
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 12316 Date: 20120527 Time: 082853 triton ( 200 ms )






