Ansicht
Dokumentation

ABAPASSIGN_CASTING - ASSIGN CASTING

ABAPASSIGN_CASTING - ASSIGN CASTING

BAL Application Log Documentation   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

ASSIGN, casting_spec

Kurzreferenz



... { }
  $| ${ CASTING ${ ${ $}
              $| ${TYPE type$|(name)$}
              $| ${LIKE dobj$}
              $| ${$[TYPE p$] DECIMALS dec$}
              $| ${TYPE HANDLE handle$} $} $}
  $| ${ obsolete_casting $} ...

Alternativen:

1. ... ${ $}

2. ... CASTING ...

Wirkung

Die Angabe casting_spec legt fest, mit welchem Datentyp der dem Feldsymbol zugewiesene Speicherbereich mem_area behandelt wird, wenn eine Anweisung das Feldsymbol an einer Operandenposition enthält. Es kann entweder keine Angabe gemacht oder der Zusatz CASTING angegeben werden. Außerhalb von Klassen sind auch noch die obsoleten Varianten obsolete_casting möglich.

Dabei gibt es folgende Einschränkungen:

  • Bei der Zuweisung von Tabellenausdrücken kann nur die erste Alternative ohne weitere Zusätze verwendet werden.
  • Der Zusatz CASTING kann nicht für Aufzählungstypen verwendet werden. D.h. der zugewiesene Speicherbereich darf kein Aufzählungsobjekt und der angegebene Datentyp darf kein Aufzählungstyp sein.

Alternative 1

... ${ $}


Wirkung

Falls für casting_spec keine Angabe gemacht wird, übernimmt das Feldsymbol den Datentyp des in mem_area verwendeten Datenobjekts und der zugewiesene Speicherbereich wird entsprechend behandelt. Dieser Datentyp muss zur Typisierung des Feldsymbols passen.

Beispiel

Nach der ersten Zuweisung hat das Feldsymbol den Typ c der Länge 3 und nach der zweiten Zuweisung den Typ string. Die Anweisung DESCRIBE FIELD gibt die entsprechenden Werte C 3 und g zurück.

Alternative 2

... CASTING ...


Zusätze:

1. ... ${ $}

2. ... TYPE type$|(name)

3. ... LIKE dobj

4. ... $[TYPE p$] DECIMALS dec

5. ... TYPE HANDLE handle

Wirkung

Falls in casting_spec der Zusatz CASTING verwendet wird, wird der Speicherbereich so behandelt, als hätte er den durch CASTING angegebenen Typ. Bei der Angabe von CASTING darf das Feldsymbol nicht mit dem obsoleten Zusatz STRUCTURE der Anweisung FIELD-SYMBOLS typisiert sein.

Das Casting erfolgt kann entweder implizit über die Typisierung des Feldsymbols oder explizit über einen der Zusätze TYPE, LIKE der DECIMALS erfolgen. Beim expliziten Casting darf das Feldsymbol nicht vollständig, sondern nur generisch typisiert sein.

Hinweise

  • Falls der durch CASTING festgelegte Datentyp tief ist oder im zugewiesenen Speicherbereich tiefe Datenobjekte abgelegt sind, müssen die tiefen Komponenten bezüglich Typ und Position genauso im zugewiesenen Speicherbereich auftreten. Dies bedeutet insbesondere, dass eine einzelne Referenzvariable nur einem Feldsymbol zugewiesen werden kann, das als Referenzvariable vom gleichen statischen Typ typisiert ist.
  • Die statische Überprüfung der Anweisung ASSIGN mit dem Zusatz CASTING erfolgt so, dass unabhängig vom System und der Plattform, auf der die Prüfung stattfindet, alle Fehler festgestellt werden. Bei einer Überprüfung zur Laufzeit wird nur gegen das aktuelle System bzw. die aktuelle Plattform geprüft. Diese Überprüfungen finden ebenfalls immer dann statt, wenn das Feldsymbol <fs> mit dem obsoleten Zusatz STRUCTURE der Anweisung FIELD-SYMBOLS typisiert ist.
  • Bei Verwendung des Zusatzes CASTING kann das Ergebnis der Anweisung ASSIGN plattformabhängig sein. Beispielsweise kann die interne Byte-Reihenfolge von Zeichen plattformabhängig sein, was sich bei einem Cast auf einen byteartigen Datentyp bemerkbar macht.
  • Der Speicherbereich mem_area muss den Ausrichtungsanforderungen des beim Casting angegebenen Datentyps genügen. Bei Angabe flacher elementarer Datentypen muss die Speicheradresse von mem_area beispielsweise wie folgt teilbar sein:
  • Bei den zeichenartigen Datentypen c, n und den Datums-/Zeittypen d, t durch 2.

  • Beim numerischen Datentyp i durch 4.

  • Bei den numerischen Datentypen int8, f und decfloat16 durch 8.

  • Beim Zeitstempeltyp utclong durch 8.

  • Beim numerischen Datentyp decfloat34 durch 16.

