UltraTree Professional Edition 4.3.1 - from Paragon Design and Development

by Jim Mumford

Published 1999-04-01    Printer-friendly version

The relational tree interface is an excellent method of showing users several layers of complex record relationships without having to enter an update form. Creating a complex tree structure with the standard Clarion templates can be difficult. The UltraTree Professional template greatly simplifies and expands the capabilities of relational tree development over the Clarion Relational Tree Template.

The following is an excerpt from the UltraTree User's Guide explaining what a tree section actually is:

  • "A tree section deals with a collection of records that shares common formatting and indentation level. Each record-containing section except the first is related to the section immediately above it through a relationship defined in the application dictionary. You may create as many subordinate record sections as you wish; limited only by the files specified in the schematic. More than one file may be subordinate to the same file in the schematic. In this case, the records are grouped by file, where the groups are arranged in the order of appearance of the files in the file schematic."

Major Features

UltraTree Professional is a very full-featured template loaded with functionality that allows you to create extremely complex Tree structures. Some of the features of the UltraTree Professional template are:
  • Section Types: Headers, Views, File and Footers
  • Toolbar Support, Standard Clarion, plus some additional, specific UltraTree features
  • Selecting a primary record from a standard browse listbox, shows the corresponding UltraTree structure for the selected record in a second UltraTree browse listbox
  • Tree and Aligned Data Columns
  • Ranging and Filtering on any Tree Section
  • Recursive Views
  • Section-specific sorting, with 16 control fields per sort, including dynamically computed variables
  • Expansion and Contraction by Node or Entire Tree (available from Toolbar)
  • Many to Many relationship update support
  • Multiple child sections anywhere on a tree
  • Update procedure supports parameter passing and return values
  • Totaling
  • Global, Row and Column color options
  • Node State variables for controlling strings, icons and/or colors
  • Section Icons

Installation

Upon running the installation program you are presented with the Clarion root directory and given the option to select a different directory. Next, you are presented with a choice of the directory that the templates will be placed in, again with the option of selecting a different directory. Then you are presented with a directory for images. After that, you are then asked if you want to install the UltraTree ABC Conversion Utility (the install even states why you might not want to install this component -- nice touch). Next, it gives you the option to install the UltraTree ABC User Guide. The final window tells you what templates have been installed and which ones should be registered.

UltraTree comes with a separate install for the example program (Pec4dmo.exe). This defaults to the Clarion4 directory, while UltraTree Template seemed to default to Clarion5. You do have the option to put it into the correct directory.

