- 1
[Opened] [[résolu]] Datasource DAO n'effectue qu'une seule requète et ne mets pas à jour le champ
Posted by kaiserbogey on 06/19/2019 18:07
Bonjour,
J'ai commencé depuis peu à travailler sur un système basé sur Jelix, et je travaille actuellement sur un formulaire, représenté par un template et géré par un contrôleur. Dans ce formulaire, j'ai un champ, qui détermine les valeurs d'un <menulist>, par le biais d'une <datasource> dao, avec un criteriafrom, comme suit :
<input ref="customer_id" type="integer" required="true"> <label>Customer</label> </input> <menulist ref="pricing_version_id" required="true"> <label>Pricing file version</label> <emptyitem>Choose a pricing file version</emptyitem> <datasource dao="booking~ttu_booking_pricing_versions" method="selectByCustomer" criteriafrom="customer_id" labelproperty="pricing_id, name, start_date" labelseparator="|#|" valueproperty="id"/> </menulist>
Dû à quelques soucis avec l'organisation du Git, je me suis retrouvé tout d'abord avec la version 1.6.0, et je n'avais aucun souci. Lorsque j'ai voulu ajouter mes modifications au Dev, le système de datasource a cessé de fonctionner :
Lorsque je modifie le champ 'customer_id', la requète est faite comme il faut vers la base grâce à la datasource, et reçoit bien une réponse, mais le champ 'pricing_version_id' ne se mets pas à jour. De plus, si je rechange ensuite le champ 'customer_id', les requètes suivantes ne sont même pas détectées par le navigateur.
J'ai donc cherché d'où venait l'erreur et me suis rendu compte que ma version locale de Jelix n'était pas la même que celle en Dev (1.6.23), et notamment donc que le fichier jforms.classic.php était différent. J'ai tenté de le modifier un peu pour faire fonctionner mon code, et ai donc changé :
$rep->data = array(); if($control->datasource->hasGroupedData()){ foreach($control->datasource->getData($form) as $k=>$items){ $data = array(); foreach ($items as $k2=>$v) { $data[] = array('value'=>$k2,'label'=>$v); } $rep->data[] = array('items'=>$data,'label'=>$k); } } else{ foreach($control->datasource->getData($form) as $k=>$v) { $rep->data[] = array('value'=>$k,'label'=>$v); } }
en :
$rep->data = array('data'=> $control->datasource->getData($form));
Cette dernière ligne est la même que celle que j'avais en version 1.6.0. Cela résout mon problème, mais je ne pense pas qu'il soit recommandé que je pousse en Dev et en Production un système basé sur un framework modifié.
Y aurait-il donc quelque chose qui m'a échappé concernant les datasources ? Je ne comprends vraiment pas comment gérer cette erreur, autrement qu'en modifiant le code de Jelix.
Merci d'avance.
[Opened] Datasource DAO n'effectue qu'une seule requète et ne mets pas à jour le champ
Posted by laurentj on 06/20/2019 10:24
Bonjour,
Non, ce n'est pas une bonne idée de remettre des lignes de code d'une ancienne version sur une version plus récente. Parce que si ces lignes ont changés, c'est qu'il y a certainement une bonne raison : correction de bugs, nouvelles fonctionnalités etc.. Et bien souvent, les modifications pour la correction de bug ou la nouvelle fonctionnalité, ne sont pas faites que dans un seul fichier, mais dans plusieurs (ce qui est le cas ici).
Bref, vous avez modifié un fichier sans modifier les autres qui étaient concernés par les améliorations concernées. Vous allez donc vous retrouver avec d'autres problèmes.
Pour le problème précis qui nous occupe : vous dites avoir une version locale différente d'une version installé sur un serveur de dev. Je n'ai pas trop compris si c'est votre version locale qui est en 1.6.23 ou la version de dev.
Avez vous un répertoire <votreapp>/www/jelix/
dans vos sources ? Si oui, assurez-vous que son contenu correspond à ce que vous avez dans lib/jelix-www/. Je soupçonne que sur la version de votre projet en 1.6.23, les scripts JS de jforms n'ont pas été mis à jour. Si vous n'avez pas de <votreapp>/www/jelix/
: 1) assurez vous que la configuration de votre serveur web contient bien un alias vers lib/jelix-www; 2) il va falloir que j'investigue votre problème.
Dans tous les cas, il faut vraiment que vous corrigiez vos problèmes git, et que vous ayez exactement les mêmes fichiers dans votre appli en local que ceux en dev. Sinon vous allez à la rencontre d'autres problèmes.
Enfin, je ne suis pas sûr que la mise à jour automatique de la liste fonctionne avec un champs de type <input>
. Il faut que ce soit aussi une liste. Je vais vérifier cela.
[Opened] Datasource DAO n'effectue qu'une seule requète et ne mets pas à jour le champ
Posted by laurentj on 06/20/2019 10:41
Je viens de tester et je confirme qu'on peut utiliser des <input>
comme critère de recherche. Votre exemple devrait donc fonctionner.
Vérifiez bien donc que tous les fichiers de Jelix proviennent de la même version de Jelix (y compris les fichiers JS éventuels dans www/jelix si ce répertoire existe).
N'oubliez pas non plus de vider le répertoire temp/<votreapp>/
sur votre installation avant de tester.
[Opened] Re: Datasource DAO n'effectue qu'une seule requète et ne mets pas à jour le champ
Posted by kaiserbogey on 06/20/2019 10:41
Bonjour, et merci de votre réponse.
J'ai modifié un fichier, mais uniquement dans un but de compréhension du problème, j'ai bien évidemment supprimé mes modifications ensuite, afin de garder une instance propre de Jelix, pour éviter les problèmes.
La version de Dev est la 1.6.23, celle sur laquelle je travaillais en local était la 1.6.0. Malheureusement, n'étant qu'un stagiaire dans l'entreprise, je n'ai pas la main sur la gestion du Git, j'ai donc dû me contenter de faire part de ces problèmes au responsable, afin qu'il les résolve au plus vite.
J'ai bien un répertoire <appli>/www/jelix, qui semble contenir la même chose que lib/jelix-www.
Tenez-moi au courant concernant la mise à jour automatique des listes avec un champ de type <input>.
Merci encore de votre aide.
[Opened] Datasource DAO n'effectue qu'une seule requète et ne mets pas à jour le champ
Posted by kaiserbogey on 06/20/2019 10:48
D'accord, merci d'avoir pris le temps de vérifier. Je vais inspecter les différents fichiers, merci encore.
[Opened] Datasource DAO n'effectue qu'une seule requète et ne mets pas à jour le champ
Posted by laurentj on 06/20/2019 10:55
La version dev n'est pas dans le git, dans une branche particulière ? Si c'est le cas, peut être faut-il changer de branche ? Votre copie locale est bien à jour par rapport au contenu sur le serveur git ?
[Opened] Datasource DAO n'effectue qu'une seule requète et ne mets pas à jour le champ
Posted by kaiserbogey on 06/20/2019 11:01
Elle est dans le Git, avec sa propre branche, mais l'ensemble est très bizarrement organisé malheureusement, et je ne suis pas à même de modifier tout ça.
Pour faire court, nous avons une branche "develop", une branche "dev", et une branche "prod". Lors de modifications à mettre en Dev, nous devons :
1) Merge le local dans Develop 2) Merge le Develop dans DevLors de modifications à mettre en Prod, nous devons merge la branche Develop (et non dev) dans Prod. Or, la branche Develop, à partir de laquelle j'ai crée ma propre branche, a une version de Jelix différente de celle sur les branches Dev et Prod.
Bref, toutes ces différences dans les branches ont causé beaucoup de problèmes, notamment celui-ci, qui je le crains va prendre un certain temps à résoudre.
[Opened] Datasource DAO n'effectue qu'une seule requète et ne mets pas à jour le champ
Posted by laurentj on 06/20/2019 11:24
Ok. Cela veut donc dire que votre branche locale n'est pas à jour par rapport à Develop et Dev.
Donc il faut merger la branche Develop sur votre branche locale avant d'effectuer vos modifications.
[Opened] Datasource DAO n'effectue qu'une seule requète et ne mets pas à jour le champ
Posted by kaiserbogey on 06/20/2019 11:27
Ok, je ferai ça, merci encore.
- 1