[ABAP] Informationen zu Business Objekten anzeigen

* Transaktion SWO1

DATA: lv_objtyp TYPE swo_objtyp.
DATA: lv_stext TYPE swc_shtext.

SELECT-OPTIONS: so_objtp FOR lv_objtyp.
SELECT-OPTIONS: so_stext FOR lv_stext.
*PARAMETERS: p_spras type sy-langu DEFAULT 'E'.

INITIALIZATION.

  so_objtp[] = VALUE #( ( sign = 'I' option = 'EQ' low = 'BUS2012' high = '' ) ).
  so_stext[] = VALUE #( ( sign = 'I' option = 'CP' low = 'Bestellung*' high = '' )
                        ( sign = 'I' option = 'CP' low = 'Eink*' high = '' ) ).

START-OF-SELECTION.

  SELECT FROM tojtb AS tb
    INNER JOIN tojtt AS tt ON tb~name = tt~name
    FIELDS tb~name,
           tb~editelem,
           tt~ntext,
           tt~stext
    WHERE tb~name IN @so_objtp
*      AND tb~activelang = @p_spras
*      AND tt~language = @p_spras
    INTO TABLE @DATA(it_tojtb).

  IF sy-subrc = 0.

    SELECT dv~objtype,   " BO Typ
           dv~verb,      " Funktion
           dv~verbtype,  " Funktionstyp ( ' ' =   Kein Verb, K = Schlüsselfeld, A = Attribut, M = Methode, E = Ereignis )
           dv~editelem,  " Element
           dv~refstruct, " Tabelle
           dv~reffield,  " Bezugsfeld
           dv~abapname,  " Funktionsbaustein
           tv~descript,  " Beschreibung
           tv~shorttext  " Kurztext
      INTO TABLE @DATA(it_bor_info)
      FROM swotdv AS dv
      INNER JOIN swottv AS tv ON dv~objtype = tv~objtype AND dv~verb = tv~verb
      WHERE dv~objtype IN @so_objtp
*        AND tv~language = @p_spras
      AND tv~shorttext IN @so_stext.

    IF sy-subrc = 0.

      SORT: it_bor_info BY verbtype verb.

      TRY.
          DATA(lv_tojtb_name) = SWITCH #( lines( it_tojtb ) WHEN 0 THEN || ELSE it_tojtb[ 1 ]-name ).
          DATA(lv_tojtb_stext) = SWITCH #( lines( it_tojtb ) WHEN 0 THEN || ELSE it_tojtb[ 1 ]-stext ).

          lv_tojtb_name = SWITCH #( lines( so_objtp ) WHEN 0 THEN || ELSE |Objekttyp: { lv_tojtb_name }| ).
          lv_tojtb_stext = SWITCH #( lines( so_objtp ) WHEN 0 THEN |keine Selektion| ELSE lv_tojtb_stext ).

* SALV-Table
          DATA: o_salv TYPE REF TO cl_salv_table.

          cl_salv_table=>factory( IMPORTING
                                    r_salv_table   = o_salv
                                  CHANGING
                                    t_table        = it_bor_info ).

* Grundeinstellungen
          o_salv->get_functions( )->set_all( abap_true ).
          o_salv->get_columns( )->set_optimize( abap_true ).
          o_salv->get_display_settings( )->set_list_header( |{ lv_tojtb_name } ({ lv_tojtb_stext })| ).
          o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
          o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

* Spaltenüberschriften: technischer Name und Beschreibungstexte
          LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
            DATA(o_col) = <c>-r_column.
            o_col->set_short_text( || ).
            o_col->set_medium_text( || ).
            o_col->set_long_text( |{ o_col->get_columnname( ) } [{ o_col->get_long_text( ) }]| ).
          ENDLOOP.

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

[ABAP] Funktionen von Business Objekten aufrufen

Beispiel 1 (Bestellung anzeigen)

* http://saptechnical.com/Tutorials/Workflow/BusinessObjects/Page1.htm
* weitere Funktionen siehe SAP-Include:
* INCLUDE <cntn01>.

* Paket: SWO

* Tabellen:

* TOJTB (Business Object Repository Grunddaten)
* TOJTT (Texte Grunddaten)
* TOJTD (Customizing Objekttypen)
* SWOTDI (Definition Schnittstellen)
* SWOTDV (Objekttyp Verben Definition)
* SWOTLQ (Laufzeittabelle Parameter, Ausnahmen)
* SWOTLV (Laufzeittabelle Verben)

