Tasks
Einführung in Tasks in ConSol CM
Mit Tasks können Skripte asynchron ausgeführt werden, sodass die Skriptausführung nicht mit Benutzeraktionen im Web Client oder CM/Track verknüpft ist. Tasks eignen sich daher für allgemeine Operationen und für Operationen, deren Verarbeitung so lange dauert, dass es bei einer Ausführung als reguläres Skript zu Timeouts kommen würde.
Konzepte, Begriffe und Definitionen
|
Konzept |
Andere Begriffe |
Definition |
|---|---|---|
|
Task |
|
Asynchrone Ausführung eines Skripts |
|
Task-Skript |
|
Skript, in dem die von einem Task ausgeführten Operationen und das Verhalten des Task bei Fehlern oder Abbruch implementiert sind |
|
Task executor |
|
Modul, das die Datenbank nach neuen geplanten Tasks durchsucht und diese ausführt |
|
Task descriptor |
|
Internes Objekt, in dem Informationen über einen Task gespeichert sind |
|
Execution specification |
|
Internes Objekt, in dem Informationen über das Startdatum und die Startzeit des Task gespeichert sind; wenn nicht angegeben, wird der Task sofort gestartet |
Zweck und Verwendung
Tasks ermöglichen asynchrone Operationen. Sie können entweder manuell in der Web Admin Suite oder automatisch in einem Skript erstellt werden. In beiden Fällen basiert der Task auf einem Skript des Typs Task, in dem die Logik der durchzuführenden Operationen implementiert ist. Tasks können für Operationen verwendet werden, die sich nicht auf spezifische Benutzeraktionen im Web Client oder CM/Track beziehen, wie zum Beispiel allgemeine Wartungsarbeiten. Zusätzlich ermöglichen Tasks die Durchführung von Operationen, deren Verarbeitung lange dauert, sodass sie einen Timeout verursachen würden, wenn sie als reguläres Skript ausgeführt würden.
Mit Tasks können Objekte endgültig aus der ConSol CM-Datenbank gelöscht werden. Die durch einen Task ausgeführten Aktionen können nicht rückgängig gemacht werden. Tasks, die Massenoperationen durchführen, können die System-Performance schwer beeinträchtigen.
Verfügbare Einstellungen für die Task-Ausführung
Die folgenden Einstellungen sind für die Task-Ausführung im Allgemeinen verfügbar:
-
Transaktions-Timeout
Die System-Property cmas-core-server, transaction.timeout.minutes legt den Transaktions-Timeout für Tasks fest. Eine Ausführung des Tasks muss abgeschlossen sein, bevor der Timeout eintritt. Wenn die von dem Task durchzuführenden Operationen länger dauern, müssen Sie die Verarbeitung aufteilen und den Task wiederholen, siehe Wiederholen eines Tasks.
-
Thread-Pool
Die System-Property cmas-core-server, number.of.tasks legt die Größe des Thread-Pools fest, d. h. wie viele Tasks parallel ausgeführt werden können.
-
Zeit zwischen Ausführungen
Die System-Property cmas-core-server, task.execution.interval.seconds legt die Zeit zwischen der Ausführung von zwei Tasks fest.
-
Node-ID (nur für Cluster relevant)
Die System-Property cmas-core-server, task.execution.node.id legt fest, auf welchem Cluster-Node die Tasks ausgeführt werden.
Grundlegende Aufgaben
Sie müssen folgende Schritte ausführen, um Tasks in ConSol CM zu nutzen:
- Erstellen Sie ein Task-Skript, in dem die Logik der durchzuführenden Operationen implementiert ist, siehe Erstellen eines Task-Skripts.
- Erstellen Sie einen Task, die das Task-Skript ausführt, siehe Erstellen eines Tasks.
- Sie können den Fortschritt des Task in der Task-Liste nachverfolgen, siehe Nachverfolgen der Task-Ausführung.
Erstellen eines Task-Skripts
Erstellen Sie im Abschnitt Skripte der Web Admin Suite ein Skript des Typs Task (siehe Skripte). Das Skript muss die Logik der durchzuführenden Operationen implementieren.
Das Task-Skript muss folgende vier Methoden implementieren:
- onInitialize()
Code, der nach der Erstellung des Tasks ausgeführt wird - onExecute()
Code, der nach dem Start des Tasks ausgeführt wird - onError()
Code, der ausgeführt wird, wenn bei der Task-Ausführung ein Fehler auftritt - onCancel()
Code, der ausgeführt wird, wenn der Task abgebrochen wird
Erstellen eines Tasks
Es gibt zwei Möglichkeiten zur Erstellung eines Tasks:
- Manuell einen Task für die sofortige Ausführung erstellen:
- Öffnen Sie den Abschnitt Tasks der Web Admin Suite.
- Klicken Sie auf den Button Neuer Task.
- Wählen Sie ein Task-Skript aus und klicken Sie auf Task starten.
Sie können einen Task auch erstellen, indem Sie auf den Button Task ausführen klicken, der für Task-Skripte im Abschnitt Skripte der Web Admin Suite angezeigt wird.
- Erstellen Sie einen Task in einem anderen Skript (Workflow-Aktivitäts-, Aktions- oder E-Mail-Skript):
Öffnen Sie das Skript in der Web Admin Suite oder im Process Designer.
Fügen Sie den Code zum Erstellen eines Tasks hinzu (Ersetzen Sie „taskScript.groovy“ durch das in Erstellen eines Task-Skripts erstellte Skript):
GroovyTask groovyTask = new GroovyTask();
groovyTask.setStaticScript(scriptSourceService.getByName("taskScript.groovy"));
taskDescriptor = taskExecutionService.schedule(groovyTask, "task");
Standardmäßig werden Tasks sofort ausgeführt. Es ist nicht möglich, manuell erstellte Tasks auf der graphischen Benutzeroberfläche für einen späteren Zeitpunkt zu planen. In Definieren des Ausführungsdatums eines Tasks ist beschrieben, wie das Ausführungsdatum im Task-Skript geändert werden kann.
Nachverfolgen der Task-Ausführung
Die Task-Liste enthält alle aktiven Tasks im System. Für jeden Task werden folgende Informationen angezeigt:
- Name
Name des Task-Skripts - Fortschritt
Fortschrittsanzeige, die den Fortschritt der Task-Ausführung zeigt - Erstellt am
Datum und Zeit der Erstellung des Tasks - Nächste Ausführung am
Datum und Zeit des Beginns der Ausführung des Tasks. Das ist normalerweise der gleiche Zeitpunkt wie in Erstellt am, außer wenn im Task-Skript ein anderes Ausführungsdatum definiert wurde, siehe Wiederholen eines Tasks und Definieren des Ausführungsdatums eines Tasks. - Status
Status des Tasks. Dies kann Initialisiert, Wird ausgeführt, Gesperrt oder Wird angehalten sein.
Erweiterte Aufgaben
Abbrechen eines Tasks
Es gibt zwei Möglichkeiten, um einen laufenden Tasks abzubrechen:
-
Suchen Sie den Task im Abschnitt Tasks der Web Admin Suite und klicken Sie in der Zeile des Tasks auf den Button Anhalten.
-
Halten Sie den Task in einem anderen Skript an. In diesem Fall benötigen Sie die Descriptor-ID des Tasks, der angehalten werden soll.
Verwenden Sie folgenden Code, um die Descriptor-ID bei der Task-Erstellung zu speichern:
GroovyTask groovyTask = new GroovyTask();
groovyTask.setStaticScript(scriptSourceService.getByName("taskScript.groovy"));
taskDescriptor = taskExecutionService.schedule(groovyTask, "task");
def myTaskDescriptorId = groovyTask.getId()
//save this ID
Sie können den Task mit folgendem Code abbrechen:
taskExecutionService.cancel(myTaskDescriptorId)
Abgebrochene Tasks werden entfernt und können nicht fortgesetzt werden.
Wiederholen eines Tasks
Es gibt zwei Szenarien, in denen Sie einen Task möglicherweise wiederholen möchten:
- Während der Task-Ausführung ist ein Fehler aufgetreten.
- Der Task verarbeitet eine große Menge an Daten und Sie möchten die Verarbeitung stückeln.
In beiden Fällen können Sie den Task mit der folgenden Methode wiederholen:
return new ExecutionSpecification().setRetryRequested(true);
Wenn Sie ein bestimmtes Datum oder eine bestimmte Zeit, zu der der Task wiederholt werden soll, setzen möchten, können Sie folgende Methode verwenden:
return new ExecutionSpecification().setRetryRequested(true).setExecutionDate(new Date(new Date().getTime() + 15000));
Fügen Sie diesen Code im Task-Skript am Ende der Methode onExecute() ein, wenn Sie den Task in der regulären Ausführung wiederholen möchten. Wenn Sie den Task wiederholen möchten, wenn ein Fehler aufgetreten ist, fügen Sie den Code in die Methode onError() ein.
Definieren des Ausführungsdatums eines Tasks
Wenn ein Task nicht sofort gestartet werden soll, können Sie die Startzeit in der Methode onInitialize() setzen.
def onInitialize(taskDescriptor) {
return new ExecutionSpecification().setExecutionDate(new Date(new Date().getTime() + 15000));
}
Wenn der Task gestartet wird, wird das Ausführungsdatum in Task-Liste in der Spalte Nächste Ausführung am angezeigt.
Verwenden der Kontextreferenz
Wenn Sie Tasks aus anderen Skripten erstellen, können Sie mithilfe der Kontextreferenz feststellen, welches Skript den Task erstellt hat. Sie setzen beim Erstellen des Tasks eine Kontextreferenz, die im Task-Skript abgerufen werden kann, um unterschiedliches Verhalten je nach Ursprungsskript zu implementieren.
- Setzen Sie die Kontextreferenz im Ursprungsskript, z. B. einem Workflow-Skript:
GroovyTask groovyTask = new GroovyTask();
groovyTask.setStaticScript(scriptSourceService.getByName("taskScript.groovy"));
groovyTask.setContextReference("context reference")
- Rufen Sie die Kontextreferenz im Task-Skript ab:
taskDescriptor.getContextReference()