TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_7.7.0
  4. #27604

7.7.0
TopLogic Release

2023-11-21

Enhancement

Major
#17126
"Next / Previous" buttons in dialogs for row objects of tables
#25835
Formulareditor: Option zum Weglassen von Labels
#26429
Alternative representation for embedded objects in the form
#27271
Commands on objects embedded in the form
#27477
Transient objects / setting and display forms
#27589
TL-Script Console
#27602
Admin view for log entries
#27606
OpenAPI: Request-Body with Content-Type multipart/form-data and application/x-www-form-urlencoded
#27607
TLScript: PDF generation
Detail
#26669
Kafka Producer and Consumer should check if a topic exists before trying to use it
#27219
Layout Editor: Form with Fixed Form Template
#27527
Allow to disable SafeHTML
#27584
TL-Script: Internationalization for Structured Texts
#27604
Tree-Grid: Dynamischen Typ in Kommando "Neue Zeile"
#27608
TLScript: Base64-Encode/Decode
#27632
Git: Consistent line breaks
#27637
Tooltips for enum values
#27639
Layout-Editor: Lock-Strategie bei Formularen konfigurieren
#27651
TL-Script API: Self-Parameter entfernen

Bugfix

Detail
#27301
Eine Formulargruppe in einem Dialog wird nie mit mehr als 2 Spalten angezeigt
#27469
In the filter sidebar of tables, the relational operator cannot be changed.
#27496
TL-Sync: Exceptions on send or receive should always return attribute name and value
#27542
Auswahl-Filter reagieren nicht auf Klick auf das Label
#27577
Import of an exported model type not always possible
#27580
Environment variables are not displayed for non-administrators
#27585
GUI inspector on table cells uses wrong column
#27592
Unexpected value for unset tl.model.i18n:I18NHtml attributes.
#27599
Instance editor: display error when editing compositions
#27610
Export model as PDF" command does not export tables with
#27617
Scroll position in Tree-Grid after action "expand all" is undefined
#27620
Theme Editor: Override abstract variable returns abstract variable
#27642
I18NStructuredText field does not evaluate mandatory
#27643
TLScript: Unexpected result of the Contains check for sets of numbers
#27646
Display of values of the type "internationalized character string" incorrect
#27647
Tooltips for burger menus hide the icons
#27648
TL script functions for external APIs do not take the parameter type into account
Enhancement

Detail

#27604

Tree-Grid: Dynamischen Typ in Kommando "Neue Zeile"

Code migrationTreeGrid

Hintergrund

Definiert man im Modell eine Baumstruktur, können unter bestimmten Knoten (Typen) jeweils bestimmte Unterknoten (Typen) angelegt werden. Beispiel: Unter dem Root Element nur Projekte, unter Projekten nur Teilprojekte und unter Teilprojekten nur Arbeitspakete.

Wenn man das Strukturmodell als Ableitung der Basisklasse "Structured Element Container" aufbaut und dann in der Baumdarstellung den "Dialog zur Objektanlage" nutzt, gibt es mit der Option "passende Strukturknoten" einen Automatismus, der die jeweils zum selektierten Element passenden Kind-Typen für die Objektanlage anbietet. Alternativ kann man über die Annotation "dynamische Typoptionen" die passenden Kind-Typen für das selektierte Element via Expression ausrechnen.

Problem

Wird die Baumstruktur als Tree-Grid dargestellt, gibt es alternativ zum "Dialog zur Objektanlage" die Funktion "Neue Zeile". Hier gibt es weder die Möglichkeit den Anlagetyp dynamisch zu berechnen, noch automatisch als "passende Strukturknoten" zu ermitteln. Es muss immer ein konkreter Anlagetyp angegeben werden. Wird ein Abstrakter Typ angegeben, werden dem Anwender alle konkreten Subtypen zur Auswahl angeboten. Modellregeln, die definieren, welche Kind-Typen unter welchem Strukturknoten angelegt werden dürfen, können so nicht berücksichtigt werden.

