Donnez vie à vos documents numériques !
 

Récupération données BDD dans un formulaire PDF (La suite)

abracadabraPDF Forums PDF – Général Récupération données BDD dans un formulaire PDF (La suite)

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #44798
    rattlesnake
    Membre

    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.html

    je 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=1407

    Concernant 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 !

Affichage de 29 réponses de 1 à 29 (sur un total de 29)
  • Auteur
    Réponses
  • #56767
    rattlesnake
    Membre

    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

    #56768
    Merlin
    Maître des clés

    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)

    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:

    #56769
    rattlesnake
    Membre

    Merci pour ta réponse si rapide :D

    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 ?

    #56770
    Merlin
    Maître des clés

    Postes une maquette, ce sera plus simple pour la suite.
    :Smiley01:

    #56771
    rattlesnake
    Membre

    Ca 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’interesse :)

    merci 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/gcqaBwLX6

    #56772
    Merlin
    Maître des clés

    Dans 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/

    #56773
    rattlesnake
    Membre

    Merci 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éroulant  :/

    PS : merci pour l’explication du poids du document :)

    #56774
    Merlin
    Maître des clés

    Je 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:

    #56775
    rattlesnake
    Membre

    C’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 code :)

    EDIT : 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

    #56776
    rattlesnake
    Membre

    Juste 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=1199

    #56777
    Merlin
    Maître des clés

    J’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:

    #56778
    rattlesnake
    Membre

    A yes merci merlin, grâce à toi une affaire de plus de classée :)

    #56779
    rattlesnake
    Membre

    Arf 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 javascript

    Alors 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 xinitialisation

    Je sais que j’abuse, mais aurais tu le temps de jeter un coup d’œil au code ?

    #56780
    Merlin
    Maître des clés

    Oui, postes ton doc.
    Je me doute du problème mais ce sera plus facile à verifier et à expliquer.
    :Smiley01:

    #56781
    rattlesnake
    Membre

    yes 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 javascript

    Code:
    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)

    http://dl.free.fr/rr4uXeEuR

    #56782
    Merlin
    Maître des clés

    yes 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 javascript

    Code:
    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]

    #56783
    rattlesnake
    Membre

    Ben… 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

    #56784
    Merlin
    Maître des clés

    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 :)

    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:

    #56785
    Merlin
    Maître des clés

    PS :

    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:

    #56786
    Merlin
    Maître des clés

    merci 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:

    #56787
    rattlesnake
    Membre

    Ca 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 ^^

    #56788
    alex
    Participant

    Bonjour à 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é.

    #56789
    Merlin
    Maître des clés

    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)

    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:

    #56790
    Merlin
    Maître des clés

    Ouf.
    Merci Alex, parce-que je suis complètement largué.
    :geek:

    #56791
    rattlesnake
    Membre

    Merci 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=1407

    Concernant mes dernières modifications (dernier pdf que j’ai posté)
    http://dl.free.fr/q9NtCwqau

    j’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 :)

    #56792
    alex
    Participant

    Bonjour à 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]

    #56793
    rattlesnake
    Membre

    Merci 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 :)

    #56794
    alex
    Participant

    Oui, 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]

    #56795
    rattlesnake
    Membre

    Yes 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 :D

Affichage de 29 réponses de 1 à 29 (sur un total de 29)
  • Vous devez être connecté pour répondre à ce sujet.