[ABAP] GTT: Globale Temporäre Tabellen zum Zwischenspeichern von Daten

GTT – Globale Temporäre Tabellen

  • Objekt auf Datenbankebene, verfügbar ab NW AS ABAP 7.52
  • Verarbeitung globaler temporärer Daten innerhalb einer Datenbank-LUW
  • ist temporäre transparenten Datenbanktabelle mit Auslieferungsklasse „L“
  • bietet die Möglichkeit, SQL-Operatoren auf temporäre Daten anzuwenden
  • User-spezifisch
  • Workload auf Datenbank
  • Zugriff per Open SQL
  • verursacht geringere Verwaltungskosten als reguläre transparente Tabellen und bietet eine höhere Leistung
* Demoprogramm: DEMO_GTT

* globale temporäre Tabelle DEMO_GTT hat Auslieferungsklasse "L"
* zwei Datensätze einfügen
INSERT demo_gtt FROM TABLE @( VALUE #( ( id = 'A' col = 111 )
                                       ( id = 'B' col = 222 )
                                     )
                            ).

* Daten holen und anzeigen
SELECT FROM demo_gtt
  FIELDS *
  INTO TABLE @DATA(it_gtt).

LOOP AT it_gtt ASSIGNING FIELD-SYMBOL(<f>).
  WRITE: / <f>-id, <f>-col.
ENDLOOP.

* Am Ende immer Daten aus der GTT löschen,
* sonst Exception COMMIT_GTT_ERROR (Implizites Datenbank-Commit wurde abgebrochen wegen nicht leerer GTTs)
DELETE FROM demo_gtt.

Links

[ABAP] ABAP2XLSX: Inhalt einer Worksheet in eine interne Tabelle schreiben

* einfaches, generisches Beispiel für die Ausgabe mit Hilfe von Stringspalten
TYPES: BEGIN OF ty_s_stringtab,
         col1 TYPE string,
         col2 TYPE string,
         col3 TYPE string,
       END OF ty_s_stringtab.

TYPES: ty_it_stringtab TYPE STANDARD TABLE OF ty_s_stringtab WITH DEFAULT KEY.

**********************************************************************
* Selektionsbild
**********************************************************************
PARAMETERS: p_fname TYPE file_table-filename OBLIGATORY.

* wenn die F4-Hilfe für den Dateinamen aufgerufen wird
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.

  DATA: lv_rc TYPE i.
  DATA: it_files TYPE filetable.
  DATA: lv_action TYPE i.

* File-Tabelle leeren, da hier noch alte Einträge von vorherigen Aufrufen drin stehen können
  CLEAR it_files.

* FileOpen-Dialog aufrufen
  TRY.
      cl_gui_frontend_services=>file_open_dialog( EXPORTING file_filter    = |xlsx (*.xlsx)\|*.xlsx\|{ cl_gui_frontend_services=>filetype_all }|
                                                            multiselection = abap_false
                                                  CHANGING  file_table     = it_files
                                                            rc             = lv_rc
                                                            user_action    = lv_action ).

      IF lv_action = cl_gui_frontend_services=>action_ok.
* wenn Datei ausgewählt wurde
        IF lines( it_files ) > 0.
* ersten Tabelleneintrag lesen
          p_fname = it_files[ 1 ]-filename.
        ENDIF.
      ENDIF.

    CATCH cx_root INTO DATA(e_text).
      MESSAGE e_text->get_text( ) TYPE 'I'.
  ENDTRY.

**********************************************************************
* START-OF-SELECTION
**********************************************************************
START-OF-SELECTION.

  DATA: it_stringtab TYPE ty_it_stringtab.

  TRY.
* Reader-Objekt erzeugen
      DATA(o_reader) = CAST zif_excel_reader( NEW zcl_excel_reader_2007( ) ).
      DATA(o_excel) = o_reader->load_file( p_fname ).

* Worksheet mit Index 1
      DATA(o_worksheet) = o_excel->get_worksheet_by_index( iv_index = 1 ).

* Inhalt der Worksheet in iTab mappen
* Voraussetzung ist die korrekte Abbildung der Ausgabedaten in der itab (Datentypen, Anzahl Spalten)
* falls es hier zu Konvertierungsfehlern kommt (float-Werte usw.), dann bricht die Funktion ab
      o_worksheet->get_table( EXPORTING iv_skip_bottom_empty_rows = abap_true
                              IMPORTING et_table                  = it_stringtab ).

      cl_demo_output=>write_data( it_stringtab ).

