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
© Copyright 2025 ExpyDoc