be / be Portal Release Notes

be Portal Release Notes 11.0.0

Release Notes 11.0.0

Freigabedatum: 07.08.2026

ℹ️ Es sind alle Korrekturen inklusive der Vorgängerversionen enthalten.

Breaking Changes

Thema

Release Notes

Schlüssel

Workflow

Die klassische Camunda-Weboberfläche (Cockpit/Tasklist/Admin unter /workflow/app/…) entfällt ersatzlos. Die Workflow-Oberfläche ist nun unter /workflow/ erreichbar – bestehende Lesezeichen und verlinkte Adressen müssen angepasst werden.

BEP-#1102

Validierung

value in Script Nodes von Custom-Validierungen wurde entfernt (seit 10.2.0 als veraltet markiert). Alle Vorkommen müssen durch $.event.value ersetzt werden, sonst schlägt die Validierung fehl.

BEP-#837

Eingangsrechnungen

Die Eingangsrechnungs-Entitäten sind nicht mehr Teil des Portals, sondern werden vom Paket „Eingangsrechnungen" geliefert. Ohne die aktuellste Paketversion funktioniert der Eingangsrechnungs-Workflow nach dem Update nicht mehr.

BEP-#1148

Migrationsrelevante Änderungen

Thema

Release Notes

Schlüssel

Framework

Wird an einem bestehenden Feld einer verwalteten Tabelle (dbTable) nachträglich dbScale gesetzt, passt der automatische Schemaabgleich die Spalte auf den Produktivdaten an. Vorhandene Werte werden dabei auf die angegebenen Nachkommastellen gerundet; passen sie nicht in die Gesamtstellen, bricht die Anpassung ab. Bei neuen Feldern ist nichts zu beachten.

Workflow

Die Workflow-Engine wurde von Camunda 7 auf CIB Seven 2.1 (Open-Source-Fork) umgestellt. Das Schema-Upgrade der Engine-Datenbank sowie das neue Webclient-Secret werden bei beng update-complete

automatisch migriert; ein manueller Eingriff ist nicht erforderlich.

BEP-#1102

Workflow

Der separate be-workflow-Container entfällt: Der CIB-Seven-Webclient und die engine-rest-API werden jetzt direkt vom be_portal unter /workflow ausgeliefert. Bei beng update-complete werden der alte be-workflow-Stack, dessen ~/dowi_stacks/be-workflow-Ordner und das dontenwill/camunda-Image automatisch entfernt (idempotent). Das Camunda-DB-Schema, der Keycloak-Camunda-Client/-User und das Webclient-Secret bleiben unverändert; ein manueller Eingriff ist nicht erforderlich.

BEP-#1107

Organisatorische Hinweise

Thema

Release Notes

Schlüssel

Proxy

Bestehende Proxy-Backends (ohne NO_METADATA_BACKEND_REQUEST=true) funktionieren ohne Änderung weiter. Wer auf die neue YAML-basierte Metadaten-Definition umsteigen möchte, findet die nötigen Schritte im Eintrag unter „Neue Features".

BEP-#995

OData

Beim seitenweisen Blättern (Cursor-Paginierung) wird nun berücksichtigt, ob eine Sortierspalte Nullwerte enthalten kann. Für Spalten, die keine Nullwerte annehmen können, sollte in der Entitätsdefinition isNullable: false gesetzt werden – das vereinfacht die intern erzeugten Abfragen und verbessert die Performance beim Blättern. Primärschlüssel werden automatisch als nicht-nullable erkannt.

BEP-#1135

Notwendige technische Eingriffe

Thema

Release Notes

Schlüssel

Eingangsrechnungen

Nach dem Update muss die aktuellste Version des Pakets „Eingangsrechnungen" installiert werden, damit der Eingangsrechnungs-Workflow weiterhin funktioniert. Bitte vorher sicherstellen, dass keine Eingangsrechnungen mehr in Bearbeitung sind.

BEP-#1148

Neue Features

Thema

Release Notes

Schlüssel

Framework

Ein Button mit command:-Kurzform erbt nun neben dem label auch das icon vom referenzierten Command – inklusive dynamischer Icons ($script/$expr/$bind). Ein am Button explizit gesetztes icon wird nicht überschrieben.

