最近のアクセス:
コンテキストを区別するユーザーインターフェース

現在のトレンドは目的指向インターフェースの実装です。これは、アプリケーションのコンテキストを追跡し、それに基づいてアクションを実行するアプローチです。
この機能は、例を使用して説明すると分かりやすくなります。Web コンポーネントを 2 つロードする Web ページがあるとします。1 つは大学内の全学部 (または学科) の一覧です。もう 1 つのコンポーネントは、学部の詳細 (写真および説明) を表示します。
最初のコンポーネントは、ユーザーが学部を選択するとコンテキストに collegeid を保存します。もう 1 つのコンポーネントはコンテキストの変更を追跡し、collegeid が選択されるとすぐに対応する情報をロードします。
イメージ:8165.jpg

コンテキストについて

コンテキストとは、フォームにおけるアプリケーションのコンテキストを意味します。CustomerId テキストボックスにアクセスする場合のコンテキストは CustomerId です。たとえば、請求書行のグリッドにアクセスする場合は、コンテキストは請求書の行です。画面内で移動する場合、項目属性および変数のコンテキストを変更します。コンテキストの変更に関するこのような情報は、目的指向インターフェース作成時には必須です。
このアプローチにより、アプリケーションのコンテキスト情報 (カーソルの位置) に基づいてイベントをトリガーしてアクションを行うことができます。 
アプリケーションが、Web フォームを形成する複数の Web コンポーネントにより構成されているとします。エンドユーザーがほかのコンポーネントにおいてコンテキスト情報を変更 (フォーカスをコントロールに変更、またはグリッドラインを選択) するとすぐに、Web コンポーネントの 1 つをイベントとして容易にトリガーできます。
基本的には、変更を追跡したい Web コントロールは、ほかのコントロールのコンテキスト変更を監視するイベントに登録されています。
TrackContext イベントをプログラムすることにより、プログラマーはコンテキスト情報を取り出して希望するアクションを行います。これで完了です。

実装の詳細

[ NotifyContextChange ] プロパティ

グリッド、フリー スタイル グリッド、グリッドの列、項目属性、変数のコントロールに適用されます。

コントロールに対して [ Notify Context Change ] プロパティが設定されている場合、コンテキストは既定で対応する情報とともに保存されます。
項目属性と変数については、読み取り専用ではないフィールドのみ (編集ボックスやチェックボックス、コンボボックス、ラジオボタンなど) に適用されます。変数/項目属性がフォーカスされている場合、コンテキストはその情報を保存します。変数/項目属性の値の変更は検知されず、変数/項目属性上のカーソルのフォーカスのみが検知されます。フリー スタイル グリッドの項目属性/変数についても同様です。
標準グリッドの場合:
  • 行を選択すると、行全体がコンテキストに保存されます。
標準/フリー スタイル グリッドの場合:
  • SDT コレクションにバインドされたグリッドについては、グリッドタイトルを選択するとグリッド情報がすべてコンテキストで追跡されます。(1)
SetContext イベント (次で説明します) をプログラムすることで、追跡する情報を変更できます。
たとえば、次はグリッドコントロール内の [ Notify Context Change ] プロパティです。
イメージ:6370.jpg
SetContext イベント
[ Notify Context Change ] プロパティと同じコントロール (グリッド、フリー スタイル グリッド、グリッドの列、項目属性、変数) に適用されます。
構文: Event <control>.SetContext (パラメーター)
これは、SDT タイプの変数パラメーター 1 つのみです。つまり、このパラメーターにコンテキストがロードされます。
これは、コントロールのためにコンテキストで追跡される情報を変更するための方法です。
TrackContext イベント

