Kapitel 2 des verbindlichen Modulhandbuchs für das Referenzmodul myInvoices.
1. Modulkonfiguration
Datei cfg/config.php:
<?php
?>
if($resolved !==$expectedBase . 'files/test/') $config
Die Konfiguration schützt nur den Moduleinstieg und enthält keine doppelte Beschreibung einzelner Standardaktionen. Die automatische Action-Policy bindet das Token an Route und Rechnungs-ID; ein Token für Rechnung 17 gilt deshalb nicht für Rechnung 18. Fachwerte gehören nicht in eine parallele JSON-Datei oder in JavaScript.
2. DD des Rechnungskopfs
Datei dd/invoice.dd.php. Doxygen bindet die tatsächlich ausgeführte DD direkt ein; Dokumentation und Modul können dadurch nicht auseinanderlaufen:
<?php
$table['server']=
'myInvoices|myInvoices.db3';
$table['default_sort']=
'invoice_date DESC, invoice_no DESC';
$table['read_owner']=
'admin,owner';
$table['create_owner']=
'admin,owner';
$table['update_owner']=
'admin,owner';
$table['delete_owner']=
'admin,owner';
$field['convert']=
'date_time';
$field['label']=
'Erstellt von';
$field['label']=
'Aktualisiert';
$field['convert']=
'date_time';
$field['label']=
'Aktualisiert von';
$field['label']=
'Rechnungsnummer';
$field['rules']=
'parameter|min=2|max=40';
$field['name']=
'invoice_date';
$field['label']=
'Rechnungsdatum';
$field['rules']=
'*|min=2|max=180';
$field['rules']=
'parameter|max=24';
$field['options']=
'draft=Entwurf&open=Offen&paid=Bezahlt';
$field['tpl']=
'select-single-label';
$field['label']=
'Rechnungssumme';
$index['comment']=
'from field index PRI';
$index['name']=
'idx_invoice_create_date';
$index['fields']=
'create_date';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_create_uid';
$index['fields']=
'create_uid';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_update_date';
$index['fields']=
'update_date';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_update_uid';
$index['fields']=
'update_uid';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_owner';
$index['comment']=
'from field index MUL';
$index['name']=
'uidx_invoice_invoice_no';
$index['fields']=
'invoice_no';
$index['comment']=
'from field index UNI';
$index['name']=
'idx_invoice_invoice_date';
$index['fields']=
'invoice_date';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_customer';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_status';
$index['comment']=
'from field index MUL';
total_gross ist ein fachlicher Snapshot, kein dbx-Systemfeld. Er wird beim Ändern von Positionen innerhalb derselben Fachtransaktion aktualisiert. Die Reportcallbacks formatieren und summieren ihn, verändern ihn aber nicht.
3. DD der Rechnungspositionen
Datei dd/invoiceItem.dd.php. Auch hier ist die ausführbare DD selbst die einzige Quelle der Dokumentation:
<?php
$table['server']=
'myInvoices|myInvoices.db3';
$table['table']=
'invoice_item';
$table['datadic']=
'invoiceItem';
$table['default_sort']=
'invoice_id ASC, position_no ASC';
$table['read_owner']=
'admin,owner';
$table['create_owner']=
'admin,owner';
$table['update_owner']=
'admin,owner';
$table['delete_owner']=
'admin,owner';
$field['convert']=
'date_time';
$field['label']=
'Erstellt von';
$field['label']=
'Aktualisiert';
$field['convert']=
'date_time';
$field['label']=
'Aktualisiert von';
$field['label']=
'Artikelnummer';
$field['rules']=
'parameter|max=80';
$field['rules']=
'*|min=2|max=255';
$field['label']=
'Einzelpreis';
$index['name']=
'pk_invoice_item';
$index['comment']=
'from field index PRI';
$index['name']=
'idx_invoice_item_create_date';
$index['fields']=
'create_date';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_item_create_uid';
$index['fields']=
'create_uid';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_item_update_date';
$index['fields']=
'update_date';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_item_update_uid';
$index['fields']=
'update_uid';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_item_owner';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_item_invoice_id';
$index['fields']=
'invoice_id';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_item_position_no';
$index['fields']=
'position_no';
$index['comment']=
'from field index MUL';
$index['name']=
'idx_invoice_item_article_no';
$index['fields']=
'article_no';
$index['comment']=
'from field index MUL';
Beide DDs enthalten die Systemfelder create_date, create_uid, owner, update_date und update_uid. Diese Werte werden automatisch von dbxDB gesetzt. Das Modul setzt sie weder beim Insert noch beim Update selbst. Genau das ist ein Vorteil der DD-Nutzung. Die DDs folgen dem dbxapp-Exportformat mit expliziten TABLE-, FIELDS- und INDEXES-Abschnitten. Es gibt darin keine Closure oder Hilfsmethode, welche Feldattribute verbirgt.