* BUS2012 == Bestellung
PARAMETERS: p_objtyp TYPE swo_objtyp DEFAULT 'BUS2012'.
* Bestellnummer
PARAMETERS: p_objkey TYPE swo_typeid DEFAULT '0001122333'.

START-OF-SELECTION.

  TYPES: ty_it_container TYPE STANDARD TABLE OF swcont WITH DEFAULT KEY.

  DATA: lv_obj TYPE swo_objhnd.
  DATA: lv_ret TYPE swotreturn.

  * Business Objekt initiieren
  CALL FUNCTION 'SWO_CREATE'
    EXPORTING
      objtype           = p_objtyp
      objkey            = p_objkey
    IMPORTING
      object            = lv_obj
      return            = lv_ret
    EXCEPTIONS
      no_remote_objects = 1
      OTHERS            = 2.

  IF sy-subrc = 0.
  * Container für Rückgabewerte
    DATA: it_container TYPE ty_it_container.

  * Buisness Objekt Metode aufrufen / Attribute setzen
    CALL FUNCTION 'SWO_INVOKE'
      EXPORTING
        access     = 'C'        " C - Call Method, G - Get Attribute
        object     = lv_obj
        verb       = 'DISPLAY'  " Anzeigen
      IMPORTING
        return     = lv_ret
      TABLES
        container  = it_container.

    IF lv_ret-code <> 0.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ELSE.
    IF lv_ret-code <> 0.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ENDIF.

  CALL FUNCTION 'SWO_FREE'
    EXPORTING
      object = lv_obj
    IMPORTING
      return = lv_ret.

  IF lv_ret-code <> 0.
    WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
  ENDIF.

Beispiel 2 (Details zur Bestellung auflisten)

* http://saptechnical.com/Tutorials/Workflow/BusinessObjects/Page1.htm
* weitere Funktionen siehe SAP-Include:
* INCLUDE <cntn01>.

* BUS2012 == Bestellung
PARAMETERS: p_objtyp TYPE swo_objtyp DEFAULT 'BUS2012'.
* Bestellnummer
PARAMETERS: p_objkey TYPE swo_typeid DEFAULT '0001122333'.

START-OF-SELECTION.

  TYPES: ty_it_container TYPE STANDARD TABLE OF swcont WITH DEFAULT KEY.

  DATA: lv_obj TYPE swo_objhnd.
  DATA: lv_ret TYPE swotreturn.

  * Business Objekt initiieren
  CALL FUNCTION 'SWO_CREATE'
    EXPORTING
      objtype           = p_objtyp
      objkey            = p_objkey
    IMPORTING
      object            = lv_obj
      return            = lv_ret
    EXCEPTIONS
      no_remote_objects = 1
      OTHERS            = 2.

  IF sy-subrc = 0.
  * Container für Rückgabewerte
    DATA: it_container TYPE ty_it_container.

  * Buisness Objekt Metode aufrufen / Attribute setzen
    CALL FUNCTION 'SWO_INVOKE'
      EXPORTING
        access    = 'C'           " C - Call Method, G - Get Attribute
        object    = lv_obj
        verb      = 'GETDETAIL1'  " Details
      IMPORTING
        return    = lv_ret
      TABLES
        container = it_container.

    IF lv_ret-code = 0.
      LOOP AT it_container ASSIGNING FIELD-SYMBOL(<a>).
        WRITE: / |{ <a>-element }: { <a>-value }|.
      ENDLOOP.
    ELSE.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ELSE.
    IF lv_ret-code <> 0.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ENDIF.

  CALL FUNCTION 'SWO_FREE'
    EXPORTING
      object = lv_obj
    IMPORTING
      return = lv_ret.

  IF lv_ret-code <> 0.
    WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
  ENDIF.

Beispiel 3 (Attribut zum Material anzeigen)

* http://saptechnical.com/Tutorials/Workflow/BusinessObjects/Page1.htm
* weitere Funktionen siehe SAP-Include:
* INCLUDE <cntn01>.

* BUS1001006 == Standard Material
PARAMETERS: p_objtyp TYPE swo_objtyp DEFAULT 'BUS1001006'.
* 18-stellige Materialnummer
PARAMETERS: p_objkey TYPE swo_typeid DEFAULT '000000001112223333'.

