Donnez vie à vos documents numériques !
 

Script de validation de formulaire

abracadabraPDF Forums PDF – Général Script de validation de formulaire

  • Créateur
    Sujet
  • #74135
    falafhell
    Participant

    Bonjour à toutes et à tous,

    Je suis en train de préparer un formulaire pdf incluant un script de validation des champs obligatoires : l’objectif est de conditionner l’enregistrement du document au remplissage de tous les champs obligatoires (c’est un peu absurde, je sais, mais c’est le cahier des charges qui m’est imposé…). Pour ce faire, j’ai intégré le script ci-dessous en actions de document (« Le document sera enregistré ») et créé un bouton « enregistrer » auquel j’ai également associé le script (« exécuter un script », souris relâchée).

    Voici le script (tel qu’intégré dans le document en PJ) :

    var champsObligatoires = [“date”, “text1”, “text2”, “montant1”, “montant2”];

    function validerChampsObligatoires() {

    var formulaire = this;

    for (var i = 0; i < champsObligatoires.length; i++) {

    var nomChamp = champsObligatoires;

    var champ = formulaire.getField(nomChamp);

    if (champ.value === “”) {

    app.alert(“Veuillez remplir tous les champs obligatoires.”);

    return false;

    }

    }

    return true;

    }

    this.getField(“Bouton_enregistrer”).setAction(“MouseUp”, “this.getAnnots()[0].submitForm({cURL: true});”);

    this.getField(“Bouton_enregistrer”).setAction(“MouseUp”, “validerChampsObligatoires();”);

    Premier problème : le script fonctionne une fois intégré, mais dès que je ferme le formulaire et que je l’ouvre à nouveau, il ne fonctionne plus…

    Par ailleurs, j’aimerais faire évoluer le script pour que :

    1. Tous les champs obligatoires soient pris en compte sans avoir à les lister comme variables (le formulaire sur lequel je travaille en compte un certain nombre de toutes natures),
    2. La fonction de validation du formulaire soit également associée aux commandes « enregistrer » et « enregistrer sous » sous Acrobat Reader.

    J’ai cherché dans les contributions du forum et ailleurs sans trouver de quoi résoudre mon problème… Quelqu’un peut-il me mettre sur la bonne voie ? Tous les bons conseils seront les bienvenus (et je sais qu’ils sont nombreux dans ce forum de très grande qualité, dont je salue les auteurs).

    Merci d’avance pour votre aide 😉

    Attachments:
    You must be logged in to view attached files.
