2 votes

Ne peut pas concaténer du texte en JXA

Je suis en train de me lancer dans le bandwagon de Javascript pour l'automatisation. J'ai écrit rapidement un script qui automatise mon email de requête de voyage, avec quelques boîtes de dialogue.

Voici mon code :

Mail = Application("Mail");

Mail.includeStandardAdditions = true

Origin = Mail.displayDialog(
                'D\'où commence le voyage?',
                { defaultAnswer: 'Shanghai',
                  buttons:["Annuler", "Continuer"],
                  defaultButton: "Continuer"
            })

Destination = Mail.displayDialog(
                'Où se trouve la destination du voyage?',
                { defaultAnswer: "",
                  buttons:["Annuler", "Continuer"],
                  defaultButton: "Continuer"
            })

StartDate = Mail.displayDialog(
                'Quand partez-vous?',
                { title: "Date du vol aller",
                  defaultAnswer: "",
                  buttons:["Annuler", "Continuer"],
                  defaultButton: "Continuer"
            })

RtnDate = Mail.displayDialog(
                'Quand revenez-vous?',
                { title: "Date du vol retour",
                  defaultAnswer: "",
                  buttons:["Annuler", "Continuer"],
                  defaultButton: "Continuer"
            })

content = 'Salut \n\n'

            + 'Je suis en train d\'organiser un voyage à venir.\n\n' 

            + 'Pourriez-vous m\'aider à organiser les vols, les hôtels et les transferts aéroportuaires?\n\n'

            + 'Veuillez trouver ci-dessous les détails du voyage:\n\n'

            + 'VOLS\n\n'

            + 'Trajet aller:\n'+ '\n'

            + '     De \t\t\t\t- ' + Origin.text +'\n'
            + '     À \t\t\t\t\t- ' + Destination + '\n'
            + '     Date de départ \t- ' + StartDate + '\n' + '\n'

            + 'Trajet retour:\n'+ '\n'

            + '     De \t\t\t\t- ' + Destination + '\n'
            + '     À \t\t\t\t\t- ' + Origin + '\n'
            + '     Date de départ \t- ' +RtnDate+ '\n' + '\n'

            + 'Compagnie aérienne préférée \t- Star Alliance \n'
            + 'Préférence de repas \t- Végétarien\n'+ '\n'
            + 'Programme de fidélité\t- United:\n'

            + '\n ________________________________________ \n'+ '\n'

            + 'HÔTEL\n\n'
            + '     Date d\'arrivée \t- ' + StartDate + '\n'
            + '     Date de départ \t- ' + RtnDate + '\n' + '\n'

            + 'Hôtels préférés \t\t- SPG\n'

            + 'Programme de fidélité \t- SPG:\n'

            + '\n ________________________________________ \n'+ '\n'

            + 'Merci\n'

msg = Mail.OutgoingMessage({
        subject: 'Demande d\'itinéraire - ',
        content: content,
        visible: true 
        });

Mail.outgoingMessages.push(msg);

Mail.activate();

Mais quand je lance le script, les endroits où j'ai utilisé les variables semblent apparaître comme [objet Objet]. (Montré ci-dessous)

Résultat

Est-ce que quelqu'un pourrait me dire où je me trompe?

2 votes

Attention : Membres qui votent pour la fermeture - JavaScript for Automation (JXA) est un sujet pertinent puisque le scripting est spécifiquement mentionné comme tel. Pour ceux qui ne le savent pas, le JXA est une technologie d'Apple qui offre aux utilisateurs la possibilité d'utiliser JavaScript pour la communication interapplicative entre les applications macOS.

0 votes

Désolé ! Mon balisage javascript a-t-il causé des problèmes ? Désolé ! Je n'ai pas été autorisé à baliser "javascript-automation"

0 votes

Pas de soucis. J'ai créé la balise javascript-automation car j'ai vu plusieurs de ces questions maintenant.

3voto

grg Points 181593

DisplayDialog retourne un objet, pas une chaîne de caractères. Lors de l'impression d'un objet en tant que chaîne de caractères, il est affiché comme [objet Objet]. L'objet retourné par displayDialog est le suivant :

{"buttonReturned":"Continuer", "textReturned":"votre texte ici"}

Par conséquent, vous devez utiliser la propriété textReturned de l'objet. Vous avez semblé tenter ceci lorsque vous avez accédé à la propriété text de Origin, mais comme la propriété s'appelle 'textReturned', cela n'a pas fonctionné non plus. Pour chacune des variables où vous l'imprimez dans une chaîne de caractères, remplacez

+ '     De \t\t\t\t- ' + Origin.text +'\n'
+ '     À \t\t\t\t\t- ' + Destination + '\n'

avec

+ '     De \t\t\t\t- ' + Origin.textReturned +'\n'
+ '     À \t\t\t\t\t- ' + Destination.textReturned + '\n'

A l'avenir, lorsque vous essaierez de déboguer quelque chose comme ça, créez un exemple minimal, complet et vérifiable. Dans ce cas, utilisez simplement un displayDialog et observez la valeur de la variable. (MCVE est quelque chose généralement requis dans les questions de Stack Exchange, et je pense que cette question poussait cette limite en fournissant un script entier.)

0 votes

Cela a beaucoup de sens. Et je vais garder MCV à l'esprit pour la prochaine fois ! Merci beaucoup.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X