Zusatz 1

... ${ $}

Wirkung

Falls der Zusatz CASTING ohne weiteren Zusatz angegeben ist, wird der zugewiesene Speicherbereich auf den Typ des Feldsymbols gecastet. Das Feldsymbol muss entweder vollständig oder mit einem der generischen eingebauten ABAP-Typen c, n, p oder x typisiert sein.

Casting einer Integerzahl 333 als Bytefeld. Die Ausgabe ist je nach Byte-Reihenfolge entweder 4D01 oder 014D.

Casting einer Integerzahl 333 als Bytefeld. Das Ergebnis ist je nach Byte-Reihenfolge entweder 4D01 oder 014D.

Zusatz 2

... TYPE type$|(name)

Wirkung

Explizite Angabe eines Datentyps hinter TYPE. Der Name des Typs kann wie folgt angegeben werden:

  • type
Direkte statische Angabe als type.
  • (name)
Angabe erfolgt Inhalt eines zeichenartigen Datenobjekts name, das bei Ausführung der Anweisung die Bezeichnung eines Datentyps in Großbuchstaben enthalten muss. Es können folgende Angaben für name unterschieden werden:
  • Literal oder Konstante

Wenn das Datenobjekt name als Zeichenliteral oder als Konstante angegeben ist, kann es statisch ausgewertet werden und der angegebene Typ wird als verwendetes Objekt erkannt.
  • Variable

Wenn das Datenobjekt name als Variable angegeben ist, ist dies eine rein dynamische Angabe und es findet keine statische Auswertung des Inhalts statt.
Bei Ausführung der Anweisung wird name in beiden Fällen erst zur Laufzeit ausgewertet.

Der zugewiesene Speicherbereich wird auf den angegebenen Typ gecastet. Abgesehen von den eingebauten ABAP-Typen c, n, p und x darf der hinter TYPE angegebene Datentyp nicht generisch sein. Weiterhin dürfen keine Tabellenarten und kein REF TO angegeben werden.

Das Feldsymbol darf nicht vollständig, sondern nur generisch typisiert sein. Der angegebene Datentyp muss zur generischen Typisierung des Feldsymbols passen, d.h., das Casting darf die generische Typisierung spezialisieren, aber nicht verallgemeinern.

Wenn hinter TYPE ein generischer zeichenartiger Typ c oder n angegeben ist, muss bei Ausführung der Anweisung die Länge des zugewiesenen Speicherbereichs ein Vielfaches der Länge eines Zeichens im Speicher sein.

Beispiel

Casting eines Zeitfelds auf einen strukturierten Typ mit drei Komponenten.

Im folgenden Beispiel führt eine der beiden ASSIGN-Anweisungen zu einem Laufzeitfehler, da die Ausrichtungsanforderung für den Typ c nicht erfüllt ist. Welche der Anweisungen zum Laufzeitfehler führt ist in der Regel undefiniert und hängt von vorhergehenden Deklarationen ab.

Zusatz 3

... LIKE dobj

Wirkung

Hinter LIKE können folgende Angaben gemacht werden:

  • Ein Datenobjekt dobj nach den Regeln für TYPES ...  LIKE. Der zugewiesene Speicherbereich wird auf den Datentyp des Datenobjekts gecastet.
  • Ein generisch typisiertes Feldsymbol.
  • Wenn dem Feldsymbol ein Speicherbereich zugewiesen ist, wird auf den Datentyp gecastet, mit dem der Speicherbereich behandelt wird.

  • Wenn dem Feldsymbol kein Speicherbereich zugewiesen ist, wird ein Standardtyp verwendet, der sich nach folgenden Regeln ergibt:

any, c, clike, csequence, data und simple ergeben c der Länge 1.
decfloat ergibt decfloat34.
n ergibt n der Länge 1.
numeric und p ergeben p der Länge 8 ohne Nachkommastellen.
x und xsequence ergeben x der Länge 1.
Generische Tabellentypen führen zu einer Ausnahme der Klasse CX_SY_ASSIGN_CAST_ILLEGAL_CAST.
  • Ein generisch typisierter Formalparameter.
  • Wenn dem Formalparameter ein Aktualparameter zugewiesen ist, wird auf dessen Datentyp gecastet.

  • Wenn einem optionalen Formalparameter kein Aktualparameter zugewiesen ist, wird dessen zugeordneter Standardtyp verwendet.

Das Feldsymbol darf nicht vollständig, sondern nur generisch typisiert sein. Der angegebene Datentyp muss zur generischen Typisierung des Feldsymbols passen, d.h., das Casting darf die generische Typisierung spezialisieren, aber nicht verallgemeinern.

Hinweise

  • Zu den Datenobjekten, auf die man sich mit LIKE beziehen kann, gehören außer solchen des eigenen Programms auch die öffentlichen Attribute globaler Klassen.
  • Der Standardtyp für hinter CASTING LIKE angegebene generisch typisierte Feldsymbole unterscheidet sich etwas vom sonstigen Standardtyp für generische Feldsymbole und Formalparameter (Länge 1 statt 4 bei any und data und kein Standardtyp für generische Tabellentypen).
  • Wenn hinter CASTING LIKE ein generisch typisiertes Feldsymbol angegeben ist, sollte diesem bei Ausführung der Anweisung ein Speicherbereich zugewiesen sein.

Beispiel

Casting einer Struktur mit drei Komponenten auf ein Zeitfeld.

Zusatz 4

... $[TYPE p$] DECIMALS dec

Wirkung

Hinter DECIMALS muss ein numerisches Datenobjekt dec angegeben werden. Der zugewiesene Speicherbereich wird auf den Datentyp p gecastet, wobei die Anzahl der Nachkommastellen durch den Inhalt von dec festgelegt wird. Die Anzahl der Nachkommastellen darf nicht größer als die Anzahl aller Stellen sein. TYPE muss bei DECIMALS nicht angegeben werden. Falls TYPE verwendet wird, kann nur der ohnehin verwendete Datentyp p angegeben werden.

Das Feldsymbol darf nicht vollständig, sondern nur generisch typisiert sein. Der angegebene Datentyp muss zur generischen Typisierung des Feldsymbols passen, d.h., das Casting darf die generische Typisierung spezialisieren, aber nicht verallgemeinern.

Die Berechnung des Quotienten aus der gepackten Zahl pack und dem Feldsymbol pack> demonstriert die Wirkung des Castings mit dem Zusatz DECIMALS. Es werden Faktoren zwischen 10 und 100.000.000 ermittelt. Bei der Verwendung von pack> in Operandenpositionen wird also ein anderer Wert verwendet als bei der Verwendung von pack.

Die Berechnung des Quotienten aus der gepackten Zahl pack und dem Feldsymbol pack> demonstriert die Wirkung des Castings mit dem Zusatz DECIMALS. Es werden Faktoren zwischen 10 und 100.000.000 ermittelt. Bei der Verwendung von pack> in Operandenpositionen wird also ein anderer Wert verwendet als bei der Verwendung von pack.

Zusatz 5

... TYPE HANDLE handle

Wirkung

Hinter TYPE HANDLE muss eine Referenzvariable handle vom statischen Typ der Klasse CL_ABAP_DATADESCR oder deren Unterklassen angegeben werden, die auf ein Typbeschreibungsobjekt der RTTS zeigt. Der zugewiesene Speicherbereich wird auf den Typ des Feldsymbols gecastet.

Das Feldsymbol darf nicht vollständig, sondern nur generisch typisiert sein. Der angegebene Datentyp muss zur generischen Typisierung des Feldsymbols passen, d.h., das Casting darf die generische Typisierung spezialisieren, aber nicht verallgemeinern.

Der Zusatz CASTING TYPE HANDLE kann nicht zusammen mit dem Zusatz RANGE verwendet werden.

Hinweis

Das Typbeschreibungsobjekt kann durch Anwendung der Methoden der RTTS auf vorhandene Datenobjekte oder durch die Definition eines neuen Datentyps erzeugt worden sein.

Beispiel

Erzeugung eines Typbeschreibungsobjekts für eine Struktur und deren Verwendung für das Casting eines Datumsfelds.






TXBHW - Original Tax Base Amount in Local Currency   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 19853 Date: 20240420 Time: 081400     sap01-206 ( 245 ms )