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 années.
-
CréateurSujet
-
22 novembre 2022 à 18:56 #72008michel c.Participant
Bonjour, une petite question rapide, comment faire pour qu’une variable conserve la valeur affectée après fermeture du document ?
Merci
-
CréateurSujet
-
AuteurRéponses
-
22 novembre 2022 à 19:36 #72009bebarthMaî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 !
@+
😎22 novembre 2022 à 22:12 #72010michel c.ParticipantAh 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 années par michel c..
Attachments:
You must be logged in to view attached files.22 novembre 2022 à 22:22 #72013michel c.ParticipantJe 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 années par michel c..
Attachments:
You must be logged in to view attached files.22 novembre 2022 à 22:38 #72016bebarthMaître des clésSinon, 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 !\";");
@+
😎22 novembre 2022 à 22:51 #72017michel c.ParticipantEffectivement, 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
23 novembre 2022 à 00:08 #72019michel c.ParticipantJ’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.23 novembre 2022 à 08:20 #72021michel c.ParticipantJe 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.23 novembre 2022 à 10:44 #72026MerlinMaî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";
23 novembre 2022 à 12:48 #72027michel c.ParticipantArf, 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.
23 novembre 2022 à 19:24 #72035bebarthMaître des clésbonjour,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 années par bebarth.
23 novembre 2022 à 20:14 #72037michel c.ParticipantJe 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;
23 novembre 2022 à 21:03 #72039bebarthMaître des clésC’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);
@+
😎 -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.