dbxapp Knowledge RAD Roadmap

RAD Roadmap

On this page
  1. dbxapp as a LEGO RAD Runtime
    1. 1. Basic idea
    2. 2. LEGO instead of Puzzle
    3. 3. Aim for module authors
    4. 4. Adaptability without kernel change
    5. 5. Component lifecycle
    6. 6. Core standard behaviour
    7. 7. Workflow and Process
    8. 8. Persistent process state
    9. 9. Restoring UI-State
    10. 10. Roadmap
    11. 11. Pilot findings from current modules
    12. 12. Golden Rules
dbxapp Target image and roadmap

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.

The LEGO Principle DD / FD Form Report Grid Workflow Process Persistent State myX
Guidance document
Modules should use dbxapp, not replicate dbxapp. Technical complexity belongs in the core and components. Technical adaptation belongs in DD, FD, templates, hooks, module classes and myX.

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.

Borland
Components, Properties, Events, Lifecycle, Designer Feeling.
Concept16 / 4GL
Data-driven domain applications, fast masks, lists, processes.
DataFlex
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
No hidden magic: Conventions are allowed, but any automatic decision must be visible in the trace: used DD, FD, templates, classes, hooks, state keys and actions.

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:

  1. DD: Data, fields, defaults, rules, rights, labels, UI metadata.
  2. FD: concrete form/report/grid field view.
  3. Templates: Presentation and layout.
  4. Properties: simple component options such as Rows, Sort, Buttons, Mode.
  5. Hooks: Targeted extension points without copying the component.
  6. Module classes: Domain logic.
  7. myX: System-wide inheritance for experts.
dbxForm   -> myForm
dbxReport -> myReport
dbxDB     -> myDB
dbxTPL    -> myTPL
dbxWebApp -> myWebApp
Rule: If a technical requirement is achievable only by kernel modification, There is probably no official point of contact.

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
Important: The browser is only display and control panel. The truth lies on the server side in the persistent dbxapp state.

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

  1. Official terms define: Component, Form, Report, Grid, Dialog, Window, Workflow, Process, Step, State.
  2. Document common component connections.
  3. Define state levels: Sys, mod, remember, session, process.
  4. Design trace output for components.

Stage 2: dbxApi as a workbench

  1. dbx()->db() supplement.
  2. dbx()->tpl() supplement.
  3. dbx()->form($id) supplement.
  4. dbx()->report($id) supplement.
  5. Later grid(), dialog(), window(), workflow(), Process().
  6. Keep old API compatible.

Phase 3: Smooth Form and Report

  1. Visibly structure lifecycle in dbxForm.
  2. dbxReport cleaner build on dbxForm.
  3. Complement direct property accesses with methods.
  4. Old properties continue to support.
  5. Row and render hooks.

Phase 4: Centralize standard behavior

  1. Draw standard form flow into the core.
  2. Draw standard report flow to the core.
  3. Build standard grid flow with JSON endpoints.
  4. Introduce action dispatchers for modules.

Phase 5: Persistent process layer

  1. DD/Tabelle for dbxProcess.
  2. Build chunk runners.
  3. Implement Pause, Resume, Cancel, Retry, Status, Log.
  4. resumeLast() for User/Modul/Workflow.
  5. App-Start checks open processes.

Phase 6: Workflow layer

  1. Simple Smart Transitions: Next, back, choice, repeat, stop.
  2. Save workflow state.
  3. Prepare workflow panel and recovery.
  4. Not a large BPM system, but dbxapp-typical small building blocks.

Phase 7: UI and restoration

  1. Process panel: Progress, Log, Pause, Continue, Cancel.
  2. Restore bar for open work.
  3. Save UI state for tabs, windows, reports, forms, grids.
  4. Expand trace and editor view.

Phase 8: Pilot modules

  1. dbxAdmin session list as report pilot.
  2. dbxUser admin User list and group form as Form/Report-Pilot.
  3. myLKW list as grid/Ajax pilot.
  4. myLKW report as a special report with row hooks.
  5. A process pilot for import, DD update or truck sync.

Phase 9: Documentary and Migration

  1. Documentary for module new style.
  2. Documentary for component building blocks.
  3. Documentary for Hooks and myX.
  4. Documentary for workflow and process.
  5. New modules only according to new methodology.
  6. 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.