実現したいこと
Googleフォームに入力された内容をメールで送るGASを実装しているのですが、エラーが出てしまいます。
こちらの方と同様です。
↓
GAS:Googleフォームのデータを取得できないことがある
https://teratail.com/questions/panqo4tlz4fa7c
ただ、エラーにならない場合もあるため、
「もしエラーの場合は再びトライする」といったスクリプトについてご教授いただきたく質問させていただきました。
- Googleフォームの入力内容をメールで送信
- エラーにならなければ完了
- エラーになった場合は、再びトライする
- 再トライして完了すれば終了
発生している問題・エラーメッセージ
Exception: フォームのデータを取得できませんでした。しばらくしてからもう一度お試しください。 at sendform(コード:2:17)
該当のソースコード
GAS
1function sendform(e){ 2var items = e.response.getItemResponses(); 3var msg = ''; 4var ttl = ''; 5 6var name = items[1].getResponse(); 7var jobno = items[2].getResponse(); 8ttl = jobno + ' ' + name + ' 納品報告'; 9 10for (var i = 0; i < items.length; i++) { 11var item = items[i]; 12var q = item.getItem().getTitle(); 13var a = item.getResponse(); 14msg += q + ':\n' + a + '\n\n'; 15} 16 17let draft = GmailApp.createDraft('メールアドレス', ttl, msg); 18let draftID = draft.getId(); 19GmailApp.getDraft(draftID).send(); 20}
試したこと
トリガーを一旦削除して再びつくる←効果なし。
ただ、上手くいく時が7~8割なので、その点が困っています。
よろしくお願いいたしますm(_ _)m
とりあえず、エラーが起きた時には再びトライしてもらうように書き換えてみました。
↓
function sendform(e){
var maxRetries = 3;
var items;
var msg = '';
var ttl = '';
for (var retry = 0; retry < maxRetries; retry++) {
try {
items = e.response.getItemResponses();
break;
} catch (error) {
if (retry === maxRetries - 1) {
throw error;
}
Utilities.sleep(1000);
}
}
var name = items[1].getResponse();
var jobno = items[2].getResponse();
ttl = jobno + ' ' + name + ' 納品報告';
for (var i = 0; i < items.length; i++) {
var item = items[i];
var q = item.getItem().getTitle();
var a = item.getResponse();
msg += q + ':\n' + a + '\n\n';
}
let draft = GmailApp.createDraft('メールアドレス', ttl, msg);
let draftID = draft.getId();
GmailApp.getDraft(draftID).send();
}
あなたの回答
tips
プレビュー