Post on 01-Jan-2020
transcript
Zusatzkapitel
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispielezum Buch »Datenmigration in SAP®«
von Michael Willinger, Johann Gradl, Frank Densborn,Michael Roth, Frank Finkbohner
© Rheinwerk Verlag GmbH, Bonn 2015ISBN 978-3-8362-3052-0
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
2
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 Anwendungs-beispiele für fortgeschrittene Anwender an die Hand mit denen sieihre LSMW-Projekte erweitern können. Die Beispiele sind als Ergän-zung zu den in Kapitel 7 vorhandenen Beispielen gedacht und setzenauf diesen auf.
Parameter als Listbox definieren
Parameter alsListbox
Im folgenden Beispiel möchten wir die Selektionswerte für das Werkeinschränken, um Fehleingaben zu verhindern. Hierfür definierenwir den Selektionsparameter als LISTBOX (Combobox). Ergänzen Siedas bestehende Coding, indem Sie das Coding aus Listing 1 in dieglobalen 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.
Parameter als Listbox definieren
3
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-COM-MAND 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 nor-malen Selektionsparameter eine Listbox.
Das Ganze sieht dann wie in Abbildung 1 aus.
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
4
Abbildung 1 Eigener Parameter für das Werk als Listbox
Selektionsparameter für Dateiauswahl automatisch füllen
Wildcard-Parameterso_wldcd
Zusätzlich soll automatisch beim Ändern des Wertes im Selektions-feld pa_werk des Werks der entsprechende Wildcard-Wert für dasWerk im Wildcard-Selektionsfeld so_wldcd eingetragen werden.Dazu müssen die Werte für Werk und Wildcard übereinstimmenddefiniert worden sein. Damit der Selektionsparameter für das Wild-card-Feld so_wldcd auch befüllt wird, sobald ein anderes Werk in derSelektionslistbox gewählt wird, müssen wir noch das Coding aus Lis-ting 2 in den Verarbeitungsblock FORM_ROUTINES für die Form-Routi-nen einfügen. (Das vorliegende Coding ist ein Beispiel und kannleicht 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.
Selektionsparameter für Dateiauswahl automatisch füllen
5
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 auchWildcard-Werte für die Umsetzungsdatei definiert wurden. Im BlockFORM_ROUTINES belegen wir ihn mit dem initialen Wert des Selektionspa-rameters des Werks vor; dies erfolgt über ein nun drittes INITIALIZA-TION-Ereignis.
Mittels der verschiedenen AT SELECTION-SCREEN-Ereignisse wird dannder Wildcard-Parameter abhängig vom Selektionsparameter PA_WERK
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
6
befüllt. Als kleine Zugabe wird die Eingabe auch noch mittels der lokalenForm-Routine check_plant gegen das Customizing geprüft und im Feh-lerfall eine Fehlernachricht ausgegeben. Zusätzlich wird der Name desWerks hinter der Listbox ausgegeben. Die Einträge werden am Ende desUmsetzungsprogramms nach Generierte Form-Routinen eingefügt.
Selektionsbild Das Selektionsbild des Umsetzungsprogramms sieht nun wie inAbbildung 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«, beschrie-ben, können Sie im Umsetzungsprotokoll der LSMW eigene Fehler-texte ausgeben. Dies ist jedoch nur eine »normale« Report-Liste. Mitder folgenden Erweiterung können Sie Nachrichten und Fehlermel-dungen in einer internen Tabellen sammeln und dann in einem ALVGrid Control (ALV = SAP List Viewer) ausgeben. Das ALV Grid Con-trol hat den Vorteil, dass die Meldungen tabellarisch angezeigt wer-den und auch diverse Operationen vorhanden sind, wie Filter set-zen, Sortieren, Export in eine Microsoft-Excel-Datei etc.
Erweiterung der LSMW um ein erweitertes Umsetzungsprotokoll
7
Aufgrund der Größe der Änderungen haben wir diese hier nichtabgebildet, sondern beschreiben nur die einzelnen Bestandteile. Dasnachfolgende Beispiel (Projekt: Examples), das die vollständigeErweiterung enthält, finden Sie auf den Bonusseiten als LSMW-Exportdatei. Sie können sie von dort in Ihr System laden und ver-wenden.
Eigene RoutinenDas Beispielprojekt enthält das Teilprojekt SD und das Objekt Custo-mer sowie sechs sogenannte eigene Routinen, die Sie für die Anzeigeder Protokolle benötigen. Die Namen der Routinen beginnen allemit einem Unterstrich. Zusätzlich finden Sie noch eine eigene Rou-tine, mit deren Hilfe Sie Postleitzahlen auf Korrektheit hin prüfenkönnen. Abbildung 3 und Tabelle 1 zeigen die importierten eigenenRoutinen.
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 Report-Liste
Tabelle 1 Erweitertes Protokoll – eigene Routinen
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
8
Im Fieldmapping im Block global_data und im Zeitpunkt end_of_processing ist dann noch Coding vorhanden, das für die Definitionder globalen Variablen der eigenen Routinen, der zusätzlichen Selekti-onsparameter und für die Protokollausgabe notwendig ist.
Globale Variablenund Konstanten
Im Block global_data werden folgende Variablen der Tabelle 2 defi-niert:
_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 Stan-dard-LSMW-Protokolls, wie Name der gelesenen/geschriebenen Dateien, Anzahl der gelesenen und konvertierten Daten-sätze, und Start, Ende und Laufzeit des Umsetzprogramms definiert. Eigene Werte, wie Nachrichtenzähler etc., kön-nen Sie im Zeitpunkt end_of_processing des Fieldmappings hinzufügen.
Eigene Routine Beschreibung
Tabelle 1 Erweitertes Protokoll – eigene Routinen (Forts.)
Variable Bedeutung
gv_cnt_1 bis gv_cnt_8 Nachrichtenzähler, der die Anzahl der produ-zierten 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 beleg-baren Textfeldern der Länge 20
_gt_err_tab interne Protokolltabelle
Tabelle 2 Erweitertes Protokoll – globale Variablen
Erweiterung der LSMW um ein erweitertes Umsetzungsprotokoll
9
Definition in jedes LSMW-Objekt aufnehmen
Eigene Routinen eines LSMW-Projekts werden in jedes Umsetzungspro-gramm der LSMW-Objekte eingebunden. Wenn Sie die eigenen Routinender Erweiterung in Ihrem LSMW-Projekt verwenden, müssen (!) alleObjekte dieses LSMW-Projekts auch die globalen Variablendefinitionendieser Erweiterung enthalten, sonst kann das Umsetzungsprogramm auf-grund fehlender Variablendefinitionen nicht generiert werden (Syntaxfeh-ler). Kopieren Sie daher den global_data-Block in jedes Ihrer LSMW-Objekte.
Selektions-parameter
Die Selektionsparameter aus Tabelle 3 werden in das Umsetzungs-programm eingefügt:
_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)
Variable Bedeutung
Tabelle 2 Erweitertes Protokoll – globale Variablen (Forts.)
Selektionsparameter-Text Variable Beschreibung
Message types to be shown _so_mtyp Auswahl der Nachrichtentypen, die in das Protokoll geschrie-ben werden sollen. Der Para-meter wird im Ereignis initi-alization mit den Werten für alle Nachrichtentypen (I, E, W, A, X) vorbelegt. Die Werte wer-den 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ön-nen im Nachhinein über den ALV sortiert werden.
Tabelle 3 Erweitertes Protokoll – zusätzliche Selektionsparameter
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
10
Selektionsbild Das Selektionsbild des Umsetzungsprogramms sieht dann wie inAbbildung 4 aus.
Abbildung 4 Erweitertes Protokoll – Selektionsparameter
ALV protocol _pa_alv Wenn gesetzt, erfolgt die Aus-gabe 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 aus-gegeben.
Conv.error -> skip_transac-tion
_pa_skip Wenn gesetzt, wird beim Schreiben einer Fehlermel-dung (Typ E) automatisch das Makro skip_transaction aus-geführt.
ALV w/DDIC struct. _pa_ddic Haben Sie die ALV-Struktur des Protokolls als DDIC-Struktur definiert, können Sie diese ver-wenden. Sonst wird eine lokal definierte Struktur verwendet.
Selektionsparameter-Text Variable Beschreibung
Tabelle 3 Erweitertes Protokoll – zusätzliche Selektionsparameter (Forts.)
Erweiterung der LSMW um ein erweitertes Umsetzungsprotokoll
11
Ein Nachrichtensatz wird dann im Fieldmapping durch den Aufrufder eigenen Routine _proto_table in die interne Protokolltabelle _gt_err_tab geschrieben. Im folgenden Beispiel wird eine Fehlernach-richt 'E' mit der Nummer '105' und Schlüsselwerten wie Kunden-nummer, Land etc., die den fehlerhaften Datensatz genauer definie-ren, und mit einem beschreibenden Fehlertext im siebten Parameterin die Protokolltabelle geschrieben. Anschließend wird dann nochein interner Zähler für genau diesen Fehler hochgezählt. Die Zähler-nummer können Sie zum Zeitpunkt end_of_processing in die ALV-Kommentarzeile 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ählenADD 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 hal-ten, lassen sich Nachricht und Fehler in den Kommentarzeilen besserzuordnen.
Kommentarzeilen und Protokoll ausgeben
Im Zeitpunkt end_of_processing werden die eigenen Kommentar-zeilen definiert und dem ALV hinzugefügt; abhängig davon, ob einALV angezeigt werden soll oder nicht, wird dieser aufgerufen, oderdie Nachrichten werden als Report-Liste angezeigt.
Eigene Kommentarzeilen werden als Zeile (ls_line) der internenTop-of-Page-Liste (_gt_list_top_of_page) hinzugefügt. Sie sollten zujeder ALV-Kommentarzeile auch eine entsprechende Report-Listen-zeile ausgeben. Diese erscheint dann auch für den Fall, dass das Pro-gramm im Hintergrund aufgerufen wird. Hier wird z. B. der Zählergv_cnt_5 der Nachricht, dass die Region nicht in der Customizing-Tabelle T005S vorhanden ist, als Kommentarzeile (ls_line-info)
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
12
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 = 'S'.ls_line-key = 'E:Region T005S(5)'.ls_line-info = gv_cnt_5.APPEND ls_line 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 Auftei-lung: <nachrichtentyp>:<kurzer Text>(<nachrichtennummer>)
Fehlerprotokoll Nachdem Sie das Umsetzungsprogramm wie immer aufgerufenhaben, erscheint nun zuerst das Fehlerprotokoll als ALV, wie inAbbildung 5 zu sehen ist.
Abbildung 5 Erweitertes Protokoll – ALV-Umsetzungsprotokoll
Erweiterung der LSMW um ein erweitertes Umsetzungsprotokoll
13
Im oberen Block erscheinen die Kommentarzeilen und darunter dieeigentlichen Protokollzeilen. Mittels ALV können Sie dann das Pro-tokoll filtern, sortieren und z. B. über das Menü Liste � Exportieren� Tabellenkalkulation… in eine Excel-Datei exportieren. Beim Ver-lassen des ALV werden dann das Standardprotokoll der LSMW alsReport-Liste und die eigenen definierten Kommentarzeilen ange-zeigt.
Umsetzungs-programm als Job
Wenn Sie das Umsetzungsprogramm im Hintergrund laufen lassen(Batch-Job), erkennt die Erweiterung dies automatisch, und das Pro-tokoll wird nur als herkömmliche Report-Liste ausgegeben (sieheAbbildung 6).
Abbildung 6 Erweitertes Protokoll – Report-Liste
Große Protokolle in Datenbanktabelle schreiben
Wenn Sie Datensätze in der Größenordnung von einigen Hunderttausendbis zu einigen Millionen umsetzen, ist es ratsam, die Anzahl der Nachrich-tensätze einzuschränken. Die Verarbeitung übergroßer interner Tabellenim ALV kann die Laufzeit Ihres Umsetzungsprogramms leicht erhöhen.Protokolle mit mehr als 65.000 Datensätzen können auch nicht in dasStandard-Excel-Format (.xls) exportiert werden. Haben Sie sehr viele Pro-tokollsätze zu schreiben (z. B. Hunderttausende von Materialverbräuchenüber mehrere Jahre), empfiehlt es sich, eine kundeneigene transparente
Legacy System Migration Workbench für Fortgeschrittene – Zusatzbeispiele
14
Z-Tabelle im Data Dictionary anzulegen und das Protokoll zum Zeitpunktend_of_processing in diese Tabelle zu schreiben. Sie können dann überdie SAP-Transaktion SE16 auf diese Tabelle zugreifen und über Einstel-lungen � Benutzerparameter das Ergebnis als ALV Grid darstellen lassen.
Die hier beschriebene Protokollerweiterung ist sehr nützlich für dasBereinigen von Datenfehlern und fehlenden Customizing-Einstellun-gen. Wenn Sie Ihr Fieldmapping um entsprechendes Prüf-Codingerweitern und die zugehörigen Nachrichten im Protokoll ausgeben,können Sie die exportierten Excel-Dateien den jeweils zuständigenFachbereichsmitarbeitern weiterleiten. Mit diesem Protokoll erhal-ten diese eine lesbare und elektronisch weiter zu verarbeitende Listean Fehlern und können z. B. fehlende Customizing-Werte nachpfle-gen oder ihre Umschlüsselungslogiken um bisher unbekannte Feld-werte erweitern.
Fazit
Alle Programmbeispiele können Sie über die Website zum Buch(https://www.rheinwerk-verlag.de/datenmigration-in-sap_3710/) alsLSMW-Projektexporte (Textdatei) herunterladen und in Ihr Systemzur eigenen Nutzung importieren (siehe Abschnitt 6.6.3, »Projektimportieren«), verändern und anpassen. Die Nutzung der gezeigtenProgrammbeispiele ist ohne Gewähr und erfolgt auf eigene Gefahr.