Mit wenig Aufwand zur automatisierten Abarbeitung
Ausgangslage
In den meisten Fällen kommt es früher oder später zu neuen Kundenerweiterungen bzw. -prozessen, aus denen es notwendig wird eine Masse an betroffenen Objekten (z.B. Geschäftspartner), bspw. entsprechend einer komplexeren Findung und/oder einer Puffertabelle, zu aktualisieren oder an ein Drittsystem zu synchronisieren. Ist für solch ein Vorhaben ein Report für die Hintergrundverarbeitung implementiert, der auch über geeignete Select-Optionen verfügt, kann mit einfachen Schritten eine Optimierung beim Einplanen vorgenommen werden.
Nehmen wir an, in einem SAP System stehen insgesamt 15 Hintergrundserver zur Verfügung, von denen aber nur 5 für die Aktualisierung genutzt werden dürfen, um den laufenden Betrieb nicht zu beeinträchtigen.
Bei einer hohen Anzahl von Datensätzen und je nach Beschaffenheit des Systems kann es bei einer Einzelabarbeitung unter Umständen mehrere Tage dauern, bis alle Aktualisierung vorgenommen wurden. Hier bietet es sich dann an mit der Selektion von Nummernbereichen (z. B. anhand Geschäftspartner IDs) den Aktualisierungsreport aufzuteilen und parallel einzuplanen. Jedoch kann nicht genau bestimmt werden, welcher Bereich wie lange dauern wird und ob bei den verfügbaren 5 Servern die Nummernbereiche evtl. nicht dennoch zu groß sein werden. Auch eine Abarbeitung per Jobkette und kleineren Nummernbereichen würde das Optimum nicht voll ausnutzen und es bestehe zudem das Risiko, dass bei einem Abbruch ggf. eine neue und angepasste Jobkette manuell eingeplant werden muss.
Was kann stattdessen unternommen werden?
Zunächst ist es notwendig einen weiteren Report zu implementieren, der anstelle des Aktualisierungsreports in der Hintergrundverarbeitung einmalig eingeplant wird und dessen Aufgaben hauptsächlich aus den folgenden Bestandteilen besteht.
Aufteilung der Nummernbereiche unter Verwendung des Nummernkreises (siehe Abbildung 2). Die Größe der Bereiche sollte dabei vorzugsweise als Parameter angegeben werden können. Empfehlenswert ist auch einen Parameter für den Beginn angeben zu können, um so den Beginn aus dem Nummernkreis zu übersteuern, falls es zu einem Abbruch gekommen ist und einige Bereiche bereits abgearbeitet worden sind.
Bei einer Bereichsgröße von 10.000 würde die Aufteilung dann wie folgt aussehen:
-
- Nr. Bereich 1: 9000000000 – 9000010000
- Nr. Bereich 2: 9000010001 – 9000020000
- Nr. Bereich 3: 9000020001 – 9000030000
- Nr. Bereich n: …
Automatisierte Jobeinplanung des Aktualisierungsreport mit den ermittelten Bereichen als Parameter und unter Einhaltung der maximal erlaubten Hintergrundserver, welches sich ebenfalls gut als Parameter eignet. Bei der Einplanung ist es sehr wichtig einen eindeutigen Jobnamen zu verwenden, da dieser dazu dient, die Anzahl an aktuell parallel genutzten Server aus der Tabelle TBTCO (Job-Zustandsübersichtstabelle) zu ermitteln. Bei der Selektion aus der Tabelle sollte abgesehen vom Jobnamen auch der Status mit abgefragt werden. In einer While-Schleife wird dann, falls noch weitere nicht eingeplante Nummernbereiche existieren, auf die TBTCO abgefragt bis ein weiterer zur Verfügung stehender Server frei ist, um mit der Einplanung fortzufahren.
Wie bei jeder Implementierung sollte aber stets auf den Aufwand und Nutzen geachtet werden. Diese Form der Optimierung rechtfertigt sich nur bei einer hohen Anzahl von Objekten, die in einem Massenlauf aktualisiert werden sollen. Der Fokus hierbei liegt bei der automatisierten Abarbeitung, weitere Themen wie der Umgang mit Fehlern etc. werden hier nicht aufgeführt, sollten aber grundsätzlich auch berücksichtigt und implementiert werden.