Legacy%20System%20Migration%20Workbench

Zusatzkapitel
Legacy System Migration Workbench für
Fortgeschrittene – Zusatzbeispiele
zum Buch »Datenmigration in SAP®«
von Michael Willinger, Johann Gradl, Frank Densborn,
Michael Roth, Frank Finkbohner
© Rheinwerk Verlag GmbH, Bonn 2015
ISBN 978-3-8362-3052-0
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
In diesem Zusatzkapitel zeigen wir Ihnen weitere nützliche
Beispiele, wie Sie mit einfachen Mitteln mehr aus Ihren
LSMW-Objekten herausholen können.
Legacy System Migration Workbench
für Fortgeschrittene – Zusatzbeispiele
In diesem Kapitel geben wir Ihnen weitere nützliche Anwendungsbeispiele für fortgeschrittene Anwender an die Hand mit denen sie
ihre LSMW-Projekte erweitern können. Die Beispiele sind als Ergänzung zu den in Kapitel 7 vorhandenen Beispielen gedacht und setzen
auf diesen auf.
Parameter als Listbox definieren
Parameter als
Listbox
Im folgenden Beispiel möchten wir die Selektionswerte für das Werk
einschränken, um Fehleingaben zu verhindern. Hierfür definieren
wir den Selektionsparameter als LISTBOX (Combobox). Ergänzen Sie
das bestehende Coding, indem Sie das Coding aus Listing 1 in die
globalen Datendefinitionen des Fieldmappings einfügen:
* __GLOBAL_DATA__
TABLES: sscrfields.
"sy-ucomm für "AT selection-screen"
DATA gv_werks_name1 TYPE name1.
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE t_b1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (30) t_s1 FOR FIELD pa_werk.
SELECTION-SCREEN POSITION 32.
PARAMETERS: pa_werk TYPE werks_d
AS LISTBOX VISIBLE LENGTH 15
OBLIGATORY
USER-COMMAND wrk.
SELECTION-SCREEN COMMENT (30) t_c1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK a.
2
Parameter als Listbox definieren
INITIALIZATION.
t_b1 = 'Eigene Selektionsparameter'. "block-titel
t_s1 = 'Zielwerk'."1. Selektionsparameter
t_c1 = '<- Wählen Sie das Werk aus'.
* Listbox mit den notwendigen Werten
TYPE-POOLS: vrm.
DATA: gv_name TYPE vrm_id.
DATA: gt_list TYPE vrm_values.
DATA: gv_value LIKE LINE OF gt_list.
gv_name = 'PA_WERK'. "Name des Parameters
gv_value-key = '1000'. "Wert
gv_value-text = 'Werk1'. "Beschreibung
APPEND gv_value TO gt_list.
gv_value-key = '1010'.
gv_value-text = 'Werk3'.
APPEND gv_value TO gt_list.
gv_value-key = '1100'.
gv_value-text = 'Werk2'.
APPEND gv_value TO gt_list.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id
= gv_name
values = gt_list.
CLEAR gv_name.
REFRESH gt_list.
Listing 1 Zusatzeinträge für die Wildcard-Logik
Nützliche ABAP-Befehler
Der ABAP-Befehl TABLES: sscrfields und der Zusatzbefehl USER-COMMAND wrk des Befehls Parameters: werden benötigt, damit bei jeder
Änderung des Werks das Ereignis AT selection screen aufgerufen wird.
Mittels des Zusatzes AS LISTBOX VISIBLE LENGTH 15 wird aus dem normalen Selektionsparameter eine Listbox.
Das Ganze sieht dann wie in Abbildung 1 aus.
3
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
Abbildung 1 Eigener Parameter für das Werk als Listbox
Selektionsparameter für Dateiauswahl
automatisch füllen
WildcardParameter
so_wldcd
Zusätzlich soll automatisch beim Ändern des Wertes im Selektionsfeld pa_werk des Werks der entsprechende Wildcard-Wert für das
Werk im Wildcard-Selektionsfeld so_wldcd eingetragen werden.
Dazu müssen die Werte für Werk und Wildcard übereinstimmend
definiert worden sein. Damit der Selektionsparameter für das Wildcard-Feld so_wldcd auch befüllt wird, sobald ein anderes Werk in der
Selektionslistbox gewählt wird, müssen wir noch das Coding aus Listing 2 in den Verarbeitungsblock FORM_ROUTINES für die Form-Routinen einfügen. (Das vorliegende Coding ist ein Beispiel und kann
leicht für andere Problemstellungen angepasst werden.)
* __FORM_ROUTINES__
INITIALIZATION.
CLEAR so_wldcd.
REFRESH so_wldcd.
so_wldcd-sign
= 'I'.
so_wldcd-option = 'EQ'.
so_wldcd-low
= pa_werk.
4
Selektionsparameter für Dateiauswahl automatisch füllen
APPEND so_wldcd.
AT SELECTION-SCREEN ON pa_werk.
CLEAR t_c1.
PERFORM check_plant.
AT SELECTION-SCREEN output.
CLEAR so_wldcd.
REFRESH so_wldcd.
so_wldcd-sign
= 'I'.
so_wldcd-option = 'EQ'.
so_wldcd-low
= pa_werk.
APPEND so_wldcd.
AT SELECTION-SCREEN.
CLEAR so_wldcd.
REFRESH so_wldcd.
so_wldcd-sign
= 'I'.
so_wldcd-option = 'EQ'.
so_wldcd-low
= pa_werk.
APPEND so_wldcd.
*&--------------------------------------------------*
*& FORM check_plant: Ist Werk vorhanden?
*&--------------------------------------------------*
FORM check_plant.
SELECT SINGLE name1 FROM t001w
INTO gv_werks_name1
WHERE werks EQ pa_werk.
IF sy-subrc EQ 0.
t_c1 = gv_werks_name1.
ELSE.
MESSAGE e892(m7) WITH pa_werk.
*
Werk & ist nicht vorhanden
ENDIF.
ENDFORM.
"check_plant
Listing 2 Unterroutinen für die Wildcard-Logik
Wildcard so_wldcd
Der Wildcard-Parameter des Umsetzungsprogramms heißt immer so_
wldcd. Er ist jedoch nur im Umsetzungsprogramm vorhanden, wenn auch
Wildcard-Werte für die Umsetzungsdatei definiert wurden. Im Block
FORM_ROUTINES belegen wir ihn mit dem initialen Wert des Selektionsparameters des Werks vor; dies erfolgt über ein nun drittes INITIALIZATION-Ereignis.
Mittels der verschiedenen AT SELECTION-SCREEN-Ereignisse wird dann
der Wildcard-Parameter abhängig vom Selektionsparameter PA_WERK
5
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
befüllt. Als kleine Zugabe wird die Eingabe auch noch mittels der lokalen
Form-Routine check_plant gegen das Customizing geprüft und im Fehlerfall eine Fehlernachricht ausgegeben. Zusätzlich wird der Name des
Werks hinter der Listbox ausgegeben. Die Einträge werden am Ende des
Umsetzungsprogramms nach Generierte Form-Routinen eingefügt.
Selektionsbild
Das Selektionsbild des Umsetzungsprogramms sieht nun wie in
Abbildung 2 aus.
Abbildung 2 Automatisches Befüllen des Wildcard-Feldes
Erweiterung der LSMW um ein erweitertes
Umsetzungsprotokoll
Wie in Abschnitt 7.2.7, »Ausgabe von Fehlermeldungen«, beschrieben, können Sie im Umsetzungsprotokoll der LSMW eigene Fehlertexte ausgeben. Dies ist jedoch nur eine »normale« Report-Liste. Mit
der folgenden Erweiterung können Sie Nachrichten und Fehlermeldungen in einer internen Tabellen sammeln und dann in einem ALV
Grid Control (ALV = SAP List Viewer) ausgeben. Das ALV Grid Control hat den Vorteil, dass die Meldungen tabellarisch angezeigt werden und auch diverse Operationen vorhanden sind, wie Filter setzen, Sortieren, Export in eine Microsoft-Excel-Datei etc.
6
Erweiterung der LSMW um ein erweitertes Umsetzungsprotokoll
Aufgrund der Größe der Änderungen haben wir diese hier nicht
abgebildet, sondern beschreiben nur die einzelnen Bestandteile. Das
nachfolgende Beispiel (Projekt: Examples), das die vollständige
Erweiterung enthält, finden Sie auf den Bonusseiten als LSMWExportdatei. Sie können sie von dort in Ihr System laden und verwenden.
Das Beispielprojekt enthält das Teilprojekt SD und das Objekt Customer sowie sechs sogenannte eigene Routinen, die Sie für die Anzeige
der Protokolle benötigen. Die Namen der Routinen beginnen alle
mit einem Unterstrich. Zusätzlich finden Sie noch eine eigene Routine, mit deren Hilfe Sie Postleitzahlen auf Korrektheit hin prüfen
können. Abbildung 3 und Tabelle 1 zeigen die importierten eigenen
Routinen.
Abbildung 3 Erweitertes Protokoll – eigene Routinen
Eigene Routine
Beschreibung
CHECK_POSTAL_CODE
Prüft Postleitzahl.
_WRITE_PROTO_TABLE_ALV
Ausgabe der internen Tabelle im ALV Grid
_WRITE_PROTO_TABLE
Ausgabe der internen Tabelle als ReportListe
Tabelle 1 Erweitertes Protokoll – eigene Routinen
7
Eigene Routinen
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
Eigene Routine
Beschreibung
_TOP_OF_PAGE
benutzerdefinierte Kommentarzeilen im
TOP-OF-PAGE des ALV anzeigen
_SET_PF_STATUS
Setzen des Oberflächenstatus (PF-Status).
Hier wird das ALV-Menü festgelegt, das
bei der Anzeige des Protokolls verwendet
wird.
_PROTO_TABLE
Sichern der Nachrichten in interner
Tabelle
_BUILD_LSMW_HEAD_COMMENT
Benutzerdefinierte Kommentarzeilen im
TOP-OF-PAGE des ALV definieren. Hier
werden die üblichen Parameter des Standard-LSMW-Protokolls, wie Name der
gelesenen/geschriebenen Dateien, Anzahl
der gelesenen und konvertierten Datensätze, und Start, Ende und Laufzeit des
Umsetzprogramms definiert. Eigene
Werte, wie Nachrichtenzähler etc., können Sie im Zeitpunkt end_of_processing
des Fieldmappings hinzufügen.
Tabelle 1 Erweitertes Protokoll – eigene Routinen (Forts.)
Im Fieldmapping im Block global_data und im Zeitpunkt end_of_
processing ist dann noch Coding vorhanden, das für die Definition
der globalen Variablen der eigenen Routinen, der zusätzlichen Selektionsparameter und für die Protokollausgabe notwendig ist.
Globale Variablen
und Konstanten
Im Block global_data werden folgende Variablen der Tabelle 2 definiert:
Variable
Bedeutung
gv_cnt_1 bis gv_cnt_8
Nachrichtenzähler, der die Anzahl der produzierten Nachrichten zählt
gv_mandt
globale Variable für das Schlüsselfeld MANDT
gv_rc
globale Variable zum Zwischenspeichern des
sy-subrc-Wertes
_gs_err_tab
Struktur der internen Protokolltabelle mit
Nachrichtentyp, Nummer und acht frei belegbaren Textfeldern der Länge 20
_gt_err_tab
interne Protokolltabelle
Tabelle 2 Erweitertes Protokoll – globale Variablen
8
Erweiterung der LSMW um ein erweitertes Umsetzungsprotokoll
Variable
Bedeutung
_gt_list_top_of_page
interne Tabelle des ALV-Kommentarbereichs
_TOP_OF_PAGE
_gc_mark
intern genutzte Konstante mit dem Wert ‚X‘
_gc_true
intern genutzte Konstante zur Repräsentation
des Booleschen Wertes für wahr (true)
_gc_false
intern genutzte Konstante zur Repräsentation
des Booleschen Wertes für falsch (false)
Tabelle 2 Erweitertes Protokoll – globale Variablen (Forts.)
Definition in jedes LSMW-Objekt aufnehmen
Eigene Routinen eines LSMW-Projekts werden in jedes Umsetzungsprogramm der LSMW-Objekte eingebunden. Wenn Sie die eigenen Routinen
der Erweiterung in Ihrem LSMW-Projekt verwenden, müssen (!) alle
Objekte dieses LSMW-Projekts auch die globalen Variablendefinitionen
dieser Erweiterung enthalten, sonst kann das Umsetzungsprogramm aufgrund fehlender Variablendefinitionen nicht generiert werden (Syntaxfehler). Kopieren Sie daher den global_data-Block in jedes Ihrer LSMWObjekte.
Die Selektionsparameter aus Tabelle 3 werden in das Umsetzungsprogramm eingefügt:
Selektionsparameter-Text
Variable
Beschreibung
Message types to be shown
_so_mtyp
Auswahl der Nachrichtentypen,
die in das Protokoll geschrieben werden sollen. Der Parameter wird im Ereignis initialization mit den Werten für
alle Nachrichtentypen (I, E, W,
A, X) vorbelegt. Die Werte werden in der eigenen Routine
_proto_table abgefragt.
Sort messages
_pa_sort
Wenn gesetzt, werden die
Nachrichten nach Nummern
sortiert. Besser ist es jedoch,
sie nicht zu sortieren. Sie können im Nachhinein über den
ALV sortiert werden.
Tabelle 3 Erweitertes Protokoll – zusätzliche Selektionsparameter
9
Selektionsparameter
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
Selektionsparameter-Text
Variable
Beschreibung
ALV protocol
_pa_alv
Wenn gesetzt, erfolgt die Ausgabe der Nachrichten im ALV,
sonst nur als Text. Sollte das
Programm im Hintergrund
(Batch) ausgeführt werden,
wird dieses Flag ignoriert und
generell nur der Text ausgegeben.
Conv.error -> skip_transaction
_pa_skip
Wenn gesetzt, wird beim
Schreiben einer Fehlermeldung (Typ E) automatisch das
Makro skip_transaction ausgeführt.
ALV w/DDIC struct.
_pa_ddic
Haben Sie die ALV-Struktur des
Protokolls als DDIC-Struktur
definiert, können Sie diese verwenden. Sonst wird eine lokal
definierte Struktur verwendet.
Tabelle 3 Erweitertes Protokoll – zusätzliche Selektionsparameter (Forts.)
Selektionsbild
Das Selektionsbild des Umsetzungsprogramms sieht dann wie in
Abbildung 4 aus.
Abbildung 4 Erweitertes Protokoll – Selektionsparameter
10
Erweiterung der LSMW um ein erweitertes Umsetzungsprotokoll
Ein Nachrichtensatz wird dann im Fieldmapping durch den Aufruf
der eigenen Routine _proto_table in die interne Protokolltabelle _gt_
err_tab geschrieben. Im folgenden Beispiel wird eine Fehlernachricht 'E' mit der Nummer '105' und Schlüsselwerten wie Kundennummer, Land etc., die den fehlerhaften Datensatz genauer definieren, und mit einem beschreibenden Fehlertext im siebten Parameter
in die Protokolltabelle geschrieben. Anschließend wird dann noch
ein interner Zähler für genau diesen Fehler hochgezählt. Die Zählernummer können Sie zum Zeitpunkt end_of_processing in die ALVKommentarzeile mit aufnehmen (Listing 3).
PERFORM _proto_table USING _so_mtyp[] _pa_skip
'E' '005'
kundendaten-kunnr
bkna1-land1
bkna1-ort01
bkna1-pstlz
bkna1-regio
''
'Region not T005S'
''
_gt_err_tab.
* Fehlerzähler hochzählen
ADD 1 TO gv_cnt_5.
Listing 3 Beispiel für das Speichern eines Nachrichtensatzes
Zähler- und Nachrichtennummer identisch
Wenn Sie die Zählernummer und die Nachrichtennummer identisch halten, lassen sich Nachricht und Fehler in den Kommentarzeilen besser
zuordnen.
Im Zeitpunkt end_of_processing werden die eigenen Kommentarzeilen definiert und dem ALV hinzugefügt; abhängig davon, ob ein
ALV angezeigt werden soll oder nicht, wird dieser aufgerufen, oder
die Nachrichten werden als Report-Liste angezeigt.
Eigene Kommentarzeilen werden als Zeile (ls_line) der internen
Top-of-Page-Liste (_gt_list_top_of_page) hinzugefügt. Sie sollten zu
jeder ALV-Kommentarzeile auch eine entsprechende Report-Listenzeile ausgeben. Diese erscheint dann auch für den Fall, dass das Programm im Hintergrund aufgerufen wird. Hier wird z. B. der Zähler
gv_cnt_5 der Nachricht, dass die Region nicht in der CustomizingTabelle T005S vorhanden ist, als Kommentarzeile (ls_line-info)
11
Kommentarzeilen
und Protokoll
ausgeben
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
hinzugefügt und mit einem Kommentartext (ls_line-key) versehen.
Dieselben Werte werden dann noch als Report-Zeile ausgegeben
(vgl. Listing 4).
ls_line-typ =
ls_line-key =
ls_line-info =
APPEND ls_line
'S'.
'E:Region T005S(5)'.
gv_cnt_5.
TO _gt_list_top_of_page.
ULINE.
WRITE: / 'E:Region missing
(005)', 50 gv_cnt_5.
Listing 4 Beispiel für das Speichern eines Nachrichtensatzes
Kommentare kurz halten
Da die Datendefinition für das Kommentartextfeld nur 20 Stellen umfasst,
sollten die Kommentare nicht zu lang sein. Bewährt hat sich diese Aufteilung: <nachrichtentyp>:<kurzer Text>(<nachrichtennummer>)
Fehlerprotokoll
Nachdem Sie das Umsetzungsprogramm wie immer aufgerufen
haben, erscheint nun zuerst das Fehlerprotokoll als ALV, wie in
Abbildung 5 zu sehen ist.
Abbildung 5 Erweitertes Protokoll – ALV-Umsetzungsprotokoll
12
Erweiterung der LSMW um ein erweitertes Umsetzungsprotokoll
Im oberen Block erscheinen die Kommentarzeilen und darunter die
eigentlichen Protokollzeilen. Mittels ALV können Sie dann das Protokoll filtern, sortieren und z. B. über das Menü Liste 폷 Exportieren
폷 Tabellenkalkulation… in eine Excel-Datei exportieren. Beim Verlassen des ALV werden dann das Standardprotokoll der LSMW als
Report-Liste und die eigenen definierten Kommentarzeilen angezeigt.
Wenn Sie das Umsetzungsprogramm im Hintergrund laufen lassen
(Batch-Job), erkennt die Erweiterung dies automatisch, und das Protokoll wird nur als herkömmliche Report-Liste ausgegeben (siehe
Abbildung 6).
Abbildung 6 Erweitertes Protokoll – Report-Liste
Große Protokolle in Datenbanktabelle schreiben
Wenn Sie Datensätze in der Größenordnung von einigen Hunderttausend
bis zu einigen Millionen umsetzen, ist es ratsam, die Anzahl der Nachrichtensätze einzuschränken. Die Verarbeitung übergroßer interner Tabellen
im ALV kann die Laufzeit Ihres Umsetzungsprogramms leicht erhöhen.
Protokolle mit mehr als 65.000 Datensätzen können auch nicht in das
Standard-Excel-Format (.xls) exportiert werden. Haben Sie sehr viele Protokollsätze zu schreiben (z. B. Hunderttausende von Materialverbräuchen
über mehrere Jahre), empfiehlt es sich, eine kundeneigene transparente
13
Umsetzungsprogramm als Job
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
Z-Tabelle im Data Dictionary anzulegen und das Protokoll zum Zeitpunkt
end_of_processing in diese Tabelle zu schreiben. Sie können dann über
die SAP-Transaktion SE16 auf diese Tabelle zugreifen und über Einstellungen 폷 Benutzerparameter das Ergebnis als ALV Grid darstellen lassen.
Die hier beschriebene Protokollerweiterung ist sehr nützlich für das
Bereinigen von Datenfehlern und fehlenden Customizing-Einstellungen. Wenn Sie Ihr Fieldmapping um entsprechendes Prüf-Coding
erweitern und die zugehörigen Nachrichten im Protokoll ausgeben,
können Sie die exportierten Excel-Dateien den jeweils zuständigen
Fachbereichsmitarbeitern weiterleiten. Mit diesem Protokoll erhalten diese eine lesbare und elektronisch weiter zu verarbeitende Liste
an Fehlern und können z. B. fehlende Customizing-Werte nachpflegen oder ihre Umschlüsselungslogiken um bisher unbekannte Feldwerte erweitern.
Fazit
Alle Programmbeispiele können Sie über die Website zum Buch
(https://www.rheinwerk-verlag.de/datenmigration-in-sap_3710/)
als
LSMW-Projektexporte (Textdatei) herunterladen und in Ihr System
zur eigenen Nutzung importieren (siehe Abschnitt 6.6.3, »Projekt
importieren«), verändern und anpassen. Die Nutzung der gezeigten
Programmbeispiele ist ohne Gewähr und erfolgt auf eigene Gefahr.
14