Dingdienste
Dingdienste sind Funktionen, die ein Ding durchführen kann. Jedes Ding kann einen oder mehrere Dienste haben. Sie können Dienste auf Dingform-, Dingvorlagen- oder Dingebene definieren. Ein einfaches Beispiel eines Dienstes ist eine Abfrage für ein Datenbankding.
Es gibt mehrere Implementierungsmethoden oder Handler für Dienste, abhängig von der verwendeten Vorlage. Skript, SQL Query und SQL-Befehl sind Beispiele für Handler. Zusätzliche Handler sind abhängig von der spezifischen Funktionalität eines Dings verfügbar (wie Edge-Dinge).
Die spezifische Implementierung eines benutzerdefinierten Dienstes erfolgt über ein serverseitiges Skript (derzeit SQL oder JavaScript). Der Dienst kann dann über eine URL, eine REST-Client-fähige Anwendung oder einen anderen Dienst in ThingWorx aufgerufen werden.
Wenn Sie einen neuen Dienst erstellen, können Sie Eingabeeigenschaften und eine Ausgabe definieren. Eingaben und Ausgaben können die standardmäßigen ThingWorx Datentypen aufweisen. Jeder Dienst kann auch individuelle Laufzeitberechtigungen in der Dienstdefinition aufweisen. Ein Dienst muss keine Eingaben oder Ausgaben haben, aber normalerweise sind Eingaben oder Ausgaben oder beide vorhanden. Wenn Sie beispielsweise einen Lieferplan an einen LKW senden möchten, hat das LKW-Ding evtl. einen Dienst mit der Eingabe DeliverySchedule und dem Typ XML. Der Dienst kann die eingehenden Daten verwenden und eine Dingeigenschaft des LKWs in eine Datentabelle einfügen.
Wenn Sie die Ausgabe direkt an ein Mashup-Widget senden möchten, sollten Sie eine Ausgabe des Basistyps INFOTABLE wählen. Wenn Sie eine Infotable ausgeben möchten, müssen Sie einen Data Shape auswählen. Der Data Shape informiert die Anwendung, welche Spalten und Datentypen zurückgegeben werden, sodass sie die Daten rendern kann. Sie können eine beliebige Anzahl Eingaben basierend auf Ihren Anforderungen wählen. Beispielsweise kann die Ausgabe eine SQL-Abfrage einer Datenbank sein, die Daten an ein Mashup zurückgibt. Der Dienst ist automatisch Teil der REST-API des ThingWorx Anwendungsservers (entspricht allen Definitionen im Modell). Sie können den Dienst über einen REST-Aufruf von einer anderen Anwendung oder in einem Mashup verwenden.
Wenn Sie einen Dienst aufrufen und die Ausgabe als Infotable definieren, können Sie den Ergebnissatz unter Verwendung eines URL-Aufrufs und des URL-Parameters "Accept" als HTML, JSON oder XML ausgeben (weitere Informationen finden Sie unter REST-API). Aufgrund dieser Flexibilität und der Fähigkeit der Mashup-Umgebung, eine Infotable einfach zu verbrauchen, wird die Verwendung dieses Formats als Standardentwurfsmuster empfohlen. Spezielle Anforderungen, wie eine XML-Schemaausgabe, können nach Bedarf erfüllt werden.
Sobald Sie die Skriptfunktionsschnittstelle definiert haben, können Sie den Dienst implementieren, indem Sie auf die Spalte "Handler" für den Dienst klicken. Hierdurch wird der Dienstimplementierungseditor geöffnet. Wählen Sie im Implementierungseditor den Handler (SQL-Abfrage oder Skript). SQL-Abfrage ist nur für eine Datenbankentität verfügbar. Die Skriptimplementierung ist ein serverseitiges Java-Skriptmodul.
Schreiben Sie mit SQL-Abfrage eine Abfrage in der Syntax, die Sie für die Quelldatenbank verwenden. Sie können Diensteingaben als Parameter in der Abfrage wie mit vorbereiteten Anweisungen verwenden. Wenn die Ausgabeeigenschaft eine Infotable ist, müssen die Ergebnisse nicht bearbeitet werden. Das Abfrageergebnis wird in der Infotable angezeigt und ist als Ausgabe verfügbar.
* 
In einer SQL-Abfrage für ein Datenbankding sollte keine Zeichenfolge im '--[[]]' and '[[]]'-Format verwendet werden. Wenn Sie eine Zeichenfolge im SQL-Abfragedienst verwenden möchten, fügen Sie stattdessen diese Zeichenfolge in die Eingabevariable ein, und übergeben Sie dann diesen Wert in der SQL-Abfrage.
Der Skript-Handler ist ein leistungsstarkes Tool, um alle Daten, Dinge und Dienste auf dem Server zur Erfüllung der Anforderungen Ihrer Anwendung zu verwenden. Sie können Berechnungen und Suchen durchführen, Dienste aufrufen oder auf Eigenschaften zugreifen (von anderen Dingen im Modell). Sobald Sie "Skript" als Handler auswählen, werden Ihnen mehrere Skriptassistenten angezeigt. Sie können die Eingaben für das Skript, Eigenschaften, Dienste und Ereignisse des Dings, das Sie gerade bearbeiten, anzeigen. Sie können diese Eingaben per Doppelklick in das Skriptfenster einfügen. Sie können die Eigenschaften, Dienste und Ereignisse jeder anderen Entität in Ihrem System auch durchsuchen. Sie können alle Modellfunktionen innerhalb des Dienstes kombinieren.
* 
Wenn das Skript von einer Webseite oder URL aufgerufen wird, wird es im Kontext des angemeldeten Benutzers ausgeführt. Wenn der Benutzer keinen Zugriff auf die Laufzeitdienste, -eigenschaften oder -ereignisse einer Entität im Skript hat, schlägt das Skript evtl. fehl.
Der Skriptimplementierungseditor bietet auch Syntaxassistenten und Codeausschnitte, um die Erstellung eines Skripts einfacher zu machen.
* 
Standardmäßig sind als Skript-Timeout für ThingWorx Platform 30 Sekunden festgelegt. Wenn das Skript länger ausgeführt wird, beendet die Plattform die Ausführung. Ein ThingWorx Administrator kann das Skript-Timeout im Abschnitt "Basic Settings" der Datei platform-settings.json konfigurieren.
Asynchrone Dienste
Asynchrone Dienste werden in ihrem eigenen Thread erstellt und ausgeführt. Asynchrone Dienste haben keinen Rückgabewert, da der Thread bei ihrer Ausführung erstellt und unabhängig auf der Plattform ausgeführt wird. Wenn er aus einem anderen Dienst aufgerufen wird, wartet der aufrufende Dienst nicht, bis der asynchrone Dienst abgeschlossen ist. Dies kann für Dienste mit langer Ausführungszeit sehr nützlich sein, insbesondere Dienste für Zeitgeber, die die Hintergrund-Datenstruktur aktualisieren oder Systemwartungsaufgaben durchführen.
Wenn Sie im Editor Neuer Dienst die Option "Asynchron" wählen, wird die Option Aufrufe in Warteschlange stellen angezeigt. Diese Option ist für remote gebundene Dienste gedacht, die die Dienstausführungen in die Warteschlange stellen, wenn das Remote-Ding nicht verbunden ist. ThingWorx stellt jeden Versuch bei der Dienstausführung in die Warteschlange und führt sie dann in der entsprechenden Reihenfolge aus, wenn das Remote-Ding wieder verbunden ist.
Statistiken für Dienste
Das Untersystem für Nutzung sammelt Metriken für JavaScript-Dienste, die aufgrund eines Timeouts beendet werden. Details finden Sie unter Statistiken zur Skriptausführung, die aufgrund eines Timeouts beendet wurde .
Dienste aus Dingvorlagen und Dingformen ausführen
In ThingWorx 9.3 und höher können Sie Dienste aus Dingvorlagen und Dingformen ausführen. In diesen Fällen müssen Sie möglicherweise ein implementiertes Ding angeben, aus dem der Dienst ausgeführt werden soll. Wählen Sie auf der Registerkarte Ausführen im Feld Implementierendes Ding ein Ding aus.
War dies hilfreich?