abracadabraPDF › Forums › PDF – Général › Récupération données BDD dans un formulaire PDF (La suite)
- Ce sujet est vide.
-
CréateurSujet
-
3 mars 2014 à 15:19 #44798rattlesnakeMembre
Bonjour à tous j’ai suivis avec intérêt le topic suivant qui correspond tout à fait à mon besoin actuel :
http://abracadabrapdf.net/forum/index.php/topic,2228.0.htmlje voudrais remercier tout particulièrement Alex et Merlin pour leur travail de qualité et de longue haleine. J’ai décider de creer un nouveau topic pour ne pas déterrer l’ancien
Admettons que l’on se base sur cette version du doc :
http://abracadabrapdf.net/forum/index.php?action=dlattach;topic=2228.0;attach=1407Concernant la sauvegarde :
Quand on sélectionne un champs puis qu’on sauvegarde le document, les champs sont bien conservés mais par contre la liste déroulante se réinitialise toujours à la dernière valeur au démarrage.Est-il possible de stocker la valeur d’une liste déroulante dans une var globale si elle est renseignée, et de l’injecter au démarrage du document ?
(Je fais des tests en même temps à coté, si je trouve je poste le résultat)Merci d’avance !
-
CréateurSujet
-
AuteurRéponses
-
3 mars 2014 à 16:01 #56767rattlesnakeMembre
Voila ce que j’ai actuellement :
Script à l’ouverture de mon doc :
Code:initialisation();Contenu de la fonction d’initialisation :
Code:function initialisation()
{
if(global.dernNomStagiaireSelectionne!=””)
{
//Si la variable locale existe on la prend.
this.getField(BaseDeDonneesStagiaires).value=global.dernNomStagiaireSelectionne;
}
}//initialisation(); <= si je dé-commente cette ligne le script fonctionne mais ré-écrase toujours la même valeur à chaque frames quelque soit la value selectionnée dans la liste déroulante (si j'ai bien compris)
Action du document si celui-ci est enregistré :
Code:global.dernNomStagiaireSelectionne=this.getField(BaseDeDonneesStagiaires).value;
global.setPersistent(“dernNomStagiaireSelectionne”,true);Merci pour votre aide
EDIT : en l’état actuel de ce code le menu déroulant n’est pas sauvegarder au prochain redémarrage du pdf
3 mars 2014 à 19:50 #56768MerlinMaître des clésQuand on sélectionne un champs puis qu’on sauvegarde le document, les champs sont bien conservés mais par contre la liste déroulante se réinitialise toujours à la dernière valeur au démarrage.
Est-il possible de stocker la valeur d’une liste déroulante dans une var globale si elle est renseignée, et de l’injecter au démarrage du document ?
(Je fais des tests en même temps à coté, si je trouve je poste le résultat)Bonjour,
Quelle est la vraie question ?
Tu voudrais que la liste laisse affichée la dernière sélection effectué ?Auquel cas il n’y a pas plus simple : il suffit de supprimer l’essentiel des scripts après avoir initialisé la liste une première fois.
:Smiley15:3 mars 2014 à 19:59 #56769rattlesnakeMembreMerci pour ta réponse si rapide
C’est exactement ça, j’aimerais pouvoir conserver la dernière selection effectuée à la sauvegarde, tout en gardant bien sûr la possibilité de pouvoir la modifier plus tard.
Supprimer les scripts d’initialisation et d’importation ? Mais du coup si je veux modifier mes sélections par la suite ?
3 mars 2014 à 20:12 #56770MerlinMaître des clésPostes une maquette, ce sera plus simple pour la suite.
:Smiley01:3 mars 2014 à 21:31 #56771rattlesnakeMembreCa c’est trop sympa Merlin !!!
La voici, elle est simplissime j’ai tout viré mis à part ce qui nous interesse ^^
Donc sur la première page il y a la liste déroulante, et sur la deuxieme, il y a le champ qui récupéré la cellule qui m’interessemerci d’avance pour ta precieuse aide :soleil:
PS : D’ailleurs si tu as une astuce… le fichier fais plus de 4 mo alors qu’il est vide, j’ai essayé les options de cleanage mais sans succès
http://dl.free.fr/gcqaBwLX64 mars 2014 à 11:24 #56772MerlinMaître des clésDans les scripts de document il y en a un qui s’appelle “Xinitialisation”, c’est lui qui réinitialise à chaque lancement du document.
Donc il faut supprimer ce script, après l’avoir copié-collé dans la Console pour l’exécuter une première fois (initialisation).
:Smiley15:le fichier fais plus de 4 mo alors qu’il est vide, j’ai essayé les options de cleanage mais sans succès
L’audit me dit qu’il contient environ 4 Mo de polices inutilisées, et on ne peut rien supprimer avec l’Optimisation…
Dans ce cas, le mieux est de créer un nouveau PDF vierge* et de copier-coller les champs dans le nouveau document.
:Smiley01:* ==> http://abracadabrapdf.net/utilitaires/acrobat-plugins/abracadabratools/
4 mars 2014 à 11:33 #56773rattlesnakeMembreMerci pour ta réponse merlin.
Mais l’utilisateur final n’aura pas accès à la console.
Serait-il possible de ne lancer ce script d’initialisation qu’une seule fois au lancement puis de charger des variables globales de sauvegarde ?
Je n’ai pas reussi à le faire car si je le fais, je ne peux plus charger les données avec mon menu déroulantPS : merci pour l’explication du poids du document
4 mars 2014 à 13:46 #56774MerlinMaître des clésJe croyais que tu voulais initialiser le document une fois pour toute et le diffuser ainsi.
Si c’est à l’utilisateur de le faire le mieux est de lui placer un gros bouton sous les yeux.
:Smiley01:4 mars 2014 à 14:22 #56775rattlesnakeMembreC’est à dire de mettre un bouton exécutant la fonction xinitialisation() seulement au clique?
Je viens de faire un test… ca fonctionne mais je trouve que ce n’est pas top pour l’utilisateur.
Il n’y a pas moyen de faire une condition dans le script xinitialisation qui définit qu’au démarrage, le menu déroulant reprend la value de la session précédente, et que si on change manuellement sa valeur, alors on relance l’importation de la base de données ?
Je sais pas si je suis clair ^^ En tout cas je continue de tester de mon coté, mais je ne suis pas très familier avec le codeEDIT : A mais je suis bête, il suffit de lancer la fonction xinitialisation seulement au clique du menu déroulant !!!! Ca à l’air de fonctionner niquel
4 mars 2014 à 14:53 #56776rattlesnakeMembreJuste une petite question Bonus :
J’aimerais pouvoir masquer la toolbar des pièces jointes qui s’ouvre automatiquement au démarrage du document.
Cela est-il possible par code ?Sinon j’ai trouvé un pdf d’alex qui fait cela, mais je n’arrive pas à trouver le code ou les options d’exportations
http://abracadabrapdf.net/forum/index.php?action=dlattach;topic=2107.0;attach=11994 mars 2014 à 17:35 #56777MerlinMaître des clésJ’aimerais pouvoir masquer la toolbar des pièces jointes qui s’ouvre automatiquement au démarrage du document.
Acrobat : menu Fichier : Propriétés : Vue Initiale : Onglet de navigation.
:Smiley01:
5 mars 2014 à 08:10 #56778rattlesnakeMembreA yes merci merlin, grâce à toi une affaire de plus de classée
5 mars 2014 à 09:12 #56779rattlesnakeMembreArf nan….
Pourrais tu m’aider sur un soucis d’optimisation/de vitesse de lecture ? (c’est vraiment le dernier soucis)En fonction du lieu ou je lance la fonction xinitialisation() sur le menu déroulant j’ai 2 résultats différents :
Si le lance depuis : propriété de la liste déroulante/Validation/Executer le script de validation personnalisé, tout fonctionne parfaitement, mais je perds un gros gain de vitesse (environ 5 secondes de chargement, comme s’il lançait un calcul en boucle).
(voir fichier : http://dl.free.fr/i7qq8j0YB)Si par contre je fais appel à elle depuis propriété de la liste déroulante/Actions
Déclencheur => souris relachée
Selectionner l’action : executer un script javascriptAlors la requete du menu se fait de manière instantané, mais il y a un petit bug si:
– je choisis un element de la liste
– Je clique n’importe ou sur la page vierge de mon formulaire (pour desactiver la selection du champs)
– je re-selectionne le menu déroulant
=> (Alors le dernier champs de la liste du menu se selectionne automatiquement à la place de la derniere valeur selectionnée et de plus le champs de résultat ne change pas car pas de clique de souris. Ce qui me pose pb car l’utilisateur peut faire une mauvaise manipulation). EDIT : cela se produit à cause la fonction configComboBox(); appelée par la fonction xinitialisationJe sais que j’abuse, mais aurais tu le temps de jeter un coup d’œil au code ?
5 mars 2014 à 11:20 #56780MerlinMaître des clésOui, postes ton doc.
Je me doute du problème mais ce sera plus facile à verifier et à expliquer.
:Smiley01:5 mars 2014 à 13:00 #56781rattlesnakeMembreyes voici le fichier avec la deuxième méthode :
propriété de la liste déroulante/Actions
Déclencheur => champ activé
Selectionner l’action : executer un script javascriptCode:xinitialisation();Et du coup au sein du code de la fonction xinitialisation() j’ai commenté la dernière ligne :
Code://xinitialisation(); // (on commente la ligne car empêche la sauvegarde de la selection)5 mars 2014 à 13:21 #56782MerlinMaître des clésyes voici le fichier avec la deuxième méthode :
propriété de la liste déroulante/Actions
Déclencheur => champ activé
Selectionner l’action : executer un script javascriptCode:xinitialisation();Ben… Ca à l’air correct… Du coup je ne comprend plus bien la question…
Mais effectivement, ça ne peut que mieux fonctionner en Champ activé ou en Souris enfoncée.
:doute:Par contre j’ai une réponse : il faut absolument que tu configure tes Préférences JavaScript comme sur la capture ci-jointe.
Ca te permettra de voir que la Console répète sans cesse le même message :
TypeError: this.getField(fieldName) is null
18:AcroForm:BaseDeDonneesStagiaires:Keystroke:Smiley15:
[attachment deleted by admin]
5 mars 2014 à 13:40 #56783rattlesnakeMembreBen… Ca à l’air correct… Du coup je ne comprend plus bien la question…
Cette technique fonctionne mais il y a un petit bug qui peut être embettant.
Essaye la demarche suivante :
– Choisis par ex la value “Nom complet FR 3” dans la liste déroulante.
– Clique un coup sur le fond blanc de la page
– re-selectionne le menu déroulant… et la, au lieu de selectionner la value “Nom complet FR 3”, il te selectionne la dernière valeur :”Nom complet FR 25″…C’est ce petit bug que j’aimerais pouvoir corriger
Edit : merci pour l’astuce de la console
5 mars 2014 à 19:15 #56784MerlinMaître des clésEssaye la demarche suivante :
– Choisis par ex la value “Nom complet FR 3” dans la liste déroulante.
– Clique un coup sur le fond blanc de la page
– re-selectionne le menu déroulant… et la, au lieu de selectionner la value “Nom complet FR 3”, il te selectionne la dernière valeur :”Nom complet FR 25″…C’est ce petit bug que j’aimerais pouvoir corriger
Non, pour moi ça fonctionne correctement, sans bug. J’ai testé avec plusieurs versions d’Acrobat et de Reader.
Donc :
– bonne nouvelle, ça fonctionne,
– mauvaise nouvelle, il y a un bug sur ton ordi.:Smiley01:
5 mars 2014 à 19:18 #56785MerlinMaître des clésPS :
1. Toujours tester avec Reader, pas avec Acrobat.
2. Quand Reader ou Acrobat ont des comportements incohérents ou juste douteux : quitter + relancer. En général ça va mieux après.
:Smiley15:5 mars 2014 à 19:19 #56786MerlinMaître des clésmerci pour l’astuce de la console
Ca fait 2 fois aujourd’hui, dans 2 sujets.
Je crois que je vais bientôt me fendre d’un petit article…:Smiley01:
5 mars 2014 à 21:54 #56787rattlesnakeMembreCa fait 2 fois aujourd’hui, dans 2 sujets.
Je crois que je vais bientôt me fendre d’un petit article…MDR !!! effectivement
Pour le document PDF, je viens de le tester sur mon perso avec le reader XI et j’ai toujours ce même bug
Je pense que j’ai du mal expliquer le probleme.Ca sera sans doute d’avantage visible avec ce fichier ou il y a 2 menus déroulants :
http://dl.free.fr/q9NtCwqau– Fais une sélection avec le premier menu ex : Nom complet FR 13
– Fais une selection avec le deuxieme menu (et la… bim, le premier menu déroulant et passé de Nom complet FR 13 à Nom complet FR 25)C’est à cause de la fonction configComboBox qui réinitialise a chaque fois le contenu des menu deroulants si je me trompe pas
Et si chez toi ça ne fais pas le bug… Je crois que je ferai une petite vidéo arf ^^
6 mars 2014 à 10:04 #56788alexParticipantBonjour à tous,
Le script xinitialisation()) qui renseigne les menus déroulants du formulaire une fois pour toutes, doit se faire à l’ouverture du document.
Il ne faut pas le relancer à chaque utilisation des menus déroulants pour lesquels seul le script de format personnalisé doit être conservé.6 mars 2014 à 10:20 #56789MerlinMaître des clésSi le lance depuis : propriété de la liste déroulante/Validation/Executer le script de validation personnalisé, tout fonctionne parfaitement, mais je perds un gros gain de vitesse (environ 5 secondes de chargement, comme s’il lançait un calcul en boucle).
(voir fichier : http://dl.free.fr/i7qq8j0YB)Tu m’étonnes !
Je viens de tester ce fichier : la Console se transforme en sapin de Noël qui clignote de partout.
Jusqu’à ce qu’elle arrête d’elle-même la boucle.
:idee:6 mars 2014 à 10:20 #56790MerlinMaître des clésOuf.
Merci Alex, parce-que je suis complètement largué.
:geek:6 mars 2014 à 10:41 #56791rattlesnakeMembreMerci pour ton intervention Alex !
Qu’est ce que tu préconiserais du coup, ça t’embeterai de re-publier le PDF a ta manière ?
Dans la dernière version que vous aviez fait ensemble sur l’autre topic, malheuresement les listes déroulantes étaient reinitialisées à chaque démarrage :
http://abracadabrapdf.net/forum/index.php?action=dlattach;topic=2228.0;attach=1407Concernant mes dernières modifications (dernier pdf que j’ai posté)
http://dl.free.fr/q9NtCwqauj’ai trouvé une parade qui fonctionne en bidouillant à la mano:
une fois que les listes déroulantes sont bien importées, j’édite la fonction xinitialisation() ;En commentant tout simplement les lignes :
//configComboBox();(Car elles me ré-écrasaient les listes déroulantes à chaque fois.)
mais je suis preneur pour une solution plus viable et sans retouches
10 mars 2014 à 11:22 #56792alexParticipantBonjour à tous,
Le formulaire est trop lourd, j’ai donc transféré les champs, les scripts et les pièces jointes sur ma maquette.
Merci à Merlin d’avoir ajouté des commentaires dans mes scripts.
Le but de ces outils est de renseigner des menus déroulants à partir de données embarquées dans des fichiers .csv que l’on trouve en pièces jointes. Dans notre exemple, les menus déroulants sont renseignés dès l’ouverture du document une fois pour toute, mais dans d’autres configurations, ils pourront être renseignés en fonction du contexte de saisie. Attention, toutefois, le temps de chargement n’est pas négligeable.
La sélection d’un item de ces menus déroulants provoque l’affichage des données correspondantes issues des tables, ici pour l’exemple en fond jaune.
Attention au format des données.Bon courage.
[attachment deleted by admin]
11 mars 2014 à 21:45 #56793rattlesnakeMembreMerci pour ton pdf Alex,
Malheureusement à chaque redémarrage du fichier et malgré les sauvegardes, les menus déroulants se mettent automtiquement sur “Nom complet FR 25”, sans conserver dernières valeurs.
Et c’est là ou est tout mon soucis
12 mars 2014 à 09:42 #56794alexParticipantOui, c’est normal ! Les menus déroulants sont remis à jour à chaque ouverture puisque le script est conçu comme ça. Seules les données des champs associés (en jaune sur la maquette) sont invariantes et on notera que le premier de ces champs associé contient la valeur de l’item sélectionné dans le menu déroulant.
Pour conserver la sélection du menu déroulant après enregistrement du formulaire, il faut revoir la maquette de la manière suivante:
Lors de l’ouverture le script d’ouverture relit les tables sans toucher aux menus déroulants (voir script ouverture())
Lors de la modification d’une pièce jointe, on doit mettre à jour les menus déroulants (ici grâce au bouton Mise à jour” qui lance le script initialisation(). On peut ensuite masquer ce bouton. Ci-joint maquette pour illustration.[attachment deleted by admin]
14 mars 2014 à 07:51 #56795rattlesnakeMembreYes vraiment génial Alex !
C’est plus propre que ma méthode à l’arrache, je te remercie beaucoup d’avoir pris le temps de faire cette nouvelle maquette
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.