to select ↑↓ to navigate
Frappe Framework

Frappe Framework

Open in ChatGPT
Ask ChatGPT about this page
Open in Claude
Ask Claude about this page

Document-lifecycle

Document-lifecycle

Elk Frappe-document doorloopt een vaste lifecycle. Hooks vuren bij elke fase — apps kunnen valideren, reageren of vetoen.

Fasen

Fase Wanneer Veel gebruikt voor
before_insert Net voor eerste opslag (record bestaat nog niet) Defaults berekenen uit context
after_insert Na eerste opslag Gerelateerde records maken
validate Voor elke opslag (insert OF update) Business-regelchecks
before_save Voor elke opslag Laatste aanpassingen
on_update Na elke opslag Syncen naar externe systemen
before_submit Voor indienen Eindchecks voor vergrendeling
on_submit Na indienen GL-records, workflow triggeren
before_cancel Voor annuleren Verifieer dat annulering mag
on_cancel Na annuleren GL-records terugdraaien
on_trash Voor verwijderen Cleanup

Indien-bare documenten

Documenten als Verkoopfactuur, Voorraadboeking, Journaalpost zijn submittable:

docstatus Betekenis Bewerkbaar?
0 Concept Ja
1 Ingediend (gefinaliseerd; GL-records gemaakt) Nee — Annuleren + Amenderen
2 Geannuleerd (teruggedraaid) Nee

Ingediende documenten worden niet verwijderd — wel geannuleerd en (optioneel) geamendeerd.

Hook-resolutie

Voor elke fase draait Frappe:

  1. De controller-methode van het DocType (bv. before_save(self))
  2. App doc_events hooks (in install-volgorde)

Meerdere apps kunnen hetzelfde event hooken. Fouten in een hook aborten de save — partiële state blijft nooit hangen.

Idempotentie

Reken niet erop dat hooks slechts één keer vuren per "gebruikersactie". Een retry, queued job of script kan hetzelfde event meermaals triggeren. Ontwerp hooks idempotent — herhaalt u dan boekt u niet dubbel.

Last updated 3 days ago
Was this helpful?
Thanks!