Informationsinhalte und Zugriff benutzerspezifisch anpassen > Versenden und Validieren von Vor- und Nachaktionsereignissen
Versenden und Validieren von Vor- und Nachaktionsereignissen
Wenn eine Aktion zum Erstellen, Aktualisieren oder Löschen gestartet wird, wird vor dem Aktualisieren der Datenbank das Voraktionsvalidierer-Ding (PTC.SCA.SCO.PreActionValidator) aufgerufen. Nach erfolgreicher Validierung wird die Datenbank aktualisiert und die Aktion abgeschlossen. Nach einer erfolgreichen Datenbankaktualisierung wird das Nachaktions-Handler-Ding (PTC.SCA.SCO.PostActionHandler) in einem anderen Thread aufgerufen. Dies hat keine Auswirkung auf die Ausführung der Aktion. Das folgende Diagramm zeigt die Dispatcher-Sequenz des Voraktionsvalidierers und des Nachaktions-Handlers nach erfolgreicher Voraktionsvalidierung.
Wenn die Validierung fehlschlägt, wird die Aktion nicht abgeschlossen, und die Datenbank wird nicht aktualisiert. Das folgende Diagramm zeigt die Dispatcher-Sequenz nach dem Fehlschlagen der Voraktionsvalidierung.
Das Voraktionsvalidierer-Ding (PTC.SCA.SCO.PreActionValidator) erbt die Dingvorlage für den Voraktionsvalidierer (PTC.SCA.SCO.PreActionValidatorThingTemplate). Ähnlich erbt das Nachaktions-Handler-Ding (PTC.SCA.SCO.PostActionHandler) die Dingvorlage für den Nachaktions-Handler (PTC.SCA.SCO.PostActionHandlerThingTemplate). Diese Dingvorlagen implementieren die notwendigen Dingformen zum Auslösen des Versands von Vor- und Nachaktionsereignissen.
Beim Initiieren einer Aktion zum Erstellen, Aktualisieren oder Löschen wird der geeignete Voraktionsdienst für den Voraktionsvalidierer (PreCreateAction, PreUpdateAction oder PreDeleteAction) ausgelöst. Der Voraktionsdienst führt wiederum den Dienst CallServices aus, der die Datenänderungen prüft und die Konfiguration des Voraktionsvalidierers liest. Wenn ein Dienst für diese Aktion und diesen Data Shape konfiguriert ist, versendet CallServices die entsprechenden Validierungsdienste. Wenn ein Teil der Validierung fehlschlägt, ist die gesamte Aktion nicht erfolgreich.
Beim Abschließen einer Aktion zum Erstellen, Aktualisieren oder Löschen wird der Nachaktions-Handler (PostCreateAction, PostUpdateAction oder PostDeleteAction) ausgelöst. Der Nachaktionsdienst führt dann den Dienst CallServices aus, der die Konfiguration des Standard-Nachaktions-Handlers liest. Wenn ein Dienst für diesen Data Shape und diese Aktion konfiguriert ist, wird dieser Nachaktionsdienst versendet.
Dienste werden im Voraktionsvalidierer und im Nachaktions-Handler bereitgestellt, die ausgeführt werden, wenn eine Arbeitsdefinition, eine Schicht oder ein Standort erstellt oder aktualisiert wird. Diese Implementierungen können als Modelle verwendet werden, um Ihre eigenen Vor- und Nachaktionsdienste zu implementieren.
Beispiel
Die Voraktions- und Nachaktions-Dienste einer Arbeitsdefinition funktionieren z.B. wie folgt:
Auf dem Voraktionsvalidierer-Ding: WorkDefinitionPreCreate, WorkDefinitionPreUpdate, ValidateWorkDefinitionExecutionStatus und EnumerationValidation
Wenn eine Arbeitsdefinition erstellt oder aktualisiert wird, und ein Ausführungsstatus angegeben wird, wird der Ausführungsstatus validiert, bevor die Aktion weiter ausgeführt werden kann. Je nach ausgeführter Aktion wird der Dienst WorkDefinitionPreCreate oder WorkDefinitionPreUpdate aufgerufen. Diese Aktion ruft wiederum den Dienst ValidateWorkDefinitionExecutionStatus auf, der den Dienst EnumerationValidation aufruft. Wenn mehrere Arbeitsdefinitionen in einer einzelnen Aktion erstellt oder aktualisiert werden und für eine von ihnen ein ungültiger Ausführungsstatus angegeben wurde, ist die gesamte Aktion nicht erfolgreich. Legen Sie die Protokollebene auf Debuggen fest, um die Details der Validierungsdienste sowie etwaige Fehler unter Überwachung > ScriptLog anzuzeigen. Verwenden Sie den Dienst EnumerationValidation als Beispiel dafür, wie man eine Ausnahme auslöst, wenn eine Validierung fehlschlägt.
Auf dem Nachaktionsvalidierer-Ding: WorkDefinitionPostCreate, WorkDefinitionPostUpdate, LogWorkDefinitionExecutionStatusChange
Nachdem eine Arbeitsdefinition erfolgreich erstellt oder aktualisiert wurde, wird der Dienst WorkDefinitionPostCreate oder WorkDefinitionPostUpdate aufgerufen, abhängig davon, welche Aktion ausgeführt wird. Diese Aktion ruft wiederum den Dienst LogWorkDefinitionExecutionStatusChange auf, der die folgenden Details über die Aktion protokolliert: der verantwortliche Agent für die Aktion, die UID der erstellten oder aktualisierten Arbeitsdefinition sowie UID und Wert des Ausführungsstatus. Diese Details können mit Überwachung > ScriptLog angezeigt werden, nachdem Protokollebene auf Debugging festgelegt wurde.
Voraktions- und Nachaktionsdienste hinzufügen
Die Dinge PTC.SCA.SCO.PreActionValidator und PTC.SCA.SCO.PostActionHandler können nicht bearbeitet werden.
So fügen Sie zusätzliche Vor- oder Nachaktionsdienste hinzu:
1. Für zusätzliche Voraktionsdienste duplizieren Sie das Ding PTC.SCA.SCO.PreActionValidator. Duplizieren Sie für zusätzliche Nachaktions-Handler-Dienste das Ding PTC.SCA.SCO.PostActionHandler. In diesem Verfahren werden diese duplizierten Dinge als PTC.SCA.SCO.PreActionValidator_Duplicate bzw. PTC.SCA.SCO.PostActionHandler_Duplicate bezeichnet.
2. Erstellen Sie Voraktionsdienste für das Ding PTC.SCA.SCO.PreActionValidator_Duplicate. Erstellen Sie Nachaktionsdienste für das Ding PTC.SCA.SCO.PostActionHandler_Duplicate.
3. Fügen Sie der Konfigurationstabelle ActionConfigurationSettings auf der Seite Konfiguration einen neuen Eintrag für das Ding PTC.SCA.SCO.PreActionValidator_Duplicate bzw. PTC.SCA.SCO.PostActionHandler_Duplicate hinzu:
DataShapeName – Suchen Sie den Namen des Data Shape für diesen Vor- oder Nachaktionsdienst, und wählen Sie ihn aus.
Action – Geben Sie die Aktion ein: Create, Update oder Delete. Der Wert muss unter Berücksichtigung der Groß- und Kleinschreibung genauso eingegeben werden, wie hier gezeigt.
ThingName – Suchen Sie den Dingnamen, auf dem sich Ihr Dienst befindet, wie PTC.SCA.SCO.PreActionValidator_Duplicate oder PTC.SCA.SCO.PostActionHandler_Duplicate, und wählen Sie ihn aus.
ServiceName – Geben Sie den Namen des Diensts ein, der durch CallServices versendet wird. Wenn Ihre Implementierung aus mehreren Diensten besteht, geben Sie den Startdienst ein, der die anderen Dienste aufruft. Der Wert muss unter Berücksichtigung der Groß- und Kleinschreibung genau dem Namen des Dienstes entsprechen.
* 
Während Ihre Implementierung zahlreiche Dienste enthalten kann, muss der in der Konfigurationstabelle ActionConfigurationSettings angegebene und von CallServices versendete Dienst den Eingabeparameter DataChanges enthalten. Dieser Eingabeparameter ist eine Infotable auf dem Data Shape PTC.SCA.SCO.DataChange.
4. Klicken Sie auf Hinzufügen. Klicken Sie dann auf Speichern, um Ihre Konfigurationsänderungen zu speichern.
5. Navigieren Sie zu dem Datenbankding, das für Ihr System konfiguriert ist, z.B. PTC.SCA.SCO.PostgresDatabase oder PTC.SCA.SCO.MSSQLDatabase.
* 
Das für Ihr System konfigurierte Datenbankding finden Sie auf der Seite Konfiguration des Startpunkt-Konfigurationsdings (PTC.Factory.C_LaunchPointConfigurationThing_[Release-Version]).
6. Aktualisieren Sie auf der Seite Konfiguration für das Datenbankding unter DatabaseValidationConfigurationTable die Felder PreActionValidator und PostActionHandler, um auf die duplizierten Dinge zu verweisen, die in Schritt 1 erstellt wurden.
7. Klicken Sie auf Speichern, um die Änderungen an der Datenbankkonfiguration zu speichern.