Frappe Framework
Méthodes de contrôleur
Sixième étape du tutoriel : créer le DocType Library Member et calculer automatiquement le champ Full Name grâce à la méthode before_save du contrôleur Python.
À quoi servent les méthodes de contrôleur
Les méthodes de contrôleur (Controller Methods) permettent d’écrire la logique métier exécutée au cours du cycle de vie d’un document.
Créer le DocType Library Member
Créons notre deuxième DocType : Library Member. Il comporte les champs suivants :
| Libellé du champ | Type | Remarque |
|---|---|---|
| First Name | Data | Obligatoire (Mandatory) |
| Last Name | Data | |
| Full Name | Data | Lecture seule (Read Only) |
| Email Address | Data | |
| Phone | Data |
La documentation officielle illustre la création de ce DocType par une animation.
Une fois le DocType créé, ouvrez la liste Library Member, videz le cache via Settings > Reload et créez un nouveau membre.
Vous remarquerez que le champ Full Name n’apparaît pas dans le formulaire : nous l’avons défini en lecture seule, il ne s’affiche que lorsqu’il contient une valeur.
Calculer Full Name dans le contrôleur Python
Écrivons du code dans la classe du contrôleur Python afin que Full Name soit calculé automatiquement à partir de First Name et Last Name.
Ouvrez le fichier library_member.py dans votre éditeur et apportez les modifications suivantes :
librarymember.py
class LibraryMember(Document):
#this method will run every time a document is saved
def before_save(self):
self.full_name = f'{self.first_name} {self.last_name or ""}'À retenir
Si ce code ne fonctionne pas chez vous, vérifiez que les scripts côté serveur sont activés, puis redémarrez bench.
bench set-config -g server_script_enabled trueLa logique est placée dans la méthode before_save, exécutée à chaque enregistrement d’un document. C’est l’un des nombreux hooks fournis par la classe Document. La liste complète des hooks disponibles est décrite dans la page Contrôleurs.
Revenez dans le bureau, créez un autre membre et constatez que Full Name apparaît après l’enregistrement.
Étape suivante : Types de DocType.
