Zum Inhalt springen
Die Codezentrale
Programmierung, Tipps, Tricks, Snippets, Links (.Net, Java, JavaScript, C++, PHP, Python, SQL, SAP, ABAP, SAPUI5)
Zum Inhalt springen
  • Home
  • Links
    • Kachelmannwetter
    • MrLeehs Blog
    • Deskmodder
    • winfuture.de
    • Tricktresor
    • Python Online Compiler
    • [Raspberry Pi] Wichtige Terminal-Kommandos für Raspian
    • CodeSandbox JS Vanilla
  • Datenschutzerklärung
  • Impressum
Start Beiträge verschlagwortet mit "get_metadata"

Schlagwort: get_metadata

[ABAP] ADBC (ABAP Database Connectivity) – Klassen für objektorienterten, dynamischen DB-Zugriff

Variante 1 (Typdefinition)

* Paket
    - SDB_ADBC
* Demoprogramme
    - ADBC_DEMO
    - ADBC_DEMO_LOBS_ORA
    - ADBC_DEMO_METADATA
    - ADBC_DEMO_PROC_CALLS_HDB
    - ADBC_QUERY
    - ADBC_TEST_CONNECTION

TYPES: BEGIN OF ty_s_result_line,
         col1  TYPE c LENGTH 16,            " VARCHAR2 (16 Char)
         col2  TYPE c LENGTH 16,            " VARCHAR2 (16 Char)
         col3  TYPE p LENGTH 10 DECIMALS 0, " NUMBER(10)
       END OF ty_s_result_line .

TYPES: ty_it_result_data TYPE STANDARD TABLE OF ty_s_result_line WITH DEFAULT KEY.

PARAMETERS: p_con TYPE dbcon-con_name DEFAULT 'MYCON'.
PARAMETERS: p_var1 TYPE string DEFAULT 'ABCDEF'.

START-OF-SELECTION.

  TRY.
* Berechtigungsprüfung
      AUTHORITY-CHECK OBJECT 'S_DBCON' ID 'DBA_DBHOST' FIELD space
                                       ID 'DBA_DBSID'  FIELD p_con
                                       ID 'DBA_DBUSER' FIELD space
                                       ID 'ACTVT'      FIELD '03'.

      IF sy-subrc = 0.
* DB Connection erzeugen
        DATA(o_con) = cl_sql_connection=>get_connection( p_con ).
* SQL-Statement (Syntax ist abh. vom Zielsystem, hier ORACLE)
        DATA(lv_stmt) = |SELECT tab1.col1,| &&
                        |       tab2.col2,| &&
                        |       tab3.col3,| &&
                        |  FROM table1 tab1| &&
                        |  INNER JOIN table2 tab2 ON tab1.id = tab2.id| &&
                        |  INNER JOIN table3 tab3 ON tab1.id = tab3.id| &&
                        |  WHERE col4 = ?|.

* Statement erzeugen
        DATA(o_stmt) = o_con->create_statement( ).
