[ABAP] F4-Hilfe für Transportaufträge und Transportaufgaben

* Siehe Typgruppe SCTSC (Konstanten CTS)
DATA: lv_tkorr TYPE e070-trkorr.
DATA: lv_korr_head TYPE trwbo_request_header.

* F4-Hilfe für Aufträge/Aufgaben
CALL FUNCTION 'TR_F4_REQUESTS'
  EXPORTING
    iv_username             = sy-uname
    iv_client               = sy-mandt
    iv_trfunctions          = 'KW'     "TRFUNCTION: Workbench - K, Customizing - W"
    iv_trstatus             = 'DLRO'   "TRSTATUS: Änderbar - D, Geschützt - L, Freigabe gestartet - O, Freigegeben - R"
    iv_via_selection_screen = abap_true
    iv_complete_requests    = abap_true
  IMPORTING
    ev_selected_request     = lv_tkorr
    es_selected_request     = lv_korr_head.

cl_demo_output=>write_data( lv_tkorr ).
cl_demo_output=>write_data( lv_korr_head ).
cl_demo_output=>display( ).

[ABAP] Transport von Kopien aus Transportauftrag anlegen und Aufgaben/Objekte übernehmen

* Siehe Typgruppe SCTSC (Konstanten CTS)

SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (20) lbl1 FOR FIELD p_trkorr.
  PARAMETERS: p_trkorr LIKE e070-trkorr OBLIGATORY.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (20) lbl2 FOR FIELD p_tar.
  PARAMETERS: p_tar TYPE trheader-tarsystem OBLIGATORY VALUE CHECK DEFAULT 'XYZ'.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
  lbl1 = 'Transport-Auftrag:'.
  lbl2 = 'Transportziel:'.

START-OF-SELECTION.

  DATA: lv_req TYPE trwbo_request.

* (Nach-)Lesen von Einzelbestandteilen eines Auftrags
  CALL FUNCTION 'TR_READ_REQUEST'
    EXPORTING
      iv_read_e070     = abap_true
      iv_read_e07t     = abap_true
      iv_trkorr        = p_trkorr
    CHANGING
      cs_request       = lv_req
    EXCEPTIONS
      error_occured    = 1
      no_authorization = 2
      OTHERS           = 3.

  IF sy-subrc = 0.

    WRITE: / 'Kopfdaten des Auftrages', p_trkorr, 'gelesen.'.

* Text übernehmen
    DATA(lv_as4text) = CONV as4text( |TvK:{ lv_req-h-as4text }| ).
    DATA: lv_tvk TYPE trwbo_request_header.

* Auftrag mit Aufgaben anlegen (ohne Dialog)
    CALL FUNCTION 'TR_INSERT_REQUEST_WITH_TASKS'
      EXPORTING
        iv_type            = sctsc_type_transport " TvK anlegen
        iv_text            = lv_as4text
        iv_owner           = sy-uname
        iv_target          = p_tar
        iv_with_badi_check = abap_true
      IMPORTING
        es_request_header  = lv_tvk
      EXCEPTIONS
        insert_failed      = 1
        enqueue_failed     = 2
        OTHERS             = 3.

    IF sy-subrc = 0.

      WRITE: / 'Ziel-Auftrag', lv_tvk-trkorr, 'angelegt.'.

* Quell-Auftrag kopieren
* Kopieren von Aufträgen/Aufgaben
      CALL FUNCTION 'TR_COPY_COMM'
        EXPORTING
          wi_dialog                = abap_false
          wi_trkorr_from           = p_trkorr
          wi_trkorr_to             = lv_tvk-trkorr
          wi_without_documentation = abap_true
        EXCEPTIONS
          db_access_error          = 1
          trkorr_from_not_exist    = 2
          trkorr_to_is_repair      = 3
          trkorr_to_locked         = 4
          trkorr_to_not_exist      = 5
          trkorr_to_released       = 6
          user_not_owner           = 7
          no_authorization         = 8
          wrong_client             = 9
          wrong_category           = 10
          object_not_patchable     = 11
          OTHERS                   = 12.

      IF sy-subrc = 0.

        WRITE: / 'Objekte des Quell-Auftrages', p_trkorr, 'nach', lv_tvk-trkorr, 'kopiert'.

        DATA(lv_ok) = abap_true.

* Quell-Aufgaben kopieren
        SELECT FROM e070
          FIELDS trkorr
          WHERE strkorr = @p_trkorr
          INTO TABLE @DATA(it_trkorr_aufg).

        WRITE: / lines( it_trkorr_aufg ), 'Aufgaben des Quell-Auftrages', p_trkorr, 'gelesen.'.

