GrialTree

De GrialWIKI


Link=

Controles con sufijo: _gte

Contenido

Descripción General

El GrialTree permite componer en forma de arbol hasta 6 queries diferentes con relacioin padre-hijo interna o entre las tablas

Es posible componer un tree con un único query, por ejemplo de una tabla jerárquica (tipo ARB, com campo RELA_PADRE)


Auto Load Node data

Los queries se dividen en 2 grupos de tres queries cada uno. El primer grupo de 3 queries es el que se ejecuta en la carga del control (GrialCont.LoadData). El segundo grupo se ejecuta únicamente cuando el usuario llega a un nodo nodo final (hoja), cargando el resto de los nodos debajo de esa hoja.

Cada grupo tiene tres queries, para permitir utilizar varias tablas con relación jerárquica entre ellas. Los queries se denominan "pre", "central" y "post", y se ejecutan en secuencia, adicionando nodos al tree de acuerdo a las relaciones padre-hijo determinadas por la configuración de los campos ID_TREE y RELA_PADRE

Para permitir la integración de tablas de diferentes orígenes es necesario utilizar alias en los queries, para que el campo ID_TREE exista en todos los queries y tenga valor único para todo el tree.

Técnicas

En caso de utilizar varias tablas, para que el campo ID_TREE tenga valor único es posible utilizar los ID's de cada tabla, agregando una letra (que identifique la tabla), por ejemplo:

  ID_SOCUSUA05||'F' as ID_TREE


RootCmdParams y BranchCmdParams

Estas propiedades permiten incorporar un valor de ID o un filtro a uno o varios queries de cada grupo.


En los queries del primer grupo (root) todas las existencias de la palabra ':Params: (dos puntos, Params, dos puntos) será reemplazada por el contenido de la propiedad RootCmdParams


En los queries del segundo grupo (branch) todas las existencias de la palabra ':Params: (dos puntos, Params, dos puntos) será reemplazada por el contenido de la propiedad BranchCmdParams


Para el caso del segundo grupo, también se dispone de todos los campos del nodo-hoja, en el cual se posiciona el usuario y que causa la carga da datos (AutoLoadNodeData).

Por ejemplo, considerando un sistema patrimonial, donde si el ultimo nodo del primer grupo contiene un campo ID_BIEPATR05 que representa la especificación del bien, y los nodos por debajo de este nodo son aquellos que dependen del valor de este campo, por ejemplo, las unidades de ese bien que se encuentran inventariadas, el query para el grupo Branch debiera ser

  Select ID_BIEPATR06||'FC' as ID_TREE, BIEPATR06_EXISTENCIAS, BIEPATR06_NRO_SERIE, BIEPATR06_DESCRI
  from bie_patr_06 where rela_biepatr05 = [:ID_BIEPATR05:]

En este query, el valor para [:ID_BIEPATR05:] es tomado del nodo en el cual el usuario se ha posicionado, por lo que cargará un set de datos distintos para cada uno de los nodos finales del árbol inicial de carga.

Hooks adicionales para el modo AutoLoadNodeData

Para que funcione la carga secundaria parcial, es necesario incorporar una llamada en el evento NodeClick del TreeView, para que en caso de ser necesario, se ejecuten los queries del grupo "Branch" y se carguen los nodos dependientes.

Ejemplo:

Private Sub TreeView_NodeClick(node as Node)
   GrialCont.AutoLoadTreeData node,BiePatr_gte 
End Sub

Como se requiere la carga de datos, es un método del GrialCont el que debe ser invocado, el primer parametro es el nodo actual (del cual tomar datos para filtrar la carga) y el segundo parámetro es el control _gte que le da contenido al TreeView que el usuario está navegando.

Propiedad FastSearchVisible

El GrialTreeController tiene dos modos de funcionamiento. Cuando FastSearchVisible es false, el control es invisible, y permite darle contenido y controlar el TreeView relacioando.

Cuando FastSearchVisible es true, el control se muestra como un campo de texto que permite realizar un fast-search (búsqueda mientras el usuario tipea), y adicionalmente un boón de "refresh" que permite que el usuario dispare una recarga del control.

Propiedades

RootCaption
Determina el texto para el nodo "root" del cual dependen todos los otros nodos.
ID_FIELD
Determina el campo que le dará un id único a cada nodo del tree. Por norma: ID_TREE
RELA_FIELD
Indica el nombre del campo que contiene el RELA al id (ID_TREE) del nodo padre. ID_TREE y RELA_FIELD conforman la relación del tree.
ICON_FIELD
(opcional) Cuando tiene valor, indica que hay un campo en el query que determinará que imagen tendrá el nodo. Por default, los nodos hoja tienen image "Leaf" y los nodos con hijos tienen imagen "Branch". Las imágenes default se pueden ver en Constantes
QUERY_INDICATOR
(opcional) Cuando tiene valor, indica que hay un campo en el query ROOT, que determina el comportamiento del modo "AutoLoaddata". Si el campo está en 0 o false o null, indica que NO se deben buscar nodos adicionales. Si el campo está en 1, si se deben buscar nodos adicionales, por lo que en la llamada a GrialCont.AutoLoadNodeData se ejecutarán los queries definidos como "Branch"


Métodos

Bind
Asigna manualmente un Recordset al Tree. Deben existir los campos definidos en las propiedades ID_FIELD y RELA_FIELD. El TreeView es limpiado previo a la carga (TreeView.clear).
BindAdditive(Rst As Recordset, DestinationNode As Node)
Realiza una carga manual de un recordset, adicionando los nodos a los ya existentes. Deben existir los campos definidos en las propiedades ID_FIELD y RELA_FIELD. Los nodos son ubicados en el tree de acuerdo a los valores de esos campos.
LoadNodeFromRecordset(SourceRst As Recordset, Optional ByVal SelectNewNode As Boolean = True)
Permite "refrescar" la información de un nodo sin necesidad de re-cargar el tree completo. El recordset debe estar posicionado en el registro que se desea "refrescar" y los datos son aplicados al nodo indicado.
NodeRecord(Node As Node) As Recordset
Retorna el registro asociado al nodo. Permite acceder a todos los campos del registro relacionado con el nodo.
NodeRecordClone(Node As Node) As Recordset
ídem NodeRecord pero retorna un "clone" del recordset, que puede ser filtrado sin afectar al TreeView.
GetNodeFromID(ByVal IDValue) As Node
retorna el nodo en base a un valor de ID (ID_TREE). El valor es el valor del campo definido en ID_FIELD.
Position(ByVal IDValue)
Posiciona el treeView en un nodo por ID.


Herramientas personales