Donnez vie à vos documents numériques !
 

Variable persistante

abracadabraPDF Forums PDF – Général Variable persistante

  • Ce sujet contient 12 réponses, 3 participants et a été mis à jour pour la dernière fois par bebarth, le il y a 2 semaines.
  • Créateur
    Sujet
  • #72008
    michel c.
    Participant

    Bonjour, une petite question rapide, comment faire pour qu’une variable conserve la valeur affectée après fermeture du document ?

    Merci

Affichage de 12 réponses de 1 à 12 (sur un total de 12)
  • Auteur
    Réponses
  • #72009
    bebarth
    Maître des clés

    bonjour,
    Il faut la définir et la rappeler en la précédent du préfixe « global. « ,  par exemple :
    global.nomVariable="ceci est une chaine de caractères";
    et ensuite tu peux la rappeler avec :
    console.println("Ma variable global est : "+global.nomVariable);

    Attention, cette variable n’est plus valable si tu quitte l’application !

    @+
    😎

    #72010
    michel c.
    Participant

    Ah et y a-t-il un moyen de la rendre persistante après avoir quitté l’application?

    Ce que j’ai en tête c’est qu’un utilisateur puisse définir une liste (champ de texte multi lignes) par défaut. Que cette valeur par défaut puisse être stockée à sa demande (en cliquant sur un bouton) et qu’en cliquant sur un autre bouton, ce champ texte puisse retrouver son contenu qui a été défini comme étant par défaut même après avoir quitté et relancé l’application.

    • Cette réponse a été modifiée le il y a 2 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    #72013
    michel c.
    Participant

    Je viens de trouver la solution à ce que je souhaitais faire sans passer par une variable persistante.

    Il suffisait d’avoir un champ caché pour sauvegarder la valeur par défaut…

    J’aurais du y penser avant de poser la question….

    • Cette réponse a été modifiée le il y a 2 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    #72016
    bebarth
    Maître des clés

    Sinon, tu peux sauvegarder ta variable en script de document, elle sera récupérée à l’ouverture :
    this.addScript("variable", "maVariable=\"peut-être une chaine de caractères ou un nombre !\";");

    @+
    😎

    #72017
    michel c.
    Participant

    Effectivement, c’est mieux car j’avais un bouton qui permettait d’effacer tous les champs de mon document mais je voulais que l’utilisateur puisse rétablir ce champ avec la valeur qu’il avait lui même défini par défaut. Du coup, ma solution précédente ne fonctionnait pas car le champ masqué s’effaçait aussi.

    Un grand merci

    #72019
    michel c.
    Participant

    J’ai quand même un souci lors de l’ouverture du document : Doc:Open:1: ReferenceError: DVD is not defined

    J’ai un peu modifié le script pour le faire correspondre à mes besoins mais je ne vois pas ou ça cloche.

    Je vais continuer à bidouiller un peu…

    Attachments:
    You must be logged in to view attached files.
    #72021
    michel c.
    Participant

    Je crois avoir trouvé.

    L’erreur venait du script ListeDefaut qui contient un format non conforme à une fonction je pense.

    J’ai ajouté cette action avant la fermeture du document : this.addScript("ListeDefaut", "function listedefault () {}");

    Et j’ai fait en sorte que la liste par defaut soit stockée dans un champ caché (DVar). Lors du clic sur le bouton pour effacer tous les champs; je récupère la valeur contenue dans ce champ pour l’intégrer au script ListeDefaut. Une fois le resetForm effectué, je rétablis la liste par défaut avec le contenu de ListeDefaut que j’intègre également dans le champ DVar.

    Je ne sais pas si c’est très académique mais j’ai l’impression qu’il n’y a pas de faille.

    Attachments:
    You must be logged in to view attached files.
    #72026
    Merlin
    Maître des clés

    « Effectivement, c’est mieux car j’avais un bouton qui permettait d’effacer tous les champs de mon document mais je voulais que l’utilisateur puisse rétablir ce champ avec la valeur qu’il avait lui même défini par défaut. Du coup, ma solution précédente ne fonctionnait pas car le champ masqué s’effaçait aussi. »

    Protéger un champ contre le reset est très simple quand on sait qu’en fait le reset ne supprime pas le contenu des champs : le reset (comme son nom l’indique en anglais) fait revenir les champs à leur valeur par défaut.

    En général la valeur par défaut c’est « rien », mais c’est une coïncidence.

     

    Donc au lieu d’attribuer au champ les données à sauvegarder en tant que valeur (value) il faut faire la même chose mais en lui attribuant les données comme valeur par défaut (defaultValue).

    Ainsi les données sont conservées lors d’un éventuel reset.

     

    this.getField("CHAMP").defaultValue = "Blablabla";

     

    #72027
    michel c.
    Participant

    Arf, effectivement c’est beaucoup plus simple…. Je ne connaissais pas cette commande.

    Merci.

    J’ai appris pas mal de choses ces derniers jours grâce à vous.

    #72035
    bebarth
    Maître des clés
    bonjour,

    L’erreur venait du script ListeDefaut qui contient un format non conforme à une fonction je pense.

    C’est parce que tu as mal écrit ta ligne de script !
    Il manque les guillemets (et les caractères d’échappement) qui seront affiché dans la ligne de script ajoutée.

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 semaines par bebarth.
    #72037
    michel c.
    Participant

    Je viens de réessayer par curiosité (j’utilise maintenant la solution proposée par Merlin). ça fonctionne bien mais lorsque je ferme le logiciel et que je veux rétablir la liste par défaut que j’ai affectée avant la fermeture j’ai cette erreur : ReferenceError: DVD is not defined

    Mon script pour réaffecter la valeur stockée : this.getField("entreesListe").value = DVD;

    #72039
    bebarth
    Maître des clés

    C’est parce que j’ai fait une erreur… Désolé !
    Il faut écrire :
    this.addScript("VarDefaut", "ListeDefaut="+DVD);

    C’est ça de publier sans tester…

    Mais tu peux aussi écrire directement :
    this.addScript("VarDefaut", "ListeDefaut="+this.getField("entreesListe").value);

    @+
    😎

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