Message annuler ou continuer lors d'un clic sur une action  (Lu 609 fois) Partager ce sujet Imprimer

1 B


Fun27  02 janvier 2021 : 18:45

Bonjour,


J'ai un bouton qui exécute plusieurs actions (afficher des champs, exécuter un JavaScript...) mais j'aimerais placer en début d'action un JavaScript qui démarre un message: "Confirmer vous la validation ?" avec comme possibilité de réponse "annuler" ou "confirmer"
si l'on sélectionne annuler j'aimerais qu'il abandonne les actions suivantes, cela est il possible?

IP archivée


bebarth  02 janvier 2021 : 19:59

bonjour et Bonne Année,
Voici un script avec boite de dialogue et boutons OUI et NON :
var reponse=app.alert({
    cMsg: "Confirmez-vous la validation ?",
    cTitle: "Message",
    nIcon: 2,
    nType: 2
});
if (reponse==4) {
    // Script ici
}
@+
 :bonjour:

IP archivée


Fun27  02 janvier 2021 : 22:06

Merci et bonne année également.


J'ai insérer ce code dans une action JavaScript comme première action et le message fonctionne mais si je clic sur "non" les actions suivantes continu tout de même à s'exécuter !
Est il possible d'annuler ces actions qui suivent le message?


Encore Merci.


 



IP archivée


bebarth  02 janvier 2021 : 23:20

Tu dois mal positionner ton script. Il faut le mettre à la place de "// Script ici".
if (reponse==4) signifie si la réponse est OUI !
@+
 :bonjour:

IP archivée


Fun27  03 janvier 2021 : 10:21

Ok je comprends, mais le problème c'est que j'ai plusieurs autres actions qui sont exécutés avant et qui n'ont pas de script.
Selon l'image ci-joint pour compréhension.


Voici ma composition actuel:
1. Soumettre un formulaire (récupère un champ et le transmet dans un fichier XFDF dans un répertoire local)
2. Ouvrir exécuter un fichier
3. Afficher des champs
4. Cacher des champs
5. et enfin le JavaScript ci dessous:



var fTo = this.getField("To5_S").value;
var fSubject = this.getField("Subject3_S").value;
var fBody = this.getField("BodyAPP_S").value+"\n\n"
+"\/\/CRPCWA2\/Data\/O\/Fiches_orange\/Fiches\/"+this.documentFileName+"\n";
this.mailDoc({cTo: fTo, cSubject: fSubject, cMsg: fBody});
app.execMenuItem("Save");


Est ce que je dois modifier tout les points de 1 à 4 en Javascript ?
Si c'est le cas je ne maîtrise pas assez JavaScript pour transformer cela en codage :mur:


Merci.


IP archivée


bebarth  03 janvier 2021 : 11:22

bonjour,
Il faut effectivement que toutes les actions suivantes soient indiquées en JavaScript.
Si tu peux, partage un fichier !
@+
 :bonjour:

IP archivée


Fun27  03 janvier 2021 : 18:56

Voici mon fichier que j'ai simplifié, le bouton sur lequel j'aimerais avoir la confirmation "oui" ou "non" avant exécution est en page 2 : "Plan approuvé, transmettre pour mise en fab."

IP archivée


bebarth  04 janvier 2021 : 09:43

