Servizi di oggetto
I servizi di oggetto sono funzioni eseguibili da un oggetto. Ogni oggetto può includere uno o più servizi. È possibile definire servizi a livello di thing shape, modello di oggetto oppure oggetto. Un semplice esempio di un servizio è un'interrogazione scritta per un oggetto di database.
A seconda del modello in uso, sono disponibili diversi metodi di implementazione, o handler, per i servizi. Lo script, l'interrogazione SQL e il comando SQL sono esempi di handler. Potrebbero essere disponibili ulteriori handler, a seconda della funzionalità specifica di un oggetto, ad esempio oggetti edge.
L'implementazione specifica di un servizio definito dall'utente viene eseguita tramite uno script lato server (attualmente tramite SQL o JavaScript). Il servizio può quindi essere richiamato tramite un URL, un'applicazione compatibile con il client REST o un altro servizio in ThingWorx.
Quando si crea un nuovo servizio, è possibile definire le proprietà di input e un output. Input e output possono essere un tipo di dati ThingWorx standard qualsiasi. Nella definizione di ogni servizio potrebbero inoltre essere definiti singoli permessi della fase di esecuzione. Un servizio non deve necessariamente includere input oppure output, ma in genere ne è presente almeno uno. Se ad esempio si desidera inviare una pianificazione di consegna a un camion, l'oggetto camion può avere un servizio con un input denominato DeliverySchedule e un tipo XML. Il servizio può accettare i dati in ingresso e inserire una proprietà oggetto del camion in una tabella dati.
Per inviare l'output direttamente a un widget di mashup, è necessario scegliere un output del tipo base INFOTABLE. Se si sceglie una infotable come output, sarà necessario selezionare una data shape. La data shape indica all'applicazione quali colonne e tipi di dati verranno restituiti, in modo che possa eseguire il rendering dei dati. È possibile scegliere qualsiasi numero di input, a seconda delle esigenze. Ad esempio, un output potrebbe essere un'interrogazione SQL su un database che restituisce dati a un mashup. Il servizio rientra automaticamente nell'API REST del server applicazioni ThingWorx (lo stesso di tutte le definizioni all'interno del modello). È possibile utilizzare il servizio tramite una chiamata REST da un'altra applicazione o in un mashup.
Quando si chiama un servizio, se si definisce l'output come infotable, è possibile chiedere che il risultato venga impostato come HTML, JSON o XML utilizzando una chiamata URL e il parametro AcceptURL (per ulteriori informazioni, vedere l'
API REST). Con questo livello di flessibilità e grazie alla capacità dell'ambiente di mashup di utilizzare facilmente una infotable, è consigliabile utilizzare questo formato come schema di progettazione di default. È possibile soddisfare esigenze specifiche, ad esempio l'output di uno schema XML, in base alle esigenze.
Dopo aver definito l'interfaccia delle funzioni di script, è possibile implementare il servizio facendo clic sulla colonna Handler del servizio. Viene visualizzato l'editor di implementazione del servizio. Nell'editor di implementazione scegliere l'handler (SQL Query o Script). SQL Query è disponibile solo per un'entità di database. L'implementazione di Script è un motore JavaScript lato server.
Con SQL Query è sufficiente scrivere un'interrogazione nella sintassi utilizzata per il database di origine. È possibile utilizzare input di servizio come parametri nell'interrogazione in modo analogo alle istruzioni preparate. Se la proprietà di output è una infotable, non è necessario modificare i risultati. Il risultato dell'interrogazione viene visualizzato in infotable ed è disponibile come output.
|
Non è consigliabile utilizzare una stringa in formato '--[[]]' and '[[]]' in un'interrogazione SQL per un oggetto di database. Se si desidera utilizzare una stringa nel servizio di interrogazione SQL, inserire la stringa nella variabile di input e quindi passare il valore nell'interrogazione.
|
L'handler script consente di utilizzare in modo efficace tutti i dati, gli oggetti e i servizi nel server per soddisfare le esigenze di un'applicazione. È possibile eseguire calcoli e ricerche, chiamare servizi o accedere a proprietà di altri oggetti nel modello. Dopo aver selezionato script come handler, viene visualizzata una serie di helper di script. È possibile visualizzare gli input per lo script, le proprietà, i servizi e gli eventi dell'oggetto attualmente sottoposto a modifica e incollarli nella finestra dello script facendo doppio clic. È inoltre possibile esplorare le proprietà, i servizi e gli eventi di qualsiasi altra entità nel sistema e combinare tutte le funzionalità del modello all'interno del servizio.
|
Se lo script viene chiamato da una pagina Web o un URL, viene eseguito nel contesto dell'utente connesso. Se l'utente non ha accesso ai servizi di esecuzione, alle proprietà o agli eventi di alcuna entità nello script, quest'ultimo potrebbe avere esito negativo.
|
Anche l'editor di implementazione degli script include helper di sintassi e snippet di codice per semplificare la creazione di uno script.
|
Per default, l'impostazione di timeout per gli script in ThingWorx Platform è 30 secondi. Se l'esecuzione di uno script richiede più tempo, viene terminata dalla piattaforma. Un amministratore di ThingWorx può configurare il timeout per gli script nella sezione delle impostazioni di base del file platform-settings.json.
|
Servizi asincroni
Un servizio asincrono viene creato ed eseguito nel thread specifico. I servizi asincroni non possono avere un valore restituito, poiché in fase di esecuzione il thread viene creato ed eseguito indipendentemente dalla piattaforma. Se chiamato da un altro servizio, il servizio chiamante non attende il completamento del servizio asincrono. Questa opzione può risultare molto utile con i servizi a lunga esecuzione, soprattutto quelli nei timer che aggiornano la struttura dati in background o eseguono attività di manutenzione dei sistemi.
Se si sceglie asincrono nell'editor Nuovo servizio, viene visualizzata l'opzione Accoda chiamate. Questa opzione è destinata ai servizi associati in remoto che accodano le esecuzioni di servizio se l'oggetto remoto non è connesso. ThingWorx accoda ogni tentativo in fase di esecuzione del servizio, quindi li esegue in ordine alla riconnessione dell'oggetto remoto.
|
Le proprietà degli oggetti remoti non vengono aggiornate per i dispositivi controllati da edge.
|
Statistiche per i servizi
Il sottosistema di utilizzo raccoglie le metriche per i servizi JavaScript terminati a causa di un timeout. Per dettagli, vedere
Statistiche sull'esecuzione di script terminata a causa di un timeout .
Esecuzione di servizi da modelli di oggetto e thing shape
È possibile eseguire i servizi da modelli di oggetto e thing shape. In questi casi potrebbe essere necessario specificare un oggetto implementato da cui eseguire il servizio. Nella scheda Esegui, nel campo Oggetto di implementazione, selezionare un oggetto.