Affichage de 12 réponses de 1 à 12 (sur un total de 12)
  • Auteur
    Réponses
  • #74137
    Merlin
    Maître des clés

    Bonjour

     

    Ci-joint, j’ai ajouté deux fonctions en script de document, je te laisse les examiner et modifier le message d’alerte.

    La fonction de vérification signale les champs non remplis en rouge, la deuxième fonction sert à enlever le contour rouge quand on clique dans les champs concernés. Elle est appelée par l’évènement “Champ activé / On focus”.
    C’est plus intuitif pour l’utilisateur mais tu peux supprimer la ligne qui ajoute les contours rouge si tu préfères.

    L’inconvénient de mettre le contrôle en évènement “Doc sera enregistré” c’est qu’il faut désactiver JavaScript (Préférences : JavaScript) pour pouvoir enregistrer le document final avec les champs vides sans les contours rouge.

    Parce-qu’il faut savoir qu’une fonction/action placée en évènement “Doc sera enregistré” (ou “Doc sera imprimé”) n’empêche pas son enregistrement (ou son impression), ça ne fait qu’avertir l’utilisateur.

    Et c’est tant mieux car il peut avoir plein de bonnes raisons pour enregistrer son document avant de l’avoir complètement rempli.

     

    Attachments:
    You must be logged in to view attached files.
    #74140
    falafhell
    Participant

    Bonjour Merlin,

    Merci pour ton intervention, ça marche très bien !

    En revanche, je ne savais pas que le fait de placer une fonction en “doc sera enregistré” a uniquement valeur d’avertissement et non d’interdiction : dans ce cas, que faudrait-il faire pour vraiment empêcher l’enregistrement tant que les champs obligatoires du formulaire ne sont pas tous remplis ? Je partage complètement ton point de vue sur la liberté d’enregistrer à tout moment pour l’utilisateur, mais je dois répondre à une demande assez claire en ce sens…

    #74141
    Merlin
    Maître des clés

    On ne peut rien faire contre ça, il faudra l’expliquer à ton client.

    Sauf peut-être en développant un vrai plugin en C++, en le faisant certifier par Adobe, et en l’installant sur tous les Acrobat Reader de tous les utilisateurs. Mais c’est une autre paire de manches et même en supposant que ce soit techniquement possible rien ne garanti qu’Adobe l’accepterait.

     

    #74150
    falafhell
    Participant

    Oui, je comprends. Merci pour ces éclaircissements.

     

    #74641
    falafhell
    Participant

    Bonjour Merlin,

    Je me permets de te solliciter pour une question complémentaire concernant le script de validation de formulaire (cf. ex. en PJ) : il fonctionne parfaitement, simplement je voudrais mettre en place un moyen visuel pour indiquer à l’utilisateur quels champs il a omis de remplir. En gros, lorsque le popup indique qu’il reste X champs à remplir, les X champs obligatoires concernés sont indiqués dans une couleur différente (soit en contour, soit en remplissage). Le cas échéant, il peut facilement les repérer car le document sur lequel je travaille en comporte une bonne cinquantaine. Merci par avance pour ton aide.

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

    C’est déjà le cas, dans le fichier que j’ai posté les champs obligatoires non remplis sont signalés par un contour rouge quand on clique sur le bouton.

    Et ce contour rouge disparaît quand on clique sur les champs, donc on ne peut pas en oublier.

     

    Ça fonctionne à l’identique dans le fichier que tu as posté car c’est le même, sauf que les champs n’ont pas été cliqués et ont gardés leur contour rouge.

    #74648
    falafhell
    Participant

    Merci pour ta réponse, c’est vrai mais le contour rouge réapparaît quand on passe au champ suivant. Y’a-t-il un moyen pour que, une fois chaque champ renseigné, le contour rouge disparaisse et ne subsiste que sur les champs laissés vides ?

    #74649
    Merlin
    Maître des clés

    C’est certainement parce que la surbrillance est activée, ajoute cette ligne dans le script de document pour la désactiver :

    app.runtimeHighlight = false;

     

    Ou bien dans les Préférences (voir capture).

    Attachments:
    You must be logged in to view attached files.
    #74651
    falafhell
    Participant

    Merci pour la ligne de code, ça marche très bien !

     

    #74655
    falafhell
    Participant

    Bonjour Merlin,

    Je ne vois pas comment faire pour avoir une surbrillance “sélective” dans un formulaire comportant des champs obligatoires ET des champs facultatifs ?

    Dans le doc joint, le contour rouge qui se désactive pour les champs obligatoires fonctionne parfaitement, mais est-ce qu’il est possible de laisser la surbrillance uniquement pour les champs non obligatoires (elle disparaîtrait de la même manière une fois le champ renseigné) ?

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

    Dans ce cas, comme pour les contours, il faut gérer ça avec JavaScript en ajoutant ce script en action “Champ désactivé” (onBlur) :

    if (event.target.value == event.target.defaultValue) {event.target.fillColor = color.ltGray;}
    else {event.target.fillColor = color.transparent;}

    Tu peux bien entendu changer les couleurs de cet exemple, voir : https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#color-arrays

    Fichier joint.

    Attachments:
    You must be logged in to view attached files.
    #74672
    falafhell
    Participant

    Parfait, merci beaucoup !

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