[ABAP] Auswahl eines Transportauftrags (mit Anlegen)

* 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/

* 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

* Auftragstyp
SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (14) lbl1 FOR FIELD p_tfunc.
  PARAMETERS: p_tfunc TYPE trfunction.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
  lbl1 = 'Auftragstyp:'.

START-OF-SELECTION.

  DATA: lv_req TYPE trwbo_request_header.

* Auswahl eines Transportauftrags (mit Anlegen)
  CALL FUNCTION 'TR_REQUEST_CHOICE'
    EXPORTING
      iv_request_types     = p_tfunc
    IMPORTING
      es_request           = lv_req
    EXCEPTIONS
      invalid_request      = 1
      invalid_request_type = 2
      user_not_owner       = 3
      no_objects_appended  = 4
      enqueue_error        = 5
      cancelled_by_user    = 6
      recursive_call       = 7
      OTHERS               = 8.

  IF sy-subrc = 0.
    cl_demo_output=>write_data( lv_req ).
    cl_demo_output=>display( ).
  ENDIF.

[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] 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 ).

[ABAP] Transportaufträge für Benutzer und Auftragsnummern suchen

* 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/

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE title.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_rb1 RADIOBUTTON GROUP grp1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT (20) lbl1 FOR FIELD p_rb1.
PARAMETERS: p_usr TYPE e070-as4user DEFAULT sy-uname.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_rb2 RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT (20) lbl2 FOR FIELD p_rb2.
PARAMETERS: p_tr TYPE e070-trkorr DEFAULT ''.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.
  title = 'Suche'.
  lbl1 = 'Benutzer'.
  lbl2 = 'Transportauftrag'.

START-OF-SELECTION.

* dynamische Where-Clause erzeugen
  DATA(lv_where) = ||.

  CASE abap_true.
    WHEN p_rb1.
      lv_where = |    e~as4user = '{ p_usr }'| &&
                 |AND t~langu   = @sy-langu|.
    WHEN p_rb2.
      lv_where = |    e~trkorr  = '{ p_tr }'| &&
                 | OR e~strkorr = '{ p_tr }'| &&
                 |AND t~langu   = @sy-langu|.
  ENDCASE.

* 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 (lv_where).

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

    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_e070 ).

    o_salv->get_functions( )->set_all( abap_true ).
    o_salv->get_columns( )->set_optimize( abap_true ).
    o_salv->get_display_settings( )->set_list_header( 'Transporte' ).
    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.

[ABAP] CSS-Code als ABAP-INCLUDE speichern und laden

Über die Nutzung von Includes ist es möglich beliebigen Code im SAP abzulegen und darauf zuzugreifen. Folgende Schritte sind notwendig:

  • SE80 -> neues INCLUDE anlegen (Bsp.: ZCSSINCLUDE)
  • CSS-Code im INCLUDE eintragen
  • Aktvieren! (Ja, das funktioniert.)
  • CSS-Code (INCLUDE) im ABAP-Code lesen
* Name des INCLUDEs mit dem CSS-Code
CONSTANTS: co_cssinclude TYPE char12 VALUE 'ZCSSINCLUDE'.
* String für CSS-Daten
DATA: lv_css TYPE string.
	
* Prüfen, ob INCLUDE im System (TADIR) aktiv vorhanden
SELECT SINGLE obj_name
  INTO @DATA(lv_obj_name)
  FROM tadir
  WHERE obj_name = @co_w3css
    AND pgmid    = 'R3TR'
    AND object   = 'PROG'.

IF sy-subrc = 0.

* Stringtab für Code
  DATA: it_incl_code TYPE stringtab.

* Code des INCLUDEs lesen
  READ REPORT co_w3css INTO it_incl_code.

  IF sy-subrc = 0.
