Auf dieser Seite
- dbxapp als LEGO-RAD-Runtime
- 1. Grundidee
- 2. LEGO statt Puzzle
- 3. Ziel für Modulautoren
- 4. Anpassbarkeit ohne Kernel-Änderung
- 5. Komponenten-Lifecycle
- 6. Standardverhalten im Kern
- 7. Workflow und Process
- 8. Persistenter Prozess-State
- 9. Wiederherstellung von UI-State
- 10. Roadmap
- 11. Pilot-Erkenntnisse aus aktuellen Modulen
- 12. Goldene Regeln
dbxapp als LEGO-RAD-Runtime
dbxapp soll eine klare, schnelle und sichere PHP-Web-RAD-Runtime werden: Borland-inspiriert, DD/FD-getrieben, komponentenbasiert, workflowfähig und ohne versteckte Kern-Magie. Die Produktivität entsteht aus einfachen Bausteinen, die gut zusammenpassen.
1. Grundidee
dbxapp soll das Beste aus Borland, Concept16 und Visual DataFlex/4GL in eine moderne PHP-, JavaScript- und CSS-Webruntime übersetzen. Nicht als nostalgische Kopie, sondern als klares RAD-System für datengetriebene Business-Anwendungen.
Komponenten, Properties, Events, Lifecycle, Designer-Gefuehl.
Datengetriebene Fachanwendungen, schnelle Masken, Listen, Prozesse.
DD als Herz, Business-Regeln nahe an Daten, wenig Modulcode.
dbxapp bleibt dabei dbxapp: serverseitige PHP-Runtime, DD, FD, Templates, Module, Session-/Remember-State, Client-Libs und myX-Vererbung.
2. LEGO statt Puzzle
Die Architektur soll nicht aus Spezialteilen bestehen, die nur an genau einer Stelle passen. Jede größere Komponente soll dieselben Grundanschluesse besitzen. Dadurch können Bausteine kombiniert, ersetzt und erweitert werden.
dbx()->form('kunde')
dbx()->report('kunden')
dbx()->grid('kunden')
dbx()->dialog('delete')
dbx()->window('kunde')
dbx()->workflow('kunden-import')
dbx()->process('kunden-index')
Alle diese Bausteine sollen dieselbe Anschluss-Sprache verstehen:
id context dd fd tpl data state request actions events / hooks render client trace
3. Ziel für Modulautoren
Modulcode soll fachlich bleiben. Auch Anwender mit wenig Programmiererfahrung sollen kleine Anwendungen bauen können, wenn DD, FD und Templates vorbereitet sind.
class kunden { public function list() { return dbx()->report('kunden') ->dd('kunde') ->fd('kunden|rpt-kunden') ->rowEdit() ->rowDelete() ->run(); } public function edit() { return dbx()->form('kunde') ->dd('kunde') ->fd('kunden|frm-kunde') ->run(); } }
Minimal soll auch möglich sein:
return dbx()->report('kunden')->run();
return dbx()->form('kunde')->run();
In diesem Fall sucht dbxapp nach klaren, dokumentierten Konventionen. Der Trace zeigt danach, welche DD, FD, Templates und Klassen tatsächlich verwendet wurden.
4. Anpassbarkeit ohne Kernel-Änderung
Alles muss anpassbar bleiben, aber die Anpassung soll über klare Ebenen laufen:
- DD: Daten, Felder, Defaults, Regeln, Rechte, Labels, UI-Metadaten.
- FD: konkrete Formular-/Report-/Grid-Feldsicht.
- Templates: Darstellung und Layout.
- Properties: einfache Komponentenoptionen wie Rows, Sort, Buttons, Modus.
- Hooks: gezielte Erweiterungspunkte ohne Kopieren der Komponente.
- Modulklassen: fachliche Speziallogik.
- myX: systemweite Vererbung für Experten.
dbxForm -> myForm dbxReport -> myReport dbxDB -> myDB dbxTPL -> myTPL dbxWebApp -> myWebApp
5. Komponenten-Lifecycle
Form, Report, Grid, Dialog, Window, Workflow und Process sollen langfristig nach einem vorhersagbaren Ablauf arbeiten. Die heutigen Methoden bleiben kompatibel, werden aber intern auf klarere Schritte ausgerichtet.
construct init_context load_definition load_state read_request validate process render save_state trace
forward_init() und forward_run() können als Kompatibilitätsbrücke bestehen bleiben. Neue Struktur soll aber klar über Basis-Lifecycle, parent:: und geschützte Hook-Methoden laufen.
6. Standardverhalten im Kern
Viele Dinge, die heute in Modulen manuell passieren, sollen offizielle Standardbausteine werden.
Form
RID lesen, Daten laden, Felder aufbauen, Submit prüfen, changed prüfen, speichern, Meldungen setzen, State sichern.
Report
Suche, Sortierung, Pagination, Row-Buttons, Multi-Actions, Selektion, Daten laden, Row-Hooks.
Grid
Read, Sort, Save, Delete, Sync, JSON-Ausgabe, Client-Kopplung, DD-Spalten.
Module dürfen weiter Speziallogik enthalten, aber Standardverhalten soll nicht immer wieder neu geschrieben werden müssen.
7. Workflow und Process
Workflows und Prozesse werden getrennt gedacht. Ein Workflow beschreibt den fachlichen Ablauf. Ein Process beschreibt die technische, wiederaufnehmbare Ausführung.
Workflow = fachlicher Ablauf Process = technische Ausfuehrung Step = einzelner Schritt State = gespeicherter Zustand
Workflows dürfen nicht statisch sein. Sie sollen smart auf Zustand, Fehler, Benutzerentscheidungen und Rechte reagieren.
upload -> preview -> validate if valid: import if invalid: mapping if cancelled: cleanup if error: retry_or_abort summary
Prozesse für grosse Datenmengen laufen in Chunks:
State laden Pause/Cancel pruefen Chunk laden Chunk verarbeiten Fortschritt speichern Status zurueckgeben naechster Tick
8. Persistenter Prozess-State
Ein Prozess wie das Bearbeiten von 100000 Datensätzen muss nach Browser-Schließen oder Unterbrechung fortsetzbar sein. Der letzte sichere Stand wird dauerhaft gespeichert.
dbxProcess id process_key workflow_key user_id modul component_id status current_step cursor processed_count total_count payload_json result_json error_json pause_requested cancel_requested started_at updated_at finished_at
Statuswerte:
new running paused cancel_requested cancelled done error interrupted
Wenn 53589 von 100000 Datensätzen verarbeitet wurden, muss dbxapp beim Wiederöffnen den Prozess finden, den Fortschritt anzeigen und ab dem nächsten sicheren Datensatz fortsetzen können.
9. Wiederherstellung von UI-State
Nicht nur Prozesse, auch normale Arbeitszustände sollen wiederherstellbar werden:
- aktives Modul
- aktiver Workflow
- offene Fenster und Dialoge
- aktive Tabs
- Report-Seite, Suche, Sortierung, Selektion
- Form-RID und noch nicht gespeicherte Formularwerte
- Grid-Filter, Auswahl, Scroll-/Cursorstand soweit sinnvoll
- laufende, pausierte oder fehlerhafte Prozesse
Beim App-Start soll dbxapp offene Arbeit erkennen und eine klare Wiederherstellungsmöglichkeit anbieten.
10. Roadmap
Phase 1: Begriffe und Stecknorm
- Offizielle Begriffe definieren: Component, Form, Report, Grid, Dialog, Window, Workflow, Process, Step, State.
- Gemeinsame Komponenten-Anschluesse dokumentieren.
- State-Ebenen definieren: sys, mod, remember, session, process.
- Trace-Ausgabe für Komponenten konzipieren.
Phase 2: dbxApi als Werkbank
- dbx()->db() ergänzen.
- dbx()->tpl() ergänzen.
- dbx()->form($id) ergänzen.
- dbx()->report($id) ergänzen.
- Später grid(), dialog(), window(), workflow(), process().
- Alte API kompatibel halten.
Phase 3: Form und Report glätten
- Lifecycle in dbxForm sichtbar strukturieren.
- dbxReport sauberer auf dbxForm aufbauen.
- Direkte Property-Zugriffe durch Methoden ergänzen.
- Alte Properties weiter unterstuetzen.
- Row- und Render-Hooks definieren.
Phase 4: Standardverhalten zentralisieren
- Standard-Form-Flow in den Kern ziehen.
- Standard-Report-Flow in den Kern ziehen.
- Standard-Grid-Flow mit JSON-Endpunkten aufbauen.
- Action-Dispatcher für Module einführen.
Phase 5: Persistente Process-Schicht
- DD/Tabelle für dbxProcess entwerfen.
- Chunk-Runner bauen.
- Pause, Resume, Cancel, Retry, Status, Log implementieren.
- resumeLast() für Benutzer/Modul/Workflow einführen.
- App-Start prüft offene Prozesse.
Phase 6: Workflow-Schicht
- Einfache Smart-Transitions: next, back, choice, repeat, stop.
- Workflow-State speichern.
- Workflow-Panel und Wiederherstellung vorbereiten.
- Kein grosses BPM-System, sondern dbxapp-typische kleine Bausteine.
Phase 7: UI und Wiederherstellung
- Process-Panel: Fortschritt, Log, Pause, Weiter, Abbrechen.
- Restore-Leiste für offene Arbeit.
- UI-State für Tabs, Fenster, Reports, Forms, Grids speichern.
- Trace und Editor-Sicht ausbauen.
Phase 8: Pilotmodule
- dbxAdmin Session-Liste als Report-Pilot.
- dbxUser_admin User-Liste und Gruppen-Form als Form/Report-Pilot.
- myLKW_list als Grid-/Ajax-Pilot.
- myLKW_report als Spezialreport mit Row-Hooks.
- Ein Prozess-Pilot für Import, DD-Update oder LKW-Sync.
Phase 9: Doku und Migration
- Doku für Modul neuer Stil.
- Doku für Komponenten-Bausteine.
- Doku für Hooks und myX.
- Doku für Workflow und Process.
- Neue Module nur noch nach neuer Methodik.
- Alte Module lauffähig lassen und bei Bedarf neu bauen.
11. Pilot-Erkenntnisse aus aktuellen Modulen
- myLKW zeigt Bedarf für Action-Dispatcher, Prozess-State, JSON-Endpunkte, Grid-Sync und fachliche Aktionen.
- myLKW_list zeigt Bedarf für offizielle Grid-Komponente mit read/sort/save/delete/sync.
- myLKW_report zeigt Bedarf für Spezialreport-Hooks statt direkter Interna.
- dbxUser_admin zeigt typische Admin-Reports mit Row-/Multi-Actions, Modal, Suche und Pagination.
- dbxContent_edit zeigt Standard-Form-Flow und Observer/Wait-Pattern.
12. Goldene Regeln
Ein Modulautor soll dbxapp benutzen, nicht dbxapp nachbauen. Wenn ein Modul technischen Standardcode enthaelt, fehlt wahrscheinlich ein Baustein im Kern. Der Browser ist Anzeige und Steuerpult, nicht die Wahrheit. Der letzte sichere Stand muss serverseitig gespeichert sein. Kein Fachproblem darf eine Kernel-Aenderung erzwingen. Konventionen sind erlaubt, aber immer tracebar. Bestehende Module bleiben kompatibel, neue Module folgen der neuen Methodik.
Dokumentstand: 2026-04-29. Diese Roadmap ist eine Ziel- und Arbeitsgrundlage. Inkompatible Konzeptänderungen werden vor Umsetzung besprochen.