* ggf. Parameter (?) setzen
        o_stmt->set_param( REF #( p_var1 ) ).

* SQL-Statement ausführen (mit Rückgabemenge)
        DATA(o_result) = o_stmt->execute_query( lv_stmt ).

* interne Tabelle für Rückgabedaten setzen
        DATA(it_result) = VALUE ty_it_result_data( ).
        o_result->set_param_table( REF #( it_result ) ).

* Daten in interne Tabelle schreiben
* Parameter upto gibt an, wieviele Datensätze gelesen werden sollen, default = 0 (alle)
        DATA(lv_rows) = o_result->next_package( upto = 0 ).

* Sind Daten vorhanden?
        IF lv_rows > 0.
* Datenausgabe
          cl_demo_output=>display( it_result ).
        ELSE.
          WRITE: / 'Keine Rückgabedaten vorhanden.'.
        ENDIF.

* Resultset schließen
        o_result->close( ).
* DB-Connection schließen
        o_con->close( ).
      ELSE.
        WRITE : / 'Keine Berechtigungen.'.
      ENDIF.
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

Variante 2 (generische Typdefinition)

PARAMETERS: p_con TYPE dbcon-con_name DEFAULT 'MYCON'.
PARAMETERS: p_var1 TYPE string DEFAULT 'ABCDEF'.

START-OF-SELECTION.

  TRY.
* Berechtigungsprüfung
      AUTHORITY-CHECK OBJECT 'S_DBCON' ID 'DBA_DBHOST' FIELD space
                                       ID 'DBA_DBSID'  FIELD p_con
                                       ID 'DBA_DBUSER' FIELD space
                                       ID 'ACTVT'      FIELD '03'.

      IF sy-subrc = 0.
* DB Connection erzeugen
        DATA(o_con) = cl_sql_connection=>get_connection( p_con ).
* SQL-Statement (Syntax ist abh. vom Zielsystem, hier ORACLE)
        DATA(lv_stmt) = |SELECT tab1.col1,| &&
                        |       tab2.col2,| &&
                        |       tab3.col3,| &&
                        |  FROM table1 tab1| &&
                        |  INNER JOIN table2 tab2 ON tab1.id = tab2.id| &&
                        |  INNER JOIN table3 tab3 ON tab1.id = tab3.id| &&
                        |  WHERE col4 = ?|.

* Statement erzeugen
        DATA(o_stmt) = o_con->create_statement( ).
* ggf. Parameter setzen
        o_stmt->set_param( REF #( p_var1 ) ).

* SQL-Statement ausführen (mit Rückgabemenge)
        DATA(o_result) = o_stmt->execute_query( lv_stmt ).

* Metadaten
        DATA(o_meta) = o_result->get_metadata( ).
* Strukturdescriptor
        DATA(o_struct) = o_result->get_struct_ref( o_meta ).
        DATA(o_struct_descr) = CAST cl_abap_datadescr( cl_abap_structdescr=>describe_by_data_ref( o_struct ) ).
* Tabellendescriptor erzeugen
        DATA(o_table_descr) = cl_abap_tabledescr=>create( p_line_type = o_struct_descr ).
* Tabellenobjekt anhand des Tabellendeskriptors erstellen
        DATA: o_table TYPE REF TO data.
        CREATE DATA o_table TYPE HANDLE o_table_descr.

* interne Tabelle für Rückgabedaten setzen
        o_result->set_param_table( o_table ).

* Daten in interne Tabelle schreiben
* Parameter upto gibt an, wieviele Datensätze gelesen werden sollen, default = 0 (alle)
        DATA(lv_rows) = o_result->next_package( upto = 0 ).

* Sind Daten vorhanden?
        IF lv_rows > 0.
* Feldsymbol auf das Tabellenobjekt
          FIELD-SYMBOLS <table> TYPE ANY TABLE.
          ASSIGN o_table->* TO <table>.
* Datenausgabe
          cl_demo_output=>display( <table> ).
        ELSE.
          WRITE: / 'Keine Rückgabedaten vorhanden.'.
        ENDIF.

* Resultset schließen
        o_result->close( ).
* DB-Connection schließen
        o_con->close( ).
      ELSE.
        WRITE : / 'Keine Berechtigungen.'.
      ENDIF.
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

Links

  • http://zevolving.com/2013/05/abap-database-connectivity-adbc/
admin 23. Januar 2019 12. Juni 2024ADBC ABAP, ADBC, close, cl_abap_datadescr, cl_abap_structdescr, cl_abap_tabledescr, cl_sql_connection, con_name, create, CREATE DATA, create_statement, DBCON, describe_by_data_ref, execute_query, get_connection, get_metadata, get_struct_ref, next_package, set_param, set_param_table, S_DBCON, TYPE HANDLE

[ABAP] Auf Daten eines ALV-Grids eines Reports zugreifen

Variante 1 (SUBMIT)

* https://blogs.sap.com/2011/07/07/gain-programmatic-access-to-data-of-sapgui-alv-reports/
* http://www.saptutorial.org/get-data-from-alv-report-sap-standard-and-output-into-internal-table/

* Initialisierung
cl_salv_bs_runtime_info=>set( EXPORTING display  = abap_false   " Report anzeigen?
                                        metadata = abap_true    " Metadaten des ALV-Grids ermitteln?
                                        data     = abap_true ). " Datenimport aus ALV-Grid?

* Selektionsparameter des Reports 'RSVTPROT' (Transaktion SCU3)
DATA: it_sel_par TYPE STANDARD TABLE OF rsparams WITH DEFAULT KEY.

APPEND VALUE #( selname = 'CUSOBJ' " Name Parameter oder Selektionskriterium
                kind    = 'P'      " P - Parameter, S - Selektionskriterium
                sign    = 'I'
                option  = 'EQ'
                low     = 'Z...' ) TO it_sel_par. " NAME des Customizing-Objektes (Z-Tabelle ...)

APPEND VALUE #( selname = 'DBEG' " Name Parameter oder Selektionskriterium
                kind    = 'P'    " P - Parameter, S - Selektionskriterium
                sign    = 'I'
                option  = 'EQ'
                low     = '20170101' ) TO it_sel_par.

APPEND VALUE #( selname = 'DEND' " Name Parameter oder Selektionskriterium
                kind    = 'P'    " P - Parameter, S - Selektionskriterium
                sign    = 'I'
                option  = 'EQ'
                low     = '20171231' ) TO it_sel_par.