* alle Quell-Aufgaben des Quell-Auftrages
        LOOP AT it_trkorr_aufg ASSIGNING FIELD-SYMBOL(<a>).
* Kopieren von Aufträgen/Aufgaben
          CALL FUNCTION 'TR_COPY_COMM'
            EXPORTING
              wi_dialog                = abap_false
              wi_trkorr_from           = <a>-trkorr
              wi_trkorr_to             = lv_tvk-trkorr
              wi_without_documentation = abap_true
            EXCEPTIONS
              db_access_error          = 1
              trkorr_from_not_exist    = 2
              trkorr_to_is_repair      = 3
              trkorr_to_locked         = 4
              trkorr_to_not_exist      = 5
              trkorr_to_released       = 6
              user_not_owner           = 7
              no_authorization         = 8
              wrong_client             = 9
              wrong_category           = 10
              object_not_patchable     = 11
              OTHERS                   = 12.
          IF sy-subrc = 0.
            WRITE: / 'Aufgabe',<a>-trkorr,'des Quell-Auftrages', p_trkorr, 'nach', lv_tvk-trkorr, 'kopiert'.
          ELSE.
            lv_ok = abap_false.
            WRITE: / 'Fehler (', sy-subrc, ') beim Kopieren der Quell-Aufgabe:', <a>-trkorr.
            EXIT.
          ENDIF.
        ENDLOOP.

        IF lv_ok = abap_true.
* Objekte und Schlüssel eines Auftrags sortieren
          CALL FUNCTION 'TR_SORT_AND_COMPRESS_COMM'
            EXPORTING
              iv_trkorr                      = lv_tvk-trkorr
            EXCEPTIONS
              trkorr_not_found               = 1
              order_released                 = 2
              error_while_modifying_obj_list = 3
              tr_enqueue_failed              = 4
              no_authorization               = 5
              OTHERS                         = 6.

          IF sy-subrc = 0.
            WRITE: / 'Ziel-Transportauftrag', lv_tvk-trkorr, 'erfolgreich sortiert und verdichtet.'.
          ELSE.
            WRITE: / 'Fehler (', sy-subrc, ') beim Verdichten von Transportauftrag:', lv_tvk-trkorr.
          ENDIF.

        ELSE.
          WRITE: / 'Fehler beim Kopieren der Quell-Aufgaben in Transportauftrag:', lv_tvk-trkorr.
        ENDIF.

      ELSE.
        WRITE: / 'Fehler (', sy-subrc, ') beim Lesen des Quell-Auftrages:', p_trkorr.
      ENDIF.

    ELSE.
      WRITE: / 'Fehler (', sy-subrc, ') beim Anlegen des Ziel-Auftrages'.
    ENDIF.

  ELSE.
    WRITE: / 'Fehler (', sy-subrc, ') beim Lesen des Quell-Auftrages:', p_trkorr.
  ENDIF.

[ABAP] Objektliste zu Transportauftrag lesen

SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT (20) lbl1 FOR FIELD p_trkorr.
  PARAMETERS: p_trkorr LIKE e070-trkorr OBLIGATORY.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.

  lbl1 = 'Transport-Auftrag:'.

START-OF-SELECTION.
  DATA(lv_req) = VALUE trwbo_request_header( trkorr = p_trkorr ).
  DATA: it_objects TYPE scit_e071.
  DATA: it_keys	TYPE tr_keys.
  DATA: it_keys_str TYPE e071k_strtyp.

* erstellt Gesamt-Objektliste eines Auftrags und seiner Aufgaben
  CALL FUNCTION 'TR_GET_OBJECTS_OF_REQ_AN_TASKS'
    EXPORTING
      is_request_header      = lv_req
      iv_condense_objectlist = abap_true
    IMPORTING
      et_objects             = it_objects
      et_keys                = it_keys
      et_keys_str            = it_keys_str
    EXCEPTIONS
      invalid_input          = 1
      OTHERS                 = 2.

  IF sy-subrc = 0.
    cl_demo_output=>write_data( p_trkorr ).
    cl_demo_output=>write_data( it_objects ).
    cl_demo_output=>write_data( it_keys ).
    cl_demo_output=>write_data( it_keys_str ).

* 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        = 'Objektliste Transportauftrag'
                                  html_string  = lv_html
                                  container    = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
    WRITE: space.
  ELSE.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO DATA(lv_msg).
    WRITE: / lv_msg.
  ENDIF.

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