FlexRoads 2026 - DataFlex-Konferenz in Amsterdam

FlexRoads 2026, die EDUC hat einen neuen, modern klingenden Namen bekommen. Der Start der Konferenz, wie üblich mit den Trainings und Workshops in den zwei Tagen vor der eigentlichen Konferenz war toll. Wir haben uns für den ganztägigen TechStack-Preview-Workshop am ersten Tag entschieden. Keine Workshops am zweiten. Die Auswahl war zwar gut, aber entweder für uns zu wenig relevant, da wir die jeweilige Technologie im Moment nicht einsetzen (beispielsweise OAuth) oder bereits besucht hatten (Security).

Dieses Jahr gab es viel zu sehen, entsprechend lang ist der Beitrag geworden. Es geht um die austauschbaren Toolchains in DataFlex 27.0 (inklusive WASM im Browser) und um die wichtigsten Neuerungen der Konferenz: das neue JSON-Workspace-Format, den Reports-Server, den Package Manager, die KI-Hilfe, das Ende des globalen Filebuffers und meinen eigenen Vortrag zum KI-gestützten Testen von WebApps. Zum Abschluss ging es ans gemeinsame Kochen und auf die Grachten.

Eindrücke aus dem Workshop - DataFlex 27.0 / Toolchains

Eine der wesentlichsten Neuerungen für DataFlex 27.0 wird die Toolchain sein, welche neu ausgewechselt werden kann. In der Preview standen WASM, native und Windows zur Verfügung, wobei native natürlich auch unter Windows lief, jedoch primär in der Konsole.

WASM steht für WebAssembly, also eine Art Maschinensprache für das Web, welche es erlaubt C, C++ oder Rust und ähnliches im Browser auszuführen. Sehr eingeschränkt und vereinfacht (wegen Sicherheit und CPU-Kompatibilität), aber auch sehr performant.

Auf den ersten Blick fragt man sich nun vielleicht “Wieso würde ich sowas wollen?”, aber es liegt eigentlich auf der Hand: Man kann WebApps komplett im Browser laufen lassen, die Daten im Local Storage speichern und dann via einer API auf den Server übertragen. Das macht die WebApp extrem schnell und die Klicks reagieren beinahe ohne Verzögerung.

Ausserdem lassen sich so WebApps problemlos auf Android oder iOS ausführen. Bündelt man das nun in eine kleine App, welche einfach das index.html mit dem WebAssembly lädt, hat man eine lokale App, welche offline funktioniert und super schnell reagiert.

Auf meinen Kommentar, dass, wenn man DataFlex nun auch nach WebAssembly kompilieren kann, DataFlex nun auch auf der Blockchain läuft, erhielt ich von den DataFlex-Entwicklern natürlich nur ein Augenrollen. Aber Spass beiseite: Die wechselbaren Toolchains und der Paketmanager entkoppeln das Studio vom Compiler und der Plattform. Es erlaubt das nachträgliche Aktualisieren vom Compiler, den Libraries (auch Core-Libraries für WebUI, Windows, etc.) oder das Hinzufügen von neuen Plattformen, ohne dass das Studio und alles komplett aktualisiert und neu installiert werden muss. Für Nicht-DataFlex-Programmierer mag das seltsam klingen, da dies mehr oder weniger selbstverständlich ist, aber für DataFlex ist das eine riesige Neuerung. Sollten die WebApps in Zukunft auf Linux laufen, würde das die Betriebskosten deutlich senken. Das ist für uns in den nächsten 1-2 Jahren wahrscheinlich kein Thema, aber irgendwann müssen unsere Windows-Lizenzen erneuert werden, spätestens dann werden wir das in Betracht ziehen. Ausserdem würde eine WebApp im Docker-Container das automatisierte Testen von WebApps ermöglichen, beispielsweise als Teil der CI/CD.

Die Konferenz im Überblick

Chip Casanave eröffnete die Konferenz und übergab das Wort später an seinen Bruder Cory. Die beiden haben DataAccess vor 50 Jahren gegründet und waren sichtlich gerührt als sie auf ihr Lebenswerk zurückschauten.

Die Anekdote, welche mir am besten gefallen hat, war von Hurricane Andrew, welcher das Hauptquartier von DataAccess teilweise zerstört hatte. Als die beiden nachschauen gingen, war bereits einer ihrer Mitarbeiter vor Ort und hat mit einer Schrotflinte das Büro vor Plünderern beschützt. Währenddessen nahm die Community im Rest der Welt die Webseite und die Newsgroup wieder in Betrieb. Diesen Hurricane bekam ich noch nicht so gross mit (Hurricane Andrew fegte 1992 über Florida hinweg), allerdings wurde die Webseite 2005, als ich mit DataFlex angefangen hatte, nochmals kurz offline genommen, als DataAccess ihr Hauptquartier sturmsicher gemacht hatten. In den letzten Jahren war das alles jedoch kein Thema mehr, die meisten Dinge laufen nun redundant in Serverfarmen ausserhalb der Hurricane-Gefahrenzone.

