ツリービュー・ウェブレットはWAMアプリケーションにより、使用の際にwindowsのようなツリー・ビュー・コントロールを提供します。以下は、どのように使用されるべきかの説明です。記述が非常に長いことに注意してください。
情報のリストを表示する全てのウェブレット・コントロールと同様に、ツリービュー・ウェブレットは最初にWAMの作業リストにより起動されます。作業リストの各エントリーはツリー・アイテムを表します。作業リストのフィールドは、ツリー・ビュー・アイテムの見た目や振る舞いを制御します。ツリー・アイテムの非表示のキー情報や、そのキャプション、アイテムにフォーカスがあたった場合に何をするか、また、ツリー・アイテムが拡張された時に何をするかなども含まれます。
ツリー・ビューをどのように使用したいかによって、異なる技術が使用されます。これらは、「知っておくべきこと」に記述されています。
提供されたツリービューの例は、WAMEX50及びWAMEX51です。
これらは両方とも簡単なツリーの例です。このツリーは、Departmentのブランチを持ち、それを拡張した時は、Departmentに属するSectionのブランチを表示、更に拡張した時には、Sectionに属するEmployeeを表示するものです。
両方ともVertical Splitterウェブレットを使用しています。これにより、ツリービュー・ウェブレットはウェブページの左側に表示され、選択されたツリー・アイテムの詳細は、ツリービュー・ターゲット・ウェブレットで、ウェブページの右側に表示されるようになります。
WAM50は参照のみの例なのに対し、WAMEX51は選択された部の記述を更新できます。ツリーの更新のために、WAMEX51はいくつか追加のウェブレットと、WAMEX50とはわずかに異なるコーディング・テクニックを使用します。
両方の例とも、基礎となるWAMコードと同様に、ツリービュー・ウェブレット、及び、それが他の、関連するウェブレットとどのように関わるか、を説明するよい概要となることを目的としています。
全ての場合において、作業リストが必要です。作業リストの各エントリーがツリー・ビューのアイテムを表すことを覚えていてください。作業リストはウェブレットのlist_*プロパティを構成するフィールドを含んでいる必要があります。それらのリストの為に、「プロパティ - Tree View」を参照してください。ただし、最低限、作業リストは以下の項目を含んでいる必要があります。
ほとんどの場合、全てのケースまでとはいかないが、ツリー・ビューには複数のレベルがあり、親/子のパターンを伴うデータを含みます。例で言えば、Department/Section/Employeeのデータがそうです。
親項目作業リストはWAMに受け渡され、選択されたもしくは拡張された項目の祖先のリストを提供します。それは1つのフィールドしか含まず、そのフィールドはツリー・アイテムのキー情報を保持するツリー・ビュー作業リストで使用されるフィールドと一致していなくてはいけません。この作業リストの使用については、このドキュメントで後ほど更に説明しています。
ツリー・ビューのlist_onselect_wrname_fieldプロパティは、ツリーの対応するアイテムが選択された時に呼び出されるWebroutineの名前が含まれるフィールドを示します。WAMの例では、各DepartmentエントリーにShowDepartmentDetailがセットされています。
Webroutineが呼び出された時、以下のような情報がそれに受け渡されます。
選択されたツリー・アイテムのキー情報。これは、list_tag_fieldプロパティに指定されたフィールドです。これには、ツリー・アイテムに関連する追加情報、もしくは関連する情報にアクセスするのに使用される場合があります。このフィールドを受け取るWeb_mapはいつでも必ず必要です。
選択されたツリー・アイテムの親や祖先の識別名を含む作業リスト。これは、listname_of_parents_of_selectedプロパティに指定されたリストです。詳しくは、「キー情報にアクセスする」のセクションを参照してください。
ツリー・ビューのブランチが展開された時、ツリー・ビューのonexpand_wrnameプロパティがブランチの中身を構築するのに使用されます。例に挙げられたWAMでいえば、DepartmentやSectionのブランチが拡張された時、TreeExpandingWebroutineが呼び出されます。
展開ツリー・アイテムのキー情報と同じように、ツリー・アイテムのレベルもツリー・リスト自体及び展開ツリー・アイテムの親のリストと一緒に、このWebroutineに受け渡されます。展開ツリー・アイテムのレベルに基づき、選択された親項目に対しツリーに子項目を追加するために、適切なメソッドが呼び出されます。
ということで、1のレベルはDepartmentツリー・アイテムが展開されていることを示し、そのDepartmentに属するSectionがツリーに追加されます。2のレベルはSectionツリー・アイテムが展開されていることを示し、Employeeが追加されます。
ツリー・アイテムが親ツリー・アイテムを持つことができるため、この情報を保持する作業リストが必要になります。そこには、ツリーのlist_tag_fieldプロパティに指定されているフィールドのみが定義されているはずです。
これは、メイン・ツリー・ビュー作業リストを表示するために使用されるWebroutineのWeb_mapとして指定されるべきです。WAMEX50では、ShowPageWebroutineはリストのためにWeb_mapを指定しています。
WAMに受け渡される時には、作業リストは選択された項目の親項目それぞれについてエントリーを持っています。各エントリーは親項目のキー情報を持っています。親を持たないツリー・アイテムについては、リストは空になります。
このリストを受け取るWeb_mapは、その中の情報にアクセスしたいときだけ必要になります。これは通常、selectionWebroutine及びTree ExpandingWebroutineに必要となります。
例のWAMでは、Sectionが選択された時、このリストがSectionが属するDepartmentのキー値を確かめるのに使用されます。
通常、選択されたツリー・アイテムに関連する追加情報を表示したいはずです。
WAMの例では、Departmentが選択された時、Departmentの追加情報を表示するためにShowDepartmentDetailWebroutineが呼び出されます。
表示されるこの情報のウェブ・ページにあるエリアがあるはずです。これはTree View Targetウェブレットが使用するものです。ツリー・アイテムが選択された時、ツリーに関連するTree View Targetが(Tree View Targetのtreeview_nameプロパティを使って)アクティブになるか、フォーカスがあたります。ツリー・アイテムが選択された時に呼び出されたWebroutineからの出力は、このように、Tree View Targetに割り当てられます。
詳しくは、Tree View Target (std_treeview_target)ウェブレットのドキュメントを参照してください。
WAMEX50では、単純検索の機能ですが、ツリービュー及びツリービュー・ターゲット・ウェブレットがShowPageWebroutineによって表示されます。これは、検索目的の場合、うまく動きます。
しかしながら、ツリービュー・ターゲット・ウェブレット・ウェブレットに表示された詳細の更新機能がある場合には、もう少し複雑になります。例えば、ユーザーがDepartmentの記述を変更し、更新ボタンを押した場合、ツリー・ビューは新しい記述で更新されると予想されるはずです。
これを実現するために、ツリービューはWAMEX50で表示されるのとは異なる方法で表示されなくてはいけません。WAMEX50では、ツリービューは垂直スプリッターの左半分に直接配置されてます。
WAMEX51では、垂直スプリッターの左半分にはナビゲーション・パネルが格納されています。このパネルはDepartmentTreeWebroutineに処理を移すように設定されています。これは、ツリービュー・ウェブレットを含むWebroutineです。このようにそれを分割するということは、ツリービューがウェブ・ページにおいて簡単にリフレッシュできるということです。なぜなら、事実上、メインのウェブ・ページのサブページにあるからです。
記述されたテクニックを強化するために、このセクションには、Tree Viewのプロパティの設定や関連するウェブレットと共に、WAMコードのセクションを含んでいます。
下のRDMLコードは、Tree Viewウェブレットで使用されるフィールドとリスト定義を示しています。
Depts作業リストは、Tree Viewを構成するのに使用されるリストです。そのフィールドの機能は以下のとおりです。
Ancestorsリストは選択されたツリー・アイテムについてツリービュー・ウェブレットから親ツリー・アイテムのキー情報を受け取るために使用されます。
DepartmentTreeWebroutineを右クリックして、LANSAエディターのオプションを選択してください。LANSAエディターが開かれたら、ツリー自体をクリックし、詳細タブを選択してください。ツリー・ビューのプロパティが、以下のように表示されます。

