ブロック間のデータ渡し
子ブロックのある画面やブロックで、子ブロックのイベントが別のブロックの更新を必要とすることがあります。たとえば、日付ピッカーを含むブロックが変更されると、別のブロックによって描画されたチャートを更新する必要があります。
たとえば、2つのブロックの親である画面があるとします。
- 日付ピッカーを実装するSourceブロック。
- 日付に基づいてチャートを描画するTargetブロック。
Sourceブロックで日付が変更されると、Targetブロックをリフレッシュする必要があります。
以下のセクションでは、この仕組みをモバイルアプリとWebアプリケーションに実装する方法について説明しています。
モバイルアプリ
以下は、モバイルアプリでのブロック間の伝達の概要です。
- Sourceブロックで、親画面/ブロックに通知して必要なデータを渡すために、イベントを作成してトリガーします。
- 親画面/ブロックで、Sourceブロックによってトリガーされたイベントを処理し、Targetブロックの入力パラメータを更新します。
- Targetブロックで、必要に応じてOnParametersChangedイベントハンドラのロジックを実行します。
この伝達の仕組みを実装するには、以下の手順を実行します。
Sourceブロック:
-
要素ツリーのSourceブロックを右クリックし、イベントを追加します。必要な場合は、親に値を渡すための入力パラメータをイベントに追加します。
-
RaiseEventツールを使用して、イベントをトリガーするクライアントアクションを作成します。必要な場合は、イベントの入力パラメータとして必要なデータを渡します。
-
イベントをトリガーするためにクライアントアクションを呼び出します。
親画面/ブロック:
-
インターフェイスエディタで、Sourceブロックインスタンスのウィジェットを選択します。
-
プロパティペインで、Sourceブロックによってトリガーされたイベントに新しいイベントハンドラのクライアントアクションを追加するために、[Events]セクションのEventプロパティとHandlerプロパティを編集します。
-
新しく作成されたクライアントアクションで、Targetブロックの入力パラメータに新しい値を設定するロジックを実装します。この結果、Targetブロックが自動的に更新されます。
Targetブロックが、Aggregatesのクエリをリフレッシュする必要がある、または更新された入力パラメータの値に応答してロジックを実行する必要がある場合は、以下の手順を実行します。
-
要素ツリーで、Targetブロックを選択します。
-
プロパティペインで、[Events]セクションのOn Parameters Changedプロパティを編集し、入力パラメータの値が変更された際に実行するクライアントアクションを作成するために[(New Client Action)]を選択します。
-
新しく作成されたクライアントアクションで、クエリをリフレッシュする、または入力パラメータの新しい値を処理するロジックを実装します。
Webアプリケーション
以下は、Webアプリケーションでのブロック間の伝達の概要です。
- Sourceブロックで、親画面/ブロックに通知して必要なデータを渡すために、Notifyサーバーアクションを呼び出します。
- 親画面/ブロックで、SourceブロックによってトリガーされたNotifyイベントを処理し、Sourceブロックが送信したデータを取得するためにNotifyGetMessageサーバーアクションを呼び出します。入力パラメータを更新し、Targetブロックを明示的にリフレッシュします。
この伝達の仕組みを実装するには、以下の手順を実行します。
Sourceブロック:
-
Notifyサーバーアクションを呼び出す画面アクションを作成します。必要な場合は、NotifyサーバーアクションのMessage入力パラメータとして必要なデータを渡します。
-
Notifyイベントをトリガーするためにサーバーアクションを呼び出します。
親画面/ブロック:
-
インターフェイスエディタで、Sourceブロックインスタンスのウィジェットを選択します。
-
プロパティペインで、[On Notify]セクションのDestinationプロパティを編集し、Notifyイベントを処理する画面アクションを作成するために[(New Screen Action)]を選択します。
-
新しく作成された画面アクションで、Targetブロックの入力パラメータに新しい値を設定するロジックを実装します。Source WebブロックがNotifyイベントによってデータを送信した場合、NotifyGetMessageサーバーアクションを使用してデータを取得します。
-
AjaxRefreshツールを使用してTargetブロックを更新します。