Batch-Jobs in D365: ein russisches Roulette

Reale Produktionsszenarien umfassen automatisierte Batch-Aufgaben, die im Hintergrund mit einiger Kadenz ausgeführt werden: Überblick über die Batch-Verarbeitung – Finance & Operations. Sie gelten für Sätze von Dokumenten, die zur Laufzeit abgerufen werden, beispielsweise für gelieferte, aber noch nicht fakturierte Kundenaufträge. Natürlich sollte die Abfrage mit den Dokumenten jeden Tag einen anderen Satz mit den kürzlich versendeten Verkaufsaufträgen zurückgeben. Es wird genannt Späte Auswahl: Späte Auswahl in D365FO – D365Tour. So weit so bekannt.

Mit zunehmender Komplexität des Geschäfts steigt auch die Komplexität der Batch-Jobs. Sie benötigen Jobs, die aus mehreren Aufgaben bestehen, die nacheinander ausgeführt werden. Es wird Aufgabenabhängigkeit oder Aufgabe genannt Einschränkungen. Eine der letzten unangenehmen Entdeckungen war die Tatsache, dass man sich nicht immer auf die im Stapeljob festgelegte Schrittfolge verlassen kann: Die nützlichsten Aufgaben, wie z SalesFormLetter_Rechnung und ähnliche (zum Aktualisieren von Verkaufs- und Einkaufsaufträgen mit Auftragsbestätigungen, Lieferscheinen und Rechnungen) fungieren als Orchestratoren und Spin-Off-Kind-Batch-Tasks für die gleichzeitige Multithread-Verarbeitung von Verkaufsaufträgen, Bestellungen und Produktionsaufträgen. Diese untergeordneten Aufgaben sind nicht eingeschränkt (!) und werden nach dem Prinzip „Wer zuerst kommt, mahlt zuerst“ ausgeführt. Sie dürfen während der Mastertask noch laufen SalesFormLetter_Rechnung endet scheinbar und gibt den Staffelstab an die nächste Aufgabe weiter. Dies führt zu Interferenzen und Rennbedingungen. Sie bewerten besser die durchschnittliche Ausführungszeit der Master-Controller-Task als Ganzes, setzen diese Controller in verschiedene Batch-Jobs und planen sie in einem sicheren zeitlichen Abstand voneinander ein.

Heterogene Batch-Jobs wie der unten gezeigte stellen eine andere Herausforderung dar.

Hier ist die Anleitung:

  1. Spin off die erste Aufgabe aus dem Hauptmenü (hier: Produktionssteuerung > Periodische Aufgaben > Produktionsauftragsstatusaktualisierung) und wähle Im Hintergrund laufen / Stapelverarbeitung. Dies ist Ihr Ausgangspunkt, eine Vorlage für den Batch-Job.
  2. Suchen Sie den Batch-Job in der Meine Batch-Jobs Liste, setzen Sie den Status auf Zurückgehalten und beginne mit der Bearbeitung.
  3. Jede Aufgabe innerhalb eines Batch-Jobs benötigt eine Klassenname. Jetzt kennen Sie den Klassennamen der ersten Aufgabe: ProdMultiCostEstimation. Um die nächste Aufgabe hinzuzufügen, müssen Sie ihren Klassennamen manuell angeben. Die Eigentümer dieses Frameworks haben eine Nachschlageliste bereitgestellt, aber sie ist langsam und völlig dysfunktional: Sie zeigt nur einen Bruchteil der möglichen ausführbaren Datei RunBase Oder SysOperation Klassen, manchmal stürzt es ab, wenn es einige schlechte Anpassungen im Quellcode gibt. Wenn Sie den Klassennamen nicht kennen, wiederholen Sie Schritt 1, um ihn anzuzeigen.
  4. Fügen Sie die nächste Aufgabe hinzu, geben Sie den Klassennamen ein. Beim ersten Mal dauert es bis zu 20-30 Sekunden, bis das System die akzeptiert und abruft Klassenbeschreibung.
  5. Die meisten Stapelaufgaben benötigen eine Abfrage. Klicken Parameter es zu bevölkern. Hier erleben Sie eine weitere unangenehme Eigenschaft des Batch-Frameworks: Die angezeigte Abfrage ist die letzte, die Sie an anderer Stelle im System verwendet haben. Es ist nicht unbedingt derjenige, der wirklich an der Batch-Task festhält. Ein anderer Benutzer wird Ihre Suchkriterien überhaupt nicht sehen: Nur der Eigentümer/Ersteller hat die Kontrolle. *1) *2) *3)
  6. Auf der Batch-Aufgabendetails Tab, Einschränkungen, wählen Sie die Vorgängeraufgabe aus, um eine Kette zu bilden. Sie müssen viele ändern Erwarteter Zustand das Beendet oder Fehler wenn der Batch-Job bei einem Fehler irgendwo in der Kette mit der nächsten Aufgabe fortfahren muss.
  7. Überprüfen Sie die Wiederholung, entfernen Sie die Warnungen Falls erforderlich, und stellen Sie den Batch-Job wieder auf Warten.

1) Gelernte Lektionen: Machen Sie einen Screenshot von jeder Abfrage und jedem Parameter, dokumentieren Sie ihn gründlich, um die Wartung an den Dynamics-Systemadministrator weiterzugeben.

2) In bestimmten Fällen können Sie bei einer manuell hinzugefügten Aufgabe die Ausführungsparameter und/oder die Abfrage nicht bearbeiten. Manchmal (z. B. bei Kundenauftragsaktualisierungen) hilft es, dieselbe periodische Aufgabe in der normalen Benutzersitzung einmal auszuführen. Aus diesem Grund ist es oft schwierig, die Batch-Jobs in einer “Golden Config”-Umgebung vorzukonfigurieren: Möglicherweise müssen echte Transaktionen ausgeführt werden. Manchmal möchte es aus dem Hauptmenü und nirgendwo sonst initialisiert werden, weil es schlecht programmiert ist. Beginnen Sie in einem solchen Fall mit Schritt 1 – der Schlüsselaufgabe – mit dieser kritischen periodischen Aufgabe. Sollten 2 solcher zickiger Tasks in einer Batch-Job-Kette stehen, ist Schluss. Sie müssen in verschiedene Batch-Jobs aufgeteilt werden.

3) Als wirklich böse Überraschung kam die Tatsache, dass selbst der Eigentümer keine Kontrolle über die Abfrage hat: wenn Sie die verwenden Späte Auswahlin einer Kette von fast identischen Aufgaben wie die folgenden, die ABFRAGE DER LETZTEN AUFGABE WIRD AUF JEDE AUFGABE ANGEWENDET der Art, zumindest im Falle der Produktionsauftragsstatusaktualisierungen.

Sie sollten den verdammten Job erst einmal laufen lassen, dann den Batch-Job wieder anhalten und die Abfragen in den Aufgaben noch einmal anpassen, dann speichern und den Batch-Job erneut aktivieren.

.

Author: admin

Leave a Reply

Your email address will not be published.