APPEND VALUE #( selname = 'TBEG' " Name Parameter oder Selektionskriterium
                kind    = 'P'    " P - Parameter, S - Selektionskriterium
                sign    = 'I'
                option  = 'EQ'
                low     = '000000' ) TO it_sel_par.

APPEND VALUE #( selname = 'TEND' " Name Parameter oder Selektionskriterium
                kind    = 'P'    " P - Parameter, S - Selektionskriterium
                sign    = 'I'
                option  = 'EQ'
                low     = '235959' ) TO it_sel_par.

APPEND VALUE #( selname = 'ALV_GRID' " Name Parameter oder Selektionskriterium
                kind    = 'P'        " P - Parameter, S - Selektionskriterium
                sign    = 'I'
                option  = 'EQ'
                low     = 'X' ) TO it_sel_par.

* Report mit Selektionsparametern aufrufen
SUBMIT rsvtprot WITH SELECTION-TABLE it_sel_par AND RETURN.

TRY.
    DATA: o_alv_data TYPE REF TO data.

* Datenreferenz auf ALV-Daten des Reports
    cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = o_alv_data ).

    IF o_alv_data IS BOUND.
      FIELD-SYMBOLS: <alv> TYPE ANY TABLE.
      ASSIGN o_alv_data->* TO <alv>.

      IF <alv> IS ASSIGNED.

* Metadaten des ALV-Grids
        DATA(lv_metadata) = cl_salv_bs_runtime_info=>get_metadata( ).

* ALV-Grid-Titel
        WRITE: / lv_metadata-s_layout-grid_title.

        ULINE.

* ALV-Spaltentitel (Feldkatalog)
        LOOP AT lv_metadata-t_fcat ASSIGNING FIELD-SYMBOL(<f>).
          WRITE: / <f>-fieldname, <f>-seltext, <f>-tooltip, <f>-reptext, <f>-domname.
        ENDLOOP.

        ULINE.

* Anzahl Spalten
        DATA(lv_col_cnt) = lines( lv_metadata-t_fcat ).

* Datenausgabe
        LOOP AT <alv> ASSIGNING FIELD-SYMBOL(<row>).
          DO lv_col_cnt TIMES.
* Spaltenweise die Zellen der akt. Zeile
            ASSIGN COMPONENT sy-index OF STRUCTURE <row> TO FIELD-SYMBOL(<cell>).
            IF <cell> IS ASSIGNED.
              WRITE: <cell>.
            ENDIF.
          ENDDO.
          SKIP.
        ENDLOOP.

      ENDIF.
    ELSE.
      WRITE: / 'Keine ALV-Daten verfügbar.'.
    ENDIF.

  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

TRY.
    cl_salv_bs_runtime_info=>clear_all( ).
  CATCH cx_root INTO DATA(e_txt2).
    WRITE: / e_txt2->get_text( ).
ENDTRY.

Variante 2 (CALL TRANSACTION)

* Initialisierung
cl_salv_bs_runtime_info=>set( EXPORTING display  = abap_false   " Report anzeigen?
                                        metadata = abap_true    " Metadaten des ALV-Grids ermitteln?
                                        data     = abap_true ). " Datenimport aus ALV-Grid?

* Selektionparameter "Werk" vorbelegen
SET PARAMETER ID 'WRK' FIELD '10'.
* Transaktion aufrufen
CALL TRANSACTION 'MM60' WITHOUT AUTHORITY-CHECK AND SKIP FIRST SCREEN.

IF sy-subrc = 0.
  TRY.
      DATA: o_alv_data TYPE REF TO data.

* Datenreferenz auf ALV-Daten des Reports
      cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = o_alv_data ).

      IF o_alv_data IS BOUND.
        FIELD-SYMBOLS: <alv> TYPE ANY TABLE.
        ASSIGN o_alv_data->* TO <alv>.

        IF <alv> IS ASSIGNED.

* Metadaten des ALV-Grids
          DATA(lv_metadata) = cl_salv_bs_runtime_info=>get_metadata( ).

* ALV-Grid-Titel
          WRITE: / lv_metadata-s_layout-grid_title.

          ULINE.

