Allgemeine Bausteine > Datenbankverbindungsbaustein > Versenden und Validieren von Ereignissen vor, bei und nach Aktion
Versenden und Validieren von Ereignissen vor, bei und nach Aktion
Wenn eine Aktion zum Erstellen, Aktualisieren oder Löschen gestartet wird, wird vor dem Aktualisieren der Datenbank das Vor Aktion-Validierer-Ding (PTC.DBConnection.PreActionValidator) aufgerufen. Wenn die Validierung erfolgreich ist, wird die Datenbank aktualisiert, und das Bei Aktion-Prozessor-Ding (PTC.DBConnection.OnActionProcessor) wird aufgerufen. Nach einer erfolgreichen Datenbankaktualisierung wird das Nach Aktion-Handler-Ding (PTC.DBConnection.PostActionHandler) in einem anderen Thread aufgerufen. Dies hat keine Auswirkung auf die Ausführung der Aktion.
Das folgende Diagramm zeigt das Design des Vor Aktion-Validierers, des Bei Aktion-Prozessors und des Nach Aktion-Handlers auf oberster Ebene:
Diagramm des Entwurfs der oberen Ebene des Vor Aktion-Validierers und Nach Aktion-Handlers
Das folgende Diagramm zeigt die Dispatcher-Sequenz des Vor Aktion-Validierers, des Bei Aktion-Prozessors und des Nach Aktion-Handlers nach erfolgreicher Validierung vor Aktion.
Diagramm mit der Dispatcher-Sequenz des Vor Aktion-Validierers und des Nach Aktion-Handlers nach erfolgreicher Vor Aktion-Validierung
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 Vor Aktion-Validierung.
Diagramm mit der Dispatcher-Sequenz wenn die Vor Aktion-Validierung fehlschlägt
Das Vor Aktion-Validierer-Ding (PTC.DBConnection.PreActionValidator) erbt die Dingvorlage für den Vor Aktion-Validierer (PTC.DBConnection.PreActionValidator_TT). Das Bei Aktion-Prozessor-Ding (PTC.DBConnection.OnActionProcessor) erbt die Dingvorlage für den Bei Aktion-Prozessor (PTC.DBConnection.OnActionProcessor_TT). Ähnlich erbt das Nach Aktion-Handler-Ding (PTC.DBConnection.PostActionHandler) die Dingvorlage für den Nach Aktion-Handler (PTC.DBConnection.PostActionHandler_TT). Diese Dingvorlagen implementieren die notwendigen Dingformen zum Auslösen des Versands von Ereignissen vor, bei und nach Aktion.
Beim Initiieren einer Aktion zum Erstellen, Aktualisieren oder Löschen wird der geeignete Vor Aktion-Dienst für den Vor Aktion-Validierer (PreCreateAction, PreUpdateAction oder PreDeleteAction) ausgelöst. Der Vor Aktion-Dienst führt wiederum den Dienst CallServices aus, der die Datenänderungen prüft und die Konfiguration des Vor Aktion-Validierers 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.
Wenn die Validierung vor Aktion erfolgreich ist, wird die Datenbank aktualisiert, und die Dienste bei Aktion werden ausgelöst (OnCreateAction, OnDeleteAction, OnUpdateAction). Der Dienst bei Aktion führt dann den Dienst CallServices aus, der die Konfiguration des Bei Aktion-Prozessors liest. Wenn ein Dienst für diesen Data Shape und diese Aktion konfiguriert ist, wird der Dienst bei Aktion versendet.
Beim Abschließen einer Aktion zum Erstellen, Aktualisieren oder Löschen wird der Nach Aktion-Handler (PostCreateAction, PostUpdateAction oder PostDeleteAction) ausgelöst. Der Nach Aktion-Dienst führt dann den Dienst CallServices aus, der die Konfiguration des Standard-Nach Aktion-Handlers liest. Wenn ein Dienst für diesen Data Shape und diese Aktion konfiguriert ist, wird dieser Nach Aktion-Dienst versendet.
Dienste werden im Vor Aktion-Validierer und im Nach Aktion-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 Nach Aktion-Dienste zu implementieren.
Beispiel für Dienste vor Aktion
In diesem Abschnitt wird beschrieben, wie die Dienste vor Aktion arbeiten. Sie verwenden Projektauftragsaktionen als Beispiel.
Die folgenden Dienste finden Sie auf dem Ding PTC.JobOrderImpl.Manager: JobOrderPreCreate, JobOrderPreUpdate, ValidateDispatchStatus und ValidateJobOrderSite
Wenn ein Projektauftrag 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 JobOrderPreCreate oder JobOrderPreUpdate aufgerufen. Diese Aktion ruft wiederum die Dienste ValidateDispatchStatus und ValidateJobOrderSite auf. Wenn mehrere Projektaufträge 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 ValidateJobOrderSite als Beispiel dafür, wie man eine Ausnahme auslöst, wenn eine Validierung fehlschlägt.
Beispiel für Dienste bei Aktion
Die folgenden Dienste finden Sie auf dem Ding PTC.JobOrderImpl.Manager: OnCreateJobOrder, OnUpdateJobOrder und UpdateJobOrderExecutionResponsesForJobOrders
Nachdem ein Projektauftrag erstellt oder aktualisiert wurde, wird der Dienst OnCreateJobOrder oder OnUpdateJobOrder aufgerufen, abhängig davon, welche Aktion ausgeführt wird. Diese Aktion ruft wiederum den Dienst UpdateJobOrderExecutionResponsesForJobOrders auf.
Beispiel für Dienste nach Aktion
Die folgenden Dienste finden Sie auf dem Ding PTC.SCA.SCO.DefaultProductionOrderManager: WorkDefinitionPostCreate, WorkDefinitionPostUpdate und 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.
Dienste vor, bei und nach Aktion hinzufügen
Die Dinge PTC.DBConnection.PreActionValidator, PTC.DBConnection.OnActionProcessor und PTC.DBConnection.PostActionHandler können nicht bearbeitet werden.
So fügen Sie zusätzliche Dienste vor, bei und nach Aktion hinzu:
1. Für zusätzliche Vor Aktion-Dienste duplizieren Sie das Ding PTC.DBConnection.PreActionValidator. Für zusätzliche Dienste bei Aktion duplizieren Sie PTC.DBConnection.OnActionProcessor. Duplizieren Sie für zusätzliche Nach Aktion-Handler-Dienste das Ding PTC.DBConnection.PostActionHandler. In diesem Verfahren werden diese duplizierten Dinge PTC.DBConnection.PreActionValidator_Duplicate, PTC.DBConnection.OnActionProcessor_Duplicate bzw. PTC.DBConnection.PostActionHandler_Duplicate genannt. Weitere Informationen finden Sie unter Bausteinentitäten duplizieren.
2. Erstellen Sie Ihre Dienste vor, bei und nach Aktion im Manager-Ding für den Baustein, zu dem der Data Shape gehört. Erstellen Sie beispielsweise Dienste vor, bei und nach Aktion für Projektaufträge auf dem Ding PTC.JobOrderImpl.Manager.
3. Fügen Sie der Konfigurationstabelle ActionConfigurationSettings auf der Seite Konfiguration einen neuen Eintrag für das Ding PTC.DBConnection.PreActionValidator_Duplicate, PTC.DBConnection.OnActionProcessor_Duplicate oder PTC.DBConnection.PostActionHandler_Duplicate hinzu:
DataShapeName – Suchen Sie den Namen des Data Shape für diesen Dienst vor, bei oder nach Aktion, 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 des Manager-Dings, auf dem sich Ihr Dienst befindet, und wählen Sie ihn aus, wie PTC.JobOrderImpl.Manager.
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.DBConnection.DataChange.
4. Klicken Sie auf Hinzufügen. Klicken Sie dann auf Speichern, um Ihre Konfigurationsänderungen zu speichern.
5. Navigieren Sie zum Datenbankding, welches für Ihr System konfiguriert ist, wie PTC.DBConnection.MSSQLDatabase.
* 
Das Datenbankding, das für Ihr System konfiguriert ist, finden Sie in der Konfigurationstabelle DefaultDatabaseConfiguration auf der Seite Konfiguration des PTC.DBConnection.Manager.
6. Aktualisieren Sie auf der Seite Konfiguration für das Datenbankding unter DatabaseValidationConfigurationTable die Felder PreActionValidator, PostActionHandler und OnActionProcessor, 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.
War dies hilfreich?