* HTML-Code vom Demo-Output holen
      DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
      cl_abap_browser=>show_html( EXPORTING title       = 'Daten'
                                            html_string = lv_html
                                            container   = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
      WRITE: space.
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

[ABAP] Suchhilfe zu DDIC-Feld bestimmen

DATA: lv_shlp_descr TYPE shlp_descr.

* Die einem DDIC-Feld zugeordnete Suchhilfe bestimmen
CALL FUNCTION 'F4IF_DETERMINE_SEARCHHELP'
  EXPORTING
    tabname           = 'MARA'
    fieldname         = 'MATNR'
    selection_screen  = abap_true " auch die Wertetabelle der Domäne für die F4-Hilfe heranziehen
  IMPORTING
    shlp              = lv_shlp_descr
  EXCEPTIONS
    field_not_found   = 1
    no_help_for_field = 2
    inconsistent_help = 3
    OTHERS            = 4.

IF sy-subrc = 0.
* Hier Objekte für die Ausgabe hinzufügen
  cl_demo_output=>write_data( lv_shlp_descr ).

* HTML-Code vom Demo-Output holen
  DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING title       = 'Suchhilfe'
                                        html_string = lv_html
                                        container   = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
  WRITE: space.
ENDIF.

[ABAP] Projektdefinition zu einem PSP-Element lesen

* PRPS-POSID (Projektstrukturplanelement (PSP-Element))
PARAMETERS: p_wbs TYPE bapi_wbs_list MATCHCODE OBJECT h_wbselem DEFAULT ''.

START-OF-SELECTION.

  DATA: it_wbs_element_table TYPE STANDARD TABLE OF bapi_wbs_elements WITH DEFAULT KEY.
  DATA: it_wbs_hierarchie_table TYPE STANDARD TABLE OF bapi_wbs_hierarchie WITH DEFAULT KEY.

  it_wbs_element_table = VALUE #( ( wbs_element = p_wbs ) ).

* Read detailed information for work breakdown structures
  CALL FUNCTION 'BAPI_PROJECT_GETINFO'
    EXPORTING
      with_subtree           = abap_true
    TABLES
      i_wbs_element_table    = it_wbs_element_table
      e_wbs_hierarchie_table = it_wbs_hierarchie_table.

  cl_demo_output=>write_data( it_wbs_element_table ).
  cl_demo_output=>write_data( it_wbs_hierarchie_table ).

*   HTML-Code vom Demo-Output holen
  DATA(lv_html) = cl_demo_output=>get( ).

*   Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING title       = 'Daten'
                                        html_string = lv_html
                                        container   = cl_gui_container=>default_screen ).

*   cl_gui_container=>default_screen erzwingen
  WRITE: space.

[ABAP] DMS: Dokumentenstatus lesen

* Dokumentart (TA DC10, Tabelle TDWA)
PARAMETERS: p_type TYPE bapi_doc_aux-doctype OBLIGATORY.
* Dokumentnummer, mit Suchhilfe auf Tabelle DRAW (Dokumentinformationssatz)
PARAMETERS: p_num TYPE bapi_doc_aux-docnumber OBLIGATORY DEFAULT '10000000001' MATCHCODE OBJECT /plmb/dir_elm.
* Teildokument
PARAMETERS: p_part TYPE bapi_doc_aux-docpart OBLIGATORY DEFAULT '000'.
* Dokumentversion
PARAMETERS: p_ver TYPE bapi_doc_aux-docversion OBLIGATORY DEFAULT '00'.

START-OF-SELECTION.

  DATA: lv_statusextern TYPE bapi_doc_draw-statusextern.
  DATA: lv_statusintern TYPE bapi_doc_draw-statusintern.
  DATA: lv_statusdescription TYPE bapi_doc_tdws-description.
  DATA: lv_return TYPE bapiret2.

* Read Document Status
  CALL FUNCTION 'BAPI_DOCUMENT_GETSTATUS'
    EXPORTING
      documenttype      = p_type
      documentnumber    = p_num
      documentpart      = p_part
      documentversion   = p_ver
    IMPORTING
      statusextern      = lv_statusextern
      statusintern      = lv_statusintern      " Statuswerte in Tabelle TDWS
      statusdescription = lv_statusdescription
      return            = lv_return.

  IF lv_return-type CA 'EA'.

  ELSE.
    cl_demo_output=>write_data( lv_statusextern ).
    cl_demo_output=>write_data( lv_statusintern ).
    cl_demo_output=>write_data( lv_statusdescription ).
    cl_demo_output=>write_data( lv_return ).

*     HTML-Code vom Demo-Output holen
    DATA(lv_html) = cl_demo_output=>get( ).

*     Daten im Inline-Browser im SAP-Fenster anzeigen
    cl_abap_browser=>show_html( EXPORTING title       = 'Daten'
                                          html_string = lv_html
                                          container   = cl_gui_container=>default_screen ).

