Hi Community,
I’m using a public web form for “Membership Application” DocType and need to check if the submitted email exists in the “Member” DocType.
Problem:
My validation code (below) doesn’t work—it doesn’t block submissions even when the email isn’t in “Member”. No errors, but no validation either.
frappe.web_form.validate = function() {
const email = frappe.web_form.get_value('email');
return frappe.call({
method: "frappe.client.get_value",
args: {
doctype: "Member",
fieldname: "name",
filters: { email: email }
}
}).then((response) => {
if (!response.message) {
frappe.msgprint("Email not found in Member records.");
return false; // Fail validation
}
return true; // Pass validation
});
}
What I’ve Tried:
- Guest User has read access to “Member”.
Question:
Why isn’t the validation blocking submissions? Are there hidden permissions or a better approach?
Thanks for any tips!
I have now the following skript for my webform:
frappe.web_form.validate = function() {
const email = frappe.web_form.get_value('email');
console.log("[VALIDIERUNG] Prüfe E-Mail:", email);
frappe.call({
method: "frappe.client.get_value",
args: {
doctype: "Mitglied",
fieldname: "name",
filters: { "email": email }
}
}).done(function(response) {
console.log("[DEBUG] API Antwort:", response);
console.log(response.message);
if (!response.message.name) {
console.warn("[FEHLER] Kein Mitglied mit dieser E-Mail gefunden");
frappe.msgprint("Diese E-Mail ist keinem Mitglied zugeordnet.");
return false;
}
console.log("[SUCCESS] Mitglied gefunden:", response.message.name);
return true;
});
};
If i enter an e-mail which is not in Member Database (Doctype: Mitglied) it still allows for submission :(. Makes for me no sense at all. Here my console.log:

If i enter email which is in member database it works:

Would be very happy about any help :)!
Solution that worked for me with serverskript:
if doc.is_new():
# Hole die E-Mail-Adresse aus dem aktuellen Dokument (Anteile zeichnen)
email = doc.email
# Suche das Mitglied, bei dem die E-Mail-Adresse übereinstimmt
mitglied = frappe.get_all(
"Mitglied", # Doctype Name
filters={"email": email}, # Filter nach E-Mail-Adresse
fields=["name"], # Nur den Namen des Mitglieds zurückgeben
limit=1 # Begrenze die Suche auf ein Ergebnis
)
# Wenn kein Mitglied gefunden wurde
if not mitglied:
frappe.throw("Kein Mitglied mit der E-Mail-Adresse bekannt. Bitte hinterlegen Sie ihre bei uns regestrierte E-Mail oder kontaktieren Sie den Vorstand") # Wirft eine Exception und bricht den Prozess ab
else:
# Mitglied wurde gefunden, Prozess kann fortgesetzt werden
doc.verknuepftes_mitglied = mitglied[0].name
frappe.msgprint(f"Mitglied zugewiesen: {mitglied[0].name}")