Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Image Added


[ Image Removed |../../index.htm#lansa/lansa048_3230.htm]
Visual LANSA フレームワーク ガイド > フレームワーク・プログラミング > インスタンスリストとインスタンスリスト・マネージャー > 独自のスナップイン・インスタンスリストの作成 > インスタンスリストに 11 個以上の英数字列や数値列を追加 > スナップイン・インスタンスリストのソース・コード例

...

Image Removed
独自の 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

...