On this page
dbxapp as a LEGO RAD Runtime
dbxapp should become a clear, fast and secure PHP web RAD runtime: Borland-inspired, DD/FD-getrieben, component-based, workflow capable and without hidden core magic. Productivity comes from simple Building blocks that fit well together.
1. Basic idea
dbxapp aims to bring the best of Borland, Concept16 and Visual DataFlex/4GL into a modern PHP-, JavaScript- and CSS-grosstime. Not as a nostalgic copy, but as a clear RAD system for data-driven business applications.
Components, Properties, Events, Lifecycle, Designer Feeling.
Data-driven domain applications, fast masks, lists, processes.
DD as heart, business rules close to data, little module code.
dbxapp remains dbxapp: server-side PHP runtime, DD, FD, templates, modules, Session/Remember State, Client Libs and myX inheritance.
2. LEGO instead of Puzzle
The architecture should not consist of special parts that fit in exactly one place. Each larger component should have the same basic connections. As a result, Building blocks are combined, replaced and extended.
dbx()->form('kunde')
dbx()->report('kunden')
dbx()->grid('kunden')
dbx()->dialog('delete')
dbx()->window('kunde')
dbx()->workflow('kunden-import')
dbx()->process('kunden-index')
All these building blocks should understand the same connection language:
id context dd fd tpl data state request actions events / hooks render client trace
3. Aim for module authors
Module code should remain technical. Even users with little programming experience should Can build applications when DD, FD and templates are prepared.
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(); } }
Minimum should also be possible:
return dbx()->report('kunden')->run();
return dbx()->form('kunde')->run();
In this case, dbxapp searches for clear, documented conventions. The trace shows afterwards, which DD, FD, templates and classes were actually used.
4. Adaptability without kernel change
Everything must remain adaptable, but the adjustment should run on clear levels:
- DD: Data, fields, defaults, rules, rights, labels, UI metadata.
- FD: concrete form/report/grid field view.
- Templates: Presentation and layout.
- Properties: simple component options such as Rows, Sort, Buttons, Mode.
- Hooks: Targeted extension points without copying the component.
- Module classes: Domain logic.
- myX: System-wide inheritance for experts.
dbxForm -> myForm dbxReport -> myReport dbxDB -> myDB dbxTPL -> myTPL dbxWebApp -> myWebApp
5. Component lifecycle
Form, Report, Grid, Dialogue, Window, Workflow and Process should in the long term be Predictable workflow. Today’s methods remain compatible but become internal oriented towards clearer steps.
construct init_context load_definition load_state read_request validate process render save_state trace
forward init() and forward run() may be as The compatibility bridge remains. But the new structure should be clear about the basic lifecycle, parent: Protected hook methods.
6. Core standard behaviour
Many things that happen manually in modules today are to become official standard building blocks.
Form
Read RID, load data, set up fields, check Submit, check changed, save, set messages, state backup.
Report
Search, sorting, pagination, row buttons, multi-actions, selection, loading data, row hooks.
Grid
Read, Sort, Save, Delete, Sync, JSON output, Client coupling, DD columns.
Modules may still contain special logic, but standard behavior should not be repeated We need to rewrite.
7. Workflow and Process
Workflows and processes are thought of separately. A workflow describes the domain process. A process describes the technical, resumable execution.
Workflow = fachlicher Ablauf Process = technische Ausfuehrung Step = einzelner Schritt State = gespeicherter Zustand
Workflows must not be static. They should respond smartly to state, errors, user decisions and rights.
upload -> preview -> validate if valid: import if invalid: mapping if cancelled: cleanup if error: retry_or_abort summary
Processes for large amounts of data run in chunks:
State laden Pause/Cancel pruefen Chunk laden Chunk verarbeiten Fortschritt speichern Status zurueckgeben naechster Tick
8. Persistent process state
A process such as editing 100000 records must be completed after browser closure or interruption. The last secure state is stored permanently.
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
Status values:
new running paused cancel_requested cancelled done error interrupted
If 53589 of 100000 records have been processed, dbxapp must be reopened find the process, view the progress and continue from the next secure record.
9. Restoring UI-State
Not only processes, but also normal working conditions should become recoverable:
- Active module
- Active workflow
- Open windows and dialogues
- Active tabs
- Report page, search, sorting, selection
- Form-RID and form values not yet saved
- Grid filter, selection, scroll/cursorstand as appropriate
- ongoing, paused or faulty processes
When the app is launched, dbxapp should detect open work and offer a clear recovery option.
10. Roadmap
Stage 1: Definitions and plug-in standard
- Official terms define: Component, Form, Report, Grid, Dialog, Window, Workflow, Process, Step, State.
- Document common component connections.
- Define state levels: Sys, mod, remember, session, process.
- Design trace output for components.
Stage 2: dbxApi as a workbench
- dbx()->db() supplement.
- dbx()->tpl() supplement.
- dbx()->form($id) supplement.
- dbx()->report($id) supplement.
- Later grid(), dialog(), window(), workflow(), Process().
- Keep old API compatible.
Phase 3: Smooth Form and Report
- Visibly structure lifecycle in dbxForm.
- dbxReport cleaner build on dbxForm.
- Complement direct property accesses with methods.
- Old properties continue to support.
- Row and render hooks.
Phase 4: Centralize standard behavior
- Draw standard form flow into the core.
- Draw standard report flow to the core.
- Build standard grid flow with JSON endpoints.
- Introduce action dispatchers for modules.
Phase 5: Persistent process layer
- DD/Tabelle for dbxProcess.
- Build chunk runners.
- Implement Pause, Resume, Cancel, Retry, Status, Log.
- resumeLast() for User/Modul/Workflow.
- App-Start checks open processes.
Phase 6: Workflow layer
- Simple Smart Transitions: Next, back, choice, repeat, stop.
- Save workflow state.
- Prepare workflow panel and recovery.
- Not a large BPM system, but dbxapp-typical small building blocks.
Phase 7: UI and restoration
- Process panel: Progress, Log, Pause, Continue, Cancel.
- Restore bar for open work.
- Save UI state for tabs, windows, reports, forms, grids.
- Expand trace and editor view.
Phase 8: Pilot modules
- dbxAdmin session list as report pilot.
- dbxUser admin User list and group form as Form/Report-Pilot.
- myLKW list as grid/Ajax pilot.
- myLKW report as a special report with row hooks.
- A process pilot for import, DD update or truck sync.
Phase 9: Documentary and Migration
- Documentary for module new style.
- Documentary for component building blocks.
- Documentary for Hooks and myX.
- Documentary for workflow and process.
- New modules only according to new methodology.
- Leave old modules running and rebuild them if necessary.
11. Pilot findings from current modules
- myLKW Shows need for action dispatchers, process state, JSON endpoints, grid sync and domain actions.
- myLKW list Shows need for official grid component with read/sort/save/delete/sync.
- myLKW report shows a need for special report hooks instead of direct internals.
- dbxUser admin Shows typical admin reports with row/multi-actions, modal, search and pagination.
- dbxContent edit Shows standard form flow and Observer/Wait-Pattern.
12. Golden Rules
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.
Document status: 2026-04-29. This roadmap is an objective and working basis. Incompatible concept changes are discussed before implementation.