最近のアクセス:
Web オブジェクトでグローバルイベントを使用する方法

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

同じ親を持つオブジェクト間のやり取り

コンポーネント A のアクションが、コンポーネント B のアクションをトリガーします。
イメージ:32497.png
たとえば、同じ親を持つ 2 つのコンポーネントについて考えてみます。コンポーネント "AuthorsComponent" は著者のリストをロードし、もう一方のコンポーネント "BooksComponent" は最初のコンポーネントで選択された著者の文芸作品を表示します。
イメージ:31908.png
この 2 つのコンポーネントは相互にやり取りできないので、コンポーネント "BooksComponent" のグリッドの再表示をトリガーするには、グローバルイベントを使用する方法が最適です。
1.GlobalEvents 外部オブジェクトを開き、"SelectAuthor" というイベントを追加します。必要なパラメーターを追加します。
イメージ:31977.png
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" グローバルイベントを定義することもできます。たとえば、コンポーネントに著者の略歴を表示することもできます。
イメージ:31979.gif
このサンプルを試すには、「File:Web Global Events sample for books」からダウンロードしてください。
 

制限

  • あるグローバルイベントを定義している Web コンポーネントが画面上に複数ある場合、グローバルイベントは 1 回だけ (すべての Web コンポーネントではなく、1 インスタンスのみ) 呼び出されます。
  • グローバルイベントは、UI があるオブジェクトからのみ呼び出すことができます (Web パネルと Web トランザクション)。ビジネスコンポーネントのルールでは、 [ Web ] セクション内で呼び出す必要があります。例: 
    Web Trn rules: 
     [  web  ]  
    {
    GlobalEvents.TotalWorksEvent(-1) 
        if delete on aftercomplete;
    
    GlobalEvents.TotalWorksEvent(1) 
        if insert on aftercomplete;
    }

(1)Web コンポーネント間でのやり取りに関する従来の問題

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





サブページ
Created: 17/05/30 19:02 by Admin Last update: 21/05/21 02:38 by Admin
カテゴリ
Powered by GXwiki 3.0