*     cl_gui_container=>default_screen erzwingen
    WRITE: space.
  ENDIF.

[ABAP] DMS: Dokumentenstatus setzen

* Dokumentart (TA DC10, Tabelle TDWA)
PARAMETERS: p_type TYPE bapi_doc_aux-doctype OBLIGATORY.
* Dokumentnummer, mit Suchhilfe auf Tabelle DRAW (Dokumentinformationssatz)
PARAMETERS: p_num TYPE bapi_doc_aux-docnumber OBLIGATORY DEFAULT '10000000001' MATCHCODE OBJECT /plmb/dir_elm.
* Teildokument
PARAMETERS: p_part TYPE bapi_doc_aux-docpart OBLIGATORY DEFAULT '000'.
* Dokumentversion
PARAMETERS: p_ver TYPE bapi_doc_aux-docversion OBLIGATORY DEFAULT '00'.
* Dokumentstatus, Statuswerte in Tabelle TDWS
PARAMETERS: p_status TYPE bapi_doc_draw-statusintern OBLIGATORY DEFAULT '1' MATCHCODE OBJECT cbglwb_report_status.

START-OF-SELECTION.

  DATA: lv_return TYPE bapiret2.

* Set Document Status
  CALL FUNCTION 'BAPI_DOCUMENT_SETSTATUS'
    EXPORTING
      documenttype    = p_type
      documentnumber  = p_num
      documentpart    = p_part
      documentversion = p_ver
*     statusextern    = ' '
      statusintern    = p_status " Statuswerte in Tabelle TDWS
*     statuslog       = ' '
    IMPORTING
      return          = lv_return.

  IF lv_return-type CA 'EA'.
* Rollback bei Fehler
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
* Daten verbuchen
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = abap_true.

    cl_demo_output=>write_data( lv_return ).

*     HTML-Code vom Demo-Output holen
    DATA(lv_html) = cl_demo_output=>get( ).

*     Daten im Inline-Browser im SAP-Fenster anzeigen
    cl_abap_browser=>show_html( EXPORTING title       = 'Daten'
                                          html_string = lv_html
                                          container   = cl_gui_container=>default_screen ).

*     cl_gui_container=>default_screen erzwingen
    WRITE: space.
  ENDIF.

[ABAP] Daten zu einem PSP-Element lesen

* PRPS-POSID (Projektstrukturplanelement (PSP-Element))
PARAMETERS: p_wbs TYPE bapi_wbs_list MATCHCODE OBJECT h_wbselem DEFAULT ''.

START-OF-SELECTION.

  DATA(it_wbs_element) = VALUE bapi_wbs_list_tab( ( wbs_element = p_wbs ) ).
  DATA: it_e_wbs_element TYPE STANDARD TABLE OF bapi_bus2054_detail WITH DEFAULT KEY.
  DATA(it_return) = VALUE bapiret2_t( ).

* Detail Data for WBS Elements
  CALL FUNCTION 'BAPI_BUS2054_GETDATA'
*    EXPORTING
*      i_project_definition =
    TABLES
      it_wbs_element = it_wbs_element
      et_wbs_element = it_e_wbs_element
      et_return      = it_return.


* Hier Objekte für die Ausgabe hinzufügen
  cl_demo_output=>write_data( it_wbs_element ).
  cl_demo_output=>write_data( it_e_wbs_element ).
  cl_demo_output=>write_data( it_return ).

* HTML-Code vom Demo-Output holen
  DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING title       = 'Daten'
                                        html_string = lv_html
                                        container   = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
  WRITE: space.

[ABAP] IDOC als XML anzeigen

* IDoc-Nummer
PARAMETERS: p_idoc TYPE edidc-docnum MATCHCODE OBJECT edi_docnum DEFAULT '12345'.

START-OF-SELECTION.

  DATA: lv_action TYPE sy-ucomm.

* Anzeigen eines IDocs in XML-Format mit XSL
  CALL FUNCTION 'IDOC_XML_TRANSFORM'
    EXPORTING
      docnum                        = p_idoc
*     actions                       =
*     styleid                       = 'IE5' " default IE5, siehe auch Tabelle IDOCSTYLE
    IMPORTING
      action                        = lv_action
    EXCEPTIONS
      no_idoc_xml_loaded            = 1
      no_idoc_xml_display_available = 2
      error_loading_object          = 3
      OTHERS                        = 4.

  IF sy-subrc NE 0.
    WRITE: / 'Fehler:', sy-subrc.
  ELSE.
    WRITE: / 'Action:', lv_action.
  ENDIF.