IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs Google Discussion :

[Google Forms] Récupérer plusieurs réponses d'un formulaire lors de son envoi [Autres]


Sujet :

APIs Google

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 18
    Points : 16
    Points
    16
    Par défaut [Google Forms] Récupérer plusieurs réponses d'un formulaire lors de son envoi
    Bonjour,

    Après avoir demandé de l'aide sur StackOverflow, j'ai pu faire en sorte qu'un mail soit envoyé au répondant lors de l'envoi du questionnaire. Cependant, j'ai gardé le code tel quel et ne comprends pas tout ce qu'il fait. J'ai rajouté des choses mais du coup, ça ne fonctionne plus, ou du moins pas comme je le voudrais.
    J'ai compris comment aller chercher les réponses mais j'ignore comment la correspondance entre les variables de la fonction sendLater et la fonction sendMail se fait. Si je laisse le code tel quel, je vois bien qu'il comprend que "mail" est égal à la réponse donnée pour formation. Il retourne une erreur et mon mail n'est donc pas correct.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    function sendLater(event) {
      var mail = event.response.getItemResponses()[0].getResponse();
      var date = event.response.getItemResponses()[1].getResponse();
      var jour = event.response.getItemResponses()[2].getResponse();
      var formation = event.response.getItemResponses()[3].getResponse();
     
      var triggerUid = event.triggerUid; // ID of trigger that produced this event
      var trigger = ScriptApp.newTrigger("sendMail") // Lors de l'envoi du formulaire, envoyer 6 mois plus tard 262980
      .timeBased()
      .after(262980 * 60 * 1000)
      .create();   
     
    //Je comprends que le trigger.getUniqueId() permet de récupérer le mail et définit la variable mail comme étant cet id, le mail reçu
      var id = trigger.getUniqueId();
      PropertiesService.getScriptProperties().setProperty(id, mail)
     
    //Je suppose que ci-dessous, ça ne définit pas différentes variables mais une seule car ils sont tous sur le même UniqueId
      var da = trigger.getUniqueId();
      PropertiesService.getScriptProperties().setProperty(da, date)
      var ji = trigger.getUniqueId();
      PropertiesService.getScriptProperties().setProperty(ji, jour)
      var fo = trigger.getUniqueId();
      PropertiesService.getScriptProperties().setProperty(fo, formation);
    }
     
     
    function sendMail(event) {
      var id = event.triggerUid;
      var mail = PropertiesService.getScriptProperties().getProperty(id); // MAIL
     
      var da = event.triggerUid;
      var date = PropertiesService.getScriptProperties().getProperty(da); // DATE
     
      var fo = event.triggerUid;
      var formation = PropertiesService.getScriptProperties().getProperty(fo); //FORMATION
     
      var ji = event.triggerUid;
      var jour = PropertiesService.getScriptProperties().getProperty(ji); //JOUR
     
      var subject = "Entête du mail" ;
     
      Logger.log(mail); //Vérifier la variable que sort mail dans les exécutions
     
      MailApp.sendEmail({
        to:mail,
        subject:subject,
        htmlBody: "blabla" + date + jour + formation
                        });
     
    // Je ne sais pas ce que fait cette partie
      PropertiesService.getScriptProperties().deleteProperty(id);
      var triggers = ScriptApp.getProjectTriggers();
      for (var i = 0; i < triggers.length; i++) {
        if(triggers[i].getUniqueId() == id){
          ScriptApp.deleteTrigger(triggers[i]);
        }
      };
    }
    Je comprends que c'est normal que ça ne fonctionne pas ainsi, puisque trigger.getUniqueId(); est changé à chaque fois et ne garde que la valeur du dernier (formation donc).
    J'ai tenté de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var date = event.response.getItemResponses()[1].getResponse();
    var jour = event.response.getItemResponses()[2].getResponse();
    var formation = event.response.getItemResponses()[3].getResponse();
    dans sendMail, mais ça ne fonctionne pas, il ne comprend pas ce que je lui demande et me répond "Cannot read property 'getItemResponses' of undefined
    at sendMail(Code:19:29)"

    Comment faire en sorte de récupérer les variables date, jour, formation pour pouvoir les utiliser dans sendMail ?

  2. #2
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    J'ai fini par trouver la solution.
    Le problème principal, finalement, était "comment transformer les valeurs d'un tableau en variables". Je suis tombée sur un post qui parlait de destructuring assignment, et ai donc tapé ces mots dans la documentation Google Script.

    Le bout de code concernant l'assignation des variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      var data = PropertiesService.getScriptProperties().getProperties(); 
    //data = le tableau (array) contenant les variables, data = {ma: mail@mail.fr, da: 2020-07-09, fo: formation n°1}
     
      var mail = data.ma; 
      var date = data.da;
      var formation = data.fo;
      var jour = data.jo;
      var dernierJour = data.dj;
    //Chaque valeur est appelée avec data.[key de la valeur]
    Le code entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    function sendLater(event) {
      var mail = event.response.getItemResponses()[0].getResponse();
      var date = event.response.getItemResponses()[1].getResponse();
      var jour = event.response.getItemResponses()[2].getResponse();
      var formation = event.response.getItemResponses()[3].getResponse();
      var dernierJour = event.response.getItemResponses()[4].getResponse();
     
      var triggerUid = event.triggerUid; //ID du déclencheur de cet événement
      var trigger = ScriptApp.newTrigger("sendMail") //Lors du déclencher, effectue la fonction sendmail
      .timeBased()
      .after(1 * 30 * 1000) // 6 mois plus tard 262980 //.after(6 * 30 * 24 *60 * 60 * 1000) // 6 mois plus tard (262980 * 60 * 1000)
      .create();  
      var id = trigger.getUniqueId();
      PropertiesService.getScriptProperties().setProperties({
        ma: mail,
        da: date,
        jo: jour,
        fo: formation,
        dj: dernierJour,
      });
      Logger.log(mail, date, jour, formation, dernierJour);
    }
     
    function sendMail(event) {
      var id = event.triggerUid;
      var data = PropertiesService.getScriptProperties().getProperties();
     
      var mail = data.ma;
      var date = data.da;
      var formation = data.fo;
      var jour = data.jo;
      var dernierJour = data.dj;
     
      var subject = "Entête du mail" ;
      MailApp.sendEmail({
        to:mail,
        subject:subject,
        htmlBody: "blabla" + date + jour + formation
                        });
     
      // Supprime les propriétés des précédents questionnaires
      PropertiesService.getScriptProperties().deleteAllProperties();
     
     // Supprime les déclencheurs en trop, sachant qu'il y a une limite de 25 déclencheurs 
      var triggers = ScriptApp.getProjectTriggers();
      for (var i = 0; i < triggers.length; i++) {
        if(triggers[i].getUniqueId() == id){
          ScriptApp.deleteTrigger(triggers[i]);
        }
      };
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/12/2016, 17h01
  2. Réponses: 5
    Dernier message: 30/11/2011, 21h20
  3. Modifier l'action d'un formulaire juste avant son envoi
    Par Tutotictac dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/03/2009, 00h27
  4. Quitter un formulaire lors de son chargement
    Par Asoif dans le forum VB.NET
    Réponses: 6
    Dernier message: 30/01/2008, 17h27
  5. [FORM] récupérer les données d'un formulaire
    Par dragonfly dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 04/12/2007, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo