![]() |
|
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:
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.
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.

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.

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.

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.
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.
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.]
Copyright © 1999-2009 by CoveComm Inc. All Rights Reserved. Reproduction in any form without the express written consent of CoveComm Inc., except as described in the subscription agreement, is prohibited.
Clarion Magazine ISSN 1718-9942
One year: $169
(includes all back issues since '99)
Renewals from $119
Two years: $269
Renewals from $219