BEP-#1136

OData

OData-Enum-Typen können direkt in der be_package.install eines Pakets definiert werden.

BEP-#550

Framework

quickLookupByField ist nun auch an Entity-Field-Level EntityLinks (gui.type: entityLink in *.entities.yaml) verfügbar. Erfahrene Anwender können Codes direkt in das Feld eingeben, ohne das Dropdown öffnen zu müssen.

BEP-#1047

Framework

Felder mit isNullable: false erzeugen automatisch einen impliziten required-Validator im Frontend. Explizit definierte required-Validatoren (z.B. mit eigener Fehlermeldung) haben weiterhin Vorrang.

BEP-#1042

Framework

Es gibt einen neuen Entitätstyp dbStatement. Dieser enthält ein SQL-Statement, das zur Laufzeit ausgeführt wird, ohne dass in der Datenbank eine View angelegt wird.

BEP-#986

Framework

Das page-Objekt stellt nun page.language, page.themeMode und page.themeStyle bereit. Die Sprache entspricht der aktuellen Host-Sprache; Theme-Werte werden bei Änderungen automatisch aktualisiert.

BEP-#1072

Framework

Der Package-Reload unterbricht den Betrieb nicht mehr: Neue Entities und Views werden im Hintergrund aufgebaut, während die bestehenden aktiv bleiben. Endbenutzer können während des Reloads weiterhin auf die Pages zugreifen.

BEP-#1057

Sicherheit

Das Portal erkennt Anfragen aus einem fremden Datenbestand (z.B. Spielsystem → Produktivportal) und weist sie ab. Dazu wird der vom be-Client übermittelte Datenbestandspfad (winbe_path) gegen den Datenbestand des Portals geprüft. Der winbe_path wird vom be-Client ab beas 9.0 übermittelt; erst ab dieser beas-Version ist der Pfad verpflichtend und die Abweisung fehlender Pfade aktiv.

BEP-#1089

Styling

Seiten können nun rahmenlos dargestellt werden: Der Standardabstand der Seite lässt sich über die style-Angabe (z.B. margin: 0) überschreiben, sodass der Inhalt die volle Fläche nutzt. Zusätzlich wird eine gesetzte height berücksichtigt.

BEP-#1059

Proxy

OData-Metadaten von Proxy-Backends können nun vollständig im Codeblock-Package (entities.yaml) definiert werden. Damit entfällt die $metadata-Anfrage des Portals an das Proxy-Backend zur Laufzeit.

Opt-in: Die neue Variante wird durch Setzen der Umgebungsvariable NO_METADATA_BACKEND_REQUEST=true am be-portal aktiviert. Bestehende Proxy-Konfigurationen ohne dieses Flag bleiben unverändert funktionsfähig — es besteht kein Handlungsbedarf.

Migration auf die neue Variante: In der entities.yaml des jeweiligen Packages werden Actions und Functions als operations pro Entity (bound) oder auf Package-Ebene (unbound) deklariert. Jede Operation erhält optional eine permissions-Liste mit den erlaubten Rollen. Ohne Angabe ist die Operation ausschließlich für <packageKey>.admin sichtbar.

Namespace-Hinweis: Mit NO_METADATA_BACKEND_REQUEST=true verwendet dontenwill-backend-core in den Proxy-Backends automatisch den Namespace OData.Beng. Das Portal reicht diesen Namespace unverändert durch — kein manueller Eingriff notwendig.

BEP-#995

Eingangsrechnungen

OCR-erfasste und elektronische Eingangsrechnungen werden über eine gemeinsame Prüfungsseite bearbeitet; OCR-Rechnungen sind dadurch automatisch verbuchbar (inkl. Bestellzuordnung, Positionsbearbeitung und Steueraufschlüsselung).

BEP-#1148

Framework

Der entityContainer unterstützt jetzt auch den editMode: implicit der gebundenen Entität.

BEP-#1124

Framework

Dezimalfelder in verwalteten Tabellen (dbTable) können nun mit Nachkommastellen angelegt werden: dbLength bestimmt die Gesamtstellen, das neue dbScale die Nachkommastellen. Ohne dbScale bleibt das Verhalten unverändert.

Custom Control

