Mashup Builder > 資料服務與繫結 > 在混搭中執行資料服務 > 在混搭中繫結事件及管理執行順序
在混搭中繫結事件及管理執行順序
混搭中的資料服務與繫結數會隨著您開發更多的進階解決方案與視覺化效果而增加。在 ThingWorx 中,會在 IoT 開發流程中使用事件與訂閱來執行服務、顯示警示以及套用其他類型的企業邏輯。將事件繫結至服務可讓您建構能夠回應使用者輸入的互動式應用程式,以及根據即時事件執行動作。事件的特徵如下:
它們會警示狀態變更以指示所發生的事件。
無論它們是否繫結至執行程式碼的服務,都會發生這些情況。未繫結的事件不會影響應用程式狀態。
它們可以在每次發生某個事件時才觸發,以執行繫結服務。
在混搭執行時間,事件可能會發生於混搭、小器具、函數或資料服務層級。您可以繫結事件以執行下列類型的服務:
新增至「資料」面板的資料服務。
混搭服務,例如 RefreshResetInputsToDefaults 服務。
小器具服務,例如按鈕 TriggerClick 小器具。
函數服務,例如運算式函數 Evaluate 服務。
您可以使用事件來設計互動式混搭,以回應使用者執行的動作,例如按鈕的 Clicked 事件,或輸入欄位的 ValueChanged 事件。混搭 Loaded 事件通常用來執行在混搭中顯示資料的資料服務。
管理函數與資料服務的執行順序
混搭包含用來執行一系列任務的小器具、函數與服務的集合。某些服務可以並行執行,以最大程度提高效率。但是,有一些服務相依於來自另一個服務的輸入,必須按順序執行。您可以使用 ServiceInvokeComplete 服務事件來建立兩個服務之間的相依性。相依服務在它所依賴的服務執行之前不會執行。例如,如果函數 A 取決於函數 B,則函數 B 不會執行,直到函數 A 執行並完成之後為止。
下列清單概述了執行時間的目前預設執行順序:
首先,除非您使用事件來定義執行順序,否則會以非同步方式評估在「運算式」與「驗證器」函數中定義的 JavaScript 運算式。
然後,除非使用混搭中的事件定義特定順序,否則會以非同步方式執行資料服務。
當您將一個事件繫結至舊版 ThingWorx 的多個資料服務或函數時,在混搭中建立繫結的順序已建立其執行順序。對現有混搭進行額外變更及更新繫結可能會影響執行時間的執行順序。
此行為在 ThingWorx Platform 9.3.2、9.2.7、9.1.11 及 9.0.16 或更新版本中已變更。使用新的標準安全函數時,您無法依賴它們在 Mashup Builder 中的定義或繫結順序。為了確保執行順序保持一致,在執行時間,所有運算式都會於服務之前執行。
可使用函數輸出事件定義用來評估運算式的正確順序。如果混搭依賴評估運算式時的特定順序,可能會發生問題。混搭複雜度與運算式評估時間可決定結果何時變為可用。當將多個輸入參數繫結至函數時,建議從相同輸出服務或小器具繫結輸入,以避免在運算式評估時傳送部份定義的輸入。
您可使用事件來定義順序。例如,可使用「資料內容」面板中的服務 ServiceInvokeCompleted 事件來執行相依服務,而非混搭 Loaded 事件。
當您的企業邏輯需要建立相依函數時,除了 Output 內容以外,還必須使用運算式函數 Changed 事件。同樣地,使用驗證器函數的 TrueFalse 事件可執行依賴於函數輸出的繫結服務。下列範例顯示了運算式、驗證器函數與資料服務之間的繫結。欲按順序執行函數,可使用運算式函數 Changed 事件來評估驗證器。驗證器的 TrueFalse 事件也會繫結至服務與「狀況訊息」功能。
不建議繫結 OutputState 內容而不使用函數事件來定義執行順序。「驗證器」函數可能會在「運算式」函數之前評估,並在執行時間傳回不正確的值。
這是否有幫助?