START-OF-SELECTION.

  TYPES: ty_it_container TYPE STANDARD TABLE OF swcont WITH DEFAULT KEY.

  DATA: lv_obj TYPE swo_objhnd.
  DATA: lv_ret TYPE swotreturn.

  * Buisiness Objekt initiieren
  CALL FUNCTION 'SWO_CREATE'
    EXPORTING
      objtype           = p_objtyp
      objkey            = p_objkey
    IMPORTING
      object            = lv_obj
      return            = lv_ret
    EXCEPTIONS
      no_remote_objects = 1
      OTHERS            = 2.

  IF sy-subrc = 0.
  * Container für Rückgabewerte
    DATA: it_container TYPE ty_it_container.

  * Buisness Objekt Metode aufrufen / Attribute setzen
    CALL FUNCTION 'SWO_INVOKE'
      EXPORTING
        access    = 'G'             " C - Call Method, G - Get Attribute
        object    = lv_obj
        verb      = 'MATERIALTYPE'  " Attribut
      IMPORTING
        return    = lv_ret
      TABLES
        container = it_container.

    IF lv_ret-code = 0.
      LOOP AT it_container ASSIGNING FIELD-SYMBOL(<a>).
        WRITE: / |{ <a>-element }: { <a>-value }|.
      ENDLOOP.
    ELSE.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ELSE.
    IF lv_ret-code <> 0.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ENDIF.

  CALL FUNCTION 'SWO_FREE'
    EXPORTING
      object = lv_obj
    IMPORTING
      return = lv_ret.

  IF lv_ret-code <> 0.
    WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
  ENDIF.

Beispiel 4 (Material Detail)

* http://saptechnical.com/Tutorials/Workflow/BusinessObjects/Page1.htm
* weitere Funktionen siehe SAP-Include:
* INCLUDE <cntn01>.

* BUS1001006 == Standard Material
PARAMETERS: p_objtyp TYPE swo_objtyp DEFAULT 'BUS1001006'.
* 18-stellige Materialnummer
PARAMETERS: p_objkey TYPE swo_typeid DEFAULT '000000001112223333'.

START-OF-SELECTION.

  TYPES: ty_it_container TYPE STANDARD TABLE OF swcont WITH DEFAULT KEY.

  DATA: lv_obj TYPE swo_objhnd.
  DATA: lv_ret TYPE swotreturn.

  * Buisiness Objekt initiieren
  CALL FUNCTION 'SWO_CREATE'
    EXPORTING
      objtype           = p_objtyp
      objkey            = p_objkey
    IMPORTING
      object            = lv_obj
      return            = lv_ret
    EXCEPTIONS
      no_remote_objects = 1
      OTHERS            = 2.

  IF sy-subrc = 0.
  * Container für Rückgabewerte
    DATA: it_container TYPE ty_it_container.

  * SWO1 -> Objekttyp -> Methoden
  * oder
  * Tabelle SWOTDV -> Spalte VERB, VERBTYPE = M
  *GetDetail                             Detaildaten zu einem Material ermitteln
  *ExistenceCheck                        Existenz des Objekts prüfen
  *GetList                               Liste mit Kurztext
  *Display                               Material anzeigen
  *GetMRPList                            Dispositionsliste eines Materials
  *GetStockRequirementsList              Aktuelle Bedarfs-/Bestandsliste eines Materials

  * Buisness Objekt Metode aufrufen / Attribute setzen
    CALL FUNCTION 'SWO_INVOKE'
      EXPORTING
        access    = 'C'          " C - Call Method, G - Get Attribute
        object    = lv_obj
        verb      = 'GETDETAIL'  " Details
      IMPORTING
        return    = lv_ret
      TABLES
        container = it_container.

    IF lv_ret-code = 0.
      LOOP AT it_container ASSIGNING FIELD-SYMBOL(<a>).
        WRITE: / |{ <a>-element }: { <a>-value }|.
      ENDLOOP.
    ELSE.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ELSE.
    IF lv_ret-code <> 0.
      WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
    ENDIF.
  ENDIF.

  CALL FUNCTION 'SWO_FREE'
    EXPORTING
      object = lv_obj
    IMPORTING
      return = lv_ret.

  IF lv_ret-code <> 0.
    WRITE: / lv_ret-code, lv_ret-errortype, lv_ret-workarea, lv_ret-message, lv_ret-text, lv_ret-variable1, lv_ret-variable2, lv_ret-variable3, lv_ret-variable4.
  ENDIF.