bonjour,
Ça ne commence pas très bien, je ne comprends pas ton action !!!
  • Tu envoies un formulaire au format .fdf (je ne connais pas ce format, Merlin certainement...)
  • Tu ouvres un fichier format .vbs (c'est possible ???)
  • Tu masques des champs (lesquels, ils ne sont pas indiqués)
  • Et enfin tu envoies ce fichier (Modèle) par e-mail
Est-ce bien cela ???
@+
 :bonjour:

IP archivée


Merlin  04 janvier 2021 : 11:08

Tu envoies un formulaire au format .fdf (je ne connais pas ce format, Merlin certainement...)
FDF : Form Data Format / Format de données de formulaire
On l'utilise pour n'envoyer que les données contenues dans le formulaire, sans le formulaire lui-même.
(Sachant que les images importées dans les boutons/champs-images ne sont pas inclues)

Dans le même esprit on peut aussi utiliser le format XFDF, c'est la même chose mais les données utilisent la présentation et la syntaxe XML, beaucoup plus facile à intégrer dans une base de données que le format FDF.

IP archivée


Fun27  04 janvier 2021 : 11:16

Bonjour,

Oui j'utilise bien un format XFDF et non FDF, en détail:

1. j'envoi dans un fichier .xfdf les données texte d'un champs texte du PDF.
2. j'ouvre un fichier .vbs, cette action va ouvrir un fichier excel défini et démarrer une macro VBA dans ce fichier excel, cette macro va récupérer le texte qui est contenu dans le fichier .xfdf
3. Je masque le champs AppT et affiche le champs AppOK
4. J'envoi ce pdf par email avec un texte prédéfini.

IP archivée


Fun27  04 janvier 2021 : 17:10

Au final est il possible de mettre un bouton de confirmation oui ou non en gardant mon flux d'action décrit ci-dessus ou faut il tout mettre en codage Javascript?
Et est il tout simplement possible de remplacer les actions ci-dessus 1, 2, 3 par un code JavaScript?


Merci pour votre aide car je n'ai pas les connaissances pour avancer!

IP archivée


bebarth  04 janvier 2021 : 19:59

Merlin me démentira peut-être, mais pour moi on ne peut pas envoyer par mail ni ouvrir un fichier via JavaScript à moins qu'il ne soit en pièce jointe du formulaire !
@+
 :bonjour:

IP archivée


Fun27  04 janvier 2021 : 21:01

Toutes mes actions 1, 2, 3 et 4 fonctionnes parfaitement, j'aimerais juste leurs ajouter un message de confirmation avant leur exécution... :Euuuh:

IP archivée


Merlin  05 janvier 2021 : 00:20

Il faudrait que tu partages ton fichier, ou au moins un exemple avec le bouton en question, parce-que ce n'est pas clair, je ne comprend pas bien le processus et les fonctions employées.


IP archivée


Fun27  05 janvier 2021 : 08:20

Voici mon fichier. Je l'ai simplifié, normalement j'ai plusieurs boutons.
Mais là ce qui m'intéresse c'est l'ajout d'un message de confirmation avant exécution du bouton (Plan approuvé, transmettre pour mise en fab.) qui est en page 2.


Merci. 


IP archivée


Merlin  05 janvier 2021 : 11:02

Si je comprend bien c'est un formulaire destiné à une utilisation interne sur un seul poste de travail ? (Par opposition à un formulaire envoyé/diffusé)
Si oui c'est un point important pour la suite.

Citer
Toutes mes actions 1, 2, 3 et 4 fonctionnent parfaitement
Chez moi c'est l'inverse, aucune ne fonctionne.
C'est une succession de messages d'alertes et d'erreurs (ci-dessous).

As-tu modifié certains paramètres par défaut d'Acrobat ? (Sécurité, gestionnaire d'approbation, … ?)

IP archivée


Fun27  05 janvier 2021 : 12:16


C'est un formulaire destiné à une utilisation interne sur plusieurs postes.


Cela est normal que les actions 1 et 2 ne fonctionnes pas sur un poste qui n'est pas connecté à mon réseau interne et qui n'as donc pas accès aux répertoire de destination des action 1 et 2.
De plus pour que cela fonctionne chez vous il faudrait avoir le fichier .xfdf, le fichier .vbs existant ainsi que le fichier excel (qui lui est démarré par le fichier .vbs)

1. j'envoi dans un fichier .xfdf les données d'un champs texte du PDF. Ce champs dans le fichier .xfdf sera utilisé lors du lancement de la macro excel qui elle est actionner par le .vbs
2. j'ouvre un fichier .vbs, cette action va ouvrir le fichier excel défini et démarrer une macro VBA dans ce fichier excel, cette macro va récupérer le texte qui est contenu dans le fichier .xfdf
3. Je masque le champs AppT et affiche le champs AppOK
4. J'envoi ce pdf par email avec un texte prédéfini.


Pour information j’utilise le logiciel Foxit PhantomPDF Version 9.7.2.29539

Voila j’espère que ces infos vont vous aider dans mon problème de message de confirmation avant ces 4 actions.Encore merci

