Gestionnaire d'événements de script Google Apps

Je tente actuellement d'utiliser le gestionnaire d'événements Google Apps de Martin Hawksey à partir de son blog , mais je rencontre 2 problèmes.

# 1) La date dans les emails de conformation publie la date et l'heure "d'aujourd'hui" au lieu de la date et de l'heure de l'événement (c'est dans son original et il ne l'a jamais corrigé). La plupart disent que cette section n'est pas correcte:

var variableData = isDate(data[normalizeHeader(templateVars[i])]); email = email.replace(templateVars[i], variableData || ""); } return email; } // Test if value is a date and if so format function isDate(sDate) { var scratch = new Date(sDate); if (scratch.toString() == "NaN" || scratch.toString() == "Invalid Date") { return sDate; } else { return Utilities.formatDate(new Date(), TZ, "dd MMM yy HH:mm"); } } 

# 2) Mon autre problème est dans le modèle pour joindre les instructions que je ne peux pas appeler à toutes les variables (c.-à-d. $ {"Facture"} ou $ {"Montant"} :: à la place, il renvoie la date "d'aujourd'hui" <- I A ajouté plus de cellules et ajouté une colonne pour chacune et elles ont des données en elles, et ont effectué des ajustements corrects dans le script, mais rien.

ex.

 Template: "Your Invoice # is: ${"Invoice"} and your total amount due is: ${"Amount"}" Reality: "Your Invoice # is: 13 Feb 13 13:18 and your total amount due is: 13 Feb 13 13:18." 

Voici mon script complet et les modifications que j'ai effectuées (pas trop différentes de son original): https://gist.github.com/hakarune/4985606

Toute et toute l'aide serait très appréciée, la plus grande et la plus importante est cette date … Merci.

Pour le problème # 1, les commentaires pour la fonction isDate() indiquent que si le sDate fourni est une date valide, une version formatée de cette date sera renvoyée. Mais l'appel à formatDate() passe la new Date() , qui sera la date et l'heure actuelles. Au lieu de cela, il devrait passer une new Date(sDate) .

 return Utilities.formatDate(new Date(sDate), TZ, "dd MMM yy HH:mm"); 

Pour le problème # 2, on dirait que le problème est à nouveau avec isDate() . La fonction fillInTemplateFromObject() appelle isDate() pour formater les données du modèle s'il s'agit d'une date, en attendant qu'il soit laissé tel quel. Le problème est que chaque numéro passera le isDate() , car le test consiste simplement à savoir si new Date(sDate) produira une date. Voir cette référence , vous verrez que cela finirait par être traité comme une new Date(milliseconds) . Vous obtenez la date actuelle en raison du bug décrit ci-dessus … corrigez cela et vous obtiendrez une date différente, mais encore une date. Vérifiez la détection d'une "instance de date invalide" dans JavaScript , elle peut fournir un test plus concluant, si cela fonctionne dans les applications-script.

Voici une solution d' isDate() pour que vous puissiez essayer. Il inclut le correctif pour le problème n ° 1 et tire dans la routine isValidDate() de Détection d'une occurrence de date "date invalide" en JavaScript pour une différenciation plus précise entre les dates et les chiffres.

 // From https://stackoverflow.com/questions/1353684 // Returns 'true' if variable d is a date object. function isValidDate(d) { if ( Object.prototype.toString.call(d) !== "[object Date]" ) return false; return !isNaN(d.getTime()); } // Test if value is a date and if so format // otherwise, reflect input variable back as-is. function isDate(sDate) { if (isValidDate(sDate)) { sDate = Utilities.formatDate(new Date(sDate), TZ, "dd MMM yy HH:mm"); } return sDate; } 

Si vous êtes curieux, c'est le code de test que j'ai utilisé dans le débogueur. Les commentaires montrent ce qui a été affiché comme valeurs dans le débogueur.

 var TZ = "GMT"; // isDate() uses a global variable for TimeZone, let's try GMT function myFunction() { var a = new Date(); // Fri Feb 22 2013 20:48:07 GMT-0500 (EST) var b = isDate(a); // "23 Feb 13 01:48" var c = 142312; // 142312.0 var d = isDate(c); // 142312.0 var e = 'test string'; // "test string" var f = isDate(e); // "test string" var g = 'Feb 22, 2013' // "Feb 22, 2013" var h = isDate(g); // "Feb 22, 2013" debugger; }