TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_7.3.0_02
  4. #26040

7.3.0_02
TopLogic Release

2021-06-22

Verbesserung

Detail
#25937
Logback in TL-Studio mit aufnehmen

Fehlerbehebung

Wichtig
#25998
TL-Script Kontexthilfe kaputt
Detail
#25999
Verschwindende Toolbar im Kachel-Layout
#26007
Unnötiger Scrollbalken im HTMLTree
#26019
Buttons in Filter-Dialogen verschwunden
#26039
Gridcomponent: Anzeige des Kontextmenus für neues (transientes) Zeilenobjekt führt zu UnsupportedOperationException
#26040
Teilweise kein Label für benutzerdefinierten Modell-Typ
#26041
Im Kontext-Menü für eine neue Grid-Zeile wird das Kommando "Löschen" angeboten, Crash bei Auswahl
#26042
Kalender-Control in Filterdialogen geht nicht im Modern-Theme
Fehlerbehebung

Detail

#26040

Teilweise kein Label für benutzerdefinierten Modell-Typ

InAppDevelopmentLabelProvider

Legt man einen neuen Typ A` ohne Obertyp an, gibt ihm ein Attribut `name, so werden Instanzen dieses Typs an manchen Stellen über den Wert in ihrem Namensattribut dargestellt (z.B. in Referenzen, die auf den Typ A` zeigen). An anderen Stellen erhält man die Anzeige `AttributedWrapper(type:my.app:A, id: GenericObject:3848, name: A3), z.B. im Titel des Kontext-Menüs für ein Objekt vom Typ A und in Tooltips.

  • Faszinierenderweise scheint das Problem nach einem Neustart der Anwendung zu verschwinden.
  • Das Problem scheint auch nicht immer aufzutreten.

Analyse

Wenn das Problem auftritt, dann sind für den neu angelegten Typ inkonsistente ResourceProvider und LabelProvider registriert. Die Referenzanzeige verwendet den tl:ResourceProvider, die Titel-Anzeige im Kontext-Menü und die Namens-Anzeige im Tooltip verwendet hingegen den LabelProvider.

Das Problem tritt folgendermaßen auf: Nach dem Neustart der Anwendung sind die Caches des LabelProviderService insoweit leer, dass nur die direkt konfigurierten Abbildungen Typ->LabelProvider eingetragen sind. Damit das Problem auftritt, muss das erste Fachobjekt, für das ein Label angefragt wird, ein Neu-Object einer Grid sein.

Ein Grid-New-Object wird betrachtet wie ein (transientes) Fachobjekt, das aber sehr wohl einen Modell-Typ hat (den Typ, der gerade instanziiert wird). In diesem Fall ist der Typ des Grid-New-Objects der gerade neu angelegte Modelltyp 'A' (siehe Testfallbeschreibung). Für diesen Modell-Typ ist kein konfigurierter Label-Provider hinterlegt. Daher fällt die Suche nach einem Label-Provider auf die Java-Klassenhierarchie zurück. Aber auch dort wird kein Label-Provider gefunden, da nur für com.top_logic.knowledge.wrap.AbstractWrapper ein Label-Provider hinterleget ist, das Grid-New-Object aber nicht von AbtractWrapper ableitet. Daher wird der DefaultLabelProvider gefunden und anschließend im Cache für den neu angelegeten Modelltyp registriert. Wenn danach ein echtes Objekt vom Typ A` gerendert werden soll, wird im Cache der `DefaultLabelProvider gefunden. Wenn zuerst ein LabelProvider für ein echtes A`-Objekt angefragt worden wäre, dann wäre über die Java-Klassenhierarchie der für `AbstractWrapper registrierte LabelProvider "com.top_logic.knowledge.gui.WrapperResourceProvider" gefunden worden.

Test

Achtung: Das Problem tritt nur auf, wenn man sich exakt an die Reihenfolge hält:

  • Neu App anlegen.
  • Neuen Typ A definieren.
  • Dem Typ ein Namens-Attribut name geben.
  • In die Instanzen-Sicht für A wechseln.
  • Neue Zeile in der Grid anlegen, nicht speichern oder übernehmen.
  • Kontext-Menü für die neue Zeile anzeigen.
  • Werte füllen und speichern.
  • Demo Typ eine Referenz auf sich selbst geben.
  • Zwei Instanzen a1 und a2 von A anlegen.
  • a1 auf a2 verweisen lassen.
  • Tooltip des Referenzwertes anzeigen lassen.
  • Get Started
  • Github
  • Discord
  • Das Unternehmen hinter TopLogic
  • Softwareentwicklung heute
  • Kontakt

© Copyright – Business Operation Systems GmbH

  • top-logic.com
  • Nutzungsbedingungen
  • Impressum
  • Rechtlicher Hinweis
  • Datenschutz
  • EN
  • Login