Workspace-Format

Ein DataFlex-Workspace ist im Wesentlichen ein Ordner mit ein paar Dateien: Workspace-File, Code, DataDictionaries, FileList und evtl. ein AppHtml für Html und JavaScript. Die grosse Neuerung ist nun eigentlich nur, dass das Workspace-File neu nicht mehr ein INI-File, sondern ein JSON-File wird. Ausserdem muss nur noch das Haupt-Workspace-File migriert werden. Wenn man eine Library einbindet ist dem Studio neu egal ob die für DataFlex 25.0 oder 27.0 programmiert wurde. In 95% der Fälle lief die Library sowieso ohne Änderungen weiter.

Reports - Reports-Server

Der vor 2 Jahren angekündigte DataFlex-Reports-Server kommt nun. Die Reports kosten neu doppelt so viel, die Reports ohne Server zu benutzen ist keine Option. Für uns nicht unbedingt eine zwingende Änderung. Mal schauen wie sich das in die WebApp einbindet. Wir hätten uns gewünscht, dass sich die Reports auf dem Server (im Web) bearbeiten lassen. Allerdings ist dies nicht vorgesehen. Man kann jedoch vom Reports-Studio aus die Reports vom Server laden, bearbeiten und speichern. Das würde uns evtl. vereinfachen wenn verschiedene Benutzer bei uns die Reports bearbeiten möchten. Ob sich das in corem integrieren lässt ist noch offen. Sehr cool ist folgendes: Im Reports-Server können Benutzer via Browser einloggen und Reports ausführen, mit Filter, Properties und allem.

Der DataFlex Package Manager

Bereits als Testversion verfügbar in 26.0, fixer Bestandteil für 27.0. Sehr schön aufgebaut, nimmt uns einiges an Arbeit ab in der Zukunft: Neu können Libraries direkt im Studio über den Manager eingebunden werden. JavaScripts, CSS, etc. werden automatisch in AppHtml kopiert und im index.html eingebunden. Wir müssen noch herausfinden wie wir unsere “patches”, welche wir ab und zu bei den Libraries einfügen mit dem PackageManager in Einklang bringen, aber das sollte machbar sein.

KI KI KI!

DataFlex bekommt KI! Ein kleines Preview, mit Claude Code direkt aus einem neuen Studio-Prototypen, sah ok aus. Wer bereits mit Claude experimentiert hat wird nicht vom Hocker gehauen, aber schön dass es da ein paar Fortschritte gibt. Was jedoch sehr cool ist, ist die neue Hilfe. Die Hilfe wurde vollständig auf Markdown portiert (es sieht so aus als ob das mit MkDocs umgesetzt wurde) und ist im Browser einfach durchsuchbar. Sieht ziemlich modern aus und die Suche funktioniert exzellent.

Die Grosse Änderung (also close beta noch nicht für alle verfügbar): Interaktive Hilfe mit KI. Man kann die KI einfach fragen: “Welchen Event soll ich benutzen um einen Klick auf eine Zeile in einer cWebList zu verarbeiten?”. Die KI antwortet in der Sprache in der die Frage gestellt wurde, es lassen sich einfache Code-Beispiele für die Events/Properties generieren. Sehr hilfreich.

Eines meiner Highlights: Grids und Listen Sortieren und Filtern

Peter Bragg hat eine neue Library vorgestellt, welche das dynamische Sortieren und Filtern von Listen und Grids erlaubt. Sie ist noch nicht öffentlich verfügbar sollte aber demnächst veröffentlicht werden. Das Highlight: Voll konfigurierbar, viel “automagic” beim Sortieren und ein sehr einfaches Filter-Panel, welches sich über sehr einfachen DataFlex-Code konfigurieren lässt. Das nimmt uns einiges an Arbeit ab, da wir oft filtern und sortieren müssen. Wenn man dafür nun nicht mehr jedes Mal Queries basteln muss, wäre das schon sehr schön.

Kein globaler Filebuffer mehr!

Bei DataFlex gibt es einen sogenannten globalen Filebuffer. Für jede Tabelle gibt es quasi ein globales struct mit allen Feldern der Tabelle. Man greift auf dieses üblicherweise mit einem DataDictionary zu, welches die Eingabefelder (Data Entry Objects (DEO)) und den globalen Filebuffer synchronisiert. Kurz erklärt:

  • Benutzer sucht einen Record
    • DataDictionary führt eine Suche im globalen Filebuffer durch
    • DD kopiert den Inhalt des globalen Filebuffers in den lokalen Filebuffer
    • DD aktualisiert alle Eingabefelder (DEOs).
  • Benutzer ändert einen Eintrag und speichert
    • DD lädt globalen Filebuffer
    • DD überträgt die Werte der DEOs in den lokalen Buffer
    • DD überträgt die Änderungen vom lokalen Buffer in den globalen
    • DD speichert

