Kategorien
-
Neueste Beiträge
- [ABAP] SALV: Events abfangen beim Klick auf die ALV Funktions-Buttons am Beispiel Filter-Setzen
- [SVG] Transparentes SVG-Icon
- [HTML] Favicon auf einer Webseite einbinden
- [HTML] Manifest (manifest.json) zu einer Webseite hinzufügen
- [VS Code] Visual Studio Code einrichten
- [JavaScript] Elemente zu Array hinzufügen
- [JavaScript] HTML-Tabellen mit ExcelJS exportieren
- [JavaScript] JSON-Datei per fetch( ) oder FilePicker laden
- [CSS] Google Material Icons & Symbols verwenden
- [HTML] Unicode‑Emojis in Texten verwenden
Schlagwort: IS ASSIGNED
[ABAP] Konvertierung einer Struktur in Binärdaten (x, xstring) und zurück
Variante 1 (FIELD-SYMBOLS, CASTING: Struktur <-> Typ x)
* einfachen Typ deklarieren
TYPES: BEGIN OF ty_struct,
matnr TYPE matnr,
int TYPE i,
float TYPE f,
text TYPE char10,
END OF ty_struct.
* Feldsymbol für Binärdaten
FIELD-SYMBOLS <x> TYPE x.
* Feldsymbol für Strukturdaten
FIELD-SYMBOLS <s> TYPE ty_struct.
* Struktur anlegen, deren Daten kovertiert werden soll
DATA(lv_s) = VALUE ty_struct( matnr = '1234567890'
int = 1
float = '1.1'
text = 'abc' ).
* Struktur in Binärdaten umwandeln
ASSIGN lv_s TO <x> CASTING.
IF <x> IS ASSIGNED.
* Binärdaten in Struktur umwandeln
ASSIGN <x> TO <s> CASTING.
IF <s> IS ASSIGNED.
DATA(lv_s2) = <s>.
* Datenausgabe
WRITE: / lv_s2-matnr.
WRITE: / lv_s2-int.
WRITE: / lv_s2-float.
WRITE: / lv_s2-text.
ENDIF.
ENDIF.
Variante 2 (xstring -> Struktur)
* https://www.consolut.com/s/sap-ides-zugriff/d/e/doc/M-CL_ABAP_CONV_IN_CE/
* einfachen Typ deklarieren
TYPES: BEGIN OF ty_struct,
text TYPE char5,
int TYPE i,
END OF ty_struct.
* Zielstruktur
DATA(lv_s) = VALUE ty_struct( ).
* Konverterobjekt mit UTF-8 und Little Endian Konvertierung
DATA(o_conv) = cl_abap_conv_in_ce=>create( encoding = 'UTF-8' endian = 'L' ).
* View-Objekt
DATA(o_view) = cl_abap_view_offlen=>create_legacy_view( lv_s ).
* Eingabepuffer mit Binärdaten
DATA(lv_buffer) = CONV xstring( '616263202000000005000000' ).
* Konvertierung xstring -> Struct
* in: HEX: 616263202000000005000000
* out: Struct: text: abc
* ínt: 5
o_conv->convert_struc( EXPORTING
input = lv_buffer
view = o_view
IMPORTING
data = lv_s ).
* Datenausgabe
WRITE: / lv_s-text.
WRITE: / lv_s-int.
Variante 3 (Struktur -> xstring)
* https://www.consolut.com/s/sap-ides-zugriff/d/e/doc/M-CL_ABAP_CONV_OUT_CE/
* einfachen Typ deklarieren
TYPES: BEGIN OF ty_struct,
text TYPE char5,
int TYPE i,
END OF ty_struct.
* Struktur mit Quelldaten
DATA(lv_s) = VALUE ty_struct( text = 'abc'
int = 5 ).
* Konverterobjekt mit UTF-8 und Little Endian Konvertierung
DATA(o_conv) = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' endian = 'L' ).
* View-Objekt
DATA(o_view) = cl_abap_view_offlen=>create_legacy_view( lv_s ).
* Ausgabepuffer für Binärdaten
DATA: lv_buffer type xstring.
* Konvertierung Struct -> xstring
* in: Struct: text: abc
* ínt: 5
* out: HEX: 616263202000000005000000
o_conv->convert_struc( EXPORTING
data = lv_s
view = o_view
IMPORTING
buffer = lv_buffer ).
* Datenausgabe
WRITE: / lv_buffer.
[ABAP] Index einer Zeile in einer internen Tabelle
* Index des Tabelleneintrags ermitteln DATA(idx) = line_index( itab[ col = '123' ] ). * bei Vorhandensein des Eintrags ist der Index > 0, * es wird bei Nichtvorhandensein idx = 0 gesetzt und KEINE Exception geworfen IF idx > 0. * Zeile an der Indexposition mit Feldsymbol verknüpfen ASSIGN itab[ idx ] TO FIELD-SYMBOL(<f>). IF <f> IS ASSIGNED. * hier irgendetwas mit dem Feldsymbol (Zeile) durchführen ENDIF. ELSE. * Eintrag nicht gefunden ENDIF.
[ABAP] Zugriff auf Variablen des übergeordneten Reports
* Variable des Reports an ein Feldsymbol binden
ASSIGN ('(ZREPORTNAME)lv_var') TO FIELD-SYMBOL(<v>).
* Zugriff auf das Feldsymbol
IF <v> IS ASSIGNED AND <v> IS NOT INITIAL.
WRITE: / <v>.
ENDIF.
[ABAP] Auf Variablen eines anderen (übergeordneten) Reports zugreifen (Dirty Assign)
* Sinngemäße Übersetzung des Kommentars von Thomas Jung auf Seite: http://www.dataxstream.com/2009/08/use-abap-to-access-any-data-in-memory/
* "Diese Syntax-Variante ("Dirty-Assign") ist nur für den internen Gebrauch. SAP supportet diese Syntax-Variante nicht
* und kann jederzeit in zukünftigen Releases das Statement entfernen oder die Funktionsweise ändern.
* Ursprünglich wurde dieses Konzept vom ABAP-Debugger verwendet. Der klassische Debugger lief in der selben
* Session wie das zu debuggende Programm. Auf diese Art und Weise konnte der Debuggger auf die Speicherwerte zugreifen.
* Ab Release 6.40 läuft der neue ABAP-Debugger in einer separaten Session.
* Der ABAP-Debugger greift nun remote in die laufende Debug-Session und benutzt dazu spezielle Kernel-Methoden.
* Irgendwann entfernt SAP den klassichen Debugger und damit auch diese Syntax-Variante."
* beliebiger übergeordneter Source-Report Name
DATA: lv_report_name TYPE string VALUE 'ZDEMO1'.
* Variablen
DATA: lv_int TYPE i VALUE 1.
DATA: it_spfli TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY.
* Demo-Daten in iTab schreiben
SELECT * from spfli INTO TABLE @it_spfli.
* int-Variable aus Report holen
DATA(lv_var1) = |({ lv_report_name })LV_INT|.
* Feldsymbol zuweisen
ASSIGN (lv_var1) TO FIELD-SYMBOL(<fs_lv_int>).
* Wert ausgeben
IF <fs_lv_int> IS ASSIGNED.
WRITE: / <fs_lv_int>.
ENDIF.
* iTab aus Report holen
DATA(lv_var2) = |({ lv_report_name })IT_SPFLI|.
* Feldsymbol für iTab kann nicht inline deklariert werden,
* da Typ noch unbekannt und deshalb Fehler bei lines( )
FIELD-SYMBOLS: <fs_it_spfli> TYPE ANY TABLE.
* Feldsymbol zuweisen
ASSIGN (lv_var2) TO <fs_it_spfli>.
* Werte ausgeben
IF <fs_it_spfli> IS ASSIGNED.
WRITE: / lines( <fs_it_spfli> ).
ENDIF.
Links
[ABAP] Dynamische Tabelle anhand eines Tabellennamens erstellen, Daten ausgeben
DATA: table_name TYPE string VALUE 'spfli'. " Tabellenname
DATA: o_it TYPE REF TO data. " Referenz auf Tabelle
DATA: o_row TYPE REF TO data. " Referenz auf Tabellenzeile
FIELD-SYMBOLS: <fs_table> TYPE ANY TABLE. " Feldsymbol für Arbeit mit Tabelle
FIELD-SYMBOLS: <fs_row> TYPE any. " Feldsymbol für Arbeit mit Zeile
* dynamische Tabelle vom Typ table_name erzeugen
CREATE DATA o_it TYPE TABLE OF (table_name).
* Feldsymbol auf die dynamische Tabelle anlegen
ASSIGN o_it->* TO <fs_table>.
IF <fs_table> IS ASSIGNED.
* dynamische Workarea vom Typ der Tabellenzeile erzeugen
CREATE DATA o_row LIKE LINE OF <fs_table>.
* Feldsymbol auf die Workarea anlegen
ASSIGN o_row->* TO <fs_row>.
IF <fs_row> IS ASSIGNED.
* Daten holen
SELECT * FROM (table_name) INTO TABLE <fs_table>.
* Daten ausgeben
DATA: go_struct TYPE REF TO cl_abap_structdescr.
* herausfinden, wieviele Spalten die Tabelle hat
go_struct ?= cl_abap_typedescr=>describe_by_data( <fs_row> ).
DATA(gt_comp) = go_struct->get_components( ).
* alle Datensätze der Tabelle durchgehen
LOOP AT <fs_table> INTO <fs_row>.
* spaltenweise jeden Datensatz durchgehen
LOOP AT gt_comp ASSIGNING FIELD-SYMBOL(<fs_col>).
* den Inhalt der Strukturkomponente (Zeile) ausgeben
ASSIGN COMPONENT <fs_col>-name OF STRUCTURE <fs_row> TO FIELD-SYMBOL(<fs_cell>).
IF <fs_cell> IS ASSIGNED.
WRITE: <fs_cell>.
ENDIF.
ENDLOOP.
NEW-LINE.
ENDLOOP.
ENDIF.
ENDIF.