Mashup Builder > Сервисы данных и привязки > Выполнение сервисов данных в мэшапе > Привязывание событий и управление порядком выполнения в мэшапе
Привязывание событий и управление порядком выполнения в мэшапе
Число сервисов данных и привязок в мэшапе растет по мере разработки более сложных решений и визуализаций. В ThingWorx события и подписки используются в процессе разработки IoT для выполнения сервисов, отображения предупреждений и применения других типов бизнес-логики. Привязывание событий к службам позволяет создавать интерактивные приложения, которые реагируют на ввод данных пользователем и выполняют действия на основе событий в реальном времени. Ниже перечислены характеристики событий:
Они предупреждают об изменении состояния, указывая на некое событие.
Они могут возникать вне зависимости от того, привязаны ли они к сервису, который выполняет код. Непривязанные события не влияют на состояние приложения.
Они могут запускаться каждый раз, когда возникает какая-либо ситуация для выполнения привязанных сервисов.
В процессе выполнения мэшапа могут возникать события на уровне мэшапа, виджета, функции или сервиса данных. События можно привязывать для выполнения следующих типов сервисов:
Сервисы данных, добавленные на панель Данные.
Сервисы мэшапов, такие как сервисы Refresh и ResetInputsToDefaults.
Сервисы виджетов, такие как сервис TriggerClick виджета "Кнопка".
Сервисы функций, такие как сервис Evaluate функции выражения.
События можно использовать для конструирования интерактивных мэшапов, реагирующих на действия, выполняемые пользователем, такие как событие Clicked кнопки или событие ValueChanged поля ввода. Событие мэшапа Loaded обычно используется для выполнения сервисов данных, в которых отображаются данные в мэшапе.
Управление порядком выполнения функций и сервисов данных
Мэшапы содержат наборы виджетов, функций и сервисов, которые выполняют ряд задач. Некоторые сервисы могут быть выполнены параллельно для повышения эффективности. Однако существуют сервисы, которые зависят от входных данных из другого сервиса и должны выполняться в последовательном порядке. Чтобы создать зависимость между двумя сервисами, можно использовать событие ServiceInvokeComplete сервиса. Зависимый сервис не выполняется до тех пор, пока не будет выполнен сервис, от которого он зависит. Например, если функция A зависит от функции B, то функция B не выполняется до тех пор, пока не будет завершено выполнение функции A.
В следующем списке показан текущий порядок выполнения по умолчанию во время выполнения:
Сначала асинхронно рассчитываются выражения JavaScript, которые определены в функциях выражений и проверки, если для определения порядка выполнения не используются события.
Затем асинхронно выполняются сервисы данных, если с помощью событий в мэшапе не определен конкретный порядок.
Когда одно событие привязывается к нескольким сервисам данных или функциям в предыдущих версиях ThingWorx, порядок, в котором привязки создавались в мэшапе, задавал последовательность их выполнения. Внесение дополнительных изменений в существующие мэшапы и обновление привязок может повлиять на порядок выполнения во время выполнения.
Это поведение изменено в версиях 9.3.2, 9.2.7, 9.1.11 и 9.0.16 или более поздней версии платформы ThingWorx. При использовании новых стандартных защищенных функций нельзя полагаться на порядок, в котором они были определены или привязаны в Mashup Builder. Чтобы гарантировать, что порядок выполнения остается согласованным, все выражения выполняются перед сервисами во время выполнения.
Используйте события выходных данных функции, чтобы определить правильный порядок вычисления выражений. Проблемы могут возникать в том случае, когда при вычислении выражений в мэшапе используется определенный порядок. Сложность мэшапа и время вычисления выражения могут определять, когда результат станет доступным. При привязке нескольких входных параметров к функции рекомендуется, чтобы входные данные были привязаны к одному и тому же сервису вывода или виджету во избежание передачи частично определенных входных данных при расчете выражения.
Для определения последовательного порядка можно использовать события. Например, используйте событие ServiceInvokeCompleted сервиса на панели Свойства данных, чтобы выполнять зависимый сервис вместо события Loaded мэшапа.
Если для бизнес-логики требуется создание зависимых функций, необходимо использовать событие Changed функции выражения в дополнение к свойству Output. Аналогично используйте события True и False для функции проверки, чтобы выполнять привязанные сервисы, которые зависят от выходных данных функции. В следующем примере показана привязка между выражением, функцией проверки и сервисом данных. Для выполнения функций в последовательном порядке используется событие Changed функции выражения для расчета валидатора. События True и False валидатора также привязаны к сервису и функции сообщения о статусе.
Привязывать свойства Output и State без использования событий функции для определения порядка выполнения не рекомендуется. Функция проверки может рассчитываться перед функцией выражения и возвращать неверное значение во время выполнения.
Было ли это полезно?