Damit ist die Funktion "neue Zeile" in einer Tree-Grid zur Pflege von Strukturen in vielen Fällen unbrauchbar.

Workaround

Man kann mehrere Kommandos "Neue Zeile" zur expliziten Anlage spezifischer Kind-Typen definieren und diese Kommandos dann über deren Ausführbarkeitsregel in Abhängigkeit vom selektierten Element einblenden / ausblenden bzw. aktivieren / deaktivieren. Beispielsweise wären "Neues Projekt" und "Neues Teilprojekt" dann separate Buttons von denen der erste nur aktiv ist, wenn der Root-Knoten selektiert wird und der zweite nur aktiv wäre, wenn ein Projekt-Knoten gewählt wird.

Umsetzung

Das Kommando "Neue Zeile" wird Table- und Tree-Grids jetzt bei der Erstellung der Sicht hinzugefügt. Dazu wurde es in die entsprechenden .template.xml Dateien eingetragen.

Code Migration

  1. Die in-app konfigurierten Layouts in der Datenbank werden automatisch beim Applikationsstart migriert.
  1. Layout XMLs im Workspace können über folgenden Aufruf migriert werden (im Verzeichnis des jeweiligen Applikationsmoduls):
mvn exec:java@migrate-ticket -Dtl.migrationClass=com.top_logic.model.search.migrate.ticket27604.UpgradeGridCreateHandlerByExpression27604
  1. Nur für Legacy-Konfigurationen des tl:GridCreateHandlerByExpression in der Anwendungskonfiguration:
    • Wert des Attributes createType notieren und das Attribut löschen.
    • Dafür Folgendes XML Tag einfügen:

{{{#!xml <type-options class="com.top_logic.element.layout.create.ConstantCreateTypeOptions"

include-subtypes="true"
type="HIER CREATE_TYPE EINFÜGEN"

/> }}}

  • Prüfen, ob include-subtypes dem gewünschten Verhalten entspricht.
Anzeige des Type Choosers

Die Optionen typeChooser des tl:AbstractGridCreateHandler und include-subtypes von tl:ConstantCreateTypeOptions muss in den Layout Dateien überprüft werden. Das alte Verhalten ist nicht mehr möglich und musste daher geändert werden:

Bisher wurde der Wert von typeChooser ignoriert, wenn "der Typ" abstrakt war. In dem Fall wurde immer die Type Chooser angezeigt. Nur wenn "der Typ" konkrete Typen war, wurde diese Option beachtet.

Es gibt aber nicht mehr "den Typ". Bisher war das der Obertyp, dessen Subtypen ausgerechnet und angeboten wurden. Jetzt ist der Algorithmus zur Berechnung der angebotenen Typen abstrakt. Es gibt daher nicht mehr in allen Fällen "den Typen" aus dem sich der Rest berechnet. Das ist jetzt in tl:CreateTypeOptions gekapselt. Daher macht die alte Bedeutung der Option keinen Sinn mehr.

Die neue Bedeutung ist: Wenn mehrere mögliche Typen ausgerechnet werden, aber es einen default Typ gibt, soll der Nutzer dann einen der anderen Typen auswählen können? Ist die Option false, wird in dem Fall immer der Default Typ genommen, ohne dass der Nutzer das ändern kann. Das entspricht ungefähr dem alten Verhalten, dass der Nutzer den konkreten Obertypen nehmen muss, auch wenn es Subtypen gibt.

Die Verwendungen der Optionen typeChooser und include-subtypes müssen also zusammen daraufhin überprüft werden, ob ihre Sicht sich wie gewünscht verhält.

Test

  • Eine neue Tree-Grid In-App konfigurieren.
    • Der Knopf "Neue Zeile" muss direkt Teil der neuen Sicht sein und funktionieren.
  • Eine flache Grid In-App konfigurieren. (Also nicht-Tree-Grid)
    • Dito.
  • Get Started
  • Github
  • Discord
  • Das Unternehmen hinter TopLogic
  • Softwareentwicklung heute
  • Kontakt

© Copyright – Business Operation Systems GmbH

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