Documentation Frappe Framework

Frappe Framework

Script serveur (Server Script)

Un script serveur est du Python limité, déclenché par un événement ou par une URL. Seul un System Manager le crée, et le bench doit l’autoriser.

2 min de lectureMis à jour le Source : docs.frappe.io

Activation

Depuis la version 15, les scripts serveur sont désactivés par défaut, pour la sécurité des bench partagés.

terminal
bench set-config -g server_script_enabled true

En auto-hébergement, la même clé se pose sur le site : bench --site site1.local set-config server_script_enabled true. Sur Frappe Cloud, la source dit qu’il faut un bench privé : les bench publics partagés n’autorisent pas ces scripts. Le rôle doit être System Manager. L’API utilisable est dans API de script.

Créer

Dans l’AwesomeBar, « New Server Script ». Choisissez Document Event ou API, puis le type de document et l’événement, ou le nom de méthode, puis le script.

Événements : Before Insert, After Insert, Before Validate, Before Save, After Save, Before Submit, After Submit, Before Cancel, After Cancel, Before Delete, After Delete, Before Save (Submitted Document), After Save (Submitted Document), Before Print.

API

Le type API expose une méthode. Le nom vient du champ API Method, préfixé par /api/method. delete-note répond à /api/method/delete-note et à frappe.call("delete-note"). Allow Guest ouvre aux invités. La réponse se pose dans frappe.response["message"]. Enable Rate Limit limite le nombre d’appels dans une fenêtre, par adresse IP.

RestrictedPython ne laisse passer que des méthodes sûres, listées par l’API de script.

Depuis la version 13, un script sert de bibliothèque interne : le premier pose frappe.flags.my_key, le second lit run_script("script_1").get("my_key"). Le bouton Compare Versions compare deux versions.

Exemples

Avant enregistrement, si « test » est dans doc.description, le statut passe à Closed. Si « validate » y est, frappe.ValidationError est levée. Après enregistrement, si doc.allocted_to est vrai, un ToDo est inséré avec owner égal à doc.allocated_to et la description égale au sujet. L’API test_method répond hello.

Point d’attention

La condition publiée teste allocted_to, tandis que le propriétaire lit allocated_to. Sans server_script_enabled, le document ne s’exécute pas. Le script n’a pas tout Python : seulement ce que RestrictedPython autorise.