|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
saisie assistée sur un champ dans une zone répétée |
Débuté par Gregory DEJENEFFE, 04 juin 2019 14:14 - 4 réponses |
| |
| | | |
|
| |
Membre enregistré 47 messages |
|
Posté le 04 juin 2019 - 14:14 |
Bonjour,
quelqu'un a-t-il un retour d'expérience pour l'utilisation de la saisie assistée sur un champs placé dans une zone répétée ?
J'ai testé sur un fichier ou une requête mais pas de résultat affiché : on voit bien une sorte de "sablier" apparaître dans la zone de saisie tout à droite mais pas de proposition. Par contre, je prends le champ et je le sors de la ZR et c'est ok cela fonctionne.
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 47 messages |
|
Posté le 05 juin 2019 - 09:04 |
Voici la réponse à la question de la part du ST. Comme ça si qqn fait la même recherche que moi, il saura quoi faire
Actuellement il n'est pas possible de faire une saisie assiéte avec les fonctions WEBDEV dans une zone répétée avec des valeurs de saisie différentes pour chaque ligne. Une suggestion existe pour ce point et a été transmise à notre service Qualité et à notre équipe de Développement |
| |
| |
| | | |
|
| | |
| |
Posté le 05 juin 2019 - 15:12 |
Bonjour,
Code navigateur qui affiche un champ liste sous la zone de saisie, pas d'autres solutions.
Je l'ai déjà fait cela fonctionne, ne pas oublier de rendre le champ liste superposable pour pouvoir modifier par code navig les ..x et ..y.
Par contre ce genre de saisie assisté ce fait de moins en moins, pour le web on a tendance à l'entrée dans le champs de saisie, de faire un popupAffiche, et dans la popup y'a le champ de saisie plus la liste en dessous ^^.
Tout va dépendre si le site est client ou métier ^^ |
| |
| |
| | | |
|
| | |
| |
Posté le 08 juin 2019 - 13:37 |
1) Je l'utilise au quotidien avec la saisie assistée programmée et c'est fonctionnel avec des valeurs proposées différentes sur chaque ligne, (issues d'un script déclenché dans une BDD cherchant les valeurs contenant les quelques lettres tapées par l'utilisateur), sans s'embêter avec des champs listes superposables. Je suis étonné que le ST vous ai répondu cela d'autant que c'est eux qui m'ont répondu comment faire. ---- 2) En revanche le script est exécuté à chaque pression d'une touche, ce qui, sur les très grosses bases de données, peut nuire à la fluidité de l'utilisateur. J'ai quelques clients dans ce cas. J'essaie de ne déclencher le script que dès que l'utilisateur s'arrête de saisir pendant une demi seconde, mais ne peut pas utiliser la fonction SaisieAssistéeOuvre dans la ZR car elle bogue, elle ouvre en même temps toutes les saisies assistées des champs de saisie situés AVANT (curieusement pas APRES) elle dans la ZR ce qui fait désordre à l'affichage (le temps de la saisie). Sans utiliser cette fonction, cela fonctionne aussi, mais le fonctionnement est un peu curieux, il suffit de saisir quelques lettres, pauser une demi seconde, puis saisir la dernière lettre et la saisie assistée s'ouvre. ---- Code de la zone de saisie de la ZR du 1) ce champ s'appelle SAI_Text > Initialisation de SAI_Text //hors sujet mais permet d'avoir une ligne d'aide personnalisée par zone de saisie de la ZR (merci au ST) SAI_Text..ClasseHTML="FormPlaceHolderText1"
Entrée de champ SI Faux ALORS //Pour charger jQuery avec la page, idem hors sujet jQuery("") FIN SAI_ChampActif=ZR_Formulaire //pour mémoriser le champ appelant dans les codes suivants SaisieAssistéeSupprimeTout(SAI_Text) > Touche relachée OnKeyUp de SAI_Text FinTimer(gnNumeroTimer) gnNumeroTimer=0 gnNumeroTimer = Timer(DeclencheSaisieAssistee,500ms) //peut être appelée en direct sans timer sur les petites BDD
Touche enfoncée OnKeyDown de SAI_Text SaisieAssistéeFerme(SAI_Text)
---- La procédure qui déclenche la saisie assistée Elle permet aussi d'ouvrir la liste de toutes les valeurs possibles si l'utilisateur saisit * ... Malgré son nom ATT_ComboContenuInitNavigateur est un champ texte sinon pas utilisable en code navigateur PROCÉDURE DeclencheSaisieAssistee()
FinTimer(gnNumeroTimer) gnNumeroTimer=0
sSousChaine est une chaîne
SI ZR_Formulaire.ATT_RequeteSQL[SAI_ChampActif]<>"" ALORS SI Taille(SAI_Text)>1 _ET_ Gauche(SAI_Text,1)="*" ALORS //Au cas où on a commencé par saisir une étoile SAI_Text=Milieu(SAI_Text,2) FIN SaisieAssistéeSupprimeTout(SAI_Text) SI SAI_Text="*" ALORS ZR_Formulaire.ATT_ComboContenuInitNavigateur[SAI_ChampActif]=AJAXExécute(ChargeContenuInitNavigateur,SAI_ChampActif,"") SINON SI SAI_Text<>"" ALORS ZR_Formulaire.ATT_ComboContenuInitNavigateur[SAI_ChampActif]=AJAXExécute(ChargeContenuInitNavigateur,SAI_ChampActif,SAI_Text) SINON ZR_Formulaire.ATT_ComboContenuInitNavigateur[SAI_ChampActif]="" FIN FIN SI ZR_Formulaire.ATT_ComboContenuInitNavigateur[SAI_ChampActif]<>"" ALORS sSousChaine=ExtraitChaîne(ZR_Formulaire.ATT_ComboContenuInitNavigateur[SAI_ChampActif], rangPremier, RC) TANTQUE sSousChaine <> EOT SaisieAssistéeAjoute(SAI_Text,ExtraitChaîne(sSousChaine,1,Caract(27))) //Pour ne conserver que la partie visible... sSousChaine = ExtraitChaîne(ZR_Formulaire.ATT_ComboContenuInitNavigateur[SAI_ChampActif], rangSuivant, RC) FIN FIN SI SAI_Text="*" ALORS SaisieAssistéeParamètre(SAI_Text,saFiltre,filtreAucun) SINON SaisieAssistéeParamètre(SAI_Text,saFiltre,filtreAucun) SaisieAssistéeParamètre(SAI_Text,saTailleMin,1) FIN FIN
---- La procédure qui interroge la BDD en fonction des caractères déjà saisis par l'utilisateur Les paramètres d'accès à la BDD sont ici stockés dans un XML (dont le script) Les requetes renvoient une chaine + un ID unique Exemple de script SQL : SELECT Nom||' '||Prenom AS Element, IDUser AS IDElement FROM TUser WHERE Nom||' '||Prenom ILIKE '%[sFiltre]%' LIMIT 20 PROCÉDURE ChargeContenuInitNavigateur(nIndice,sFiltre)
xmlRequete est un xmlDocument MaConnexionSQL est une Connexion sCodeSQL est une chaîne sdChargeCombo est une Source de Données nNombreResultat est un entier
gsListe1=""
xmlRequete=XMLOuvre(ATT_RequeteSQL[nIndice],depuisChaîne) SI PAS ErreurDétectée _ET_ xmlRequete.xRequete.xConnexion.xServeur<>"" ALORS MaConnexionSQL..Provider=xmlRequete.xRequete.xConnexion.xProvider MaConnexionSQL..Serveur=xmlRequete.xRequete.xConnexion.xServeur MaConnexionSQL..BaseDeDonnées=xmlRequete.xRequete.xConnexion.xBaseDonnees MaConnexionSQL..Utilisateur=xmlRequete.xRequete.xConnexion.xUtilisateur MaConnexionSQL..MotDePasse=Décrypte(xmlRequete.xRequete.xConnexion.xMotDePasse,"motdepassepersonnel",crypteAnsi) ConnexionVerifiePort(MaConnexionSQL) sCodeSQL=XMLVersTexte(xmlRequete.xRequete.xSQL) sCodeSQL=Remplace(sCodeSQL,"[sFiltre]",sFiltre,MotComplet+SansCasse) sRubrique est une chaîne SI sCodeSQL<>"" _ET_ HOuvreConnexion(MaConnexionSQL) ALORS SI sFiltre="" ALORS sCodeSQL=Remplace(sCodeSQL,"LIMIT 20","") SI Position(sCodeSQL,"ORDER BY")=0 ALORS sCodeSQL+=[RC]+"ORDER BY Element" FIN FIN HLibèreRequête(sdChargeCombo) SI PAS HExécuteRequêteSQL(sdChargeCombo, MaConnexionSQL, hRequêteSansCorrection+hRequêteSansCorrectionHF,sCodeSQL) ALORS //Traité PostgreSQL et Linux SINON nNombreResultat=0 //Initialisation du nombre de résultats sRubrique=HListeRubrique(sdChargeCombo) SI Position(sRubrique,"IDElement",1,SansCasse)>0 ALORS POUR TOUT sdChargeCombo SI sdChargeCombo.Element<>"" ALORS nNombreResultat+=1 gsListe1+=[RC]+sdChargeCombo.Element+gLien(sdChargeCombo.IDElement) FIN FIN SINON POUR TOUT sdChargeCombo SI sdChargeCombo.Element<>"" ALORS nNombreResultat+=1 gsListe1+=[RC]+sdChargeCombo.Element FIN FIN FIN FIN HLibèreRequête(sdChargeCombo) HFermeConnexion(MaConnexionSQL) SINON FIN SINON FIN ZR_Formulaire.ATT_ComboContenuInitNavigateur[nIndice]=gsListe1 //On affecte ici sinon curieusement ce n'est pas renvoyé vers le serveur RENVOYER gsListe1 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 47 messages |
|
Posté le 09 juin 2019 - 10:03 |
Bonjour
Merci pour le code partagé ... c'est super sympa. J'ai contourné mon problème en changeant l'interface utilisateur (c'est une appli interne à l'entreprise, donc je suis plus libre de faire "comme je veux", sans impératif clientS) et j'ai pu avancer. Mais top pour le code et je regarderai à cela |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|