Mashup Builder > Datendienste und Bindungen > Datendienste in einem Mashup ausführen > Ereignisse binden und Ausführungsreihenfolge in Mashups verwalten
Ereignisse binden und Ausführungsreihenfolge in Mashups verwalten
Die Anzahl der Datendienste und Bindungen in einem Mashup wächst, wenn Sie komplexere Lösungen und Visualisierungen entwickeln. In ThingWorx werden Ereignisse und Abonnements innerhalb des IoT-Entwicklungsprozesses verwendet, um Dienste auszuführen, Warnungen anzuzeigen und andere Typen von Geschäftslogik anzuwenden. Das Binden von Ereignissen an Dienste ermöglicht es Ihnen, interaktive Anwendungen zu erzeugen, die auf Benutzereingaben reagieren und Aktionen basierend auf Echtzeitereignissen durchführen. Dies sind Eigenschaften von Ereignissen:
Sie warnen bei einer Änderung des Status, um anzugeben, dass etwas passiert ist.
Sie können auftreten, unabhängig davon, ob sie an einen Code ausführenden Dienst gebunden sind. Ereignisse, die nicht gebunden sind, wirken sich nicht auf den Status der Anwendung aus.
Sie können jedes Mal ausgelöst werden, wenn die gebundenen Dienste aufgrund eines Ereignisses ausgeführt werden.
Zur Mashup-Laufzeit können Ereignisse auf einer Mashup-, Widget-, Funktions- oder Datendienstebene auftreten. Sie können Ereignisse binden, um die folgenden Typen von Diensten auszuführen:
Datendienste, die dem Fensterbereich Daten hinzugefügt werden.
Mashup-Dienste, wie die Dienste Refresh und ResetInputsToDefaults.
Widget-Dienste, wie den Dienst TriggerClick des Widgets "Schaltfläche".
Funktionsdienste, wie den Dienst Evaluate der Ausdrucksfunktion.
Sie können Ereignisse verwenden, um interaktive Mashups zu entwerfen, die auf Benutzeraktionen reagieren, z.B. das Ereignis Clicked einer Schaltfläche oder das Ereignis ValueChanged eines Eingabefelds. Das Mashup-Ereignis Loaded wird normalerweise verwendet, um Datendienste auszuführen, die Daten in einem Mashup anzeigen.
Ausführungsreihenfolge von Funktionen und Datendiensten verwalten
Mashups enthalten Sammlungen von Widgets, Funktionen und Diensten, die eine Reihe von Aufgaben durchführen. Einige Dienste können parallel ausgeführt werden, um die Effizienz zu maximieren. Es gibt jedoch Dienste, die von der Eingabe eines anderen Dienstes abhängen und in einer sequenziellen Reihenfolge ausgeführt werden müssen. Sie können das Dienstereignis ServiceInvokeComplete verwenden, um eine Abhängigkeit zwischen zwei Diensten zu erstellen. Ein abhängiger Dienst wird erst ausgeführt, wenn der Dienst, von dem er abhängig ist, ausgeführt wurde. Wenn die Funktion A beispielsweise von Funktion B abhängt, wird die Funktion B erst ausgeführt, nachdem die Funktion A ausgeführt wurde und abgeschlossen ist.
Die folgende Liste beschreibt die aktuelle Standard-Ausführungsreihenfolge zur Laufzeit:
Zuerst werden JavaScript-Ausdrücke, die in den Ausdrucks- und Validatorfunktionen definiert sind, asynchron ausgewertet, es sei denn, Sie verwenden Ereignisse, um die Ausführungsreihenfolge zu definieren.
Anschließend werden Datendienste asynchron ausgeführt, es sei denn, eine bestimmte Reihenfolge wird mithilfe von Ereignissen im Mashup definiert.
Wenn Sie ein Ereignis an mehrere Datendienste oder Funktionen in früheren Versionen von ThingWorx binden, hat die Reihenfolge, in der die Bindungen in einem Mashup erstellt wurden, die Reihenfolge ihrer Ausführung festgelegt. Wenn Sie zusätzliche Änderungen an vorhandenen Mashups vornehmen und Bindungen aktualisieren, kann dies die Ausführungsreihenfolge zur Laufzeit beeinflussen.
Dieses Verhalten hat sich in den Versionen 9.3.2, 9.2.7, 9.1.11 und 9.0.16 oder höher der ThingWorx Plattform geändert. Wenn Sie die neuen standardmäßigen sicheren Funktionen verwenden, können Sie sich nicht auf die Reihenfolge verlassen, in der sie im Mashup Builder definiert oder gebunden sind. Alle Ausdrücke werden vor Diensten zur Laufzeit ausgeführt, um sicherzustellen, dass die Ausführungsreihenfolge konsistent bleibt.
Verwenden Sie die Funktionsausgabe-Ereignisse, um die richtige Sequenz für das Auswerten von Ausdrücken zu definieren. Probleme können auftreten, wenn das Mashup beim Auswerten von Ausdrücken eine bestimmte Reihenfolge verwendet. Mashup-Komplexität und Timing der Ausdrucksauswertung können bestimmen, wann ein Ergebnis verfügbar wird. Wenn Sie mehrere Eingabeparameter an eine Funktion binden, wird empfohlen, dass die Eingabe vom selben Ausgabedienst oder Widget gebunden wird. Dies verhindert, dass teilweise definierte Eingaben beim Auswerten eines Ausdrucks übergeben werden.
Sie können Ereignisse verwenden, um eine sequenzielle Reihenfolge zu definieren. Verwenden Sie beispielsweise das Dienstereignis ServiceInvokeCompleted im Fensterbereich Dateneigenschaften, um den abhängigen Dienst anstelle des Mashup-Ereignisses Loaded auszuführen.
Wenn Ihre Geschäftslogik das Erstellen abhängiger Funktionen erfordert, müssen Sie das Ereignis Changed der Ausdrucksfunktion zusätzlich zur Eigenschaft Output verwenden. Verwenden Sie entsprechend die Ereignisse True und False der Validatorfunktion, um die von der Funktionsausgabe abhängigen Dienste auszuführen. Das folgende Beispiel zeigt eine Bindung zwischen einem Ausdruck, einer Validatorfunktion und einem Datendienst. Zum Ausführen der Funktionen in einer sequenziellen Reihenfolge wird das Ereignis Changed der Ausdrucksfunktion verwendet, um den Validator auszuwerten. Die Ereignisse True und False des Validators sind auch an einen Dienst und eine Statusmeldungsfunktion gebunden.
Das Binden der Eigenschaften Output und State ohne Verwendung von Funktionsereignissen zum Definieren der Ausführungsreihenfolge wird nicht empfohlen. Die Validatorfunktion wird evtl. vor der Ausdrucksfunktion ausgewertet und kann zur Laufzeit einen falschen Wert zurückgeben.
War dies hilfreich?