Sqlfilters sur des extrafields avec l'api rest

Bonjour,

Est t’il possible d’utiliser le SQL filter pour n’avoir que certains item ayant un certain extrafield ?
Comme on pourrait le faire en SQL avec par exemple

SELECT * FROM `llx_contrat` JOIN `llx_contrat_extrafields` ON `llx_contrat`.rowid = `llx_contrat_extrafields`.fk_object WHERE `llx_contrat_extrafields`.cat = 1

Cordialement

1 « J'aime »

Bonjour,

Je ne pense pas car dans mon souvenir, la jointure avec les extrafields est faite après la condition de sélection sur la table principale dans un second temps (mais je dis peut-être des bêtises ou alors cela a pu changer).

Pour le module societe, ce si foncionne:
t.rowid = (select fk_object from llx_societe_extrafields where extrafieldname='Requestedvalue' )

Bonjour,

Je n’arrive pas à mettre en place cette solution de mon côté, la solution proposé est-elle a mettre dans le champ sql filter ?

Merci d’avance

P.S.: Une requete d’exemple avec un filtre sur les extrafield serait le top

Personnellement, j’ai un extrafield nommé carte pour les tiers,

J’ai mis dans sql filter :
t.rowid = (select fk_object from llx_societe_extrafields where carte=‹ 1 ›)

la requete qui renvoie un 400 dans l’explorer:

https://arpe.cier14.org/api/index.php/thirdparties?sortfield=t.rowid&sortorder=ASC&limit=100&sqlfilters=t.rowid%3A%3D%3A’(select%20fk_object%20from%20llx_societe_extrafields%20where%20carte%3D’1’)’

Bonjour, après avoir retourné le problème dans tout les sens… sans jamais parvenir à un résultat, je suis tombé sur cela: (on m’interdit de poster des liens, super…) Cherchez sur google: Fix_#23239_API_Filter_for_ExtraFields

Qui indique une modification du code qui implémente cette fonctionnalité pour la version 18.
Comme la version 18 est encore en développement, j’ai préféré implémenter cette fonctionnalité dans ma version actuelle (17.0.2).
Ce qui me permets maintenant d’utiliser l’API comme ce-ci:

((ef.stripe_cus_id:=:'cus_123abc'))
https://dolibarr.test/api/index.php/thirdparties?sortfield=t.rowid&sortorder=ASC&sqlfilters=((ef.stripe_cus_id%3A%3D%3A'cus_123abc'))

Donc petit tuto pour faire la modif avant la version 18:

Se rendre dans les fichiers Dolibarr, chemin : htdocs/societe/class/
Trouver et ouvrir le fichier: api_thirdparties.class.php
Ajouter la ligne:

$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_extrafields AS ef ON ef.fk_object = t.rowid";	// So we will be able to filter on extrafields

Entre ces deux lignes:

$sql .= " FROM ".MAIN_DB_PREFIX."societe as t";
<<< ICI !!!!!! >>>
if ($category > 0) {

Redémarrer Dolibarr

Si vous avez encore une erreur 502, allez dans la configuration du module API REST et désactivez/réactivez le mode « production » pour vider le cache.