Custom Controls können mit authenticatedApi: true in der .customControls.yml eine automatisch generierte request.js-API-Bridge nutzen, um authentifizierte HTTP- und OData-Anfragen an be-portal-api zu senden. Das JWT des eingeloggten Benutzers wird dabei automatisch mitgeschickt – ohne eigene Token-Verwaltung im iFrame. Der OData-Query-Builder unterstützt zusätzlich .orderby() und .count().

BEP-#1060

PZE

Abwesenheitsanträge unterstützen nun halbe Urlaubstage. Bei einem Antrag für einen einzelnen Tag kann der Mitarbeitende angeben, dass es sich um einen halben Tag handelt (0,5 Tage). Das Feature wird über das System-Setting pze.half-day-available aktiviert.

BEP-#783

Workflow

Das Fälligkeitsdatum einer Aufgabe wird nun in der Aufgabenliste angezeigt (sofern gesetzt). Über das neue Filterfeld „Fällig bis" lässt sich die Liste auf Aufgaben einschränken, deren Fälligkeitsdatum am oder vor dem gewählten Tag liegt (Aufgaben ohne Fälligkeitsdatum werden dabei ausgeblendet); zusätzlich steht „Fälligkeitsdatum" als neue Sortieroption zur Verfügung. Der Filter ist mit den bestehenden Filtern (Bearbeiter, Aufgabenart) kombinierbar.

BEP-#1014

Fehlerbehebungen

Thema

Release Notes

Schlüssel

OData

Abfragen auf be-Tabellen, die eine Artikelnummer lesen, schlugen mit HTTP 400 und der Meldung „The value '…' is not valid for property 'artnr'" fehl, sobald eine Artikelnummer länger als 20 Zeichen war. Die OData-Metadaten meldeten für Artikelnummern-Felder pauschal eine Maximallänge von 20 Zeichen, unabhängig von der im be eingestellten Artikelnummern-Länge. Artikelnummern-Felder werden jetzt mit der tatsächlich im be konfigurierten Länge veröffentlicht.

BEP-0

beng-cli

Beim Update werden fehlende optionale Stacks (z.B. MQTT) nun mit einer Warnmeldung übersprungen. Zuvor brach beng update-complete beim Starten der Services ab, wenn ein Stack auf dem System nicht installiert war. *¹

BEP-#1087

beng-cli

beng update-complete konnte mit insufficient permission for adding an object to repository database .git/objects abbrechen, wenn git-Operationen auf dem dowi_stacks-Repo zuvor als root gelaufen waren und dabei falsche Dateiberechtigungen hinterlassen hatten. git-Operationen laufen nun immer als der ursprüngliche Benutzer, und eine bereits fehlerhaft gewordene .git-Berechtigung wird automatisch korrigiert.

BEP-#1219

beng-cli

beng self-update schlug fehl mit „invalid cross-device link", wenn /tmp auf einem tmpfs-Dateisystem liegt. Die alte Binary wird jetzt als /usr/bin/.beng_old gespeichert – garantiert auf demselben Dateisystem.

BEP-#334

Framework

Eingabefeld in $.confirm.prompt behält nicht mehr den Wert aus vorherigen Aufrufen.

BEP-#1013

Framework

Datumsfelder: Tastatureingaben können das Jahrhundert nicht mehr versehentlich verändern. Die eingegebenen Jahresziffern werden auf das Jahrhundert des vorherigen Werts normiert; ein Jahrhundertwechsel ist weiterhin über den Kalender-Picker möglich.

BEP-#1029

Framework

Toggle-Felder (Schalter) in Formularen lassen sich nun per Tastatur (Leertaste) umschalten. Zuvor war ein Mausklick erforderlich.

BEP-#1044

Framework

typeDetails aus der Entity-Felddefinition werden im automatisch generierten entityContainer-Layout korrekt an das Eingabefeld weitergegeben.

BEP-#1040

Framework

highlight mit dynamischen Properties (z. B. color.$expr) in der Entity-Felddefinition (gui.highlight) wird im entityContainer-Layout nicht mehr mit einem Deserialisierungsfehler abgebrochen, sondern korrekt an das Eingabefeld weitergegeben.

BEP-#1137

Framework

