Wichtig
#21471
Überschreiben von Attributen schlägt manchmal fehl
Problem
Das Überschreiben von Attributen schlägt manchmal fehl. Ursache ist anscheinend, dass das Modell in einer unerwarteten Reihenfolge zusammengebaut wird. Insbesondere werden einer Ableitung ihre Attribute hinzugefügt, obwohl die Oberklasse ihre Attribute noch nicht hat. Da bei einem Override das überschriebene Attribut aber benötigt wird, da dessen Konfiguration übernommen wird, schlägt das fehl.
Migration
Überschreibungen von Rückwärtsreferenzen sollten das Kind backwards explizit in ihrer Konfiguration angeben, um direkt festzustellen um welche Art Überschreibung es sich handelt, ohne, im schlimmsten Fall, die ganze Typhierarchie nach einer gleichnamigen Referenz zu durchsuchen um die Art der Referenz zu bestimmen.
Die Konfiguration für die Referenz tl.doc:Page#parent, die eine Überschreibung einer Rückwärtsreferenz ist, sieht bspw. wie folgt aus:
<reference name="parent" kind="backwards" override="true" type="Page" />
Ex. bereits Überschreibungen von Rückwärtsreferenzen, dann sind sie zurzeit "falsch" (als Vorwärtsreferenz) in der Datenbank abgelegt. Für die Korrektur kann man sich an den Dateien
- Ticket_21471_Adjust_model_overrides.migration.xml
- Ticket_21471_Adjust_model_overrides.model.transform.xslt
, die das für die Überschreibung tl.doc:Page#parent der Rückwärtsreferenz tl.element:StructuredElement#parent machen, orientieren.
Umsetzung
Die Modellerstellung aus einer entsprechenden Konfiguration geschieht in den folgenden Phasen:
- START: Die Einrichtungsphase. In dieser Phase werden Module und leere Typ-Instanzen erstellt. Diese Erstellungen können unabhängig voneinander erfolgen.
- CREATE_TYPE_HIERARCHY: Erstellung der Typenhierarchie. Für jeden Typ wird seine Verallgemeinerung gesetzt.
- CREATE_PARTS: Erstellung von Typteilen. Die Vererbungshierarchie muss bekannt sein, um die Aktionen zur Erzeugung der Typteile zu sortieren. Diese Sortierung ist notwendig, weil eine Überschreibung eines tl:TLTypePart nur erstellt werden kann, wenn der zugrunde liegende Typteil bereits existiert.
- CREATE_ASSOCIATION_END: Assoziationsenden müssen erstellt werden, bevor Referenzen erstellt werden, denn diese verwenden Assoziationsenden.
- CREATE_REFERENCE: Erstellung von Referenzen.
- CREATE_REFERENCE_OVERRIDE: Erstellung von Referenzüberschreibungen. Alle Referenzüberschreibungen müssen erstellt werden, bevor Rückreferenzen erstellt werden, da es Rückwärtsreferenzen auf überschriebene Referenzen sein können.
- CREATE_BACK_REFERENCE: Erstellung von Rückwärtsreferenzen.
- CREATE_BACK_REFERENCE_OVERRIDE: Alle Referenzüberschreibungen müssen erstellt werden, bevor Rückverweise erstellt werden, da es möglicherweise Rückverweise auf überschriebene Referenzen gibt.
- REORDER_PROPERTIES: Festlegung der endgültigen Ordnung.
- CREATE_ROLE: Rollenerstellung.
- CREATE_SINGLETON: Modul-Singletons erstellen.
Dadurch wird sichergestellt, dass die Überschreibungen erst erstellt werden, wenn der Obertyp das zu überschreibende Attribut bereits erstellt hat.
Test
Kein Test.