IP archivée


Merlin  05 janvier 2021 : 15:12

Essaie ce script dans le bouton, après avoir supprimé toutes les actions existantes.
J'ai mis des try/catch pour que tu saches plus facilement d'où viennent les éventuelles erreurs.

Vérifie bien l'URL et le chemin d'accès avant d'essayer, il y a un "MACHIN" à remplacer.

Il est plus que possible que la deuxième instruction (ouverture du fichier) ne fonctionne pas depuis un document, auquel cas il faudra utiliser une fonction sécurisée (trustedFunction), qui devra être placée dans le sous-dossier "JavaScripts" de chaque Acrobat sur chaque poste.

if (app.alert({cMsg: "Confirmez-vous la validation ?", cTitle: "COMMANDE PROTOTYPE", nIcon: 2, nType: 2}) == 4) {

   // 1
   try {
      this.submitForm({cURL: "file:///O:\Fiches orange\Données\code numero.xfdf", cSubmitAs: "XFDF"});
   }
   catch (e) {};

   // 2
   try {
      app.openDoc("file:///C:\Users\MACHIN\AppData\Local\Fiches\Code macro f.vbs");
   }
   catch (e) {};

   // 3
   try {
      this.getField("AppT").display = display.hidden;
      this.getField("AppOK").display = display.visible;
   }
   catch (e) {};

   // 4 (non modifié)
   try {
      var fTo = this.getField("To6").value;
      var fSubject = this.getField("Subject3").value;
      var fBody = this.getField("BodyAPPok").value + "\n\n" + "\/\/CHPDWS1\/Data\/O\/Fiches_orange\/Fiches\/" + this.documentFileName + "\n" + ("Ouvrir le fichier uniquement avec le raccourci ci-dessus et non avec le fichier joint en Objet.");
      this.mailDoc({cTo: fTo, cSubject: fSubject, cMsg: fBody});
      app.execMenuItem("Save");
   }
   catch (e) {};

}

IP archivée


bebarth  05 janvier 2021 : 16:33

 :bravo:
Essaie peut-être d'écrire :
"file:\/\/\/O:\\Fiches orange\\Données\\code numero.xfdf"
et
"file:\/\/\/C:\\Users\\MACHIN\\AppData\\Local\\Fiches\\Code macro f.vbs"
 
@+
 :bonjour:

IP archivée


Fun27  05 janvier 2021 : 17:03

Merci pour votre aide, le code de Merlin est top et fonctionne parfaitement sur mon Poste :bravo: , par contre il ne fonctionne pas chez un autre utilisateur!
Je vais fouiller un peu.

IP archivée


bebarth  05 janvier 2021 : 17:17

A partir d’où il ne fonctionne pas ? Dès la première partie ?
@+
 :bonjour:

IP archivée


Fun27  05 janvier 2021 : 17:28

Apparemment dès la partie 1

Le message d'alerte marche et ensuite quelques message sécurité et pas d'actions!

IP archivée


bebarth  05 janvier 2021 : 17:59


IP archivée


Merlin  05 janvier 2021 : 19:20

Remplace tous les :
catch (e) {};

Par :
catch (e) {console.show()};

Ainsi Acrobat Reader (ou Foxit) affichera automatiquement la Console avec le message d'erreur.

IP archivée


Fun27  05 janvier 2021 : 20:25

Ok, je vais essayer tout ça jeudi car je ne suis plus au bureau d'ici là! Merci d'avance pour votre aide.

IP archivée


Fun27  06 janvier 2021 : 09:04

Finalement j'ai pu tester:


...et la console sur l'écran de mon collaborateur est vide!!! et il ne se passe donc rien lors qu'il clic exécuter.


En fichier joint l'image de la console et ci-dessous le code utilisé:


