O$: Tree list
Christine Penner
christine at ingenioussoftware.com
Thu Apr 30 18:09:26 EDT 2009
Thanks for the suggestions.
I started by walking through my list and adding nodes one at a time.
This was the only way I could see to do this when I don't have a set
number of levels. Then I read David Swains article on tree lists and
completely changed how I was doing it. Now I build only one level at
a time, starting with the root nodes for the whole tree. As a user
clicks on a node I build the next level for that node. Much faster
and cleaner code. I use the setnodelist method because when I do one
level at a time I can do a merge list without having to walk through anything.
This is the link to David Swains article I used. Thanks David.
http://www.omnis.net/technews/080207/
Christine
At 07:39 PM 29/04/2009, you wrote:
>I use the following technique (based on a synthesis of Omnis
>documentation fragments) to build a tree list based on a schema:
>
>[lTreeList is first loaded by a standard method.]
>...
>
>; Combine columns to provide a concise tree (which OmnisSQL can't do)
>Calculate %LN as lTreeList.$linecount
>For lTreeList.$line from 1 to %LN step 1
>Calculate lTreeList.//Student.LastName// as
>con(lTreeList.//Student.LastName//,", ",lTreeList.//Student.FirstName//)
>Calculate lTreeList.//Student.FirstName// as
>con(lTreeList.//Enrollment.StartDate//,"|",lTreeList.//Enrollment.ID//)
>End For
>
>; Convert relational list to flat in preparation for further manipulation
>Do $cinst.$objs.lstLessonTree.$setnodelist(kRelationalList,0,lTreeList)
>Do $cinst.$objs.lstLessonTree.$getnodelist(kFlatList,0,lTreeList)
>
>; Expand all nodes; move enrollment ID to $ident
>Calculate %LN as lTreeList.$linecount
>For lTreeList.$line from 1 to %LN step 1
>Do lTreeList.C8.$assign(kTREEnodeExpanded)
>Do lTreeList.C6.$assign(0) ;; default $ident (not actually used)
>If pos("|",lTreeList.C4)
>Calculate #S1 as con(style(kEscStyle,kBold),lTreeList.C4)
>Do lTreeList.C4.$assign(strtok("#S1","|"))
>Do lTreeList.C6.$assign(strtok("#S1","|")) ;; $ident (Enrollment ID)
>Do lTreeList.C9.$assign(kDarkRed) ;; to stand out
>End If
>End For
>
>Do $cwind.$objs.lstLessonTree.$clearallnodes()
>Do $cinst.$objs.lstLessonTree.$setnodelist(kFlatList,0,lTreeList)
>
>This seemed a lot cleaner and more compact to me than looping. Note
>that my application uses this tree list "as is", just for
>presentation and navigation, without allowing a user to directly
>edit it. That might require something more complex.
>
>David Wieland
>Appro Information Systems
>Kars (Ottawa), Ontario, Canada
>(613) 692-4870
>dwieland at approis.com
>
>----- Original Message -----
>From: "Andreas Pfeiffer" <andreas at familiepfeiffer.de>
>To: "OmnisDev List - English" <omnisdev-en at lists.omnis-dev.com>
>Sent: Wednesday, April 29, 2009 7:17 AM
>Subject: Re: O$: Tree list
>
>
>| Christine,
>|
>| Note that you can use $setnodelist for an individual sub branch as
>| well. On of the parameter just receives the reference to the node
>| where you want to add the sub branch.
>|
>| Kindest regards,
>|
>| Andreas
>|
>| Am 29.04.2009 um 01:13 schrieb Christine Penner:
>|
>| > I'm trying to build a dynamic tree list. There is a couple of ways
>| > to do that and I'm looking for everyones opinion which is best.
>| >
>| > I will be passing 2 lists. One with the columns (levels) I want in
>| > the tree. Including the field name and title.
>| > The other will be the list of data.
>| >
>| > Currently all trees we use have only 3 levels. There could be more
>| > but not many. The data list could be large (possibly thousands).
>| >
>| > No matter how I do it I will have to walk through both the lists.
>| > Here are the 2 options I have come up with.
>| >
>| > 1. Add nodes one at a time using $add().
>| > 2. Build a list (using the kFlatList form) and use $setnodelist()
>| >
>| > Christine Penner
>| > Ingenious Software
>| > 250-352-9495
>| > christine at ingenioussoftware.com
>| > _____________________________________________________________
>| > Manage your list subscriptions at http://lists.omnis-dev.com
>|
>|
>|
>_____________________________________________________________
>Manage your list subscriptions at http://lists.omnis-dev.com
More information about the omnisdev-en
mailing list