TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_8.0.0-alpha7
  4. #29384

8.0.0-alpha7
TopLogic Release

2026-07-30

enhancement

critical
#29088
Model-based access rights
#29108
Lightweight UI definition layer (TL Views) based on React UI-Components
major
#28694
Beschreibung von Modellteilen als formatierter Text (Rich Text)
#28708
Standard-Selektion in (Baum-)Tabellen und Grids per TL-Script berechenbar machen
#29102
Add com.top_logic.layout.react module for React/SSE integration
#29221
Automatische Bestimmung möglicher Berechtigungskonfigurationen
#29349
XML-Parse-Funktionen für TL-Script über XMLImporter
#29374
TL-Script: gzip()
#29389
Code-Completion für Variablen ($) im TL-Script-Editor
#29396
Conversation display for TL Views: object-list element, file chips, card panels
#29399
Info-Service-Meldungen: unten statt oben anzeigen und beim Überfahren mit der Maus fixieren
#29400
Introduce a first-class application "operation mode" service (OperationMode enum + ApplicationModeService)
minor
#29085
Neu einloggen bei Session Timeout anstatt Redirect zur Login-Seite
#29089
TL-Script-Funktionen log() und info() um wählbaren Meldungs-Level (INFO, WARN, ERROR) erweitern
#29195
Probleme mit HTML-Attributen und TL-Script
#29306
TL Script: dateFormat() should accept an explicit timezone to format Calendar values losslessly
#29382
Expose a public classpath-driven Workspace.getAppPaths overload
#29385
App archetype should scaffold a standard git-ignored local-credentials overlay (tl_config) by default
#29392
Transaktionsabbruch bei Nicht-2xx Response
#29398
Login-Maske: Statt "Name" besser "Benutzername"

defect

major
#29383
Dead SOCKET_APPENDER (Chainsaw, localhost:4445) in default logging config can stall logging and abort operations under load
#29384
TL-Script resetSequence/generateSequenceId build a different sequence id than SequenceDefaultProvider (suffix/context order), so they cannot reset a provider-managed sequence with a dynamic context
#29394
Editable tables in the React UI: generalized row-set bindings for tabular editing in forms
#29410
Attribut filename der Structured-Text-Bildablage case-sensitive (binär) speichern
#29419
Understandable save failures and form validation feedback in the React view layer
minor
#28816
Referenzwertige Attribute erzeugen Fehler nur bei SingleSelection
#29359
Unsinniger Tooltip bei einigen Hauptreitern
#29360
Sporadische Fehlermeldung im Log: "mainLayout" ist null.
#29361
Invalide Datenbankdefinition für Tag
#29363
Fehlende Validierung von Dialogen bei GOTOs zu Dialogen von unsichtbaren Parents
#29380
Kontextabhängige Auto-Nummerierung schlägt fehl, wenn Kontext und nummeriertes Objekt in einer Transaktion erzeugt werden
#29381
Doppelklick in Grafikkomponente funktioniert nicht zuverlässig
#29390
Teilbaum-Auswahl endet zu früh, wenn die unterste Ebene vom Ebenen-Filter nicht mitgezählt wird
#29393
URL-Routing der React-View-Schicht defekt: ForwardingReactContext delegiert getRouteManager() nicht
#29401
Bilder in einem Bild-Drop-Feld können nicht über das Browser-Kontextmenü kopiert/gespeichert werden
#29402
Baum-Selektion geht bei Aktualisierung der Ansicht (invalidate) verloren
#29412
Flaky TestDynamicComponentService.testIncrementalUpdates: asserts on asynchronous WatchService event after a fixed 10ms sleep
#29416
Anzeige des Änderungslogs schlägt fehl, wenn parallel Änderungen committet werden
#29420
FlowDiagram: Fehlerfall im row-wise Sub-Grid: subGridCols=2 und subGridStartCol=1
#29426
FlowDiagram: Text in PDF-eingebettetem Diagramm ist nicht selektierbar

task

major
#29407
Security-Scan: npm-Abhängigkeiten der React-Module aktualisieren
#29408
Security-Scan: httpcore5 anheben; pdfbox-/azure-Findings bewerten
minor
#29415
Slim down the repository CLAUDE.md and consolidate developer guidance into skills and FAQ articles
defect

major

#29384