if (app.alert({cMsg: "Confirmez-vous la validation ?", cTitle: "COMMANDE PROTOTYPE", nIcon: 2, nType: 2}) == 4) {


   // 1
   try {
      this.submitForm({cURL: "file:///O:\Fiche orange\code numero.xfdf", cSubmitAs: "XFDF"});
   }
catch (e) {console.show()};


   // 2
   try {
      app.openDoc("file:///O:\Fiche orange\Code macro e.vbs");
   }
catch (e) {console.show()};


   // 3
   try {
      this.getField("Cache_Proto").display = display.hidden;
      this.getField("cadre_PR").display = display.visible;
      this.getField("Cache_serie").display = display.visible;
   }
catch (e) {console.show()};


   // 4 (non modifié)
   try {
      var fTo = this.getField("To0").value;
      var fSubject = this.getField("Subject0").value;
      var fBody = this.getField("Body0").value + "\n\n" + "\/\/CHPDWS1\/Data\/O\/Fiche_orange\/Fiches\/" + this.documentFileName + "\n" + ("Ouvrir le fichier uniquement avec le raccourci ci-dessus et non avec le fichier joint en Objet.");
      this.mailDoc({cTo: fTo, cSubject: fSubject, cMsg: fBody});
      app.execMenuItem("Save");
   }
catch (e) {console.show()};


}




IP archivée


bebarth  06 janvier 2021 : 10:41

bonjour,
Essaie avec ceci, car apparemment aucune action n'est exécutée !
Le "problème" avec try/catch c'est qu'il n'y a pas de message d'erreur...
console.show();
console.clear();
if (app.alert({cMsg: "Confirmez-vous la validation ?", cTitle: "COMMANDE PROTOTYPE", nIcon: 2, nType: 2}) == 4) {
    // 1
    console.println("Avant #1");
    this.submitForm({cURL: "file:///O:\Fiche orange\code numero.xfdf", cSubmitAs: "XFDF"});
    console.println("Après #1");
    // 2
    console.println("Avant #2");
    app.openDoc("file:///O:\Fiche orange\Code macro e.vbs");
    console.println("Après #2");
    // 3
    console.println("Avant #3");
    this.getField("Cache_Proto").display = display.hidden;
    this.getField("cadre_PR").display = display.visible;
    this.getField("Cache_serie").display = display.visible;
    console.println("Après #3");
    // 4 (non modifié)
    console.println("Avant #4");
    var fTo = this.getField("To0").value;
    var fSubject = this.getField("Subject0").value;
    var fBody = this.getField("Body0").value + "\n\n" + "\/\/CHPDWS1\/Data\/O\/Fiche_orange\/Fiches\/" + this.documentFileName + "\n" + ("Ouvrir le fichier uniquement avec le raccourci ci-dessus et non avec le fichier joint en Objet.");
    this.mailDoc({cTo: fTo, cSubject: fSubject, cMsg: fBody});
    app.execMenuItem("Save");
    console.println("Après #4");
}
Je pense que tu devais avoir comme réponse "Avant #1", puis un message d'erreur...
Est-ce que le lecteur "O" définit sur ton poste est également "O" sur les autres ???
Essaie de remplacer chaque slash par "\/" (slash antislash) et chaque antislashs par "\\" (2 antislashs) comme pour var fBody.
@+
 :bonjour:

IP archivée


Fun27  06 janvier 2021 : 11:45

Selon image ci-joint la console affiche jusqu’à avant 2, cela veut il dire que l'erreur est dans l'action 2?


IP archivée


bebarth  06 janvier 2021 : 12:45

...donc le script n'exécute pas l'action 2 !
As-tu regardé l'histoire du lecteur "O"  ou modifié les slash/antislash ?

Est-ce que l'action 1 s'exécute correctement ?
J'ai regardé vite fait les exemple de submitForm et il est indiqué "The URL to submit to. This string must end in #FDF if the result from the submission is FDF or XFDF" !
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_submitFormbc-106&rhtocid=_6_1_8_23_1_105
Donc pour moi tu devrais écrire quelque chose comme :
this.submitForm({cURL: "file:///O:\Fiche orange\code numero.xfdf#FDF", cSubmitAs: "XFDF"});Regarde les exemples...
@+
 :bonjour:

IP archivée


Merlin  06 janvier 2021 : 13:55

Le "problème" avec try/catch c'est qu'il n'y a pas de message d'erreur...
Mea culpa.  :geek:
Ce n'est pas faux, sauf si on lui demande explicitement.

Remplace :
catch (e) {};

