2012-05-24 1 views
0

Я искал ответ без всякой удачи, поэтому я надеюсь, что кто-то умнее меня увидит это раньше. Вот моя проблема:Мой скрипт Google Apps для отправки электронной почты после отправки формы не обрабатывает формулу массива в базовой таблице

I. У меня есть форма Google, привязанная к электронной таблице для захвата данных заказа. Эта таблица имеет форму матрицы в одной ячейке для вычисления суммы в долларах на основе выборок, сделанных в форме (SubTotal).

II. Я создал GAS, чтобы отправить электронное письмо с подтверждением на основе данных формы заказчику и скопировать другие заинтересованные стороны. Он имеет триггерное событие для OnFormSubmit.

III. Все работает отлично, за исключением значения поля SubTotal отображается как «Undefined» в письме, генерируемом скриптом.

Вот код ГАЗ:

function orderconfemail(e) { 
    var timestamp = e.values[0]; 
    var playerLastName = e.values[1]; 
    var playerFirstName = e.values[2]; 
    var jerseyNumber = e.values[3]; 
    var ageGroup = e.values[5]; 
    var parentLastName = e.values[6]; 
    var parentFirstName = e.values[7]; 
    var toAddress = e.values[8]; 
    var ccAddress = e.values[17]; 
    var teamName = e.values[13]; 
    var coachName = e.values[14]; 
    var mgrName = e.values[16]; 
    var homeSize = e.values[20]; 
    var homeQty = e.values[21]; 
    var awayOrdered = e.values[22]; 
    var awaySize = e.values[23]; 
    var awayQty = e.values[24]; 
    var shortSize = e.values[26]; 
    var shortQty = e.values[27]; 
    var jcktOrdered = e.values[28]; 
    var jcktSize = e.values[29]; 
    var jcktQty = e.values[30]; 
    var pntsOrdered = e.values[31]; 
    var pntsSize = e.values[32]; 
    var pntsQty = e.values[33]; 
    var bagOrdered = e.values[34]; 
    var bagQty = e.values[35]; 
    var orderTotal = e.values[36]; 
    var subject = "Futura FC Uniform Order Confirmation for " + playerFirstName + " " + playerLastName; 
    var htmlBody = "Thank you for your uniform order, " + parentFirstName + "! Your order date/time was: " + timestamp + "." + 
     "<br/>&nbsp;</br>Your order details are as follows: " + 
     "<br/>&nbsp;<br/><b>Player Name:</b> " + playerFirstName + " " + playerLastName + 
     "<br/><b>Jersey Number:</b> " + jerseyNumber + 
     "<br/><b>Age Goup:</b> " + ageGroup + 
     "<br/><b>Team:</b> " + teamName + 
     "<br/><b>Coach:</b> " + coachName + 
     "<br/><b>Manager:</b> " + mgrName + 
     "<br/><b>Home Jersey Size:</b> " + homeSize + 
     "<br/><b>Home Jersey Qty:</b> " + homeQty + 
     "<br/><b>Away Jersey Ordered?</b> " + awayOrdered + 
     "<br/><b>Away Jersey Size:</b> " + awaySize + 
     "<br/><b>Away Jersey Qty:</b> " + awayQty + 
     "<br/><b>Short Size:</b> " + shortSize + 
     "<br/><b>Short Qty:</b> " + shortQty + 
     "<br/><b>Warm Up Jacket Ordered?</b> " + jcktOrdered + 
     "<br/><b>Jacket Size:</b> " + jcktSize + 
     "<br/><b>Jacket Qty:</b> " + jcktQty + 
     "<br/><b>Warm Up Pants Ordered?</b> " + pntsOrdered + 
     "<br/><b>Pants Size:</b> " + pntsSize + 
     "<br/><b>Pants Qty:</b> " + pntsQty + 
     "<br/><b>Backpack Ordered?</b> " + bagOrdered + 
     "<br/><b>Backpack Qty:</b> " + bagQty + 
     "<br/>&nbsp;<br/><b>Your Order Total:</b> " + orderTotal; 
    var optAdvancedArgs = {cc: ccAddress, bcc: "[email protected],[email protected]", htmlBody: htmlBody}; 
    MailApp.sendEmail(toAddress, subject, "Message Body", optAdvancedArgs); 
} 

И вот как это проявляется в моей электронной почте (я вырезал все, кроме субтотальной линии ради пространства в).

Спасибо за ваш единый заказ, Родитель! Ваша дата/время заказа: 23.05.2012 20:10:23.

Ваш заказ Всего: не определено

Электронная таблица действительно показывает правильный, рассчитанный субтотальная но электронная почта не делает. Могу ли я:

I. Рассчитать промежуточный итог в ГАЗ?

II. Заставить сценарий писать строку в электронную таблицу, прежде чем она отправит электронное письмо?

Заранее благодарен!

ответ

1

Согласен с Энрике. Лучше всего вычислить сумму внутри вашего сценария GAS. Вместо

var orderTotal = e.значения [36];

вы можете иметь

уаг OrderTotal = // Сделайте свой расчет здесь. Однако убедитесь, что у вас есть parseInt (e.values ​​[x]), поскольку все параметры в e.values ​​являются строками.

+0

Спасибо! Я посмотрю, смогу ли я вычислить этот расчет в ГАЗе сейчас. : D – ACogswell

