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
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.