Identificazione dei nodi: la proprietà HashKey
Questo paragrafo descrive come il sistema identifica ogni singolo nodo di un albero il cui contenuto provenga da query su tabelle del database.
Ogni metodo, funzione ed evento contenuto nella cartella Nodes della libreria degli alberi possiede, infatti, almeno un parametro chiamato HashKey. Questo parametro è ciò che permette di identificare ed operare su un singolo nodo dell'albero.
Durante la fase di creazione dell'albero il sistema assegna ad ogni nuovo nodo un nome che deve essere univoco. Tale nome è calcolato come segue:
- Se esiste, nella query di un TreeItem, una colonna con DBCode uguale ad HASH il sistema utilizza il valore di questa colonna come nome del nodo;
- se non esiste una colonna con DBCode uguale ad HASH il sistema concatena tutti i valori delle colonne Primary Key utilizzate nella select list della query dei nodi dell'albero.
Normalmente, se l'albero contiene oggetti diversi provenienti da tabelle diverse, è necessario definire l'espressione HASH per poter distinguere i diversi nodi tra loro. Per esempio se un albero contiene nodi della tabella Categorie (avente il campo IDCATEGORIA di tipo intero come Primary Key) e per ogni categoria vengano creati nodi provenienti dalla tabella Prodotti (avente il campo IDPRODOTTO di tipo intero come Primary Key) è necessario specializzare i vari nodi. Una soluzione potrebbe essere quella di definire una colonna calcolata nella query delle categorie così fatta:
'C' +c ToString(IDCATEGORIA) as HASH
ed una colonna calcolata nella query dei prodotti così fatta:
'P' +c ToString(IDCATEGORIA) as HASH
In questo modo tutti i nodi delle categorie hanno un HashKey che inizia per 'C' mentre i nodi dei prodotti iniziano con 'P'.
Se non avessimo definito tali colonne calcolate tutti i nodi dell'albero avrebbero avuto come HashKey il loro ID con evidente sovrapposizione delle categorie con i prodotti. Se avessimo avuto necessità di attivare la categoria con ID uguale ad 1 avremmo dovuto chiamare la procedura SelectNode fornendo il valore '1' (stringa) come parametro. Il sistema non avrebbe potuto selezionare tale nodo in quanto avrebbe trovato 2 nodi diversi con lo stesso valore di HashKey. In questo caso, il nodo non sarebbe stato attivato ed avremmo visto un messaggio di Warning nella videata di Debug che segnalava l'ambiguità.