Das Problem ist nun, wenn man eine View mit mehreren DDs hat, welche auf die gleiche Tabelle zugreifen, weiss man nie welcher Record sich gerade im globalen Filebuffer befindet. Um sicher zu sein, muss man vor jeder Aktion den richtigen laden.

Neu fallen alle globalen Filebuffer weg, dafür gibt es ein bisschen Compiler-Magie: Anstatt Tabellenname.Feldname kann man neu mit DDName.Feldname auf die lokalen Buffer zugreifen. Anstatt Find EQ Tabellenname by 1 funktioniert neu Find EQ DDName by 1, was deutlich praktischer ist. Im Hintergrund wird dann der Find im DD ausgeführt, das heisst es werden Constraints, etc. berücksichtigt. Das macht das Programmieren ungemein einfacher und das ganze Durcheinander mit “welcher record ist nun im globalen Filebuffer geladen” fällt weg. Den alten Code auf die neue Struktur zu portieren, wird ebenfalls einigermassen einfach machbar sein, wahrscheinlich mit einigem Suchen- und Ersetzen.

Kann KI deine WebApp testen?

Mein Vortrag. Im Grossen und Ganzen war ich zufrieden damit. Ich glaube der Versuch das Browser-basierte Testen von WebApps den DataFlex-Entwicklern näherzubringen hat geklappt. Es gab gutes Feedback zu Playwright, ein WebApp-Testing-Framework von Microsoft. Für die einen war das schon die “Takeaway info” wie man im Jargon sagt, und das agentenbasierte Generieren von Testcases mit KI war dann für die meisten ein neues Konzept. Auf drei Sätze reduziert: Man gibt der KI einen Browser und ein Testing-Framework und lässt die KI die WebApp untersuchen. Mit konkreten Anweisungen erstellt die KI zuerst einen Testplan als Markdown-Datei und generiert später aufgrund von diesem die Testcases und repariert diese in der letzten Phase. Wird die WebApp nun weiterentwickelt, kann man die Testcases reparieren lassen, wenn sich beispielsweise die IDs von Objekten etc. ändern.

Ich glaube die allerwichtigste Info war: DataFlex setzt beim Html-Code, welcher generiert wird ein data-dfobj-Attribut. In diesem befindet sich der Objektpfad innerhalb einer View, also beispielsweise oCustomer.oMainpanel.oCustomer_Name, welcher das DataFlex-Objekt eindeutig identifiziert. Dies eignet sich hervorragend als TestId für das Testframework (auch für andere Systeme als Playwright). Diese IDs ändern sich nur wenn man die Hierarchie der Objekte verändert und kann entsprechend einfach angepasst werden.

Austausch mit der Community

Rund um die Konferenz gibt es diverse Möglichkeiten um sich untereinander auszutauschen. Am Abend des ersten Konferenztages gab es anstatt eines gemeinsamen Abendessens ein gemeinsames Kochen. Wir gingen in die Kookfabriek (auf Deutsch: Kochfabrik) wo wir in 10er Gruppen aufgeteilt wurden. Jede Gruppe hatte eine eigene Kochinsel, grösstenteils vorbereitete Zutaten, und verschiedene Rezepte. Es gab professionelle Köche, welche Fragen beantwortet haben, ausgeholfen haben, wo es Probleme gab. Es war super organisiert und unsere Skepsis ob man das wirklich essen kann am Ende verflog rasch, zumindest bei unserer Gruppe. Eine andere Gruppe glaubte oder hoffte bis zum Schluss, dass irgendwo noch ein vorgekochtes Menü auftauchen würde.

Für unsere Gruppe war der Abend auf jeden Fall lustig.

Am Samstag folgte als Abschluss eine Kanalrundfahrt mit anschliessendem Pfannkuchenessen. Es bot nochmals eine letzte Chance um die DataFlex-Entwickler mit Fragen zu belagern und die letzten Wissenslücken zu den Niederlanden oder Amsterdam zu schliessen.

Fazit

Eine sehr gelungene Konferenz. FlexRoads wird wohl das neue Format, unter dem die EDUC neu stattfinden wird. Ich hoffe, sie bleibt weiterhin in Europa. Mir gefällt es, Europa auf diese Art zu erkunden und bis jetzt war dies meistens über den Landweg machbar, was für uns eine recht entspannte Reiseart ist.

Wir haben auf jeden Fall einige Motivation und Elan aus der Konferenz mitgenommen. Die Gespräche mit den anderen Entwicklern sind oft sehr inspirierend.


Alle Beiträge der FlexRoads 2026 - Amsterdam