Allgemein gilt: alle Eigenschaften von WorkItemBase
sind von außen (public
) read-only (protected set
). Nur die Workerklasse selbst darf sie zuweisen.
Die Eigenschaften in diesem Kapitel sollten im allgemeinen vor der Einplanung eines Work-Items im Konstruktor oder spätestens in WorkItemCreating
zugewiesen werden – natürlich nur die erforderlichen.
Guid InstanceGuid
Logischer Primärschlüssel der Arbeitsaufgabe. Dieser muss systemweit eindeutig sein. Der Schlüssel wird in allen Workmanager-API Methoden zum Zugriff auf existierende Work-Items verwendet.
Wird eine noch nicht laufende Aufgabe mit demselben Schlüssel erneut angelegt, so ersetzt diese die vorherige Version.
Eine bereits laufende Aufgabe kann nicht mehr überschrieben werden (Fehlercode). Die Aufgabe kann sich nur selbst erneut einplanen.
Systemweite Aufgaben, die nur einmal existieren dürfen, sollten im Konstruktor eine beliebige, konstante GUID zuweisen.
Wenn immer eine neue Aufgabe erzeugt werden soll, kann die Zuweisung dieses Feldes entfallen. Dann vergibt das System eine GUID.
Wenn die Existenz eines Work-Items an ein anderes Objekt gebunden werden soll, dann kann auch dessen Guid verwendet werden, beispielsweise bei einem an eine Konfiguration gebundenen Worker. Es muss allerdings darauf geachtet werden, dass nicht zwei verschiedene und gleichzeitig erwünschte Worker-Klassen dieselbe GUID verwenden.
Dieses Property darf pro Instanz nur einmal zugewiesen werden.
String Name
Name des Workers. Wird in Administrativen Ansichten von Work-items verwendet sowie als Standard-Titel beim Anlegen des zugehörigen Worker-Protokolls.
Wenn kein Name angegeben wird, wird der Name der implementierenden Worker-Klasse verwendet.
Guid UserContextGuid
Der User-Kontext in dem dieses Work-Item arbeiten soll, z. B. Constants.SystemUser
.
Standardmäßig wird der aktuelle Benutzer verwendet, unter dem das Work-Item erzeugt wurde.
EnumExpectedRunTime ExpectedRunTime
Priorität des Work-Items (siehe Scheduling/Prioritäten), standardmäßig Normal.
DateTime ScheduledStartTime
Wann soll das Work-Item starten (UTC!), standardmäßig: sofort.
bool IsSystemWorkItem
Ist dies ein System- oder ein User-WorkItem? System-Work-Items tauchen nicht in der Progress Bar auf, auch dann nicht, wenn sie unter der dem angemeldeten User laufen.
bool IsVisibleForAllUsers
Soll dieses Work-Item allen Benutzern im Progress Bar angezeigt werden?
bool IsCancellable
Darf dieses Work-Item vom Benutzer abgebrochen werden?
Die Eigenschaft kann auch davon abhängen, in welchem Zustand sich das WorkItem befindet. Es kann beispielsweise beim Beginn der eigentlichen Arbeit wieder auf false
gesetzt werden.
int NumberOfStarts, MaxNumberOfRestarts
Wie oft wurde diese Instanz des Work-Items bereits gestartet und wie oft darf eine Neustart maximal erfolgen.
Diese Parameter werden verwendet, um zu entscheiden, ob ein automatischer Neustart nach einem Fehler oder einem Timeout noch angemessen ist. Standardmäßig werden maximal 3 Neustarts durchgeführt.
WorkerLoggingMode LoggingMode
Soll automatisch ein Worker-Protokoll mit dem Namen der Work-Items für dieses Work-Item angelegt werden?
Auto
Beim Schreiben des ersten Ereignisses wird ein Applikationsprotokoll erstellt. (Standard)Always
Vor dem Start des Work-Items eine Applikationsprotokoll angelegt.Never
Es wird kein Applikationsprotokoll erstellt. Die Worker-Implementierung kann dies aber perInitLogger()
explizit tun.
Dieses Property darf nur im Konstruktor zugewiesen werden.
EnumLogProcesses LoggingProcess
Das Log soll mit diesem Wert für die Eigenschaft OrmLogBase.Process
erstellt werden.
Dieses Property sollte nur im Konstruktor zugewiesen werden.
Wenn eine dynamische Berechnung gefordert ist, kann diese Alternativ in einer Überladung von InitLogger()
erfolgen, und zwar vor dem Aufruf von base.InitLogger()
.
Guid LoggerGuid
GUID des zugehörigen Worker-Protokolls.
Wird hier eine GUID eines existierenden Protokolls verwendet, so wird kein neues angelegt, sondern dieses fortgeschrieben.
Ist das Feld leer und LoggingMode
aktiviert, wird ein neues Protokoll angelegt.
Dieses Property wird beim Erstellen eines Protokolls automatisch aktualisiert.
Wenn man eine abweichende GUID zuweist, wird das Logging beendet bis wieder InitLogger()
aufgerufen wird.
EnumWorkItemState State (read-only)
Aktueller Zustand des Work-Items. Siehe Work-Items / Zustände.
Für einige, häufig benötigte Zustände gibt es eigene Properties:
bool IsRunning
Der Prozess ist gerade aktiv und hat kein Signal zu Abbrechen bekommen. (EnumWorkItemState.Running
)
bool IsError
Der Prozess ist mit einer Exception abgebrochen:
EnumWorkItemState.Error
Es gab eine unbehandelte Ausnahme in der MethodeRun
.EnumWorkItemState.Killed
Der Prozess hat nicht auf die Anforderung zum Beenden nach Zeitüberschreitung (EnumWorkItemState.CancellingBySystem
) reagiert und wurde mit einerThreadAbortException
abgebrochen.EnumWorkItemState.Aborted
Der Prozess hat nicht auf die Anforderung zum Beenden wegen Anwendungsneustart (EnumWorkItemState.ShutdownRequest
reagiert und wurde mit einerThreadAbortException
abgebrochen.
bool IsDone
Der Prozess hat seine aktive Arbeit beendet un ist in seinem finalen Status. Das ist jeder Status ab der Kategorie “final”, und es bedeutet nicht, dass die Arbeit auch erfolgreich (fehlerfrei) war.