TL-Script resetSequence/generateSequenceId build a different sequence id than SequenceDefaultProvider (suffix/context order), so they cannot reset a provider-managed sequence with a dynamic context

Migration

The TL-Script functions resetSequence and generateSequenceId and the model default provider SequenceDefaultProvider compose the physical sequence identifier (the name passed to RowLevelLockingSequenceManager) in a different order when a context is involved. As a result, resetSequence/`generateSequenceId` address a different DB sequence row than the auto-numbering managed by SequenceDefaultProvider whenever the provider uses a DynamicSequenceName (e.g. ContextAwareSequenceName).

Divergent identifier construction

com.top_logic.model.search.expr.config.operations.string.ResetSequence#eval (module tl-model-search):

StringBuilder b = new StringBuilder(sequenceId);
if (contextArg != null) SequenceIdGenerator.addNames(b, contextArg);
b.append(SEQUENCE_SUFFIX);                       // "_SequenceId"
// => <base> <context> _SequenceId

GenerateSequenceId#eval (same module) uses the identical order (context, then suffix).

com.top_logic.element.structured.util.SequenceDefaultProvider#createDefault (module tl-element):

StringBuilder b = new StringBuilder(_sequenceName).append(SequenceIdGenerator.SEQUENCE_SUFFIX);
if (dynamicSequenceName != null) {
    Object contextName = dynamicSequenceName.getSequenceName(context);
    SequenceIdGenerator.addNames(b, contextName);
}
// => <base> _SequenceId <context>

SequenceIdGenerator.addNames appends a separator plus TLObject.tId().asString() (or the MetaLabelProvider label) for the context, i.e. a non-empty token. So for a non-null context the two constructions yield different strings:

  • provider: <base>_SequenceId<sep><ctxId>
  • functions: <base><sep><ctxId>_SequenceId

They only coincide when there is no context (no DynamicSequenceName, or the dynamic name resolves to null).

Note also that ResetSequence and GenerateSequenceId each declare their own SEQUENCE_SUFFIX = "_SequenceId" constant instead of referencing SequenceIdGenerator.SEQUENCE_SUFFIX.

Impact

There is no way from TL-Script to reset (or continue) a SequenceDefaultProvider sequence that uses a dynamic context, because the functions always append _SequenceId last and cannot reproduce the provider's ...suffix...context layout. A resetSequence(base, context, value) call against such a provider sequence silently resets an unrelated, unused row and leaves the real counter untouched.

Concrete case: a per-object number attribute configured with

<provider class="...SequenceDefaultProvider" sequence-name="X">
    <dynamic-sequence-name class="...ContextAwareSequenceName"/>
</provider>

cannot be re-seeded via resetSequence("X", $context, n) after a bulk import that assigns explicit numbers, so subsequently created objects restart at 1 and collide with the imported numbers.

Backward-compatibility constraint for the fix

Simply reordering the functions to <base>_SequenceId<context> (to match the provider) is not backward compatible: existing generateSequenceId/`resetSequence` callers that pass a context already have persisted rows named <base><context>_SequenceId. After such a change the functions would look up <base>_SequenceId<context>, find no row, and restart the counter at 1 (duplicate ids). A straightforward alignment therefore requires a data migration renaming the existing sequence rows, or an opt-in mechanism (e.g. a new function/parameter that targets a provider-style sequence id) that leaves the current script-sequence naming untouched.

Migration

The physical sequence naming is unified to <base><context>_SequenceId (the technical suffix always comes last now), shared by SequenceDefaultProvider, SequenceIdGenerator/`NumberHandlerDefaultProvider` and the generateSequenceId/`resetSequence` TL-Script functions. All of them build the name through SequenceIdGenerator.sequenceName(base, context).

A data migration (Ticket_29384_unify_sequence_names, module tl-element) runs automatically on the first startup after the upgrade. It rewrites the existing object-annotated sequence rows (technical suffix _NumberHandler) in the Sequence table to the unified name, relocating the suffix behind the context (the fixed _NumberHandler token marks the base/context boundary, so the rewrite is unambiguous). On a name collision with a row that a script function already created, the higher counter value is kept, so no number is ever handed out twice. Sequences created by the script functions (suffix _SequenceId) are already in the target layout and are left unchanged.

No manual steps are required.

  • 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