Mashup Builder > データサービスとバインド > マッシュアップでのデータサービスの実行 > マッシュアップでのイベントのバインドと実行順序の管理
マッシュアップでのイベントのバインドと実行順序の管理
より高度なソリューションまたはビジュアリゼーションを開発すると、マッシュアップ内のデータサービスとバインドの数が増えます。ThingWorx では、イベントと購読を IoT 開発プロセス内で使用して、サービスの実行、アラートの表示、およびその他のタイプのビジネスロジックの適用を行います。イベントをサービスにバインドすることにより、ユーザー入力に応答する対話型アプリケーションを構築したり、リアルタイムイベントに基づいて操作を実行したりできます。イベントの特性は以下のとおりです。
何かが発生したことを示す状態の変化を警告します。
コードを実行するサービスにバインドされているかどうかにかかわらず発生します。バインドされていないイベントは、アプリケーションの状態に影響を与えません。
バインドされているサービスを実行するために何かが発生するたびにトリガーされます。
マッシュアップのランタイムでは、イベントはマッシュアップ、ウィジェット、関数、またはデータサービスレベルで発生することがあります。イベントをバインドして以下のタイプのサービスを実行できます。
「データ」パネルに追加されるデータサービス。
Refresh サービスや ResetInputsToDefaults サービスなどのマッシュアップサービス。
ボタンの TriggerClick サービスなどのウィジェットサービス。
定義式関数の Evaluate サービスなどの関数サービス。
イベントを使用して、ボタンの Clicked イベントや入力フィールドの ValueChanged イベントなどのユーザーが実行する操作に応答する対話型マッシュアップを設計できます。通常、マッシュアップの Loaded イベントはマッシュアップ内のデータを表示するデータサービスを実行するために使用されます。
関数とデータサービスの実行順序の管理
マッシュアップには、一連のタスクを実行するウィジェット、関数、およびサービスのコレクションが含まれています。一部のサービスは、効率を最大限に高めるために並列して実行できます。ただし、別のサービスからの入力に依存するサービスがあり、これらは順番に実行しなければなりません。ServiceInvokeComplete サービスイベントを使用して、2 つのサービス間の依存を作成できます。依存サービスは、依存するサービスが実行されるまで実行されません。たとえば、関数 A が関数 B に依存している場合、関数 A が実行されて完了するまで関数 B は実行されません。
次のリストは、ランタイムでの現在のデフォルト実行順序の概要を示しています。
まず、実行順序を定義するイベントを使用していないかぎり、定義式関数およびバリデータ関数内で定義されている JavaScript 定義式が非同期で評価されます。
次に、マッシュアップ内のイベントを使用して特定の順序が定義されていないかぎり、データサービスが非同期で実行されます。
以前のバージョンの ThingWorx の複数のデータサービスまたは関数に 1 つのイベントをバインドする場合、マッシュアップ内でバインドが作成された順序によってそれらの実行順序が設定されます。既存のマッシュアップに追加の変更を加え、バインドを更新すると、ランタイムに実行順序に影響が及ぶ可能性があります。
この動作は、バージョン 9.3.2、9.2.7、9.1.11、および 9.0.16 以降の ThingWorx プラットフォームでは変更されています。新しい標準の安全な関数を使用する場合、Mashup Builder で定義またはバインドされている順序に依存することはできません。実行順序の一貫性を維持するために、ランタイムではすべての定義式がサービスの前に実行されます。
関数の出力イベントを使用して、定義式を評価するための正しいシーケンスを定義します。定義式が評価されるときにマッシュアップが特定の順序に依存している場合、問題が発生する可能性があります。マッシュアップの複雑度と定義式の評価のタイミングによって、結果がいつ使用可能になるかが決定されることがあります。複数の入力パラメータを 1 つの関数にバインドする場合、定義式の評価時に部分的に定義されている入力を渡すことを避けるため、同じ出力サービスまたはウィジェットから入力をバインドすることをお勧めします。
イベントを使用して、順番を定義できます。たとえば、「データプロパティ」パネルのサービスの ServiceInvokeCompleted イベントを使用して、マッシュアップの Loaded イベントではなく依存サービスを実行します。
ビジネスロジックが依存関数の作成を必要とする場合、Output プロパティに加えて、定義式関数の Changed イベントを使用しなければなりません。同様に、バリデータ関数の True イベントと False イベントを使用して、関数出力に依存するバインドされているサービスを実行します。次の例は、定義式、バリデータ関数、およびデータサービスの間のバインドを示しています。関数を順番に実行するには、定義式関数の Changed イベントを使用してバリデータを評価します。バリデータの True イベントと False イベントも、サービスとステータスメッセージ関数にバインドされています。
関数イベントを使用することなく Output プロパティと State プロパティをバインドして実行順序を定義することはお勧めしません。バリデータ関数が定義式関数の前に評価し、ランタイムに間違った値を返すことがあります。
これは役に立ちましたか?