Razzak:
This is great. I could have used this for my geaneology report many months
ago! However, either I misunderstand something or there may be a bug in
the sort option. I want to sort within each tree level by birthday but I'm
not seeing it sort correctly in the resulting data. There are 7 tree
levels in my data.
Bill
On Thursday, April 23, 2020 at 11:06:55 AM UTC-4, A. Razzak Memon wrote:
>
> Thursday, April 23, 2020
>
> Tip of the Day: New TreeBuilder Plugin to Build Tree-Like
> Presentations in Reports
> Product.......: R:BASE X.5 and R:BASE X.5 Enterprise (Version 10.5)
> Build.........: 10.5.2.20423 or higher
> Sections......: Commands
> Keywords......: PLUGIN, Tree Builder, Reports
>
> Did you know there is a new internal TreeBuilder plugin to create
> a "tree table", with all necessary information to build a tree-like
> presentation in reports.
>
> Syntax:
>
> CLS
> PLUGIN TreeBuilder vResult +
> |TABLE TableName +
> |ID IDColumn +
> |PARENT ParentColumn +
> |ORDER OrderColumn +
> |TREE_TABLE TreeTableName
> RETURN
>
> Parameters:
>
> . TABLE - source table
> . ID - ID field in the source table
> . PARENT - parent field in the source table
> . ORDER - field that controls sorting (optional)
> . TREE_TABLE - output table
>
> vResult is the text variable to return the status, such as "OK"
> or the exact -ERROR- message.
>
> The created "Tree Table" output table has the following structure:
>
> CREATE TABLE <TreeTable> +
> (TREE_TABLE_ID INTEGER, +
> TREE_TABLE_PARENT_ID INTEGER, +
> TREE_TABLE_ROW_ID INTEGER, +
> TREE_LEVEL INTEGER, +
> TREE_HAS_CHILDREN INTEGER)
>
> TREE_TABLE_ID - Incrementing integer starting with 1
> TREE_TABLE_PARENT_ID - Value of the source table's parent field
> TREE_TABLE_ROW_ID - Value of source table's ID field
> TREE_LEVEL - The node's level. Outermost node is zero (0), then
> next level is one (1), ...
> TREE_HAS_CHILDREN - Indicator if node has children. One (1) if
> node has children, zero (0) if no child nodes
>
> RRBYW20 Sample:
>
> CLS
> PLUGIN TreeBuilder vResult +
> |TABLE Departments +
> |ID DepartmentID +
> |PARENT OwnerDept +
> |ORDER DepartmentID +
> |TREE_TABLE DeptTree
> RETURN
>
> A view is created based on the tree output table and the source
> table. The view is then used as the report's data source.
>
> CREATE VIEW `DepartmentTree` +
> (TREE_TABLE_ID,TREE_TABLE_PARENT_ID,TREE_TABLE_ROW_ID,+
> TREE_LEVEL,TREE_HAS_CHILDREN,+
> TREE_VEW_CAPTION,DepartmentID,Description,OwnerDept) AS +
> SELECT T1.TREE_TABLE_ID,T1.TREE_TABLE_PARENT_ID, +
> T1.TREE_TABLE_ROW_ID,T1.TREE_LEVEL,T1.TREE_HAS_CHILDREN,+
> ((SFIL(' ', T1.TREE_LEVEL*5)) + T2.Description), +
> T2.DepartmentID,T2.Description,T2.OwnerDept +
> FROM DeptTree T1 LEFT OUTER JOIN Departments T2 +
> ON T1.TREE_TABLE_ROW_ID = T2.DepartmentID
>
> With the following variables defined in the report expression
> builder;
>
> 1 : INTEGER : D : vTreeLevel = TREE_LEVEL
> 2 : INTEGER : D : vHasChildren = TREE_HAS_CHILDREN
>
> the report Detail band's "On Before Generate" EEP can use the
> TREE_LEVEL and TREE_HAS_CHILDREN fields to manipulate the label
> and image locations, to emulate a tree view presentation.
>
> -- Start of EEP
> -- Use TREE_LEVEL and TREE_HAS_PARENT to indent tree view
>
> --Node label
> SET VAR vMargin DOUBLE = 1.5
> SET VAR vLevelIndent DOUBLE = 0.2
> SET VAR vLeft = .vMargin + (.vLevelIndent * .vTreeLevel)
> PROPERTY lblCaption LEFT .vLeft
>
> --Node image. A few mms to the left of the label
> SET VAR vLeft = (.vLeft - 0.3)
> PROPERTY imgParent LEFT .vleft
> PROPERTY imgChild LEFT .vleft
> IF vHasChildren = 0 THEN
> PROPERTY imgParent VISIBLE FALSE
> PROPERTY imgChild VISIBLE TRUE
> ELSE
> PROPERTY imgParent VISIBLE TRUE
> PROPERTY imgChild VISIBLE FALSE
> ENDIF
> RETURN
>
> Using this approach, a tree view presentation with unlimited
> node levels can be created. In addition, the tree structure
> in the report can be created with very complex appearance
> (e.g. a sub report inside each node). This was made possible
> by the TREE_LEVEL and TREE_HAS_CHILDREN fields.
>
> Have fun building Tree-Like Presentations in reports!
>
> Very Best R:egards,
>
> Razzak.
>
> https://www.rbase.com
> http://www.facebook.com/rbase/
>
>
>
--
For group guidelines, visit
http://www.rbase.com/support/usersgroup_guidelines.php
---
You received this message because you are subscribed to the Google Groups
"RBASE-L" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rbase-l/0aa52749-e75c-42d5-9724-a70b45a3309e%40googlegroups.com.