1
votes

État inconnu dans les exécutions de projets Google App Script

J'ai un formulaire Google que les équipes de terrain remplissent et soumettent. Le javascript ci-joint envoie par e-mail le contenu du formulaire à tout le monde au bureau.

Les délais d'exécution sont très longs. On a rapporté 19496 secondes, quand Gsuite devrait automatiquement terminer tout script à 5 minutes. Certains ont le statut "Inconnu" dans le journal d'exécution du script de l'application Google et 0 seconde.

Le quota Gsuite est-il épuisé? Y a-t-il une erreur dans mon script?

L'utilisateur exécutant le déclencheur de script reçoit également un e-mail de renvoi, même si tous les e-mails sont en cours de traitement, et la feuille Google reçoit normalement la réponse du formulaire Google .

J'ai essayé d'ajouter "if (e.values ​​&&! e.values ​​[1]) {return;}" en haut et "return;" au fond. Cela n'a pas semblé changer le problème.

J'ai modifié le script de l'application google ci-dessous pour supprimer la liste réelle des adresses e-mail et j'ai raccourci le rapport. Le but du formulaire Google est de fournir un véritable résumé de leurs journées de travail au lieu de simplement "Job is done" dans un e-mail. Donc, ils remplissent une liste de 15 questions à la place.

function myFunction(e){

// Set values for event "e" from Response form, each number being a column in the spreadsheet 
    var value1 = e.values[1];
    var value2 = e.values[2];
    var value3 = e.values[3];
    var value4 = e.values[4];
    var value5 = e.values[5];


  // Build subject and message for email that will be sent out
    var subject1 = value5 + " Job #" + value2 + " " + value3 + " Job Report Submitted " + value1 + "    -oOo-";
        var message_html = "<b>Date:</b> " + value1 + "<br>" + 
                   "<b>Job Number:</b> " + value2 + "<br>" +
                     "<b>Site Name:</b> " + value3 + "<br>" +
                     "<b>Client:</b> " + value4 + "<br>" +
                       "<b>Crew Chief:</b> " + value5 + "<br>";            


     // Send email to chief, of what the chief submitted through the Response form
     var chiefemail = "leo@email.com"; //setting leo email as the default - but this should not be used based on below 
     var chiefname  = "Leo E.";

     if (value5 == "Bryan N.") {
                                    chiefemail = "bryan@email.com";
                                    chiefname  = "Brian N";}
     else if (value5 == "Carl B.") {
                                    chiefemail = "carl@email.com";
                                    chiefname = "Carl B";
                                   }
     else if (value5 == "Clay W.") {
                                    chiefemail = "clay@email.com";
                                    chiefname = "Clay W";
                                     }
     else if (value5 == "Dakota P."){
                                    chiefemail = "dakota@email.com";
                                    chiefname = "Dakota P";
                                     }



 // Send emails to all office staff:     

   var EmailList = "brian@email.com," + chiefemail; 


       MailApp.sendEmail({
                          to: EmailList,
                          subject: subject1,
                          htmlBody: message_html,
                          name: chiefname,
                          replyTo: chiefemail
                           });


}

Je veux que le script se termine, et je ne veux pas recevoir d'e-mails de rebond. Aide!


1 commentaires

Les délais d'exécution dépendent du type de compte. Voir developer.google.com/apps-script/guides/services/quotas


3 Réponses :


1
votes

Je pense qu'il est possible que vous rencontriez ce que j'appelle de faux déclenchements onFormSubmit et je pourrais essayer quelque chose comme ça.

function myFunction(e){
  if(e.values && e.values[1] && e.values[2] && e.values[3] && e.values[4] && e.values[5]) {
    var value1 = e.values[1];
    var value2 = e.values[2];
    var value3 = e.values[3];
    var value4 = e.values[4];
    var value5 = e.values[5];
    var subject1 = value5 + " Job #" + value2 + " " + value3 + " Job Report Submitted " + value1 + "    -oOo-";
    var message_html = "<b>Date:</b> " + value1 + "<br>" + 
      "<b>Job Number:</b> " + value2 + "<br>" +
        "<b>Site Name:</b> " + value3 + "<br>" +
          "<b>Client:</b> " + value4 + "<br>" +
            "<b>Crew Chief:</b> " + value5 + "<br>";            
    var chiefemail = "leo@email.com"; //setting leo email as the default - but this should not be used based on below 
    var chiefname  = "Leo E.";
    if (value5 == "Bryan N.") {
      chiefemail = "bryan@email.com";
      chiefname  = "Brian N";}
    else if (value5 == "Carl B.") {
      chiefemail = "carl@email.com";
      chiefname = "Carl B";
    }
    else if (value5 == "Clay W.") {
      chiefemail = "clay@email.com";
      chiefname = "Clay W";
    }
    else if (value5 == "Dakota P."){
      chiefemail = "dakota@email.com";
      chiefname = "Dakota P";
    }
    var EmailList = "brian@email.com," + chiefemail; 
    MailApp.sendEmail({
      to: EmailList,
      subject: subject1,
      htmlBody: message_html,
      name: chiefname,
      replyTo: chiefemail
    });
  }
}

