Documentation Frappe Framework

Frappe Framework

Surcharger la requête d’un champ Link par script

Un script client remplace la requête standard d’un lien. On filtre sur place, ou on appelle une méthode qui renvoie les lignes proposées.

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

Deux formes

Depuis un script client (Client Script), set_query surcharge la requête standard d’un champ Lien (Link). Pour un champ du document : set_query(field_name, options_function). Pour un champ de table enfant : set_query(field_name, child_table_name, options_function).

Filtres

Au chargement d’un rapprochement bancaire (Bank Reconciliation), le compte bancaire peut se limiter à un dictionnaire : account_type Bank et group_or_ledger Ledger. Une forme plus précise est une liste de conditions, ici sur Bank Account : type égal à Bank, et group_or_ledger différent de Group.

Autre méthode

query nomme une méthode serveur. L’exemple, sur item_code de la table items, appelle erpnext.controllers.queries.item_query. Le filtre dépend de enquiry_type : is_service_item si c’est Maintenance, sinon is_sales_item.

La méthode personnalisée renvoie une liste pour l’autocomplétion. Plusieurs colonnes peuvent accompagner chaque ligne. Signature :

python
def custom_query(doctype, txt, searchfield, start, page_len, filters):
    ...

L’exemple lead_query cherche des prospects (Lead) non convertis : docstatus inférieur à 2, statut différent de Converted, texte cherché dans la clé de recherche, le nom et la société. Le tri privilégie les correspondances en début de chaîne. La requête est limitée par start et page_len.

Attention

@frappe.whitelist() expose la méthode au client. @frappe.validate_and_sanitize_search_inputs valide et assainit les entrées venues de l’API ou du client, pour éviter une injection SQL.

D’autres exemples sont dans erpnext/controllers/queries.py du dépôt ERPNext.

Point d’attention

Sans les deux décorateurs, la méthode n’est ni appelable depuis le client ni protégée comme la source l’exige. Le second argument de set_query, quand il est une chaîne, est le nom de la table enfant, pas un filtre.

Filtrer un champ Link Frappe par script | ERPNext Lab