* String-Tabelle mit CSS-Code in String wandeln, Trennzeichen ist CRLF
    lv_css = REDUCE string( INIT s = ||
                            FOR <s> IN it_incl_code
                            NEXT s = COND #( WHEN s IS INITIAL THEN |{ <s> }| ELSE |{ s }{ cl_abap_char_utilities=>cr_lf }{ <s> }| ) ).
  ENDIF.
ENDIF.

* HTML mit CSS-INCLUDE
DATA(lv_html) = '<!DOCTYPE html>' &&
                '<html>' &&
                '<title>Lagermaterialkatalog</title>' &&
                '<meta name="viewport" content="width=device-width, initial-scale=1">' &&
                '<style>' && lv_css && '</style>' &&
                '<body>' &&
                '</body>' &&
                '</html>'.

[SAP] SAP-Transporte

Transaktionen

SE01 (Transport Organizer erweiterte Sicht)
SE03 (Transport Organizer Tools)

  • Transport Organizer Tools -> Objekte in Aufträgen -> Objekte in Aufträgen/Aufgaben suchen
  • Selektion der Objekte: in einem Punkt ‘?’ PGMID ‘CORR’, OBJ ‘MERG’ und “TA-Nr*” eintragen
  • Haken bei ‘?’
  • Button “Ausführen (F8)”

SE10 (Transport Organizer)
STMS (Transport Management System)

  • Button “Importübersicht” (F5) (LKW)
  • Doppelklick auf Zielsystem
  • Importqueue wird angezeigt
  • Menü -> Springen -> Historie -> Import Historie oder Button “Import Historie” (Schriftrolle)
  • Zeitfilter: Klick auf Filtersymbol vor dem Wort “Zeitintervall”
  • Benutzerfilter: Spalte markieren + Klick auf Filtersymbol in der Toolbar

Funktionsbausteine

TR_F4_REQUESTS (F4-Hilfe für Aufträge/Aufgaben)
TR_REQUEST_CHOICE (Auswahl eines Transportauftrags (mit Anlegen))
TR_READ_REQUEST ((Nach-)Lesen von Einzelbestandteilen eines Auftrags)
TR_COPY_COMM (Kopieren von Aufträgen/Aufgaben)
TR_GET_OBJECTS_OF_REQ_AN_TASKS (erstellt Gesamt-Objektliste eines Auftrags und seiner Aufgaben)
TR_APPEND_TO_COMM_OBJS_KEYS (Anhängen und Sperren von Objekten und Schlüsseln an eine Aufgabe)
TR_SORT_AND_COMPRESS_COMM (Objekte und Schlüssel eines Auftrags sortieren)
TR_SORT_OBJECT_AND_KEY_LIST (Objekte und Schlüssel sortieren (ohne DB-Update))
TR_INSERT_REQUEST_WITH_TASKS (Auftrag mit Aufgaben anlegen (ohne Dialog))
TR_CHECK_REQUEST (Prüfe kompletten Auftrag)
TR_RELEASE_REQUEST (Freigabe eines Auftrags/einer Aufgabe)
TR_READ_GLOBAL_INFO_OF_REQUEST (Kommandodatei lesen und abhängig vom Aufruf aufbereiten)
TRINT_ORDER_CHOICE (Abfrage Auftragnummer, wenn Objekt noch nicht zugeordnet)
TRINT_APPEND_COMM (Intern: Hinzufügen Objekte & Schlüssel an einen Auftrag)
TRINT_DOCU_INTERFACE (Intern: Bearbeitung der Dokumentationsbausteine einer Aufgabe/Auftrags)
TRINT_OBJECT_TABLE (Intern: Tabelle mit allen Objekttypen inklusive Texten)
TRINT_FI_GET_DIRECTORY_NAMES (intern: Pfade der Transportverzeichnisse)

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)
E071K (Transportsystem: Schlüsseleinträge von Aufträgen/Aufgaben)
TADIR (Katalog der Repository-Objekte)
TPLOG (Logging der tp Aufrufe)

Typgruppen

SEOK (Services)
SCTSC (Konstanten CTS)

Suchhilfen

SCTSOBJECT (Suchhilfe auf Objekttyp)

Klassen

CL_ADT_CTS_MANAGEMENT (Managing transport request for resources)

Links