listnameプロパティはツリー・ビュー作業リストの名前、tvDeptsを含んでいることに注意してください。また、list_*プロパティ、onexpand_wrnameプロパティ、及びlistname_of_parents_of_selectedプロパティがtvDeptsのフィールドにどのように関連付けられるかにも注意してください。
WAMのエントリー・ポイント(ブラウザーURLか他のWAMからWAMを実行するのに使用されるもの)はViewDepartmentsWebroutineです。これは、エントリー・ポイントとしてのみ、一回のみ実行されるために、デザインされています。WAMの初期化ロジックはここに置かれます。以下のようになります。
この例では、すべきことはただ1つ、セッション・ステータスをActiveにすることです。これは、WAMでWebroutineを実行した時に永続的なセッション・データを書き出したり読み込んだりするのを制御します。
ShowPageWebroutineが次に実行されます。これも、ウェブ・ページを表示するために使用されるWAMが置かれるためだけにデザインされています。この例では、何を表示するか指定するWeb_mapはありません。お分かりのように、そのような情報は全て他のWebroutineで扱われています。フィールドやリストのデータがLANSAエディターで指定されないため、ShowPageWebroutineは‘空’の状態で表示を行います。


Web_map定義に注意してください。このWebroutineはツリー・ビューを表示するために使用されるため、選択されたツリー・アイテムの祖先の項目を保持するのに使用される作業リストと一緒に、ツリーを表す作業リストのWeb_mapを持っています。ツリー・ビュー作業リストがWeb_mapとして指定されるところはどこでも、祖先のリストもWeb_mapとして指定されなくてはいけません。そうでない場合、WAMは正しく動きません。
BuildTreeはツリー・ビューの構築を制御するのに使用されるBooleanフィールドです。デフォルト値(ソースのトップにある、フィールド定義において)はTrueであり、これは、このWebroutineがNavigation Panelによって最初に呼び出される時に、ツリー・ビューが構築されるということを意味しています。BuildTreeにはそれからFalseがセットされ、ツリーが次の呼び出し時に再構築されないようにします。

