|
01.11.2009
Dynamische Trees
Für dieses Beispiel benötigen Sie die Beispiel-Datenbank FAHRZEUGE und das Projekt fahrzeuge.xdev.
Der Einsatz des Tree-Füll-Assistenten ist nur möglich, wenn die Hierarchien bereits von vorn herein feststehen und bekannt sind. Oftmals ergibt sich die Hierarchie jedoch erst bei der Laufzeit. Dann müssen Sie den Tree vollständig dynamisch erzeugen. Dafür bietet Ihnen die Tree-Komponente die Methode fillFrom ( ) | XDEV NLS: fülleAus ( ).
» Nur 1 Virtuelle Tabelle als Daten-Model «
Als Daten-Model benötigen Sie nur eine einzige Virtuelle Tabelle mit nur 3 Spalten, die Sie mit allen Tree-Daten füllen müssen. Dazu benötigen Sie mehrere Datenbankabfragen, die jeweils dieselbe Virtuelle Ziel-Tabelle verwenden. Damit diese nicht bei jeder Abfrage überschrieben wird, müssen Sie das Abfrageergebnis jeweils an die Virtuelle Ziel-Tabelle anhängen. Die erste Spalte der Virtuellen Ziel-Tabelle enthält die Datensatz-ID, die zweite Spalte enthält den Eintrag im Tree, sprich die Tree-Node. In der dritten Spalte muss die ID der Obergruppe stehen (Parent-ID). Da jeder Datensatz eine ID sowie eine Parent-ID besitzt, ergibt sich daraus automatisch eine Hierarchie.
» Nur 1 Virtuelle Tabelle als Daten-Model «
Jeder Tree besitzt eine sog. Root, an die alle Einträge angehängt werden. D.h. selbst die oberste Kategorie der Daten wird an die Root angehängt. Da die Bezeichnung der Root und deren ID Da die Bezeichnung der Root i.d.R. nicht in der Datenbank steht, müssen Sie für die ID der Root-Bezeichnung einen Wert wählen, der in der Datenbank nicht vorkommt, z.B. -1.
| 1. | Fügen Sie einen Tree auf die Arbeitsfläche ein, wechseln Sie in die Code-Ansicht und wählen Sie im Code-Editor das Ereignis ON_SHOW ( ) | XDEV NLS: Nach der Darstellung ( ). |
| 2. | Rufen Sie den Daten-Editor auf, den Sie im Menü Daten finden, legen Sie eine neue Virtuelle Tabelle mit dem Namen TREE und den Datenfeldern ID als Autowert, TREENODE als Zeichenkette und PARENT_ID als Ganzzahl an und klicken Sie abschließend auf Speichern und Schließen, um den Daten-Editor zu beenden. |
Root erzeugen:
| 3. | Erzeugen Sie eine erste Zeile in der Virtuellen Tabelle #TREE. Klicken Sie dazu in der Bibliothek auf Virtuelle Tabellen und anschließend auf die Virtuelle Tabelle Tree, um die Methoden dieser Virtuellen Tabelle anzuzeigen. Ziehen Sie dann die Methode addRow ( ) | XDEV NLS: fügeZeileHinzu ( ) in den Code-Editor. |
| 4. | Speichern Sie nun in der ersten Zeile der Virtuellen Tabelle in der Spalte TREENODE die Bezeichnung für die Root. Fügen Sie dazu die Methode setValueAt ( String colName, Mixed value ) | XDEV NLS: setzeWert ( Zeichenkette spalte, Verschiedenes wert ) in den Code-Editor ein, geben Sie im folgenden Parameter-Dialog den Spalten-Namen "TREENODE" sowie für die Bezeichnung der Root "Fahrzeuge" als Wert an und schließen Sie den Dialog mit OK. |
| 5. | Speichern Sie in der Spalte PARENT_ID die Parent-ID der Root. Fügen Sie dazu erneut die Methode setValueAt ( String colName, Mixed value ) | XDEV NLS: setzeWert ( Zeichenkette spalte, Verschiedenes wert ) in den Code-Editor ein, geben Sie im folgenden Parameter-Dialog den Spalten-Namen "PARENT_ID" sowie "-1" als Wert für die Parent-ID an und schließen Sie den Dialog mit OK. |
Datenbankabfragen:
| 6. | Fügen Sie eine Datenbankabfrage XDEV Query | XDEV NLS: XDEV Datenbankabfrage in den Code-Editor ein und klicken Sie diese an, um den SQL-Assistenten aufzurufen. Klicken Sie die Datenbank-Tabelle HERSTELLER an, um alle Datenfelder dieser Tabelle zu selektieren. Wählen Sie nun jedoch bei Ziel (Virtuelle Tabelle) die Virtuelle Tabelle #TREE aus, klicken Sie das Datenfeld MARKE an und wählen Sie stattdessen das Datenfeld TREENODE aus. |
| 7. | Weisen Sie nun jedem Wert im Datenfeld TREENODE die Parent-ID 1 zu, damit diese unmittelbar an die Root angehängt werden. Klicken Sie dazu bei Benutzerdefinierte auf , geben Sie direkt unter Benutzerdefinierte den Wert 1 ein und wählen Sie rechts daneben das Datenfeld PARENT_ID aus. |
| 8. | Damit die erste Zeile der Virtuellen Tabelle TREE, welche bereits die Werte für die Root enthalten, nicht durch die Datenbankabfrage überschrieben wird, klicken Sie bei Ziel (Virtuelle Tabelle) auf , wählen Hinten anhängen aus und beenden Sie den SQL-Assistenten mit OK. |
| 9. | Fügen Sie eine zweite Datenbankabfrage XDEV Query | XDEV NLS: XDEV Datenbankabfrage in den Code-Editor ein und klicken Sie diese an, um den SQL-Assistenten aufzurufen. Klicken Sie die Datenbank-Tabelle MODELLE an, um alle Datenfelder dieser Tabelle zu selektieren. Wählen Sie bei Ziel (Virtuelle Tabelle) erneut die Virtuelle Tabelle #TREE aus, klicken Sie das Datenfeld MODELL an und wählen Sie stattdessen das Datenfeld TREENODE aus, klicken Sie dann das Datenfeld HERSTELLER_ID an und wählen Sie stattdessen das Datenfeld PARENT_ID aus, klicken Sie bei Ziel (Virtuelle Tabelle) auf , wählen Sie Hinten anhängen aus und beenden Sie den SQL-Assistenten mit OK. |
Tree füllen:
| 10. | Klicken Sie den Tree an, um alle Methoden des Trees in der Bibliothek anzuzeigen und fügen Sie die Methode fillFrom ( ) | XDEV NLS: fülleAus ( ) in den Code-Editor ein und übergeben Sie im folgenden Assistenten alle notwendigen Parameter. |
| 11. | Geben Sie als ersten Parameter die Virtuelle Quell-Tabelle #TREE an. |
| 12. | Parameter 2 und 3 dienen zum Auslesen der Root. Geben Sie als zweiten Parameter die Spalte an, in der die Parent-ID der Root gespeichert ist. Geben Sie dazu das Datenfeld "PARENT_ID" an, da die Parent-ID mit dem Wert -1 in der Spalte PARENT_ID steht. Geben Sie als dritten Parameter die ID der Root an. Da diese mit Wert -1 in die erste Zeile der Virtuellen Tabelle #TREE gespeichert wurde, geben Sie hier den Wert -1 an. |
| 13. | Mit Hilfe von Parameter 4 und 5 kann die Methode ermitteln, welche Einträge zu welcher Obergruppe gehören. Geben Sie als vierten Parameter den Namen der Spalte an, in der die Datensatz-IDs gespeichert sind. Geben Sie dazu das Datenfeld "ID" an. Geben Sie als fünften Parameter den Namen der Spalte an, in der die IDs der Obergruppe (Parent-IDs) gespeichert sind. Geben Sie dazu das Datenfeld "PARENT_ID" an. |
| 14. | Mit Hilfe von Parameter 6 und 7 werden die Tree-Einträge (Tree-Nodes) erzeugt. Geben Sie als sechsten Parameter den Namen der Spalte an, in der die Tree-Einträge gespeichert sind. Geben Sie dazu das Datenfeld "TREENODE" an. Geben Sie als siebten Parameter den Namen der Spalte an, in der die Datensatz-IDs der Tree-Einträge gespeichert sind. Geben Sie dazu das Datenfeld "ID" an und klicken Sie abschließend auf OK. |
|