TOC Erzeuger Selektion

Transport Management System: Transport von Kopien Erzeuger

Eine typische Situation bei der ABAP Entwicklung ist, dass ein IT-Test wegen fehlender Testdaten nicht im Entwicklungssystem, sondern nur im Testsystem möglich ist. Steht ChaRM zur Verfügung, ist das schnell gemacht: ChaRM transportiert die Entwicklung als Transport von Kopien mit dem Transport Management System. Wenn nun aber kein ChaRM verfügbar ist, muss man den Transport von Kopien Transportauftrag dauernd manuell anlegen. In diesem Beitrag bauen wir einen kleinen Transport von Kopien Erzeuger, der uns diese manuelle fehleranfällige Tätigkeit abnimmt.

Benutzung des Transport von Kopien Erzeuger

Beim Start des Programms ZBC_TMS_TOC_CREATE öffnet sich der Selection Screen. Auf dem Screen wählt man über die Suchhilfe ein oder mehrere Aufträge aus. Das Coding prüft bei Erzeugung des Aufrags, dass nur änderbare Workbench- bzw. Customizing-Aufträge ausgewählt wurden.

TOC Erzeuger Selektion

Nach der Erzeugung des Transport von Kopien Auftrags wird dieser direkt geöffnet, damit man das Ergebnis nochmal prüfen kann. Auf der folgenden Abbildung sind gut die CORR MERGE Einträge zu sehen, welche die Quellaufträge und deren Aufgaben referenzieren.

TOC Erzeuger Ergebnis

Wenn der Auftrag ok ist, kannst Du ihn über das Menü freigeben und danach über Transaktion STMS in das Testsystem importieren.

TOC Erzeuger Freigabe

Implementierung

Den Code kannst Du hier herunterladen. Das Programm ZBC_TMS_TOC_CREATE besteht aus den folgenden Teilen

  • Klasse LCL_UI_CTR: UI Logik wie Suchhilfe und Öffnen des Auftrags.
  • Klasse LCL_TOC_CTR: Logik der Transport von Kopien Erzeugung
  • Interface LIF_CONST: Konstanten für Auftragsart und -status, welche das Coding benutzt.
  • Klasse LCL_TEST: Unit Test Klasse für die TOC Erzeugung

 

TOC Erzeuger Implementierung

Die wesentliche Logik des Programms steckt in der Methode LCL_TOC_CTR, CREATE_TOC. Die Methode erhält eine Tabelle von Auftragsnummern aus dem UI Controller. Zunächst prüft die Methode read_request, ob der Auftrag auch existiert. Weiterhin prüft die Logik, dass nur Workbench bzw. Customizing Aufträge übergeben wurden und dass alle Aufträge änderbar sind.

Für die übergebenen Aufträge ermittelt Funktionsbaustein TRINT_FOLLOW_STRKORR_BACKWARD die zugehörigen Aufgaben.

In Methode create_toc_init wird der intiale (=leere) TOC Auftrag angelegt. Das Hinzufügen der Objektlisten aus den Quellaufträgen zum TOC Auftrag macht der Funktionsbaustein TRINT_MERGE_COMMS.

  METHOD create_toc.
    FIELD-SYMBOLS <lv_trkorr> TYPE trkorr.
    DATA ls_request_header TYPE trwbo_request_header.
    DATA lt_request_header_src TYPE trwbo_request_headers.
    DATA lv_msg TYPE string.
    DATA lv_as4text TYPE as4text.
    DATA lt_e070 TYPE trwbo_t_e070.

    IF lines( it_trkorr ) = 0.
*     Wählen Sie einen vorhandenen Auftrag aus
      MESSAGE e773(tk) INTO lv_msg.
      raise_exc_by_sy( ).
    ENDIF.

*   Übergebene Aufträge prüfen
    LOOP AT it_trkorr ASSIGNING <lv_trkorr>.

      ls_request_header = read_request( <lv_trkorr> ).
      APPEND ls_request_header TO lt_request_header_src.

*     Prüfen ob Auftrag Workbench oder Customizing ist
      IF NOT ( ls_request_header-trfunction = lif_const=>gc_enum_trfunction-workbench_request OR
               ls_request_header-trfunction = lif_const=>gc_enum_trfunction-customizing_request ).

        MESSAGE e000(swlt) WITH |Auftrag { <lv_trkorr> } ist nicht Cust/Work| INTO lv_msg.
        raise_exc_by_sy( ).
      ENDIF.

      IF ls_request_header-trstatus <> lif_const=>gc_enum_trstatus-modifiable.
        MESSAGE e000(swlt) WITH |Auftrag { <lv_trkorr> } muss änderbar sein| INTO lv_msg.
        raise_exc_by_sy( ).
      ENDIF.

    ENDLOOP.

*   Aufgaben aller Quellaufträge sammeln
    CALL FUNCTION 'TRINT_FOLLOW_STRKORR_BACKWARD'
      CHANGING
        ct_requests = lt_request_header_src.

*   TOC Request erzeugen: Name wie der 1. Aufrag mit Prefix TOC
    lv_as4text  = |TOC { lt_request_header_src[ 1 ]-as4text }|.
    rs_request_header_toc = create_toc_init( lv_as4text ).

    MOVE-CORRESPONDING lt_request_header_src TO lt_e070.

*   Objektlisten aus den Quellaufgaben zum TOC Auftrag hinzufügen
    CALL FUNCTION 'TRINT_MERGE_COMMS'
      EXPORTING
        it_e070                = lt_e070
      CHANGING
        cs_target_request      = rs_request_header_toc
      EXCEPTIONS
        db_access_error        = 1
        invalid_target_request = 2
        invalid_source_request = 3
        OTHERS                 = 4.
    IF sy-subrc <> 0.
      raise_exc_by_sy( ).
    ENDIF.

  ENDMETHOD.

Anpassung des Zielsystems

Das Zielsystem des erzeugten TOC Auftrags musst Du bei der Implementierung des Programms auf Deinem System noch anpassen. Aktuell steht bei jedem Auftrag GWY als Zielsystem drin.

TOC Erzeuger Zielsystem

Im Code ist das die Methode lcl_toc_ctr, create_toc_init. Diese Methode erzeugt den intialen TOC Auftrag.

METHOD create_toc_init.

    CALL FUNCTION 'TR_INSERT_REQUEST_WITH_TASKS'
      EXPORTING
        iv_type           = lif_const=>gc_enum_trfunction-transport_of_copies
        iv_text           = iv_as4text
        iv_target         = 'GWY' "TODO: Zielsystem anpassen
      IMPORTING
        es_request_header = rs_request_header
      EXCEPTIONS
        insert_failed     = 1
        enqueue_failed    = 2
        OTHERS            = 3.
    IF sy-subrc <> 0.
      raise_exc_by_sy( ).
    ENDIF.

  ENDMETHOD.

Hast du noch Fragen?
Nutze gerne unsere Kommentarfunktion!

 

Du programmierst, bist ABAP-interessiert und hast Lust coole Projekte mit uns zu machen? Wir suchen dich! Schau doch mal in unserer Stellenbeschreibung vorbei.

 

Über den Autor

Rüdiger Lühr

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

+ 17 = 26