Utilisation de $ID$ et $SEL$ dans une requete

Bonjour tout le monde,
J’ai cherché désespérément sur le forum comment utiliser les $ID$ et $SEL$ dans la valeur d’un extrafield (module commande client) pour extraire tous les contacts du tiers (et n’en choisir qu’un).
Ma requête :
socpeople:lastname:rowid::fk_soc=($SEL$ fk_soc FROM commande WHERE rowid=$ID$)
D’après ce que j’ai lu, ça devrait fonctionner mais je n’arrive pas à comprendre pourquoi cela ne marche pas.
Merci d’avance à tous ceux qui pourraient m’aider ! :grinning:

Bonjour :slightly_smiling_face:
et avec (ajoutez le préfixe de la table) :

socpeople:lastname:rowid::fk_soc=($SEL$ fk_soc FROM llx_commande WHERE rowid=$ID$)

Merci pour le retour !
Malheureusement ça ne marche pas non plus…

Error in request SELECT rowid as rowid, lastname FROM llx_socpeople AND Filter error - Bad syntax of the search string ORDER BY lastname You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND Filter error - Bad syntax of the search string ORDER BY lastname' at line 1. Check setup of extra parameters.
1 « J'aime »

Je viens de tester sur ma v17 ca fonctionne.

Je n’y comprends rien alors, je suis en V20.0.0 et ça ne fonctionne pas.
J’ai même supprimé et recréer l’extrafield au cas où mais rien n’y fait.
Il y a peut être eu des modifs à ce niveau là entre V17 et V20 ?

A moins qu’il y a quelque chose que je fais mal ?


En config j’ai

Pour une commande brouillon j’ai ca :

1 « J'aime »

Hello
Ce n’est pas la blague avec :=: sur le filtre?
il faudrait alors (fk_soc:=:($SEL$ fk_soc FROM llx_commande WHERE rowid=$ID$))

2 « J'aime »

Merci, j’ai essayé ça mais cela ne marche pas non plus…
C’est dingue que ça marche pour @dolibarr95 et pas pour moi. :worried:
Je vais essayer de regarder ce qui a pu changer entre les 2 versions.

Voila le retour de Claude AI mais sa solution ne marche pas non plus…

En examinant la méthode fetchAllValidField() du fichier, je vois la façon dont les filtres SQL sont traités dans cette version. Voici ce qui est important à noter :

  1. Dans Dolibarr 20.0.0, la syntaxe USF (User Search Filter) est obligatoire avec l’opérateur :=: au lieu de =
  2. Pour les sous-requêtes, la variable $SEL$ est utilisée comme remplacement de SELECT
  3. Les parenthèses sont importantes pour encadrer les conditions

Pour afficher la liste des contacts du tiers de la commande en cours, voici la syntaxe correcte :

socpeople:lastname:rowid::(fk_soc:=:($SEL$ fk_soc FROM commande WHERE rowid:=:$ID$))

Explication :

  • socpeople : table des contacts
  • lastname : champ à afficher dans la liste
  • rowid : clé primaire
  • (fk_soc:=:($SEL$ fk_soc FROM commande WHERE rowid:=:$ID$)) : filtre pour obtenir les contacts du tiers associé à la commande courante
1 « J'aime »

Bon, je sèche … Impossible de faire marcher cette requête.

faut tenter un var_dump($sql) dans le fichier
core\class\extrafields.class.php
fonction
showInputField
vers
} elseif ($type == 'sellist') {

Vous êtes sur php combien?
car les seules diff que je fais entre la v17 et v20 c’est
ajout d’un 7eme critère possible et du typage par exemple

$InfoFieldList[4] = str_replace('$ID$', $objectid, $InfoFieldList[4]);

$InfoFieldList[4] = str_replace('$ID$', (string) $objectid, $InfoFieldList[4]);

Autre idée vous n’avez pas de saut le ligne en trop à la fin de socpeople:lastname:row…

Bonjour :slight_smile:

essayez ceci : socpeople:lastname:rowid::
(fk_soc:=:($SEL$ fk_soc FROM llx_commande WHERE rowid:=:$ID$))

ou : socpeople:lastname:rowid::
(fk_soc:=:$objectoffield->socid)

en veillant à utiliser un retour à la ligne !!!

Bonne continuation

1 « J'aime »

Voici les infos demandées :
|Version de Dolibarr|20.0.0|
|Version de PHP|8.2.21|
|Version de la base de données|MySQL or MariaDB 8.0.40-31|
|Version du serveur web|Apache|
J’ai vérifié et pas de saut de ligne non plus

1 « J'aime »

Merci pour le retour !
J’ai bien la liste qui apparait dans les 2 cas mais elle n’est filtrée.
Elle contient tous les contacts de tous les tiers…

bon on avance :rofl:
incroyable ce truc…

J’ai testé le 2eme en enlevant le saut à la ligne et j’ai eu un nouveau message :
Error in request SELECT rowid as rowid, lastname FROM llx_socpeople AND ((fk_soc = 0)) ORDER BY lastname You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND ((fk_soc = 0)) ORDER BY lastname' at line 1. Check setup of extra parameters.

Comme vous dites lol :joy:

Hello :slight_smile:

pouvez-vous essayer :
socpeople:lastname:rowid::(fk_soc:IN:$SEL$ fk_soc FROM llx_commande WHERE rowid=$ID$)

NB1 : utilisez éventuellement un autre préfixe pour la table « llx_commande »

NB2 : plus d’informations sur la notation USF - Universal Search Filter avec ce lien

Bonne continuation

1 « J'aime »

Merci pour le retour mais ça ne fonctionne toujours pas.
En même temps quand je regarde :
Error in request SELECT rowid as rowid, lastname FROM llx_socpeople AND ((fk_soc = 0)) ORDER BY lastname You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND ((fk_soc = 0)) ORDER BY lastname' at line 1. Check setup of extra parameters.
J’ai l’impression que $ID$ = 0, c’est peut être pour ça que ça déconne ?
Je précise que ce message apparait après avoir créer un bon de commande (je ne suis plus sur le formulaire de création)
Y a t’il un moyen de vérifier la valeur de $ID$ ?