[ABAP] IMG-Aktivität (Customizing-Punkt) zu einer Transaktion ermitteln

* Tabellen:
*  CUS_ACTEXT (Customizing Aktivität - zugeordnetes Erweiterungs-Objekt)
*  CUS_ACTH   (Customizing Aktivität - Kopfdaten)
*  CUS_ACTOBJ (Customizing Aktivität - Liste der Objekte)
*  CUS_ACTOBT (Customizing Aktivität - Liste der Objekte)
*  CUS_ACTT   (Texttabelle zu den Customizing Aktivitäten)

* TCode
PARAMETERS: p_tc TYPE tstc-tcode DEFAULT 'OMBT'.

START-OF-SELECTION.

  SELECT o~tcode,
         o~act_id,
         o~objectname,
         o~text AS etext,
         t~text,
         e~exit_name,
         e~impl_name,
         e~enhancement
    INTO TABLE @DATA(it_activities)
    FROM cus_actobt AS o
    INNER JOIN cus_acth AS h ON o~act_id = h~act_id
    INNER JOIN cus_actt AS t ON h~act_id = t~act_id
    LEFT OUTER JOIN cus_actext AS e ON o~act_id = e~act_id
    WHERE o~tcode = @p_tc
      AND o~spras = @sy-langu
      AND t~spras = @sy-langu.

  TRY.
* SALV-Table
      DATA: o_salv TYPE REF TO cl_salv_table.

      cl_salv_table=>factory( IMPORTING
                                r_salv_table   = o_salv
                              CHANGING
                                t_table        = it_activities ).

* Grundeinstellungen
      o_salv->get_functions( )->set_all( abap_true ).
      o_salv->get_columns( )->set_optimize( abap_true ).
      o_salv->get_display_settings( )->set_list_header( 'IMG-Aktivitäten zur Transaktion' ).
      o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
      o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

* Spaltenüberschriften: technischer Name und Beschreibungstexte
      LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
        DATA(o_col) = <c>-r_column.
        o_col->set_short_text( || ).
        o_col->set_medium_text( || ).
        o_col->set_long_text( |{ o_col->get_columnname( ) } [{ o_col->get_long_text( ) }]| ).
      ENDLOOP.

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

[ABAP] API-Klasse mit Ersatzfunktionen für eingeschränkte ABAP-Funktionalität in der SAP S/4HANA Cloud-Umgebung

* Verfügbar für SAP S/4HANA Cloud
* SY-DATUM
DATA(lv_sy_datum) = cl_abap_context_info=>get_system_date( ).
* SY-UZEIT
DATA(lv_sy_uzeit) = cl_abap_context_info=>get_system_time( ).
* SY-UNAME
DATA(lv_sy_uname) = cl_abap_context_info=>get_user_technical_name( ).
* Username
DATA(lv_user_name) = cl_abap_context_info=>get_user_formatted_name( ).
* User Description
DATA(lv_user_desc) = cl_abap_context_info=>get_user_description( ).
* SY-LANGU
DATA(lv_sy_langu) = cl_abap_context_info=>get_user_language_abap_format( ).
* ISO-Language
DATA(lv_langu_iso) = cl_abap_context_info=>get_user_language_iso_format( ).
* SY-ZONLO
DATA(lv_sy_zonlo) = cl_abap_context_info=>get_user_time_zone( ).
* System URL
DATA(lv_system_url) = cl_abap_context_info=>get_system_url( ).
* User Business Partner ID
DATA(lv_user_bpid) = cl_abap_context_info=>get_user_business_partner_id( ).
* User alias
DATA(lv_user_alias) = cl_abap_context_info=>get_user_alias( ).

[ABAP] Systeminfos anzeigen

