独自の VLF-ONE スナップイン・リストの作成は「独自の VLF-ONE インスタンスリスト・ブラウザの作成」を参照してください。
以下は、VLF-WIN のコード例です。
* =======================================================
* コンポーネント : XXXXXXXXXX
* タイプ : 再利用可能パーツ
* 説明 : スナップイン・インスタンスリスト・ブラウザの例
* インスタンスリストをツリー・コントロールとして表示
* 免責事項 : 以下のマテリアルは
* サンプル用としてのみ提供されています。このマテリアルおよびその利用に関しては、
* 明示または暗示を問わず、
* 全く保証されません。
* =======================================================
BEGIN_COM ROLE(*EXTENDS #VF_AC012) HEIGHT(181) LAYOUTMANAGER(#ATTACHMENT_MANAGER) WIDTH(482)
* 全体の添付レイアウト・マネージャ
DEFINE_COM CLASS(#PRIM_ATLM) NAME(#ATTACHMENT_MANAGER)
* 複数列対応のツリー
DEFINE_COM CLASS(#PRIM_TRVW) NAME(#VIS_Tree) COLUMNBUTTONHEIGHT(18) DISPLAYPOSITION(1) DRAGCOLUMNS(True) FULLROWSELECT(True) HEIGHT(181) LEFT(0) MULTIPLESELECTSTYLE(SameLevel) PARENT(#COM_OWNER) SELECTIONSTYLE(Multiple) TABPOSITION(1) TABSTOP(False) TOP(0) VIEWSTYLE(UnLevelled) VISUALSTYLE(#VF_VS101) WIDTH(482)
* レイアウト管理用添付アイテム
DEFINE_COM CLASS(#PRIM_ATLI) NAME(#TREE_ATTACHMENT_ITEM) ATTACHMENT(Center) MANAGE(#VIS_Tree) PARENT(#ATTACHMENT_MANAGER)
* ツリー内の全レベル用の標準 2 フィールド
DEFINE_COM CLASS(#PRIM_TVCL) NAME(#Tree_VID1) CAPTION('Code/Name') CAPTIONTYPE(Caption) DISPLAYPOSITION(1) LEVEL(1) PARENT(#VIS_Tree) SORTONCLICK(True) SOURCE(#VF_ELXVI1) WIDTH(17)
DEFINE_COM CLASS(#PRIM_TVCL) NAME(#Tree_VID2) CAPTION('Description') CAPTIONTYPE(Caption) DISPLAYPOSITION(2) LEVEL(1) PARENT(#VIS_Tree) SORTONCLICK(True) SOURCE(#VF_ELXVI2) WIDTH(16)
* 追加のサンプル英字 2 列
DEFINE_COM CLASS(#PRIM_TVCL) NAME(#Tree_acolumn1) CAPTION('Phone') CAPTIONTYPE(Caption) DISPLAYPOSITION(3) LEVEL(1) PARENT(#VIS_Tree) SORTONCLICK(True) SOURCE(#VF_ELXCA1) WIDTH(13)
DEFINE_COM CLASS(#PRIM_TVCL) NAME(#Tree_acolumn2) CAPTION('Address') CAPTIONTYPE(Caption) DISPLAYPOSITION(4) LEVEL(1) PARENT(#VIS_Tree) SORTONCLICK(True) SOURCE(#VF_ELXCA2) WIDTH(14)
* 追加のサンプル数値 1 列
DEFINE_COM CLASS(#PRIM_TVCL) NAME(#Tree_Visncolumn1) CAPTION('Zip Code') CAPTIONTYPE(Caption) COLUMNALIGN(Right) DISPLAYPOSITION(5) LEVEL(1) PARENT(#VIS_Tree) SORTONCLICK(True) SOURCE(#POSTCODE)
* 各ツリー項目の AKey1() AKey2() AKey3() BusinessObjectType() を追跡するための非表示列
DEFINE_COM CLASS(#PRIM_TVCL) NAME(#TREE_IAK1) LEVEL(1) PARENT(#VIS_Tree) SOURCE(#VF_ELXAK1) VISIBLE(False)
DEFINE_COM CLASS(#PRIM_TVCL) NAME(#TREE_IAK2) LEVEL(1) PARENT(#VIS_Tree) SOURCE(#VF_ELXAK2) VISIBLE(False)
DEFINE_COM CLASS(#PRIM_TVCL) NAME(#TREE_IAK3) LEVEL(1) PARENT(#VIS_Tree) SOURCE(#VF_ELXAK3) VISIBLE(False)
DEFINE_COM CLASS(#PRIM_TVCL) NAME(#TVCL_BOT) LEVEL(2) PARENT(#VIS_Tree) SOURCE(#VF_ELBOT) VISIBLE(False)
* 現在フォーカスのあるツリー項目
Define_com #Prim_Objt #FocusTreeItem Reference(*dynamic)
* UI コントロール定義
Define Field(#UI_ISDEAF) Reffld(#VF_ELBOOL)
Def_Cond Name(*UI_LISTEN) Cond('#UI_IsDeaf *ne TRUE')
* ツリー・ノード追跡 - 部門ノードおよび課ノードの追跡
DEFINE_COM CLASS(#Prim_kcol<#Prim_tvit #deptment>) NAME(#DepNodes) STYLE(Collection)
DEFINE_COM CLASS(#Prim_kcol<#Prim_tvit #std_texts>) NAME(#DepSecNodes) STYLE(Collection)
* ============================================================================
* メソッド定義
* ============================================================================
* ----------------------------------------------------------------------------
* 標準 uClearInstanceList メソッドの再定義
* ----------------------------------------------------------------------------
MthRoutine uClearInstanceList Options(*Redefine)
Invoke #DepNodes.RemoveAll
Invoke #DepSecNodes.RemoveAll
Clr_List #Vis_Tree
Set_ref #FocusTreeItem *null
EndRoutine
* -----------------------------------------------------------------------------
* 標準 uAddListEntry メソッドの再定義
* -----------------------------------------------------------------------------
Mthroutine Name(uAddListEntry) Options(*Redefine)
Define_com #Prim_tvit #DepParent Reference(*Dynamic)
Define_com #Prim_tvit #SecParent Reference(*Dynamic)
* フィルターにより SECTIONS と EMPLOYEES ビジネス・オブジェクトがインスタンスリストに提供されるが、
* このインスタンスリスト・ブラウザは、データのビジュアライズを少々異なる形で行うための
* 3 レベルのツリーがある。ビジネス・オブジェクトのタイプごとに別処理
CASE OF_FIELD(#BusinessObjectType.Value)
* ========================
* SECTIONS ビジネス・オブジェクト
* ========================
WHEN VALUE_IS(= SECTIONS)
* ツリー内の親の部門ノードを確認し、必要であれば追加
Set_ref #DepParent #DepNodes<#AKey1.Value>
If_ref #DepParent is(*null)
#VF_ELXAK1 := #AKey1.Value
#VF_ELXAK2 := ''
#VF_ELXAK3 := ''
#VF_ELBOT := ''
#VF_ELXVI1 := #AKey1.Value
#VF_ELXVI2 := 'Department ' + #AKey1.Value
#VF_ELXCA1 := ''
#VF_ELXCA2 := ''
#POSTCODE := 0
Add_Entry #Vis_Tree
Set_Ref #DepParent #Vis_Tree.CurrentItem
Set_Ref #DepNodes<#AKey1.Value> #DepParent
Endif
* Now add in the section node as a child of the department and keep a track of it
#VF_ELXAK1 := #AKey1.Value
#VF_ELXAK2 := #AKey2.Value
#VF_ELXAK3 := #AKey3.Value
#VF_ELBOT := #BusinessObjectType.Value
#VF_ELXVI1 := 'Section ' + #AKey2.Value
#VF_ELXVI2 := #AColumn1.Value
#VF_ELXCA1 := ''
#VF_ELXCA2 := ''
#POSTCODE := #Ncolumn1.Value
Add_Entry #Vis_Tree
Set #Vis_Tree.CurrentItem ParentItem(#DepParent)
Set_Ref #DepSecNodes<(#AKey1.Value + '.'+ #Akey2.Value)> #Vis_Tree.CurrentItem
* =========================
* EMPLOYEES ビジネス・オブジェクト
* =========================
WHEN VALUE_IS(= EMPLOYEES)
#VF_ELXAK1 := #AKey1.Value
#VF_ELXAK2 := #AKey2.Value
#VF_ELXAK3 := #AKey3.Value
#VF_ELBOT := #BusinessObjectType.Value
#VF_ELXVI1 := #VisualId1.Value
#VF_ELXVI2 := #VisualId2.Value
#VF_ELXCA1 := #AColumn1.Value
#VF_ELXCA2 := #AColumn2.Value
#POSTCODE := #NColumn1.Value
Add_Entry #Vis_Tree
* このツリーの親ノードとなる、(前回追加の) 最後のセクション・ノード
Set_Ref #SecParent #DepSecNodes<(#AKey1.Value + '.'+ #Akey2.Value)>
* エラー表示または親アイテムを正しく設定
If_ref #SecParent is(*null)
Use message_box_show ( ok ok error *Component 'Attempt to add employee with out a valid SECTIONS parent')
else
Set #Vis_Tree.CurrentItem ParentItem(#SecParent)
Endif
ENDCASE
* 終了
EndRoutine
* -------------------------------------------------------------------
* グリッドから新規セクションの選択を受け入れるかどうかを決定
* -------------------------------------------------------------------
EVTROUTINE HANDLING(#Vis_Tree.ItemGotFocusAccept #Vis_Tree.ItemGotSelectionAccept) Accept(#ACCEPT) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
If (#vf_elbot *ne ' ')
If Cond('#avFrameworkManager.uCurrentLockStatus *EQ TRUE')
#ACCEPT := FALSE
#UI_ISDEAF := TRUE
Else
#ACCEPT := TRUE
#UI_ISDEAF := FALSE
Endif
Endif
ENDROUTINE
* -----------------------------------------
* ツリーのアイテム選択処理
* -----------------------------------------
EvtRoutine Handling(#Vis_Tree.ItemGotSelection) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
If (#vf_elbot *ne ' ')
Signal SetSelectedInstance AKey1(#VF_ELXAK1) AKey2(#VF_ELXAK2) AKey3(#VF_ELXAK1) BusinessObjectType(#VF_ELBOT)
* Handle the special case where the focus did not fire correctly
If_ref #FocusTreeItem is(*null)
Set_ref #FocusTreeItem #Vis_Tree.CurrentItem
Signal SetCurrentInstance AKey1(#VF_ELXAK1) AKey2(#VF_ELXAK2) AKey3(#VF_ELXAK3) BusinessObjectType(#VF_ELBOT)
Endif
Endif
EndRoutine
* -------------------------------------------
* ツリーのアイテム選択解除処理
* -------------------------------------------
EvtRoutine Handling(#Vis_Tree.ItemLostSelection) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
If (#vf_elbot *ne ' ')
Signal DropSelectedInstance AKey1(#VF_ELXAK1) AKey2(#VF_ELXAK2) AKey3(#VF_ELXAK3) BusinessObjectType(#VF_ELBOT)
Endif
EndRoutine
* -------------------------------------
* ツリーのアイテム・フォーカス処理
* -------------------------------------
EvtRoutine Handling(#Vis_Tree.ItemGotFocus) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
If Cond(*UI_LISTEN)
If (#vf_elbot *ne ' ')
Signal SetCurrentInstance AKey1(#VF_ELXAK1) AKey2(#VF_ELXAK2) AKey3(#VF_ELXAK3) BusinessObjectType(#VF_ELBOT)
Endif
Endif
EndRoutine
* ---------------------------------------------
* ツリーのアイテム・フォーカス解除処理
* ---------------------------------------------
EvtRoutine Handling(#Vis_Tree.ItemLostFocus) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
If (#vf_elbot *ne ' ')
Signal DropCurrentInstance AKey1(#VF_ELXAK1) AKey2(#VF_ELXAK2) AKey3(#VF_ELXAK3) BusinessObjectType(#VF_ELBOT)
Endif
EndRoutine
End_Com