Top-Thema
#26850
Enums eines Moduls verschwinden beim Anlegen und Löschen von Enums in diesem Modul
Das Problem ist unabhängig davon, ob in der tabellarischen Sicht oder im Diagramm editiert wird.
Ursache
Wird die Datenbank der Anwendung gelöscht und anschließend neugestartet, dann wird im tl:ModelService nur das tl:TLModel angelegt und in der Datenbank gespeichert. Das Laden und Cachen von Teilen des Modells wie bspw. Klassen, Aufzählungen und Assoziationen findet dann nicht durch den Start des tl:ModelService direkt statt.
Loggt sich der Nutzer bspw. in eine Demo-Anwendung ein, dann wird u. a. der tl:TableConfigurationProvider für die tl:DemoStructuredEditComponent erstellt. Dazu sucht er im aktuellen tl:TLModel in allen Modulen und Singletons nach dem Typ me:DemoTypes.All, weil der in dieser Tabelle angezeigt wird. Das Singleton SecurityRoot des Moduls SecurityStructure ist ein tl:StructureElement. In dem tl:StructureElement SecurityRoot wird, falls der gesuchte Typ noch nicht gefunden wurde, dann nach dem Typ me:DemoTypes.All gesucht.
Dazu werden erst die entsprechenden (lokalen) Klassen, Aufzählungen, etc. bestimmt. Die Aufzählungen werden bspw. mit Hilfe eines tl:AssociationCache berechnet. Da noch keiner zu diesem Zeitpunkt existiert wird mit Hilfe einer tl:IndexedLinkQuery nach passenden Aufzählungen gesucht um einen neuen Cache anzulegen und zu befüllen. Die tl:IndexedLinkQuery selbst erhält seine Query aus einem QueryCache in der tl:KnowledgeBase. Der enthält unter der Annahme, dass zu diesem Zeitpunkt noch keine Aufzählungen im Modell aufgelöst wurden, keine Query für "enumerations". Dadurch wird eine neue Query erstellt. Für den "Zieltyp" tl:StructureElement können jedoch nie (lokale) Aufzählungen existieren. Man erhält eine tl:EmptyCompiledQuery. Die neue Query wird anschließend in dem KnowledgeBase-QueryCache gespeichert. Das ist schlecht.
Erstellt der Nutzer in der Anwendung neue Aufzählungen, dann werden sie zwar erfolgreich angelegt und persistiert, jedoch kann bspw. die GUI nicht geupdatet werden, da der Cache keine Aufzählungen aufgrund der tl:EmptyCompiledQuery finden kann. Für den Nutzer sieht es so aus, als existieren keine Aufzählungen, obwohl "nur" der AssociationCache fehlerhaft ist.
Wird die Anwendung neugestartet, werden beim Starten des tl:ModelService die restlichen Teile des Modells in den Cache geladen. Insbesondere wird eine neue Such-Query für den KB-QueryCache erstellt. Als "Zieltyp" wird tl:TLModule anstelle von StructureElement benutzt. Die konstruierte Query ist de facto die, die an dieser Stelle "immer" gewünscht ist um die passenden Aufzählungen in dem entsprechenden Modul zu finden.
Test
Datenbank löschen. Anwendung starten. Im Modell-Editor bspw. in DemoTypes eine Aufzählung hinzufügen. Die bereits vorhandenen und die neue Aufzählung sollten im Typenbaum unter dem Knoten DemoTypes dargestellt werden.