* Name des R/3-Systems
DATA: lv_sy_sysid TYPE sy-sysid.
* Name des zentralen Datenbanksystems
DATA: lv_sy_dbsys TYPE sy-dbsys.
* Betriebssystem des Applikationsservers
DATA: lv_sy_opsys TYPE sy-opsys.
* Anmeldename des Benutzers
DATA: lv_sy_uname TYPE sy-uname.
* Release-Stand des R/3-Systems
DATA: lv_sy_saprl TYPE sy-saprl.
* Installationsnummer
DATA: lv_ev_inst_no TYPE cmorfcoth-instno.
* Releasestände der im System vorhandenen Softwarekomponenten
DATA: it_et_cvers TYPE STANDARD TABLE OF cvers WITH DEFAULT KEY.

* Holt Systeminfos
CALL FUNCTION 'SCSI_GET_SYSTEM_INFO'
  IMPORTING
    sy_sysid   = lv_sy_sysid
    sy_dbsys   = lv_sy_dbsys
    sy_opsys   = lv_sy_opsys
    sy_uname   = lv_sy_uname
    sy_saprl   = lv_sy_saprl
    ev_inst_no = lv_ev_inst_no
  TABLES
    et_cvers   = it_et_cvers.

cl_demo_output=>write_data( lv_sy_sysid ).
cl_demo_output=>write_data( lv_sy_dbsys ).
cl_demo_output=>write_data( lv_sy_opsys ).
cl_demo_output=>write_data( lv_sy_uname ).
cl_demo_output=>write_data( lv_sy_saprl ).
cl_demo_output=>write_data( lv_ev_inst_no ).
cl_demo_output=>write_data( it_et_cvers ).

* 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] Abhängige Objekte in Transportaufträgen ermitteln

* Der Report sucht nach Objektabhängigkeiten in Transportaufträgen

* Tabellen:
*  E070 (Transportsystem: Header von Aufträgen/Aufgaben)
*  E07T (Transportsystem: Kurzbeschreibungen von Aufträgen/Aufgaben)
*  E070C (Transportsystem: Quell-/Zielmandant von Aufträgen/Aufgaben)
*  E071 (Transportsystem: Objekt-Einträge von Aufträgen/Aufgaben)
*  TADIR (Katalog der Repository-Objekte)
*  TPLOG (Logging der tp Aufrufe)

* https://www.berater-wiki.de/Transportauftrag
* https://www.berater-wiki.de/Access_Tabellenbeziehung_Transportauftrag/-Aufgabe
* http://sapyourself.com/2014/06/11/transporte-transporteur-ermitteln-und-analysieren-tabelle-tplog/

PARAMETERS: p_tr TYPE e070-trkorr DEFAULT 'XYZ'.

START-OF-SELECTION.

* TRFUNCTION
*  K  Workbench-Auftrag
*  W  Customizing-Auftrag
*  C  Umzug von Objekten ohne Paketwechsel
*  O  Umzug von Objekten mit Paketwechsel
*  E  Umzug eines kompletten Pakets
*  T  Transport von Kopien
*  S  Entwicklung/Korrektur
*  R  Reparatur
*  X  Unklassifizierte Aufgabe
*  Q  Customizing-Aufgabe
*  G  Stückliste für CTS-Projekt
*  M  Auftrag für Mandantentransport
*  P  Stückliste für Upgrade
*  D  Stückliste für Patch
*  F  Stückliste
*  L  Löschtransport
* TRSTATUS
*  D  Änderbar
*  L  Änderbar, geschützt
*  O  Freigabe gestartet
*  R  Freigegeben
*  N  Freigegeben (Importschutz für reparierte Objekte aktiv)
* KORRDEV
*  CUST  mandantenabhängiges Customizing
*  SYST  Repository, mandantenunabbhängige Objekte
* LOCKFLAG
*     nicht gesperrt
*  X  gesperrt
*  0  nicht importiert
*  1  importiert mit Fehler
*  2  erfolgreich importiert
*  3  erfolgreich aktiviert /After-Import-Methode ausgeführt
*  6  erfolgreich in Schattentabellen importiert
*  7  erfolgreich in neue Schattentabellen importiert
*  8  inaktiver Anteil erfolgreich importiert
  SELECT e~trkorr,      " Auftrag/Aufgabe
         e~trfunction,  " Typ des Auftrags/Aufgabe
         e~trstatus,    " Status des Auftrags/der Aufgabe
         e~tarsystem,   " Transportziel eines Auftrags
         e~korrdev,     " Kategorie des Auftrags/der Aufgabe
         e~as4user,     " Inhaber eines Auftrags oder einer Aufgabe
         e~as4date,     " Datum der letzten Änderung
         e~as4time,     " Uhrzeit der letzten Änderung
         e~strkorr,     " Übergeordneter Auftrag
         t~as4text,     " Kurzbeschreibung von Repository-Objekten
         c~client,      " Quellmandant eines Auftrags
         c~tarclient,   " Zielmandant eines Auftrags
         o~as4pos,      " Dictionary: Zeilenposition
         o~pgmid,       " Programm-ID in Aufträgen und Aufgaben
         o~object,      " Objekttyp
         o~obj_name,    " Objektname in der Objektliste
         o~objfunc,     " Objektfunktion
         o~lockflag,    " Sperrstatus oder Importstatus zu einem Objekteintrag
         o~activity     " Aktivität, mit der Eintrag in Objektliste geschrieben wurde
    INTO TABLE @DATA(it_e070)
    FROM e070 AS e                                    " Transportsystem: Header von Aufträgen/Aufgaben
    INNER JOIN e07t AS t ON e~trkorr = t~trkorr       " Transportsystem: Kurzbeschreibungen von Aufträgen/Aufgaben
    INNER JOIN e070c AS c ON e~trkorr = c~trkorr      " Transportsystem: Quell-/Zielmandant von Aufträgen/Aufgaben
    LEFT OUTER JOIN e071 AS o ON e~trkorr = o~trkorr  " Transportsystem: Objekt-Einträge von Aufträgen/Aufgaben
    WHERE e~trkorr  = @p_tr
       OR e~strkorr = @p_tr
      AND t~langu   = @sy-langu.

  IF sy-subrc = 0.