* ALV-Spaltentitel (Feldkatalog)
          LOOP AT lv_metadata-t_fcat ASSIGNING FIELD-SYMBOL(<f>).
            WRITE: / <f>-fieldname, <f>-seltext, <f>-tooltip, <f>-reptext, <f>-domname.
          ENDLOOP.

          ULINE.

* Anzahl Spalten
          DATA(lv_col_cnt) = lines( lv_metadata-t_fcat ).

* Datenausgabe
          LOOP AT <alv> ASSIGNING FIELD-SYMBOL(<row>).
            DO lv_col_cnt TIMES.
* Spaltenweise die Zellen der akt. Zeile
              ASSIGN COMPONENT sy-index OF STRUCTURE <row> TO FIELD-SYMBOL(<cell>).
              IF <cell> IS ASSIGNED.
                WRITE: <cell>.
              ENDIF.
            ENDDO.
            SKIP.
          ENDLOOP.

        ENDIF.
      ELSE.
        WRITE: / 'Keine ALV-Daten verfügbar.'.
      ENDIF.

    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

  TRY.
      cl_salv_bs_runtime_info=>clear_all( ).
    CATCH cx_root INTO DATA(e_txt2).
      WRITE: / e_txt2->get_text( ).
  ENDTRY.
ENDIF.
admin 29. November 2017 31. Januar 2019ALV, Interne Tabellen ABAP, ASSIGN COMPONENT, CALL TRANSACTION, clear_all, cl_salv_bs_runtime_info, get_data_ref, get_metadata, rsparams, set, SET PARAMETER ID, SUBMIT, WITH SELECTION-TABLE
  • Kategorien

    aufklappen | zuklappen
  • Neueste Beiträge

    • Kartoffelsalat
    • [CDS-Views] SAP-Standard CDS Views suchen
    • [ABAP] Statuswerte zu einem IH-Auftrag lesen
    • [ABAP] Gantt-Chart anzeigen
    • [ABAP] SAPscript-Texte: Clusterdaten ohne READ_TEXT direkt aus Tabelle STXL lesen
    • [CDS-Views] SAPScript-Texte mit Hilfe von virtuellen Elementen lesen
    • [ABAP] Model-Provider (MPC) und Data-Providerklassen (DPC) zu einem OData-Service ermitteln
    • [SAP] Anpassungen von Datenbanktabellen umsetzen
    • [SAP] Übersicht modulspezifischer SAP-Tabellen
    • [ABAP] BDS-Grafiken (Bitmaps) auslesen und anzeigen
  • Archiv

  • Meta

    • Anmelden
    • Feed der Einträge
    • Kommentar-Feed
    • WordPress.org
  • Related Posts

    • [ABAP] RTTS: Interne Tabelle dynamisch erzeugen
    • [ABAP] ABAP Database Connectivity (ADBC) – CASE-insensitive Suche auf der Datenbank
    • [ABAP] Interne Tabellen im Format Office Open XML (SpreadsheetML) speichern
    • [ABAP] ADBC: ABAP Database Connectivity
    • [ABAP] CSV-Datei in interne Table einlesen
    • [ABAP] Schlüsselspalten einer DB-Tabelle ermitteln
    • [ABAP] XLSX-Datei mit Klasse cl_ehfnd_xlsx einlesen und in SALV-Grid anzeigen
    • [ABAP] RTTI / RTTC / RTTS: Verwendung von Typdescriptoren
    • [ABAP] NativeSQL: Zugriff auf eine Oracle-Datenbank
    • [ABAP] ABAP2XLSX: Interne Tabelle als Excel-Datei (*.xlsx) aufbereiten und mit Desktop Office Integration (DOI) als Excel inplace anzeigen
  • Tags

    ABAP (987) Android (16) CLASS (20) cl_abap_list_layout (19) cl_bcs_convert (29) cl_gui_alv_grid (24) cl_gui_container (39) cl_gui_docking_container (25) cl_gui_frontend_services (50) cl_salv_table (58) cntl_simple_event (16) create (27) Date (16) default_screen (28) display (14) EWM (17) Fiori (23) FREE OBJECT (15) get_columns (22) gui_download (15) HTML (16) JavaScript (78) JSON (23) MIME (17) NEW (20) OData (33) ole2_object (15) OpenSQL (44) Python (23) Raspberry Pi (50) Raspberry Pi 2 (27) Raspberry Pi 4 (23) Raspian (22) RegEx (18) SAP (355) SAPUI5 (27) SELECT (25) String (33) stringtab (15) suppress_toolbar (19) UTF-8 (15) Value (27) XML (29) xstring (20) xstring_to_solix (15)
(W) 2026 by codezentrale.de
Präsentiert von Tempera & WordPress.