Création d'extrafields liste issue d'une table

Bonjour
J’ai créé un extrafield qui récupère la liste des tiers actifs. Pour cela j’ai configuré un champ personnalisé avec le code ‹ destinataire › et la valeur ‹ societe:nom:rowid::status=1 ›. Jusque là tout va bien.
Je voudrais créer un second champ personnalisé qui récupère la liste des contacts du tiers sélectionné dans le champ précédent. La doc d’aide est assez vague sur la façon de procéder et j’ai beau essayer dans tous les sens je ne parviens pas à faire fonctionner ce champ comme je voudrais.
Voici ce que dit l’aide dans Dolibarr

Donc d’après ce que j’ai compris je devrais faire une liste qui dépend de mon attribut complémentaire ‹ destinataire › et la valeur de mon champ devrait ressembler à ça :

‹ destinataire › est ma liste parente et rowid la colonne parente censée me donner l’équivalent du ‹ fk_soc › de mon contact
J’ai essayé tout un tas de variantes, mais rien ne marche. Au mieux j’obtiens la liste complète des contacts dans la base.

Quelqu’un aurait-'il une idée ?

J’espérait m’en sortir via une requête imbriquée

Logiquement cela devrait me permettre de retrouver l’ID de la société de mon premier extrafield pour filtrer les contacts dans le second champ.
Mais dans le formulaire j’ai le message d’erreur suivant qui apparait :

C’est étrange. On dirait que le mot extra dans le nom de la table llx_commande_fournisseur_extrafields est interprété comme un paramètre extra et qu’une clause supplémentaire vers la table llx_socpeople_extrafields (dont je ne veut pas du tout) est automatiquement ajouté dans la requête.
J’ai un peu du mal à comprendre la logique du système de paramétrage.

Je me répond à moi même.
J’ai trouvé une solution qui résout mon problème. Mais ce n’est pas une solution idéale dans la mesure ou je modifie le code source de la classe Dolibarr des extrafields. Il ne faut pas utiliser cette solution si l’on veut utiliser les options ‹ extra ›.
Mon extrafield fonctionne donc parfaitement avec le paramètre :

Voici les modifications : J’ai commenté certaines lignes pour empêcher la détection du terme ‹ extra › dans les paramètres de mon extrafield dans le fichier dans le fichier ‹ htdocs/code/class/extrafields.class.php › entre la ligne 1162 et 1170.

/* if (strpos($InfoFieldList[4], 'extra')!==false) { $sql.= ' as main, '.MAIN_DB_PREFIX .$InfoFieldList[0].'_extrafields as extra'; $sqlwhere.= ' WHERE extra.fk_object=main.'.$InfoFieldList[2]. ' AND '.$InfoFieldList[4]; } else {*/ $sqlwhere.= ' WHERE '.$InfoFieldList[4]; // }

On va dire que pour l’instant ça me dépanne :wink:

voir aussi Attribut supplémentaire list table parametrée

1 « J'aime »