Hartkodierte Werte aus SAP-Formularen entfernen
Sie haben schon seit längerem SAP-Formulare im Einsatz? Dann ist es sehr wahrscheinlich, dass Sie einige hartkodierte Werte in den Formularen und den Source Codes haben. Problematisch ist das natürlich bei Stammdatenänderungen oder aber bei einer Zusammenlegung von Mandanten, doch wir zeigen Ihnen wie Sie Ihre Formulare schnell und massenhaft downloaden und die entsprechenden Attribute als hartkodierte Werte prüfen können.
Nachdem Sie den Download ausgeführt und die XML-Daten auf hartkodierte Werte untersucht haben, können Sie mit der Bereinigung dieser beginnen. In diesem Artikel zeige ich Ihnen, welche Möglichkeiten Sie dabei haben und auf welche Besonderheiten Sie bei den einzelnen Formularen achten sollten.
Allgemeines Vorgehen, um hartkodierte Werte zu entfernen
Es ist wichtig, die Werte nach der Anpassung weiterhin jederzeit verändern zu können, ohne den Quellcode anpassen zu müssen. Zu diesem Zweck wurde entschieden, für jede DOI (Digital Object Identifier, wie Mandant, Länderschlüssel…) eine eigene Mapping-Tabelle anzulegen. Diese Customizing-Tabelle kann von den Fachbereichen über den Pflegedialog der sm31 angepasst werden.
Die Werte werden mit Hilfe von Methoden aus den Tabellen gelesen. Um hartkodierte Werte in den Formularen zu ersetzen, implementierten wir die Methoden in den entsprechenden Formularen. Hier ist bei der Analyse zuvor vor allem darauf zu achten, dass die genauen Orte der hartkodierten Werte erfasst werden, um die Methoden an den korrekten Stellen aufrufen zu können. Wie diese drei Schritte im einzelnen umgesetzt wurden, zeige ich Ihnen in den nächsten Abschnitten.
Aufbau der Mapping-Tabelle
Zunächst beginnen wir mit dem Aufbau der Customizing-Tabelle Im unten aufgeführten Bild ist ein Beispiel für das Mapping des Länderschlüssels. Der Aufbau ist bei allen Domains of Interest gleich.
In der ersten Spalte ist ein Schlüsselwort definiert, das als Schlüssel für den entsprechenden Wert gilt, der in der zweiten Spalte aufgeführt ist.
Erstellen der Mapping-Methoden
Um nun diese Werte aus den Tabellen zu lesen, wurden Methoden verwendet, die in einer Klasse gebündelt wurden.
Als Eingabeparaemter wurden hier immer die Schlüsselwörter der Tabelle verwendet, um die Werte zu identifizieren. Zu beachten ist hier, dass SAP Keywords immer in Großbuchstaben speichert. Somit ist es notwendig, den erhaltenen Wert zu konvertieren. Im Anschluss werden die Werte per SELECT aus der Tabelle gelesen, wo der Importparameter und der Schlüsselwert übereinstimmen.
Im Anschluss sollte noch ein Fehlerhandling eingetragen werden, um möglichen Unachtsamkeiten beim Customizing entgegenzuwirken. Hier werden drei Fälle unterschieden:
1. Der Methode wurde kein Keyword übergeben.
2. Zum Keyword existiert in der Tabelle kein Mapping-Wert.
3. Die Datenbank ist nicht erreichbar.
Im folgenden werde ich Ihnen aufzeigen, wie die Methoden in den einzelnen Formulararten implementiert wurden.
Implementierung der Mapping-Methoden
In dem Artikel gehen wir auf Sapscript, Smartforms und Adobe Forms jeweils gesondert ein, da sich Unterschiede in der Implementierung ergeben.
SapScript
In SapScript wird zunächst ein Symbol definiert, die den Wert aus der Methode entgegennimmt. Im zweiten Schritt wird diese mit dem Aufruf eines Unterprogramms, indem die Methode enthalten ist, gefüllt. Anschließend wird die betreffende Variable mit dem neu selektierten Wert befüllt.
Das Unterprogramm wird im Formular zugehörigen Report implementiert. Wie oben bereits erwähnt, wird dort die Methode aufgerufen.
Smartforms
Lokale Variable
Im ersten, möglichen Fall kommt der hartkodierte Wert nur in einem Coding-Element vor. Hierfür definieren wir eine lokale Variable, die das entsprechende Land aus der Methode entgegennimmt. Diese rufen wir direkt danach auf und füllen die angelegte Variable. Nach der Abfrage der Fehlercodes könnte noch ein entsprechendes Fehlerhandling implementiert werden. Anschließend wird die Variable in die Formularlogik integriert, so wie es zuvor der hartkodierte Wert war. Im folgenden Bild ist wieder ein Beispiel mit dem Länderschlüssel dargestellt.
Globale Variable
Wenn hartkodierte Werte als globale Variablen definiert sind, wird zunächst ebenfalls eine globale Mappingvariable angelegt. Anschließend wird im Reiter Initialisierung die Variable als Ausgangsparameter deklariert. Außerdem wird dort sie dort direkt über den Aufruf der Methode befüllt.
Auftauchen können sie in Elementbedingungen und mehreren Coding-Elementen. Bei ersteren die entsprechende auswählen, auf den Tab Bedingungen gehen und dort die entsprechende Variable durch die neu angelegte globale ersetzen.
Bei der zweiten Möglichkeit orientieren Sie sich wieder idealerweise an ihrer Analyseliste, wo alle Vorkommnisse mit dem Ort aufgeführt sind. Hier geben Sie die Variable als Eingangsparameter an und ersetzen die alte im Code.
Adobe Forms
Bei Adobe Forms können die Werte sowohl im Formular selbst als auch in der Schnittstelle existieren.
In der Schnittstelle wird die Methode einfach in der Coding Initialisierung aufgerufen und dort eine lokale Variable gefüllt.
Bei den Formular-Layouts legen wir in dem Fall für jedes Fall eine globale Variable an, die wir auch in den Kontext mit übernehmen. Das ermöglicht es uns, die Variable im Layout im Skritping zu nutzen und die hartkodierten Werte dadurch zu ersetzen.
Adobe Forms Einführungsworkshop – Fahrplan durch den Formular-Dschungel
Besuchen Sie unseren Adobe Forms Einführungsworkshop und erhalten Sie einen Überblick, was Sie für die erfolgreiche Einführung benötigen.
Sonderfall Mandant
Sollten Sie wirklich eine Mandantenzusammenlegung planen, ist hier eine Anpassung vorzunehmen. Um die alte Logik der Mandantendifferenzierung beibehalten zu können, ist es notwendig, die Customizing-Tabelle anders aufzubauen Sie besteht wieder aus einer Spalte für Keyword . Zusätzlich ist der Buchungskreis und der alte Mandant angegeben. So ist es möglich, die alte Unterscheidung beizubehalten, da wir die Buchungskreise dafür verwenden, die auf den alten Mandanten basieren.
Standen Sie auch schon mal vor der Aufgabe, hartkodierte Werte in Formularen zu bereinigen? Wie sind Sie dabei vorgegangen? Wir freuen uns auf Ihre Kommentare oder kontaktieren Sie mich einfach direkt.