to select ↑↓ to navigate
Frappe Framework

Frappe Framework

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

Client Scripts

Client Scripts

Een Client Script draait JavaScript in de browser wanneer een DocType-formulier open is. Gebruik voor:

  • Velden tonen/verbergen op basis van waarden
  • Afgeleide velden client-side berekenen
  • Eigen actieknoppen toevoegen
  • Invoer valideren vóór opslag

Voor de meeste gevallen zijn Client Scripts de juiste keuze — snel, geen page-reload, directe feedback.

Aanmaken

Customize → Client Script → New: kies DocType, view (Form/List), plak uw JS.

Form-events

frappe.ui.form.on("Sales Invoice", {
    refresh(frm) {
        // Bij elke laad/reload
        if (frm.doc.status === "Paid") {
            frm.add_custom_button("Print Receipt", () => {
                window.open(`/api/method/erpnext.print_receipt?invoice=${frm.doc.name}`);
            });
        }
    },
    customer(frm) {
        // Bij wijziging van het customer-veld
        frappe.msgprint(`Geselecteerd: ${frm.doc.customer}`);
    },
    validate(frm) {
        // Vóór opslag
        if (frm.doc.grand_total > 100000) {
            frappe.throw("Facturen boven 100k vereisen managergoedkeuring");
        }
    }
});

Child table-events

frappe.ui.form.on("Sales Invoice Item", {
    qty(frm, cdt, cdn) {
        const row = locals[cdt][cdn];
        frappe.model.set_value(cdt, cdn, "amount", row.qty * row.rate);
    }
});

Server aanroepen

frappe.call({
    method: "myapp.api.check_credit_limit",
    args: { customer: frm.doc.customer, amount: frm.doc.grand_total },
    callback: (r) => {
        if (!r.message.ok) frappe.throw("Boven kredietlimiet");
    }
});

Beperkingen

  • Draait in de browser — invoer hier nooit vertrouwen voor security. Altijd hervalideren op de server in een Server Script of whitelisted method.
  • Fouten falen stil tenzij u de browserconsole bekijkt. Voeg console.error() toe tijdens itereren.

Voor server-side afdwingen: zie Server Scripts.

Last updated 3 days ago
Was this helpful?
Thanks!