Développeurs

Property Setters — Création et suppression en masse

Gérer les Property Setters par programmation dans une application custom Dodock/Frappe.

Property Setters — Création et suppression en masse

Les Property Setters permettent de modifier le comportement de champs existants (valeur par défaut, obligatoire, masqué…) sans toucher au code source du formulaire. Ils sont couramment utilisés dans les applications custom pour adapter l'interface à un contexte métier spécifique.

Création en masse

Frappe/Dodock fournit deux fonctions pour créer des Property Setters par programmation :

  • frappe.make_property_setter — crée un seul Property Setter
  • frappe.make_property_setters — crée plusieurs Property Setters en une seule fois

Usage typique dans un fichier setup.py ou install.py d'une application :

import frappe

PROPERTY_SETTERS = [
    {
        "doctype": "Todo",
        "fieldname": "status",
        "property": "default",
        "property_type": "Data",
        "value": "Required",
    },
    {
        "doctype": "Todo",
        "fieldname": "priority",
        "property": "hidden",
        "property_type": "Check",
        "value": "1",
    },
]

def setup():
    frappe.make_property_setters(PROPERTY_SETTERS)

Suppression en masse

Depuis la version incluant cette amélioration, une fonction symétrique est disponible pour supprimer des Property Setters en utilisant la même structure de données que lors de la création. Cela simplifie la maintenance des fichiers uninstall.py.

from frappe.custom.doctype.property_setter.property_setter import delete_property_setters

PROPERTY_SETTERS = [
    {
        "doctype": "Todo",
        "fieldname": "status",
        "property": "default",
        "property_type": "Data",
        "value": "Required",
    },
    {
        "doctype": "Todo",
        "fieldname": "priority",
        "property": "hidden",
        "property_type": "Check",
        "value": "1",
    },
]

def uninstall():
    delete_property_setters(PROPERTY_SETTERS)

Champs reconnus

La fonction delete_property_setters accepte une liste de dictionnaires. Les clés suivantes sont reconnues pour identifier le Property Setter à supprimer :

CléObligatoireDescription
doctypeType de document cible (ex. "Todo")
fieldnameNom du champ concerné
propertyPropriété modifiée (ex. "default", "hidden")
property_typeType de la propriété (ex. "Data", "Check")
valueValeur (non utilisée pour l'identification lors de la suppression)

Note : Les champs doctype, fieldname, property et property_type sont requis. Une exception est levée si l'un d'eux est manquant.

Cas d'usage complet — Cycle de vie d'une application

Une application custom suit généralement ce cycle :

Exemple de structure cohérente :

# mon_app/setup/install.py
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
import frappe

PROPERTY_SETTERS = [
    {
        "doctype": "Customer",
        "fieldname": "customer_group",
        "property": "default",
        "property_type": "Data",
        "value": "Particulier",
    },
]

def after_install():
    frappe.make_property_setters(PROPERTY_SETTERS)


# mon_app/setup/uninstall.py
from frappe.custom.doctype.property_setter.property_setter import delete_property_setters

def before_uninstall():
    delete_property_setters(PROPERTY_SETTERS)
Contrairement à la suppression manuelle via l'interface Personnalisation du formulaire, delete_property_setters est atomique : soit tous les Property Setters sont supprimés, soit une exception est levée si les champs requis sont manquants.