Fehler beim Laden von Codeblock-Paketen (gemischte Include-Typen, ungültige Include-Datei) werden nun in der Paketübersicht (BEPO.packages) als Fehlerlog mit Verweis auf die betroffene Datei sichtbar; das Paket erscheint mit valid=false statt lautlos zu verschwinden. YAML-Include-Dateien mit unbekanntem Dateinamen erzeugen zusätzlich eine Warnung.

BEP-#1006

Framework

defaultValue von Entity-Feldern wird beim Anlegen eines neuen Datensatzes (Klick auf „Neu") sofort in der Oberfläche vorbelegt. Zuvor zeigten Felder mit defaultValue: true nach „Neu" fälschlicherweise false, bis der Datensatz gespeichert wurde.

BEP-#1045

Framework

$.primaryKey() an einer entityInstance ohne gebundene PK-Variable liefert nach Zeilenauswahl in einem Grid wieder den korrekten Wert und wirft keinen Fehler mehr.

BEP-#1064

Framework

Nach erfolgreichem Löschen eines Datensatzes über eine linkedInstance ohne gebundene PK-Variable erscheint kein irreführender 404-Fehler-Toast mehr.

BEP-#1065

Framework

Fehlermeldung beim Seitenwechsel mit aktivem Tab-Container behoben.

BEP-#1069

Framework

Skript-basierte displayValue-Konfiguration in EntityLink-Feldern innerhalb von EntityContainern wird nun korrekt ausgewertet.

BEP-#1046

Datenreplikation

Vollreplikation von Tabellen mit großen Memo-/NMemo-Feldern (z. B. dab065) führte unter dem Produktions-RAM-Limit zu einem Absturz mit OutOfMemoryError und einer Container-Restart-Schleife. Große Memo-Felder werden jetzt längenbasiert erkannt und bei Bedarf stückweise gelesen, sodass der Speicherverbrauch unabhängig von der Feldgröße stabil bleibt.

BEP-#1082

Datenreplikation

Einzelne Binärdateien, die ADS mit Fehler 7107 nicht direkt ausliefern kann, werden wieder zuverlässig nach PostgreSQL repliziert. Der erfolgreiche Ausweich-Leseweg wird als Ereignis im Statuslog dokumentiert; es wird kein Fehlerbericht erzeugt.

BEP-#1218

Framework

Validierungsmarkierungen bei entityInstance werden erst beim Speicherversuch oder nach einer Eingabe angezeigt – nicht mehr sofort beim Anlegen eines neuen Datensatzes ($.new()). Nach dem Verwerfen ($.cancel()) werden alle Markierungen korrekt ausgeblendet.

BEP-#1043

Löschverfolgung

Löschvorgänge bei aktivierter Löschverfolgung waren sehr langsam und konnten bei Massenlöschungen zum Speicherüberlauf führen. Die benötigten Protokolltabellen werden nun vorausschauend angelegt, statt bei jedem gelöschten Datensatz erneut geprüft zu werden. Bestehende Installationen werden automatisch migriert.

BEP-#1054

Framework

Weitere Stabilisierung des Package-Reloads: Randfälle behoben, durch die während eines Reloads vereinzelt Anfragen fehlschlagen konnten. Views werden nur noch bei Bedarf neu erstellt; das Portal bleibt während des gesamten Reloads vollständig verfügbar.

BEP-#1066

Datenbank

Frisch aufgesetzte Instanzen brachen beim Start mit einem Datenbank-Migrationsfehler ab (z.B. relation "data.dms_storage" does not exist), weil Migrationen in falscher Reihenfolge ausgeführt wurden. Die Reihenfolge ist korrigiert; Neuinstallationen starten wieder fehlerfrei. Bestehende Installationen werden bei beng update-complete automatisch migriert – kein manueller Eingriff erforderlich.

BEP-#1118

OData

Beim seitenweisen Blättern (Cursor-Paginierung) fehlten Datensätze, wenn eine Sortierspalte leere Werte enthielt – betroffene Zeilen wurden übersprungen bzw. die letzte Seite abgeschnitten. Die Ergebnisse sind nun vollständig. Hinweise zur Optimierung stehen unter „Organisatorische Hinweise".

BEP-#1135

Framework

Die konfigurierte Breite des Dokument-Viewers auf Workflow-Seiten wird wieder bei der initialen Aufteilung berücksichtigt.

Workflow

Beim Öffnen der Kommentare einer Workflow-Aufgabe wird die Aufgabenliste nicht mehr unnötig neu geladen.

Framework

Zeilenhighlighting in Tabellen-Controls wird nach dem Verlassen des Editiermodus (auch ohne Änderung) wieder korrekt angezeigt.

BEP-#60

OData

Filter in Entity-Set-Variablen können nun auf Felder direkt verknüpfter Entitäten (Navigation Properties) zugreifen (z.B. $filter=storage/uuid eq '...').

BEP-#255

Proxy

OData-Filter mit Umlauten oder anderen Sonderzeichen (z.B. contains(tolower(name),'Müller')) schlugen bei Custom-Backends mit einem Verbindungsfehler fehl. Das Proxy leitet den Query-String nun unverändert weiter.

BEP-#1025

Framework

Unveränderte dbViews wurden beim Package-Reload immer neu erstellt, weil Views mit Großbuchstaben im Namen nicht wiedererkannt wurden. Sie werden nun korrekt erkannt und übersprungen – der Package-Reload ist bei vielen Views spürbar schneller.

BEP-#1191

PZE

Die Abwesenheitsart „Unbezahlte Freistellung" wird in der Abwesenheitsübersicht wieder angezeigt. Zuvor fehlte sie dort, obwohl sie in der Anwesenheitsübersicht korrekt erschien.

BEP-#1213

Sicherheit

Bei be-dbView-Entitäten (source: be) wurden Zeilen-Berechtigungen bisher nur beim Lesen ausgewertet: Anlegen war ungeschützt, Ändern und Löschen nur indirekt über die Sichtbarkeit abgesichert. Die hinterlegten Berechtigungsregeln greifen nun auch beim Schreiben.

BEP-#1186

Framework

Fehlende Datumsdeserialisierung für Entity Sets behoben. *²

Technische Änderungen

Thema

Release Notes

Schlüssel

Framework

Feld-Spezifikationen (specification in *.entities.yaml) verhalten sich präziser: Sie überschreiben dbType und dbLength nur noch, wenn sie einen verwertbaren Wert liefern. Ein im Paket ausdrücklich deklarierter dbType bleibt erhalten, dbType und dbLength dürfen deshalb nun zusammen mit specification angegeben werden und dienen als Rückfallwerte. Eine nicht auflösbare Spezifikation erzeugt eine Warnung in der Paketübersicht statt stillschweigend ignoriert zu werden; Schlüssel müssen die Form <PACKAGE_KEY>.<Name> haben, z.B. BE.article-no.

BEP-0

Framework

Die Feldlängen aus den be-Grundeinstellungen (dabpar) werden bei jedem Paket-Reload neu eingelesen statt nur beim Start des be-portals. Eine im be geänderte Artikelnummern-Länge wirkt dadurch ohne Neustart. Schlägt das Einlesen fehl, bricht der Reload mit einer Fehlermeldung ab – das be-portal startet aber weiterhin.

BEP-0

Datenreplikation

Der HashCheck liest Memo-Felder jetzt als Text statt im nativen Memo-Format, und die Blockgröße richtet sich nach dem konfigurierten Wert „Datensätze pro Leseblock" der jeweiligen Tabelle. Beide Maßnahmen beschleunigen den HashCheck bei Tabellen mit Memo-Feldern und großen Datenbeständen erheblich.

BEP-#844

Datenreplikation

Die Datenreplikation überträgt Tabellen mit umfangreichen Textfeldern (Memo-Feldern) jetzt automatisch schneller und mit geringerem Speicherbedarf, ganz ohne zusätzliche Einrichtung. Bei Bedarf kann ein Administrator diese Beschleunigung wieder deaktivieren.

BEP-#1126


Alle Issues und Pull Requests können im GitHub Repository eingesehen werden.

¹ Diese Änderung wurde bereits in Version 10.4.1 veröffentlicht und ist hier zur Vollständigkeit erneut aufgeführt.

² Diese Änderung wurde bereits in Version 10.4.2 veröffentlicht und ist hier zur Vollständigkeit erneut aufgeführt.