En savoir plus à ce sujet ici . Vous pouvez également consulter le journal du pilote de la pile pour voir ce qui se passe.


4 commentaires

J'ai ajouté cela, mais cela n'a pas résolu mon problème. L'e-mail arrive après 1 seconde, mais la durée dans le journal des exécutions continue d'augmenter et jusqu'à 55 secondes. Ensuite, il est passé à 0 et à l'état Inconnu. J'essaierai également de consulter les journaux Stackdriver. Merci.


Avez-vous essayé la journalisation du pilote de pile ?


J'ai fini par copier la feuille contenant, et ré-ajouter le déclencheur. Le script se termine correctement après ~ 0,1 seconde dans la copie de la feuille de la copie du formulaire en direct. J'ai également ajouté votre code ci-dessus pour les déclencheurs parasites, car cela se déclenchait dans ma copie. Merci Cooper.


Vous savez de temps en temps que je trouve nécessaire de simplement démarrer un projet dans une autre feuille. Je ne peux pas expliquer quel est le problème, mais je trouve que cela a fonctionné plusieurs fois et tant que cela fonctionne, je ne me sens pas obligé de le comprendre.-) Le script ne semblait pas être un problème en termes de longueur de parcours.



1
votes

Cela a commencé récemment pour moi aussi.

Selon la transcription d'exécution, mes exécutions goGet et goPost semblent s'exécuter indéfiniment, même si le serveur renvoie une réponse assez rapidement.

J'ai remarqué que cela ne se produit que si j'exécute doGet et doPost en tant qu'utilisateur anonyme en mode de navigation privée. Si je suis connecté, alors la transcription d'exécution se comporte normalement pour cette requête particulière.

Je gère un script Google Apps assez volumineux avec une utilisation assez élevée au cours des 1,5 dernières années. Cela a commencé à arriver très récemment à mon script. Il est alarmant de voir que votre message SO est également assez récent.

La copie du script dans un nouveau script résout temporairement le problème, mais finalement le nouveau script commence à souffrir également de ce problème. Une fois que le nouveau script commence à montrer ces symptômes, certaines parties du code (en particulier l'ouverture et la lecture de Google Sheets par programmation) cessent de fonctionner correctement et commencent à pépin. Donc, je pense que ce problème va au-delà du simple problème visuel dans la transcription d'exécution, et qu'il affecte négativement le comportement réel de mon autre code dans ce script également.


4 commentaires

J'ai le même problème récemment (le ou les deux derniers jours), une mise à jour?


J'ai essayé de résoudre ce problème. La désactivation et la réactivation semblent «résoudre» le problème. Cependant, cela doit être fait CHAQUE fois que je publie une nouvelle version. J'espère que cela aidera jusqu'à la résolution.


Mon script d'origine en question n'a pas de nouveau pépin, mais un autre script a commencé à pépiner avec de longs temps d'exécution. Comme vous le dites, j'espère que ce problème sera bientôt résolu.


Hier, j'ai reçu une centaine de notifications indiquant que mes scripts avaient échoué car j'avais «utilisé trop de temps sur l'ordinateur». J'ai regardé et n'ai trouvé aucun problème dans les exécutions qui s'étaient déroulées comme moi-même, mais plus de 40 exécutions d'autres instances qui s'étaient déroulées en continu les sept derniers jours. Pas une seule exécution n'a répondu aux tentatives pour y mettre fin, rien de ce que j'avais sur un déclencheur ne fonctionnait. Aujourd'hui, les mêmes instances sont toujours en cours d'exécution, mais je ne suis plus limité et tout fonctionne bien. J'ai contacté l'assistance Google et ils ont suggéré un dépassement de capacité de la pile. -_-



1
votes

J'ai un script complémentaire Google qui fonctionnait bien pendant des mois et qui a récemment développé des comportements similaires à ceux décrits - en particulier des fonctions échouant avec un temps d'exécution de 0 seconde et un type "Inconnu".

Je n'ai pas encore trouvé pourquoi, bien qu'aujourd'hui, j'ai contacté l'assistance Google Script pour voir si elle peut faire la lumière là-dessus.

Ce que j'ai trouvé est cependant une solution de contournement. Mon script a commencé ce comportement étrange à un moment où je n'avais rien changé dans le code. Ce que j'avais fait , cependant, c'était activé le runtime V8. Si je le retourne à l'ancien moteur d'exécution ES5 "Rhino", tout revient à fonctionner comme avant.

Consultez cette page pour savoir comment faire ça , et essayez-le. Je suis toujours en train de rechercher dans mon script l'une des incompatibilités répertoriées et je n'en ai trouvé aucune, mais au moins mes utilisateurs peuvent continuer à utiliser le script pour le moment pendant que je recherche!

Lors de l'utilisation de l'environnement d'exécution Rhino, les exécutions qui ont un type "Inconnu" reviennent à leurs valeurs précédentes, qui semblent toutes être "Web App".


1 commentaires

Je n'ai pas rencontré à nouveau le problème, mais je n'ai rien mis à niveau vers la v8 non plus. Je dois y apporter des modifications cette semaine, donc je verrai si cela recommence à poser des problèmes.