多くの場合、画面上の
Web コンポーネントオブジェクトのあるアクションから、別の Web コンポーネントのアクションをトリガーするソリューションの実装が必要になります。
たとえば、ユーザーが画面上のあるコンポーネントのメニュー項目を選択すると、別の Web コンポーネントのアクションをトリガーします。
画面上の Web コンポーネント間のやり取りは、親と子のコンポーネント間のみに制限されているため、別々の
Web コンポーネント間でやり取りをする際に
グローバルイベントはとても便利です
(1)。
- グローバルイベントは、フォーム内の Web コンポーネント間のやり取りを可能にします。
- また、コンポーネントの特定のイベントを実行できるので、コンポーネントのフォームを再表示する必要がありません。
同じ親を持つオブジェクト間のやり取り
コンポーネント A のアクションが、コンポーネント B のアクションをトリガーします。

たとえば、同じ親を持つ 2 つのコンポーネントについて考えてみます。コンポーネント "AuthorsComponent" は著者のリストをロードし、もう一方のコンポーネント "BooksComponent" は最初のコンポーネントで選択された著者の文芸作品を表示します。

この 2 つのコンポーネントは相互にやり取りできないので、コンポーネント "BooksComponent" のグリッドの再表示をトリガーするには、
グローバルイベントを使用する方法が最適です。
1. GlobalEvents 外部オブジェクトを開き、"SelectAuthor" というイベントを追加します。必要なパラメーターを追加します。
2. "AuthorsComponent" で、ユーザーがグリッド内の行をアクティベートしたら "SelectAuthor" グローバルイベントを呼び出します。
"AuthorsComponent" のコード:
Event grid1.OnLineActivate
GlobalEvents.SelectAuthor(AuthorId)
Endevent
3. "BooksComponent" で、"SelectAuthor" グローバルイベントを定義します。&authorId をパラメーターとして受け取り、グリッドの再表示を呼び出します。&authorId は、この例では画面上に表示される変数です。
"BooksComponent" のコード
Event GlobalEvents.SelectAuthor(&authorId)
grid1.Refresh()
Endevent
これは具体的な例ですが、フォーム内のコンポーネントを自由に組み合わせることができます。また、すべてのコンポーネントの親オブジェクトは、グローバルイベントを定義したり、呼び出したりできます。
注: このスキームでは、イベントを呼び出すことができる Web コンポーネントが N 個、イベントが定義されている Web コンポーネントが M 個あります。
その後、別の Web コンポーネントに "SelectAuthor"
グローバルイベントを定義することもできます。たとえば、コンポーネントに著者の略歴を表示することもできます。

このサンプルを試すには、「
File:Web Global Events sample for books」からダウンロードしてください。
注: (1)Web コンポーネント間でのやり取りに関する従来の問題。
Web コンポーネント間でやり取りする従来の方法 (グローバルイベントを使用しない方法) は、次のとおりです:
- Web コンポーネントの Refresh コマンドを実行します
一般に、Web セッションを使用してほかの Web コンポーネントに情報を渡します。Web セッションは Refresh イベントで読み取られます。
ただし、WebComponent.Refresh コマンドは、特定のコンポーネントの子コンポーネントで実行できますが、親コンポーネントや同じ親を持つコンポーネントでは実行できません。
また、Refresh コマンドでは画面が完全に再表示されますが、多くの場合、これは適切な処理ではありません。
- Web コンポーネントを呼び出し、必要なパラメーターを渡します (WebComponent.create コマンド)。
Web コンポーネントは子コンポーネントとして作成できますが、親コンポーネントや、同じ親を持つコンポーネントは作成できません。
まとめると、同じ親を持つコンポーネントは相互にやり取りできず、また Web コンポーネントはその親や、さらにその親のコンポーネントとやり取りすることもできません。