Bonjour bonjour 
J’ai un problème avec une table enfant dans un formulaire web publique. Cette table comprend un champ de type « Lien » qui renvoit vers doctype que j’ai crée « Hosted Workshops ».
SymptĂ´mes
-
La recherche fonctionne parfaitement quand je suis connecté
-
Avec un utilisateur public (non connecté), j’obtiens l’erreur : « La fonction frappe.desk.search.search_link n’est pas en liste blanche »
Contexte
- La fonction
search_link
est bien décorée avec @frappe.whitelist()
dans le code source
- J’ai bien ajouté les permissions de lecture au rôle « Guest » sur le doctype « Hosted Workshops » :
Avez-vous déjà rencontré ce problème ?
A plus,
Antoine.
Hello Antoine,
Tu as une option spéciale dans les champs de type lien des formulaires web:
Leur traitement est particulier pour ne pas exposer la liste au monde entier.
Bonne journée
1 « J'aime »
Ah oui en effet.
Par contre je ne trouve pas cette option. Que ce soit sur le doctype lié à mon formulaire ou alors sur mon formulaire en lui-même… 
C’est dans les lignes du formulaire web
Salut Charles-Henri,
Ok j’ai bien trouvé le champ. En fait l’option est disponible pour les champs de type « Lien » mais pas pour les champs de type « Table » (ce qui est mon cas car j’ai un champ « Table » qui contient lui-même un champ lien → la liste des ateliers proposés).
En fait l’erreur vient du fait qu’il faut utiliser le décorateur : @frappe.whitelist(allow_guest = True)
au lieu de @frappe.whitelist()
En parallèle j’ai trouvé une autre solution inspirée de cette vidéo qui est d’utiliser un champ « Autocomplete » ce qui fonctionne au sein d’une table
.
Pour résumer mon problème a 3 solutions
- Option A: Faire un override de la fonction
search_link
pour rajouter le décorateur @frappe.whitelist(allow_guest = True)
au lieu de @frappe.whitelist() mais avec un risque sur la sécurité des données
- Option B : Mettre un champ
Autocomplete
dans ma table et ajouter explicitement la liste des Ateliers en option du champ. Le plus simple mais plus difficile à maintenir (il faut aller personnaliser le document à chaque fois qu’on veut modifier la liste des ateliers)
- Option C : Mettre un champ
Autocomplete
et une méthode dans le backend (sur une app) qui renvoi la liste des ateliers pour le remplir (ce qui est expliqué dans la vidéo ci-dessus). Probablement la solution la plus propre mais nécessite une app.
Je pense partir sur l’option C à terme car j’ai besoin d’une app pour ce projet de toute façon.
A plus,
Antoine.
1 « J'aime »