* sortieren nach Auftrag und Datum / Uhrzeit
    SORT: it_e070 BY trkorr as4date as4time.

    SELECT *
      INTO TABLE @DATA(it_e071)
      FROM e071
      FOR ALL ENTRIES IN @it_e070
      WHERE object   = @it_e070-object
        AND obj_name = @it_e070-obj_name
        AND objfunc  = @it_e070-objfunc.

    IF sy-subrc = 0.

      DATA: o_salv TYPE REF TO cl_salv_table.

      cl_salv_table=>factory( EXPORTING
                                r_container  = cl_gui_container=>default_screen
                              IMPORTING
                                r_salv_table = o_salv
                              CHANGING
                                t_table      = it_e071 ).

      o_salv->get_functions( )->set_all( abap_true ).
      o_salv->get_columns( )->set_optimize( abap_true ).
      o_salv->get_display_settings( )->set_list_header( 'Abhängige Transporte / Aufgaben' ).
      o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
      o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

      LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
        <c>-r_column->set_short_text( '' ).
        <c>-r_column->set_medium_text( '' ).
        <c>-r_column->set_long_text( |{ <c>-r_column->get_columnname( ) } [{ <c>-r_column->get_long_text( ) }]| ).
      ENDLOOP.

      o_salv->display( ).

      WRITE: space.

    ENDIF.

  ENDIF.

[ABAP] Job zu einem Report suchen

* Tabelle TBTCP (Step-Uebersicht eines Batch-Jobs)

* Reportname
DATA(lv_progname) = VALUE tbtcp-progname( ).
* Einplanungsdatum
DATA(lv_date) = VALUE tbtcp-sdldate( ).
* Einplanungszeit
DATA(lv_time) = VALUE tbtcp-sdltime( ).

SELECT-OPTIONS: so_prog FOR lv_progname.
SELECT-OPTIONS: so_date FOR lv_date.
SELECT-OPTIONS: so_time FOR lv_time.

START-OF-SELECTION.

  SELECT *
    INTO TABLE @DATA(it_job)
    FROM tbtcp
    WHERE progname IN @so_prog
      AND sdldate IN @so_date
      AND sdltime IN @so_time.

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

* 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] Infos zu Batchmappen holen

* Transaktion: SM35
* Tabelle APQI (Queue INFO DEFINITION)
* Tabelle APQD (Queue DATA DEFINITION)
* Tabelle APQL (Batch Input Protokoll Verzeichnis)

* Group Name
DATA(lv_groupid) = VALUE apqi-groupid( ).
* Programm
DATA(lv_progid) = VALUE apqi-progid( ).
* Userid
DATA(lv_userid) = VALUE apqi-userid( ).
* Ersteller
DATA(lv_creator) = VALUE apqi-creator( ).
* Erstellung
DATA(lv_credate) = VALUE apqi-credate( ).

