Mashup Builder > Servizi e associazioni dati > Esecuzione di servizi dati in un mashup > Associazione di eventi e gestione dell'ordine di esecuzione in un mashup
Associazione di eventi e gestione dell'ordine di esecuzione in un mashup
Il numero di servizi dati e associazioni in un mashup aumenta man mano che si sviluppano soluzioni e visualizzazioni più avanzate. In ThingWorx vengono utilizzati eventi e sottoscrizioni all'interno del processo di sviluppo IoT per eseguire servizi, visualizzare avvisi e applicare altri tipi di logica aziendale. L'associazione di eventi a servizi consente di creare applicazioni interattive che rispondono all'input dell'utente e di eseguire azioni in base a eventi in tempo reale. Di seguito sono riportate le caratteristiche degli eventi.
Avvisano che si è verificato un cambio di stato per indicare che è accaduto qualcosa.
Possono verificarsi indipendentemente dal fatto che siano associati a un servizio che esegue il codice. Gli eventi che non sono associati non influiscono sullo stato dell'applicazione.
Possono attivarsi ogni volta che accade qualcosa per eseguire i servizi associati.
Durante la fase di esecuzione del mashup, gli eventi possono verificarsi in un mashup, in un widget, in una funzione o in un livello di servizio dati. È possibile associare eventi per eseguire i tipi di servizi seguenti:
Servizi dati aggiunti al pannello Dati.
Servizi mashup, ad esempio i servizi Refresh e ResetInputsToDefaults.
Servizi widget, ad esempio il servizio TriggerClick del widget Pulsante.
Servizi di funzione, ad esempio il servizio Evaluate della funzione di espressione.
È possibile utilizzare gli eventi per progettare mashup interattivi che rispondono alle azioni eseguite da un utente, ad esempio l'evento Clicked di un pulsante o l'evento ValueChanged di un campo di input. L'evento Loaded del mashup viene in genere utilizzato per eseguire i servizi dati che visualizzano i dati all'interno di un mashup.
Gestione dell'ordine di esecuzione di funzioni e servizi dati
I mashup contengono raccolte di widget, funzioni e servizi che eseguono una serie di task. Alcuni servizi possono essere eseguiti in parallelo per massimizzare l'efficienza. Esistono tuttavia servizi che dipendono dall'input di un altro servizio e devono essere eseguiti in ordine sequenziale. È possibile utilizzare l'evento del servizio ServiceInvokeComplete per creare una dipendenza tra due servizi. Un servizio dipendente non viene eseguito finché non viene eseguito il servizio da cui dipende. Ad esempio, se la funzione A dipende dalla funzione B, la funzione B non viene eseguita finché non viene eseguita e completata la funzione A.
Nell'elenco seguente viene descritto l'ordine di esecuzione di default corrente in fase di esecuzione:
In primo luogo, le espressioni JavaScript definite nelle funzioni di espressione e di convalida vengono valutate in modo asincrono, a meno che non si utilizzino gli eventi per definire l'ordine di esecuzione.
Quindi vengono eseguiti i servizi dati in modo asincrono, a meno che non venga definito un ordine specifico utilizzando gli eventi nel mashup.
Quando si associa un evento a più servizi dati o funzioni nelle versioni precedenti di ThingWorx, la sequenza di esecuzione delle associazioni viene stabilita dall'ordine con cui sono state create in un mashup. Apportare ulteriori modifiche ai mashup esistenti e aggiornare le associazioni potrebbe influire sull'ordine con cui vengono eseguiti in fase di esecuzione.
Questo comportamento è stato modificato nelle versioni 9.3.2, 9.2.7, 9.1.11 e 9.0.16 o versioni successive della piattaforma ThingWorx. Quando si utilizzano le nuove funzioni protette standard, non è possibile utilizzare l'ordine con cui sono definite o associate in Mashup Builder. Per assicurarsi che l'ordine di esecuzione rimanga coerente, tutte le espressioni vengono eseguite prima dei servizi in fase di esecuzione.
Utilizzare gli eventi di output della funzione per definire la sequenza corretta per la valutazione delle espressioni. Possono verificarsi problemi se il mashup si basa su un ordine specifico quando vengono valutate le espressioni. La complessità del mashup e la tempistica della valutazione dell'espressione possono determinare quando un risultato diventa disponibile. Durante l'associazione di più parametri di input a una funzione, è consigliabile che l'input sia associato dallo stesso widget o servizio di output per evitare di passare input definiti parzialmente quando viene valutata un'espressione.
È possibile utilizzare gli eventi per definire un ordine sequenziale. Ad esempio, utilizzare l'evento del servizio ServiceInvokeCompleted nel pannello Proprietà dati per eseguire il servizio dipendente anziché l'evento Loaded del mashup.
Quando la logica aziendale richiede la creazione di funzioni dipendenti, è necessario utilizzare l'evento Changed della funzione di espressione, oltre alla proprietà Output. Analogamente, utilizzare gli eventi True e False della funzione di convalida per eseguire i servizi associati che dipendono dall'output della funzione. Nell'esempio seguente viene illustrata un'associazione tra un'espressione, una funzione di convalida e un servizio dati: Per eseguire le funzioni secondo un ordine sequenziale, viene utilizzato l'evento della funzione di espressione Changed per valutare la convalida. Gli eventi True e False della convalida sono associati anche a un servizio e a una funzione Messaggio di stato.
Non è consigliato associare le proprietà Output e State senza utilizzare eventi di funzione per definire l'ordine di esecuzione. La funzione di convalida potrebbe essere valutata prima della funzione di espressione e restituire un valore errato in fase di esecuzione.
È stato utile?