各エントリーに対する設定はツリー・ビュー作業リストに追加されることに注意してください。これについての詳しい説明については、 WAMEX51の詳細な考察の「リスト定義」を参照してください。

これはツリー・ビューでDepartmentが選択された時に呼び出されるWebroutineです。*input Web_mapに注意してください。これは、list viewウェブレットのlist_tag_fieldプロパティに対して指定されたフィールドです。ここには、選択されたツリー・アイテムの識別子もしくはキーが格納されています。
SelIDフィールドは永続的なセッション・フィールド(*NONE 及び *PERSISTのついたWeb_map)として定義されており、WAMが複数起動された時に選択されたキーを保持するのに使用されます。これはツリーを再構築する時に使用されます。
Webroutineが終わる時に、ウェブ・ページのアクティブな部分がTree View Targetであるため、Webroutineからの出力がその部分に割り当てられます。そのため、垂直スプリッターの右側の部分に部門の詳細が表示されます。


BuildTree booleanフィールドにはTrueがセットされ、ツリーが再構築されるべきということを示していることに注意してください。制御はツリー・ビューが再構築されるところから、DepartmentTreeWebroutineに移ります。AddListEntryメソッドについても見てください。
If/Else/Endif コードに注意してください。SelIDフィールドを覚えていますか?ツリーに追加されたエントリーがたった今更新されたものと同じものである場合、SELECTEDフィールドには'freeze‘がセットされます。SELECTEDは、ツリー・ビューのlist_is_selected_fieldプロパティを動かすツリー・ビュー作業リストのフィールドです。それにfreezeを設定すると2つのことを行います。ツリー・ビューを事前選択することと、TreeViewTargetを再ロードするのをやめることです。
LANSAエディターでDepartmentTreeWebroutineを開き、tree viewウェブレットを選択します。詳細タブをクリックし、そのプロパティを開きます。onexpand_wrnameプロパティにTreeExpandingが設定されることに注意してください。これはツリー・アイテムのエクスパンダー (+)がクリックされたときに呼び出されるWebroutineです。LANSAエディターを閉じて、WAMソースのTreeExpandingWebroutineをご覧ください。

*input field Web_mapsに注意してください。TreeID fieldは、展開ツリー・アイテムのキー情報を保持するものであり、TreeLvl fieldは、展開ツリー・アイテムのレベルを示すものです。ツリー・ビュー作業リストも、展開ツリー・アイテムの祖先のリストと一緒に受け渡されます。ツリー・ビュー作業リストには*bothが指定されることに注意してください。これは、TreeExpandingルーチンの最後にDepartmentTreeWebroutineに受け渡されます。また、ANCESTORSリストは*inputです。これはこのルーチンによってのみ必要とされるものです。
Case文はツリー・ビュー作業リストに何を追加すべきかを決定します。レベルが1の場合、Departmentのツリー・アイテムは展開されているということであり、Sectionが追加される必要があります。レベルが2の場合には、Sectionが展開されており、Employeeが追加される必要があります。ツリー作業リストにエントリーが追加されたら、ツリーを表示するDepartmentTreeWebroutineに処理が戻ります。
Ancestorの情報にアクセスするにおいては、親のキー情報を検索するために何をする必要があるかを示すため、Sectionツリー・アイテムが拡張された時に何が起こるかにフォーカスを置いています。
戻ってツリー・アイテムの展開を行うを参照してください。レベル2を処理する際、SECTIONフィールドには入力された識別子がセットされます。(これはBuildSectionsListメソッドでSectionがツリー・ビュー作業リストに追加されたときにセットされたものです。)もちろん、SectionはDepartmentという親を持っています。
拡張されたSectionがどのDepartmentに属するかを決定するため、ANCESTOR作業リストが使用されます。このリストはTreeIDフィールドの複数のエントリーを持っています。Sectionはたった1つの親を持っているため、Ancestor作業リストは1エントリーのみを持っています。この例では、GetAncestorメソッドが実行され、Sectionの親のキー値が検索されます。
より多くのレベルをもつツリーでは、ANCESTOR作業リストはレベル3以上のアイテムについて複数のエントリーを持ち、そのためmultiple Get_entrysが親キーの完全なリストを作り上げるために使用されます。