SELECT-OPTIONS: so_grpid FOR lv_groupid.
SELECT-OPTIONS: so_prgid FOR lv_progid.
SELECT-OPTIONS: so_user FOR lv_userid.
SELECT-OPTIONS: so_creat FOR lv_creator.
SELECT-OPTIONS: so_cdate FOR lv_credate.

START-OF-SELECTION.
  SELECT
        a~groupid,
        a~progid,
        a~qid,
        a~qstate,  " ' ' - neu, C - in Erstellung, E - fehlerhaft, R - in Bearbeitung, F = verarbeitet, S - im Hintergrund
        a~qerase,
        a~userid,
        a~creator,
        a~credate,
        a~cretime,
        a~startmode,
        d~trans,
        d~block,
        d~segmt,
        d~msgcount,
        d~varlen,
        d~vardata,
        l~temseid,
        l~credate AS cdate,
        l~cretime AS ctime,
        l~creator AS cuser,
        l~destsys,
        l~status
    INTO TABLE @DATA(it_bdc)
    FROM apqi AS a
    INNER JOIN apqd AS d ON a~qid = d~qid
    RIGHT OUTER JOIN apql AS l ON a~qid = l~qid AND a~groupid = l~groupid
    WHERE a~groupid IN @so_grpid
      AND a~progid IN @so_prgid
      AND a~userid IN @so_user
      AND a~creator IN @so_creat
      AND a~credate IN @so_cdate.

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

* 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] SAP-Anwendungskomponente zu Paket oder Entwicklungsobjekt suchen

Variante 1 (über Paketnamen)

PARAMETERS: p_paket TYPE tdevc-devclass DEFAULT 'ME'.

START-OF-SELECTION.

  SELECT d~devclass,
         d~component,
         l~as4local,
         l~ps_posid,
         t~name
    INTO TABLE @DATA(it_comp)
    FROM tdevc AS d
    INNER JOIN df14l AS l ON d~component = l~fctr_id
    INNER JOIN df14t AS t ON d~component = t~fctr_id
    WHERE d~devclass = @p_paket
      AND t~langu    = @sy-langu.

  cl_demo_output=>display( it_comp ).

Variante 2 (über Objekt)

DATA: lv_paket TYPE tadir-devclass.
SELECT-OPTIONS: so_paket FOR lv_paket.

DATA: lv_pgmid TYPE tadir-pgmid.
SELECT-OPTIONS: so_pgmid FOR lv_pgmid.

DATA: lv_object TYPE tadir-object.
SELECT-OPTIONS: so_obj FOR lv_object.

DATA: lv_obj_name TYPE tadir-obj_name.
SELECT-OPTIONS: so_name FOR lv_obj_name.

INITIALIZATION.

* Paket
  so_paket[] = VALUE #( ( sign   = 'I'
                          option = 'EQ'
                          low    = 'ME'
                          high   = '' ) ).

  so_pgmid[] = VALUE #( ( sign   = 'I'
                          option = 'EQ'
                          low    = 'R3TR'
                          high   = '' ) ).

* Typ Transaktion
  so_obj[] = VALUE #( ( sign   = 'I'
                        option = 'EQ'
                        low    = 'TRAN'
                        high   = '' ) ).

* Objektname 'ME23N'
  so_name[] = VALUE #( ( sign   = 'I'
                         option = 'EQ'
                         low    = 'ME23N'
                         high   = '' ) ).

START-OF-SELECTION.

  SELECT d~pgmid,
         d~object,
         d~obj_name,
         d~devclass,
         c~component,
         l~as4local,
         l~ps_posid,
         t~name
    INTO TABLE @DATA(it_comp)
    FROM tadir AS d
    INNER JOIN tdevc AS c ON d~devclass = c~devclass
    INNER JOIN df14l AS l ON c~component = l~fctr_id
    INNER JOIN df14t AS t ON c~component = t~fctr_id
    WHERE d~devclass IN @so_paket
      AND d~pgmid IN @so_pgmid
      AND d~object IN @so_obj
      AND d~obj_name IN @so_name
      AND t~langu = @sy-langu.

  cl_demo_output=>display( it_comp ).