質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

3686閲覧

GAS自動メールシステム

kaoru3151

総合スコア50

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2017/06/20 08:56

編集2017/06/20 09:14

スプレッドシートとGASファイルで自動メール送信システムを開発しておりました。

機能としましては、複数人で共有している人達で、タスクをスプレッドシートで管理して、タスクの有効期限を超えると登録しているアドレスにメールを送信するというものです。

はじめは、自分でメール送信のトリガーをセットして使えればいいと思っていたのですが、このスプレッドシートをテンプレート化して、他の人達でも使えるようにしようとした時に、トリガーの設置ですごく悩みました。

#やりたいこと
一つのプロジェクト(一つのGASファイル)に対して一回のタイムベースのトリガーをセットすることです。

#実際に試したこと

スプレッドシートに送信トリガーボタン(画像を挿入してsetTrigger()を割り当て)を設置して

// 現在セットされているトリガーが0個なら、newTrigger()を実行してトリガーをセット // 【セットトリガー】 function setTrigger() { if (ScriptApp.getProjectTriggers().length === 0) { return newTrigger(); } } // 【メール送信トリガーセット】 function newTrigger() { ScriptApp.newTrigger('sendMail') .timeBased() .atHour(9) // 朝9時頃 .everyDays(1) // 毎日 .create(); } function sendMail() { GmailApp.sendEmail('メールアドレス', 'メール件名', 'メール本文'); }

上記スクリプトを実行してトリガーをセットしようと考えました。

しかし、トリガーはプロジェクトに紐づくというより、ユーザー紐づいているみたいで、ユーザー全員がトリガーをセット出来てしまう状態になってしまいました。

どうにか一回だけトリガーをセットしたいのですが、
アドバイをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

getProjectTriggers() で確認してから追加するようにするとか。

【Class ScriptApp  |  Apps Script  |  Google Developers】
https://developers.google.com/apps-script/reference/script/script-app#getprojecttriggers

投稿2017/06/20 09:47

kei344

総合スコア69357

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaoru3151

2017/06/20 10:23 編集

回答ありがとうございます! 現在、(ScriptApp.getProjectTriggers().length === 0)ならScriptApp.newTrigger()を実行するとういう仕組みになっています。 まず自分で、上記のやり方でトリガーをセットします。Logger.log(ScriptApp.getProjectTriggers().length)でログを見てみると、1.0で確認できます。 次にスプレッドシートを共有している他の人で、Logger.log(ScriptApp.getProjectTriggers().length)でログを見てみると、0.0でトリガーがセットされていないとなっていて、 (ScriptApp.getProjectTriggers().length === 0)ならScriptApp.newTrigger()を実行すると、 またトリガーがセットされてしまいます。(ユーザー毎にトリガーがセットされる) プロジェクト毎(GASファイル毎に)にトリガーを確認する方法があればうれしいのですが、もう少しドキュメントを読んでみます。
kei344

2017/06/20 14:38

それは失礼しました、こちらの見落としです。 getUserTriggers などもあるため、機能が違うものだと思うのですが、同じ値になりますか?
kaoru3151

2017/06/21 02:35 編集

getUserTriggers(sheet)も試してみたのですが、実行するユーザーのトリガーしか取れなくて。。 トリガーが一度セットされたら、無理やりスクリプトの画像を消そう(GASで画像を削除するメソッドが見当たらなかったので、行を非表示)とも試みましたが、画像は残ってしまいうまくいきませんでした。 そもそもテンプレート化して、トリガーの管理をGASでやろうとするのが違うんじゃないかと思い始めて、GAEでサーバーサイドをやろうときめました。 いろいろとありがとうございました!
guest

0

自己解決

GASで全てやろうとせず、GAEでサーバサイドをやろうと決めました!

投稿2017/06/21 02:38

kaoru3151

総合スコア50

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問