[Review Editor's note: The reviewer was installing the C4 version of the UltraTree Pro demo, hence the default to Clarion4. A separate demo for C5 is available which defaults to Clarion5.]

The presentation of the install was very good, but the outcome did have a few problems. I would prefer that the install prompt you for the C4 Templates if you are doing a C4 install and C5 if you are doing a C5 install (both an UltraC4.Tpl and UltraC5.Tpl are installed). The UTDemo.tpl was installed as part of the template installation and I would prefer that it get installed and registered as part of the example application installation. Better yet would be to eliminate the UTDemo.Tpl totally, since it contains one small template that could be hand-coded into the Example Application. Additionally, I feel that the example application should include all the graphic files that are used and should not require changes to get the application to link.

Implementation

The main UltraTree Template is a Control Template that can be placed on any window. The control template places a Listbox on your window. When the field selection dialog appears, you must populate your Primary File and links for the related files. If you need to specify a Range for your Primary File, you need to be sure to specify the key that you want the Range Selection to be done on. Otherwise, a Primary Key is not essential since you can use UltraTree's Dynamic Display Order (a sort feature).

Next, you must specify the main tree column for your Tree and any text that will appear there. It is suggested that you use the local variable DisplayString that is automatically placed into your Local Data by UltraTree. Additionally, you need to make sure you put a check in the list box tree structure option. If you don't, you will get a message on the UltraTree Extension telling that you need to select a Tree for at least one of your columns (I like this). Specify colors and/or Icons if desired. This creates the tree column for your UltraTree. Additional column strings can be added with Professional UltraTree for additional information as needed. The additional columns will be blank unless you place something in them.

Now that you have your row defined with various columns, right click on the listbox and choose Actions. The UltraTree Extension Property Sheet will be available. Filling out the UltraTree Extension Property Sheets is where you can really start feeling the power of the UltraTree templates. Here is where you will need to create the Sections for your Tree. The Root Section of your Tree will represent the Primary file. You will need to have a Header Section for the Root Section if you want the ability to Insert records. All but the Root section must be Related to another section. The Headers and Footers are related to the File or Views Sections. Again, if you want to be able to Insert records for a section you must have a Header (unless the Global option to permit Insert at lowest level is selected). The record sections (File or View) are related to other File or View Sections.

The main differences between an UltraTree View Section and a File Section are that a ViewManager object is used to manage a View Section, and a View can include multiple files. A File section is managed by a RelationManager object, and so can only have one file. The relationships between the record sections and the relationships in your file structure from the Dictionary control the basic tree structure.

R_jm0401.gif


Figure 1: UltraTree Pro template setup options

Now, you want some data to appear in each of your Sections. This is accomplished with the display Tab of each Section. If you leave this blank you will have a branch without any text (probably not what you want). For each section you need to fill in the text, variables or functions that you want to appear in each of the columns. Just by filling out these items, you now have a functional tree.

But wait - what if you want special Icons and different colors? No problem. UltraTree has these features, as mentioned above. Colors can be set globally and can even be set globally for each column. Then colors can be set for each section by Row, Column and conditionally. Different Icons can be displayed for each Row and Icons can also display conditionally based on various properties UltraTree provides. As a bonus, the example program ships with some very useful icons.

You might want to filter your records. Again UltraTree has this covered. You can use either a Range or Filter Statement for File or View Sections. It is recommended in the documentation that you do not use a Filter for the Primary Root Section if the file is going to be large. By the same token, it is recommended in the User Guide that you use a Range on large Primary files to limit the scope of what is loaded into the Queue at one time.

What about ordering data within a section? UltraTree allows you to specify up to 16 fields to sort by ascending or descending for file and data sections. This allows you to specify a totally different sequence than the link between files. Because this is accomplished as a node load it tends to be very fast.

You need to update your record? As you would expect this is very well done. UltraTree lets you control whether a record can be Inserted, Changed or Deleted. Additionally, it fully supports parameter passing and return values.

Footers and headers are simple. All you do for these is relate them to a File or a View Section, then place Text, Variables or Functions for the columns that you want displayed. Note that you must have a Header to Insert a record from, unless the Global Option - Permit Insert at Lowest Tree Level is checked. Then you can Insert a record at the lowest Tree Level without a Header. In most cases, you will want a Header for each section of your Tree.

A new element that was added after the User Guide was written is the Total feature. Totals allow you to total your detail and display it in a column. UltraTree allows for the Count, Sum, Average, Maximum and Minimum Totaling, on each row or even conditionally. Typically, you will want to display a total on the Footer Section. I tried both Count and Sum and they worked perfectly, giving me totals for my section on the Footer.

I also decided to try using a Queue Section and had trouble getting it to work. The author of UltraTree quickly replied to my call for help. He said that the Queue Section was currently a work in progress and he was still developing this new feature. He mentioned that a couple of UltraTree users had managed to use it in limited form and that was why it was still in the current Version. I look forward to seeing how this is implemented when it is totally functional.

Below you can see the outcome of a well-designed UltraTree Professional listbox. This listbox is using many of the features mentioned above. With a little bit of work and using the UltraTree Professional templates you can create listboxes with features like the one below.

R_jm0402.gif


Figure 2: An example using UltraTree as a child browse

Finally, I decided to create a simple recursive view tree structure. This recursive tree option is exclusive to UltraTree Professional. I looked at the User Guide, which goes into great detail on what a recursive view is and how to set up your files properly. I also looked at the simple recursion example procedure to make sure that it all made sense. I then proceeded to make my own recursive procedure. I had a few items wrong the first time I tried, but within a few minutes I had a recursive view tree structure working. UltraTree made creating a recursive tree structure simple, a process that can be quite complex.

R_jm0403.gif


Figure 3: A recursive (self-related) UltraTree example

Performance

The performance and basic presentation of UltraTree is outstanding. As noted before, you should be careful if the Primary file is quite large, since all Primary Records are loaded into the Primary Queue unless you have a specified range. The use of a range limits the tree to those elements that meet the range criteria. This can be limited even to a single primary record (as illustrated in Figure 2).

Documentation

UltraTree has a User Guide that does a very good job of documenting the features of UltraTree Professional. The User Guide is a Rich Text (RTF) format file that can easily be read into a word processor and printed. It is quite complete, as far as it goes, and does a good job of explaining most of the current features of UltraTree (more on this below).

While I thought the User Guide was excellent, I did miss having an online help file. I prefer to press the F1 key first, and then go to the User Guide when I need more information.

Technical Support

The UltraTree technical support was very good. Phillip Carroll, the author of UltraTree, is very knowledgeable about his product and how he feels it should work. He is quick to reply to questions and complete with his answers.

A few suggestions

Below are a few minor items that I feel could be improved:

The example application needs to be changed to make sure you do not receive errors when generating the example. A cover letter is sent with the UltraTree explaining what needs to be done to not have these errors; unfortunately, I did not receive the cover letter prior to installing the Example Application and encountered the errors when trying to generate and compile the Example Application. These are minor errors and do not effect the functionality of the example application, once they are corrected as per the cover letter. I feel it is frustrating to get errors when trying generate an Example Application, as this could give the purchaser the initial feeling that he has bought inferior product. Since UltraTree is an excellent Template, it deserves an example application that works, without errors, out of the box.

Currently, if you are on a File or View Section of a Tree Structure and you press the Insert Key or use the Pop-up Menu to insert a record it inserts a different record type than the one you have selected. According to the UltraTree author, this is Standard Windows Behavior (as evidenced by Explorer, etc). Be that as it may, I can see that my customers may want it to Insert a record of the same Type as is presently selected. It would be nice to have an additional option to allow you to Insert the same record type as is currently selected.

According to the UltraTree Pro author, a feature that will be in the next major version of UltraTree Pro is a virtual method call into the Insert handling for a non-header section with multiple child sections. In this method, the user will be able to implement their own Pop-up menu and return the ID of the section to update. Depending on how this is implemented this may answer the Insert suggestion that I mentioned above.

Finally, while I thought the User Guide was very good and extremely helpful, the version I had was missing a few features that are in the current product. It is my understanding that the help is in development and will be completed soon. If the User's Guide is any indication of how good the Help will be, at that time the documentation will deserve a rating of Very Good if not Excellent.

Summary

UltraTree Pro is an excellent product that gives enormous power and flexibility to produce Tree Structured browses. It is full of options that do the majority of the work, with little or no hand coding required. If you have not seen a demo of UltraTree Pro, you should. A demo can be downloaded from their website, which is listed at the end of the review.

Given all of UltraTree Pro's features and flexibility, it can take time to setup. Once you are finished, though, the result is a far more complete picture of your data than you would have had without UltraTree Pro.
 

Category
Product Score
Ability to do the task
Excellent
Ease of use
Very Good
Ease of Installation
Fair
Documentation
Good
Technical Support
Very Good
Modifies Shipping Templates
No
Black-Box DLLs/LIBs
No

UltraTree comes in a Professional Edition and a Standard Edition. According to the User's Guide the Standard Edition excludes data columns, recursive views, multifunction totaling, and the footer sections.More information, demos, etc., can be found at the Paragon Design and Development web site: http://www.paragondandd.com.

Both UltraTree Professional and Standard edition support the Clarion templates set as well as the ABC (Object Oriented) template set. The ABC version was completely rewritten using OOP and has additional features that are not contained in the legacy templates.

UltraTree Professional Edition is available direct from Paragon D&D for $299 plus shipping and handling at sales@ParagonDandD.com.

UltraTree Standard Edition is distributed by TopSpeed and foreign distributors via the

TopSpeed Accessories program for $179 plus shipping and handling (1-800-354-5444).

Upgrading UltraTree Standard Edition to UltraTree Professional Edition is currently priced at $199, and is also available from Paragon D&D at sales@ParagonDandD.com.
 

Vendor Comments from UltraTree author Phillip Carroll
I want to thank the reviewer for the great deal of time and thought he has obviously devoted to reviewing a very complex product, as evidenced by his very thoughtful comments. 

An author always feels the object of his labors deserves nothing but Excellent in any category, so it always comes as a shock to find that someone has a lesser opinion of some aspect of the product. Even after taking this author's bias into account, however, I was surprised to receive only a 'Fair' rating on Ease of Installation. The rather minor nature of the actual criticisms in that section of the review don't seem to me to merit that low a mark. In my admittedly biased opinion, I feel that UltraTree is actually quite easy to install in all versions of Clarion that are supported, which is an extensive list. However, I will take the reviewer's thoughtful suggestions into account in future updates. I will continue to strive to make Installation as painless as possible. In fact, I will strive to correct all areas of deficiency as noted in the review.

The reviewer's criticism of the way UltraTree deals with 'Insert' deserves a response by the author, particularly since a new option was recommended. I am particularly concerned that nobody be misled into thinking that UltraTree's treatment of Insert is in any way peculiar. It is peculiar only to trees in general, not to UltraTree specifically. Probably, the reviewer's opinion is the result of inexperience with trees.

UltraTree's Insert behavior is identical to TopSpeed's Relation Tree. It is also the same as Windows Explorer, and the same as any other data tree the author has ever seen. In a data tree, requests to insert a new record are always interpreted as requests to insert a child record. Although I assert that all data trees operate this way, it is not enough to rest on this assertion as justification for not providing the option suggested by the reviewer. The actual reason the suggested option will never be offered is that I think that developing the option would be a total waste of my time. It would be a waste of time because nobody would ever use the option after trying it once. To see why all data trees operate as they do, I will take the reader through a little scenario.

Let us suppose that the developer selects the hypothetical design option of specifying that Insert on each section means 'Insert a record of the same type as the selected record'. In other words, the tree will interpret Insert the same as a normal browse interprets Insert. 

Now consider a listbox containing two root records. The first root record has no children, the second root has a child under it. If Insert means 'Insert a record of the same type as the selected record', how can an end user of the application cause a child record to be inserted into the tree under the first root record? If there is already a child record under any parent (such as postulated for the second root), he can select it and request Insert of another child. But if there isn't already a child record under any given parent, he can't insert another one. He can only insert whatever he already has. That being so, how did he ever get into the postulated state in the first place? The answer is, he couldn't. The result of choosing this option is an empty tree because you can't add a record unless you already have one. Catch 22.

In other words, this convention isn't followed by data trees for the simple reason that as a practical matter, it doesn't work. On the other hand, the standard data tree convention for Insert works at all levels, provided that a tree header is defined to act as the "parent" of the root section for Insert purposes. At the lowest level in the tree, UltraTree provides the option to allow Insert to mean 'Insert another record of the same type'. No problem is created by changing the convention at the lowest level, because the first record under a given parent can be inserted by selecting the parent (or a header); and by definition, the lowest level has no child records. The main reason UltraTree offers this option is that Relation Tree offers the same option. I personally rarely use the option because I prefer consistency of behavior.

Of course, an additional control could be designed whose sole purpose is to insert the first record under a parent record. I think most developers (and end users as well) will agree that this is a clumsy artifice, at best. As stated above, I don't plan to offer the recommended option because I think that nobody would ever use it after trying it once.

[Review Editor's Note: For the record, the lower score in the installation reflected the reviewer's difficulties in getting the installed demo to compile (missing graphics and having to install extra templates just for the demo), not just the installation file itself.]

Printer-friendly version

Reader Comments

To add a comment to this article you must log in.

 
 

Search

 

Advanced Search
Topical Index

Related Articles

Subscribe to
ClarionMag

One year: $169

(includes all back issues since '99)

Renewals from $119

Two years: $269

Renewals from $219

More Info

Subscribe Now!

ClarionMag Blog

RSS Feeds

Updates via Email

Enter your Email


Powered by FeedBlitz

Quick Links