2016-11-21 2 views
1

J'ai un PDF contenant plusieurs tables de données, chacune avec plusieurs lignes. C'est un PDF Dynamic Data XFA. La validation fonctionne assez bien, tant que c'est sur un seul champ, mais maintenant j'ai une validation plus complexe. Si un champ est rempli, un autre champ doit être rempli, et vice versa. J'ai ajouté le JavaScript de validation au champ Foo, et de la même manière au champ Barre. Le problème est que les messages de validation apparaissent plusieurs fois pour le même champ, lorsque je quitte le champ avec une valeur non valide. J'ai essayé de mettre le fichier xfa.event.rc à true/false (selon que le champ est valide ou non). Ceci est utilisé avec succès dans d'autres champs sur le PDF, mais il semble n'avoir aucun effet, et je ne peux trouver aucune documentation sur xfa.event.rc, donc il peut être déprécié. Je pense que c'était le code de retour. J'utilise EC4 maintenant, mais ce PDF a été initialement écrit pour ES3. Voici le JavaScript pour l'événement de validation "Foo". Sélectionner pour afficher tous les messages dans la même case ne résout pas le problème. Il affiche le même message plusieurs fois. Je le sais, car j'ai ajouté une variable de numéro de ligne au message.Comment puis-je éviter les messages de validation en double dans Adobe Livecycle en utilisant JavaScript?

MyXmlRoot.FirstItemsList.ItemDataRow.Foo::validate - JavaScript, client) 
this.validationMessage = ""; 
if (!this.isNull && this.rawValue != ""){ 
    var bar= xfa.resolveNode("MyXmlRoot.FirstItemsList.ItemDataRow.Bar"); 
    if (bar.isNull || bar.rawValue == ""){ 
     this.validationMessage = "A bar is required if a foo has been entered.";     
    } 
} 

Répondre

1

J'ai essayé cette approche et cela a fonctionné pour moi:

événement Bar validate sur le terrain:

MyXmlRoot.FirstItemsList.ItemDataRow.Bar::validate - (JavaScript, client) 
script.validateFooBar(Foo, this); 

Foo événement validate sur le terrain:

MyXmlRoot.FirstItemsList.ItemDataRow.Foo::validate - (JavaScript, client) 
this.validationMessage = "A bar is required if a foo has been entered."; 
script.validateFooBar(this, Bar); 

script ScriptObject:

MyXmlRoot.FirstItemsList.ItemDataRow.#variables[0].script - (JavaScript, client) 
function validateFooBar(foo, bar){ 
    return !(!foo.isNull && bar.isNull);  
} 

Et voici une photo de ma hiérarchie pour la rendre plus claire: enter image description here
Maintenant, je ne reçois une alerte quand

  1. supprimer la valeur de bar tandis que foo est rempli
  2. Je remplis la valeur de foo tandis que bar est vide
+1

Merci! J'ajouterai que j'ai trouvé [documentation] (http://help.adobe.com/livedocs/acrobat_sdk/9/Acrobat9_HTMLHelp/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Acrobat9_HTMLHelp&file=JS_API_AcroJS.88.582.html) que la méthode validate n'écoute même pas event.rc, elle n'a donc aucun effet. Cela n'a aucun sens pour moi que si vous essayez de renvoyer true ou false à partir du code directement dans la fenêtre de script d'événement, vous obtiendrez une erreur de syntaxe, mais vous pouvez appeler un script qui renvoie true ou false. L'erreur de syntaxe était la raison pour laquelle j'ai tenté de définir event.rc en premier lieu. – rhopper