構文: Event TrackContext (パラメーター)
指定できるパラメーターは変数のみです。
イベントは、イベントが受け取るパラメーターにより評価されます。つまり、ソースコード内には TrackContext イベントをいくつでも含めることができ、これらは受け取るパラメーターにより区別されます。
注:
  1. 構造化データタイプ (SDT: Structured Data Type) でないパラメーターは、名前によって評価されます。
    次がオブジェクト A にある場合:
      
       Event TrackContext(&X)
       EndEventt

    [ Notify Context Change ] プロパティが (フォーム内またはグリッド内で) True に設定されている変数「&X」を持つオブジェクト B はすべて、その TrackContext イベントにサブスクライブします。名前が X である項目属性でも同様です。
  2. 構造を持つデータタイプ (SDT) であるパラメーターは、タイプによって制限されます。つまり、
    オブジェクト A に次の内容がある場合 (&sdtvar1 は SDT に基づきます):
      
       Event TrackContext(&sdtvar1)
       EndEvent

    SDT に基づいて &sdtvar2 変数をロードする「通知コンテキスト」のあるグリッドを持つオブジェクト B は、TrackContext イベントにサブスクライブします。
  3. すべてのサブグループに次が適用されます。
    同じオブジェクト内に次のイベントがあるとします:
             Event TrackContext(param1, param2,..., paramN)
             EndEvent
             Event TrackContext(param1, param2)
             EndEvent       
          両方のイベントは、param1、param2、paramN がコンテキストを通知するとトリガーされます。

例およびユースケース

1.グリッドからエレメント (例: Colleges) を選択すると、その学部についての詳細情報をエレメントの隣に表示します (この情報は、Colleges グリッドと同じ Web コンポーネントにある場合と、そうでない場合があります)。

イメージ:6371.jpg

イメージ:6372.gif

2.外部キーフィールドを選択すると、コンテキストのプロンプトを表示します。
3.フィールドを選択すると、ヘルプ情報が隣にあるテキストブロックを表示します。これは大変簡単です。フォームに次の 3 つのフィールドがあるとします: &courseid、&coursedescription、&courseprerequisites。これらのフィールドにフォーカスを移すたびに、コンテキストヘルプを表示したいとします。その場合、次のようにコードを記述します:

Event TrackContext(&courseId)
  textBlock1.Caption = 'Course Identification.Required field'
EndEvent
Event TrackContext(&coursedescription)
  textBlock2.Caption = 'Course Description.Required field'
EndEvent
Event TrackContext(&courseprerequisites)
  textBlock3.Caption = 'Course Prerequisites.'
EndEvent

イメージ:6374.jpg
コンテンツを区別するユーザーインターフェースのサンプルをダウンロードします。
4.ページを掲示せずに情報をロードします。Web フォーム内に Web コンポーネントが 2 つあるとします。1 つは学位のグリッドを表示します。もう 1 つの Web コンポーネントは、その学位プログラムのコースすべてをロードするグリッドを表示します。コンテキストを読み込むだけで、Web フォーム全体を掲示せずに、1 つ目の Web コンポーネントで選択された行に基づいて 2 つ目のグリッドをロードできます。
イメージ:6375.jpg
「Careers」グリッドの [ Notify Context Change ] プロパティは、True に設定されています。
「Courses」グリッドを表示する Web コンポーネントのコードは次のようになります:

Event TrackContext(&CareerId,&careerDescription)
   for each 
       where CareerId = &CareerId
            &CourseId = CourseId
            &CourseDescription = CourseDescription
            &CoursePrerequisites = CoursePrerequisites
            coursegrid.Load()
   endfor
EndEvent

注:
(1) 今後、グリッドが SDT コレクションにバインドされているかどうかにかかわらず、グリッドのすべての情報を追跡できるようになります。
よくある質問
Q: ユーザーが入力したデータを検証するなどのフォームの検証にコンテキスト機能を使用できますか。
A: フィールドの値の変更は検知されないため、この機能はフォームの検証には使用できません。フォームの検証についての詳細は、こちらをクリックしてください。

Q: どのユーザーアクションがコンテキストの変更として検知されますか?
A: 
  1. フォームフィールドのカーソルの位置が変わったとき (ユーザーがマウスを使用するか、Tab キーを押してカーソルを移動した場合)。検知されるフォームフィールドは編集コントロール、ダイナミック/コンボボックス、チェックボックス、またはリストボックスであり、読み取り専用ではないもののみです。フィールドの値の変更は検知されません。フィールドにおける位置またはカーソルの選択のみが検知されます。
  2. ユーザーがグリッドの列、行、またはグリッド自体をクリックしたとき。この場合、グリッドの行は読み取り専用の場合にのみ検知されます。
イメージ:6373.gif






サブページ
Created: 14/09/18 03:16 by Admin Last update: 21/05/20 06:18 by Admin
カテゴリ
Powered by GXwiki 3.0