Par :
catch (e) {
   console.show();
    console.println("Erreur : " + e + "\n\n");
    for (var i in e) {console.println( i + ": " + e)};
};


Pour avoir un luxe de détails sur l'erreur en cause.

Pour moi ça sent le problème de "sécurité" ou de droits d'accès…
Quel logiciel utilisent les postes utilisateurs, Acrobat Reader ou Foxit Reader ?

IP archivée


bebarth  06 janvier 2021 : 15:11

 :extra:

@+
 :bonjour:

IP archivée


Fun27  06 janvier 2021 : 19:54

Alors il y avait effectivement un problème de sécurité sur les postes collaborateurs, le mode lecture sécurisé était activé :Ooops:


Suite à plusieurs test tous fonctionnes sauf l'action numéro 2 pour exécuter un fichier. Si je supprime l'action 2 toutes les actions fonctionnes.
Par contre je pense qu'il s'agit d'un problème dans le codage car cette action 2 ne fonctionne pas également sur mon propre poste.


Voici mon code actuel:
+"file:///\\\\CHPDWS1\\Data\\O\\Fiches%20orange\\Fiches\\"+this.documentFileName+

if (app.alert({cMsg: "Confirmez-vous la validation ?", cTitle: "COMMANDE SERIE", nIcon: 2, nType: 2}) == 4) {
   
    // 1
    this.submitForm({cURL: "file:///O:\/Fiches orange\/Données\/code numero.xfdf", cSubmitAs: "XFDF"});
   
    // 2
    app.openDoc("file:///O:\/Fiches orange\/Données\/Code macro i.vbs");
 
    // 3
    this.getField("cadre_SR").display = display.visible;
    this.getField("Cache_serie").display = display.hidden;
   
    // 4
    var fTo = this.getField("To3").value;
    var fSubject = this.getField("Subject2").value;
    var fBody = this.getField("Body0").value + "\n\n" +"file:///\\\\CHPDWS1\\Data\\O\\Fiches%20orange\\Fiches\\"+this.documentFileName+ "\n" + ("Ouvrir le fichier uniquement avec le raccourci ci-dessus et non avec le fichier joint en Objet.");
    this.mailDoc({cTo: fTo, cSubject: fSubject, cMsg: fBody});
   
app.execMenuItem("Save");
}


IP archivée


bebarth  06 janvier 2021 : 20:38

Vérifie le chemin de ton fichier !
Tu places un document .pdf dans le même répertoire, tu l'ouvres et dans la console (vierge) tu écris this.path.
Tu sélectionnes le tout et appuies sur la touche "Entr" du pavé numérique.
Le chemin correspond-il ???
@+
 :bonjour:

IP archivée


Merlin  06 janvier 2021 : 20:48

Je viens de vérifier dans la documentation, app.opendoc n'est utilisable que pour ouvrir des fichiers PDF (je cite) : Opens a specified PDF document…
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/Acro12_MasterBook/JS_API_AcroJS/app_methods.htm?rhhlterm=opendoc&rhsyns=%20#XREF_61826_openDoc

1000 excuses, mais la petite ligne qu'on avait pas lue ça fait aussi partie des joies de la programmation.
 :siffle:

IP archivée


Fun27  06 janvier 2021 : 21:30

Pas de souci, sans votre aide je n'en serait pas là!

Par contre je ne trouve pas de code pour ouvrir un fichier .vbs
Sais tu si cela est possible?

Bebarth, je ne trouve pas ta console pour insérer this.path.
La seul console que j'ai est celle en image ci-joint.


IP archivée


bebarth  06 janvier 2021 : 23:23

Il n'y a pas plusieurs consoles !
Moi c'est celle d'Acrobat Pro, toi ce doit être celle de Foxit.
Ecris this.path dans cette console, puis bouton "Exécuter".
@+
 :bonjour:

IP archivée


Merlin  07 janvier 2021 : 10:14

Par contre je ne trouve pas de code pour ouvrir un fichier .vbs
Sais tu si cela est possible?
A priori j'aurais dit oui, mais j'ai cherché dans la documentation et je n'ai pas trouvé.
Du coup j'ai l'impression d'avoir raté quelque chose…  :Euuuh:

Ce qui m'étonne le plus c'est que ça fonctionne avec une simple action mais pas avec JavaScript, mais je n'ai pas fini de creuser.

IP archivée


bebarth  07 janvier 2021 : 14:21

bonjour,
Moi j'aurais dit (comme précédemment dans la discussion) avec exportDataObject, seulement s'il le fichier est en pièce jointe du document, et qu'il a été joint via le panneau et non avec le commentaire "pièce jointe".
@+
 :bonjour:

IP archivée


Merlin  07 janvier 2021 : 14:27

Je n'avais pas capté, mais effectivement ce serait le moyen le plus sur et le plus simple.

IP archivée


Fun27  07 janvier 2021 : 16:24

Je ne connais pas exportDataObject, si je vous suis je devrais mettre un fichier joint XFDF dans mon formulaire PDF???
Cela m’embête un peut car ce formulaire contiendra déjà d'autres fichiers joints qui seront ajouté au fur et à mesure des étapes par différent utilisateurs.

J'ai essayer des recherche comme par exemple:

Runtime.getRuntime().exec( "wscript O:\/Fiches orange\/Données\/Code macro i.vbs" );


Mais cela ne fonctionne pas


IP archivée


Merlin  07 janvier 2021 : 16:36

Je ne connais pas exportDataObject, si je vous suis je devrais mettre un fichier joint XFDF dans mon formulaire PDF?

Non, tu mets le .vbs en pièce jointe et à la place du code précédent tu utilises :

this.exportDataObject({cName: "Code macro i.vbs", nLaunch: 2});

IP archivée


Merlin  07 janvier 2021 : 16:43

L'idée était bonne mais VBS fait partie des formats de fichiers "sensibles", donc exportDataObject provoque une erreur de sécurité.
Si on essaye de mettre un VBS en pièce jointe dans un PDF, Acrobat affiche une alerte pas très claire qui signifie en fait qu'on peut mettre ce type de fichier en PJ (OK) mais qu'on ne pourra pas l'ouvrir ou l'exporter, ni manuellement ni programmatiquement.
Et contrairement à ce qu'indique le message ça n'a rien à voir avec le Trust Manager qui ne propose pas ce réglage (dans les Préférences), ça se modifie quelque part dans la base de registre de Windows…

Je viens de vérifier.  :camenerve:


IP archivée


Fun27  07 janvier 2021 : 17:15

Afin de détourner le problème, mon idée est de mettre l'ouverture du fichier .vbs en action après le Javascript (avec "ouvrir exécuter un fichier" comme sur l'image ci-joint)
Dans ce cas mon fichier .vbs sera a chaque fois ouvert mais dans mon code JavaScript j'ajoute un champ qui sera récupéré dans ma macro excel afin de lui dire d’exécuter ou non la macro!

- si le champ est à 0 il ne l'exécute pas.
- si le champ est à 1 il l'exécute.



voici mon idée de code mais j'ai besoin de vous pour savoir comment remplir un champ automatiquement (en début du JavaScript et au point 1) :

Mettre 0 dans le champs "Champ texte0" (avant début du if)


if (app.alert({cMsg: "Confirmez-vous la validation ?", cTitle: "COMMANDE SERIE", nIcon: 2, nType: 2}) == 4) {
    // 1
   Mettre 1 dans le champs "Champ texte0"
    // 2
    this.submitForm({cURL: "file:///O:\/Fiches orange\/Données\/code numero.xfdf", cSubmitAs: "XFDF"});
    // 3
    this.getField("AppT").display = display.visible;
    this.getField("AppA").display = display.visible;
    this.getField("APP2").display = display.visible;
    this.getField("AppOK").display = display.hidden;
    this.getField("Envoyer APP1").display = display.hidden;
    this.getField("Ajouter Fichier").display = display.hidden;
    // 4
    var fTo = this.getField("To5").value;
    var fSubject = this.getField("Subject3").value;
    var fBody = this.getField("BodyAPP").value +"file:///\\\\CHPDWS1\\Data\\O\\Fiches%20orange\\Fiches\\"+this.documentFileName+ "\n";
    this.mailDoc({cTo: fTo, cSubject: fSubject, cMsg: fBody});

 app.execMenuItem("Save");
}

IP archivée