enhancement
major
minor
defect
critical
major
minor
minor
#30134
Ebene anzeigen: „ <composition-table> “ ignoriert die Sichtbarkeit (dynamic-visibility, hidden, read-only) seines zusammengesetzten Attributs.
Gefunden am 03.11.2026 in E-Home (haumacher/ehome #73) in Bezug auf tl-layout-view 8.0.0-alpha12.
Problem
Ein <field attribute="x"/> einer React-View-Layer-Komponente <form> richtet sich nach der Sichtbarkeit seines Attributs (AttributeFieldControl): Es ist ausgeblendet, wenn ein <dynamic-visibility> den Wert „hidden“ zurückgibt, und schreibgeschützt, wenn es den Wert „read-only“ zurückgibt. Ein <composition-table attribute="parts"/> im selben Formular verhält sich anders: CompositionTableElement#createControl erstellt das RowSetTableControl, ohne die Sichtbarkeitsanmerkungen des Attributs zu berücksichtigen, sodass die Tabelle und ihre Schaltflächen „Hinzufügen“/„Löschen“ unabhängig von der Sichtbarkeit angezeigt werden und bearbeitbar sind.
Reproduktion
<reference name="parts" kind="composite" multiple="true" type="Part">
<annotations>
<dynamic-visibility>
<mode-selector class="com.top_logic.model.search.providers.ModeSelectorByExpression"
function="obj -> editMode -> if($obj.get(`m:Owner#manual`), null, 'hidden')"/>
</dynamic-visibility>
</annotations>
</reference>
Ein Formular über einen Eigentümer mit <field attribute="manual"/>, einem Feld eines anderen Attributs mit derselben Annotation und <composition-table attribute="parts"/>. Ist „manual“ auf „false“ gesetzt, wird das andere Feld ausgeblendet, die Tabelle wird angezeigt; im Bearbeitungsmodus erstellt „Hinzufügen“ Teile.
Auch ein statisches <visibility value="hidden"/> oder „read-only“ für das zusammengesetzte Attribut wird nicht berücksichtigt (wird nicht separat geprüft, der Code enthält überhaupt keinen Sichtbarkeitspfad).
Erwartet
Die Zusammensetzungstabelle folgt dem Modus ihres Attributs wie ein Feld: „hidden“ (mit ihrem Titel) bei „hidden“, „view only“ (kein „Hinzufügen“, kein „Löschen“, schreibgeschützte Zellen) bei „read-only“, neu ausgewertet, wenn sich die Attribute ändern, die der Modus-Selektor ausliest.
Workaround in E-Home
Die Tabelle der Archive der Historie eines Datenpunkts (ehome.logical:GroupAddress#historyArchives) bleibt für eine abgeleitete Historie sichtbar; eine Einschränkung (runtimeArchiveProblem) lehnt ein dort eingegebenes Archiv ab („Archive werden nur von einem manuell festgelegten Verlauf verwendet“), und das Image ignoriert sie.
Lösung
Die Berechnung des Anzeigemodus eines Attributs im Formular (dynamische Sichtbarkeit über den ModeSelector mit Verfolgung seiner Abhängigkeiten, ansonsten die statische Sichtbarkeit bzw. die Sichtbarkeit beim Anlegen eines neuen Objekts, dazu die Zugriffsrechte: ohne Leserecht verborgen, ohne Schreibrecht nur lesbar) ist in „AttributeModeTracker“ zusammengefasst. Feld (AttributeFieldControl) und Kompositionstabelle (AbstractCompositionControl / RowSetTableControl über ein AttributeRowSetBinding) nutzen ihn gemeinsam und verhalten sich daher gleich:
- Statisch ausgeblendet, beim Anlegen ausgeblendet oder ohne Leserecht: Die Tabelle ist einschließlich Titel ausgeblendet und zeigt keine Zeilen an; es läuft keine Bearbeitungssitzung.
- Dynamischer Modus „hidden“: Die Tabelle ist einschließlich Titel ausgeblendet.
- read-only / disabled / ohne Schreibrecht: Die Tabelle zeigt ihre Zeilen während der Bearbeitung nur an (kein Hinzufügen, kein Löschen, nicht editierbare Zellen; ein Detaildialog öffnet seine Zeile nur zur Ansicht).
- Der Modus wird bei jedem Zustandswechsel des Formulars neu berechnet und während der Bearbeitung sofort, sobald sich ein Attribut ändert, das der ModeSelector ausliest.
Wechselt der Modus während der Bearbeitung, bleiben bereits vorgenommene Änderungen an den Zeilen erhalten und werden beim Speichern übernommen – wie der Wert eines ausgeblendeten Feldes.
Nebenbei behoben:
- Wechselt das Formular zu einem Objekt, dessen Typ das Attribut nicht besitzt (oder zu keinem Objekt), zeigte die Tabelle weiterhin die Zeilen des vorherigen Objekts an; sie zeigt nun keine Zeilen mehr an.
- Die Client-Komponente TLPanel (Rahmen der Kompositionstabelle) berücksichtigte den allgemeinen Status „hidden“ eines Steuerelements nicht; ein ausgeblendetes Panel blieb sichtbar. Es wird nun ausgeblendet und behält dabei seinen Inhalt bei.
In der React-Demo (tl-demo-react, Registerkarte „Auswahl + Formular“ bzw. Bearbeitungsdialog auf der Registerkarte „Tabelle“) blendet „Teile ausblenden“ die Teiletabelle aus, „Felder gesperrt“ macht sie schreibgeschützt.