0

II. Заставить сценарий писать строку в электронную таблицу до того, как она отправит электронное письмо?

Данные уже находятся в электронной таблице перед тем, как функция будет запущена (поэтому нет возможности ее принудительно).

Проблема в том, что вы получаете значения, переданные в параметре события, которые были отправлены в форме (все строки), а не значения в электронной таблице, как вы думали.

К сожалению, определение строки, в которой значения фактической формы были сфальсифицированы (чтобы вы могли их получить), не так просто, как хотелось бы. Пожалуйста, посмотрите на issue 128 для получения дополнительной информации.

В любом случае, в вашем сценарии я думаю, что намного проще рассчитать orderTotal в самом скрипте.

0

И Энрике, и Шрик были очень полезны, указывая на меня в правильном направлении. Я смог создать еще одну переменную, которая анализировала каждую qty на целое число, а затем выполнила некоторую простую математику для расчета. Вот как выглядит мой правильно функционирующий сценарий GAS:

function orderconfemail(e) { 
    var timestamp = e.values[0]; 
    var playerLastName = e.values[1]; 
    var playerFirstName = e.values[2]; 
    var jerseyNumber = e.values[3]; 
    var ageGroup = e.values[5]; 
    var parentLastName = e.values[6]; 
    var parentFirstName = e.values[7]; 
    var toAddress = e.values[8]; 
    var ccAddress = e.values[17]; 
    var teamName = e.values[13]; 
    var coachName = e.values[14]; 
    var mgrName = e.values[16]; 
    var homeSize = e.values[20]; 
    var homeQty = e.values[21]; 
    var homeQtyInt = parseInt(e.values[21]); 
    var awayOrdered = e.values[22]; 
    var awaySize = e.values[23]; 
    var awayQty = e.values[24]; 
    var awayQtyInt = parseInt(e.values[24]); 
    var shortSize = e.values[26]; 
    var shortQty = e.values[27]; 
    var shortQtyInt = parseInt(e.values[27]); 
    var jcktOrdered = e.values[28]; 
    var jcktSize = e.values[29]; 
    var jcktQty = e.values[30]; 
    var jcktQtyInt = parseInt(e.values[30]); 
    var pntsOrdered = e.values[31]; 
    var pntsSize = e.values[32]; 
    var pntsQty = e.values[33]; 
    var pntsQtyInt = parseInt(e.values[33]); 
    var bagOrdered = e.values[34]; 
    var bagQty = e.values[35]; 
    var bagQtyInt = parseInt(e.values[35]); 
    var orderTotal = ((homeQtyInt*40.50)+(awayQtyInt*25)+(shortQtyInt*24)+(jcktQtyInt*50)+(pntsQtyInt*32.50)+(bagQtyInt*40)); 
    var subject = "TEST! Futura FC Uniform Order Confirmation for " + playerFirstName + " " + playerLastName; 
    var htmlBody = "Thank you for your uniform order, " + parentFirstName + "! Your order date/time was: " + timestamp + "." + 
     "<br/>&nbsp;</br>Your order details are as follows: " + 
     "<br/>&nbsp;<br/><b>Player Name:</b> " + playerFirstName + " " + playerLastName + 
     "<br/><b>Jersey Number:</b> " + jerseyNumber + 
     "<br/><b>Age Goup:</b> " + ageGroup + 
     "<br/><b>Team:</b> " + teamName + 
     "<br/><b>Coach:</b> " + coachName + 
     "<br/><b>Manager:</b> " + mgrName + 
     "<br/><b>Home Jersey Size:</b> " + homeSize + 
     "<br/><b>Home Jersey Qty:</b> " + homeQty + 
     "<br/><b>Away Jersey Ordered?</b> " + awayOrdered + 
     "<br/><b>Away Jersey Size:</b> " + awaySize + 
     "<br/><b>Away Jersey Qty:</b> " + awayQty + 
     "<br/><b>Short Size:</b> " + shortSize + 
     "<br/><b>Short Qty:</b> " + shortQty + 
     "<br/><b>Warm Up Jacket Ordered?</b> " + jcktOrdered + 
     "<br/><b>Jacket Size:</b> " + jcktSize + 
     "<br/><b>Jacket Qty:</b> " + jcktQty + 
     "<br/><b>Warm Up Pants Ordered?</b> " + pntsOrdered + 
     "<br/><b>Pants Size:</b> " + pntsSize + 
     "<br/><b>Pants Qty:</b> " + pntsQty + 
     "<br/><b>Backpack Ordered?</b> " + bagOrdered + 
     "<br/><b>Backpack Qty:</b> " + bagQty + 
     "<br/>&nbsp;<br/><b>Your Order Total:</b> " + orderTotal; 
    var optAdvancedArgs = {cc: ccAddress, bcc: "[email protected],[email protected]", htmlBody: htmlBody}; 
    MailApp.sendEmail(toAddress, subject, "Message Body", optAdvancedArgs); 
} 

Еще один «полученный» я столкнулся. В моей форме было несколько полей Qty, которые допускали значение NULL. Когда это значение было встречено, OrderTotal будет сообщаться в электронном письме как «NaN». Я просто вернулся и сделал 0 по умолчанию для всех полей количества, чтобы исправить это. Всем спасибо!

Смежные вопросы