Kategorien
-
Neueste Beiträge
- [ABAP] XML in interne Tabelle wandeln
- [ABAP] Inhalt eines Spoolauftrages auslesen
- [ABAP] User-Exits und BAdIs zu einem Programm oder einer Transaktion auflisten
- [ABAP] UTC-long-Zeitstempel nach POSIX-Standard in Datum und Zeit splitten
- [ABAP] Verwendung von Common Table Expressions (CTE)
- [ABAP] Leistungsverzeichnis lesen (MS_READ_SERVICES_FOR_BAPI)
- [ABAP] SAPConnect: Kommunikationsknoten, Routing und Parameter auslesen
- [SAP] Business Document Service (BDS)
- [SAP] Generic Object Services (GOS)
- [SAP] MM-Berechtigungsobjekte
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.