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

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

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

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

Q&A

1回答

4542閲覧

UrlFetchApp.fetchを呼び出す権限がありません。に対する対照法を知りたい

124__

総合スコア1

Google Apps Script

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

0グッド

0クリップ

投稿2022/12/13 15:01

編集2022/12/14 01:52

前提

言語:GAS
PC:Mac Book

実現したいこと

GoogleSpreadSheetを編集(onEditを利用、もしくはトリガーで)

Slackに変更前と変更後の値を通知したい

発生している問題・エラーメッセージ

Exception: UrlFetchApp.fetch を呼び出す権限がありません。必要な権限: https://www.googleapis.com/auth/script.external_request

該当のソースコード

appscript.json

1{ 2 "timeZone": "Asia/Tokyo", 3 "dependencies": {}, 4 "oauthScopes": [ 5 "https://www.googleapis.com/auth/script.external_request", 6 "https://www.googleapis.com/auth/spreadsheets.currentonly", 7 "https://www.googleapis.com/auth/spreadsheets" 8 ], 9 "exceptionLogging": "STACKDRIVER", 10 "runtimeVersion": "V8" 11}

code.gs

1function onEdit(e) { 2~~~~~ 3省略 4~~~~~ 5let slackText = 6 "更新前のデータ   :" + e.Value + "\n" + 7 "更新後のデータ   :" + e.OldValue + "\n" 8; 9 10sendSlack(skackText); 11~~~~~ 12省略 13~~~~~ 14 15~~~~ 16function sendSlack(slackText){ 17 let webHookUrl = "URL"; 18 19 let jsonData = 20 { 21 "channel": "チャンネル", 22 "text": slackText, 23 "username": "テスト", 24 }; 25 26 let payload = JSON.stringify(jsonData); 27 28 let options = 29 { 30 "method": "post", 31 "contentType": "application/json", 32 "payload": payload, 33 }; 34 35 UrlFetchApp.fetch(webHookUrl, options); 36} 37

試したこと

  • onEditだとUrlFetchApp.fetchだとエラーが発生する模様?
  • トリガー設定すると、変更前後のデータが引用できない(日付データを引用しているが1970/01/01となる)

補足情報(FW/ツールのバージョンなど)

トリガーで変更前後の値を取得したいが方法が見当たらないため困っております。

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

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

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

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

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

guest

回答1

0

onEditだとUrlFetchApp.fetchだとエラーが発生する模様?

onEdit(e)関数は、権限に限りがあるようです。
任意の関数名(例:myFunction(e))に改名し、その関数にトリガーを設定すると、解決するかもしれません。

  • GASのスクリプトエディタの左メニュー[⏰ トリガー]をクリック
  • 画面右下[トリガーを追加]をクリック
  • 「実行する関数を選択」:例 myFunction()
  • 「イベントの種類を選択」:編集時

トリガー設定すると、変更前後のデータが引用できない(日付データを引用しているが1970/01/01となる)

大文字ではなく小文字では?
また、イベントオブジェクトから取れる日付型データは、シリアル値というものですので、JavaScriptのDate型に変換してやる必要があります。
変換方法はこちら

diff

1 let slackText = 2-  "更新前のデータ   :" + e.Value + "\n" + 3+  "更新前のデータ   :" + e.value + "\n" + 4-  "更新後のデータ   :" + e.OldValue + "\n" 5+  "更新後のデータ   :" + e.oldValue + "\n" 6 ;

投稿2022/12/13 16:57

編集2022/12/13 16:59
Cocode

総合スコア2316

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

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

124__

2022/12/14 02:59

ご回答ありがとうございます。 > 大文字ではなく小文字では? こちら実コード上は小文字でした。表記ミスすみません。 > 任意の関数名(例:myFunction(e))に改名し、その関数にトリガーを設定すると、解決するかもしれません。 こちら実行したところ、変更前後の値が取得できませんでした。 onEditだと2022/12/11の様になるのですが、 myFunction(e)だと値が取得できませんでした。 すべて1970/01/01となってしまいます。 (Date型に変換しております) myFunctionでトリガーとして変更した値を取得する方法はあるのでしょうか?
Cocode

2022/12/14 06:59

私の環境ですと問題なく日付が取得できていますので、現在質問では提示されていない部分になにか原因がひそんでいるのかもしれません。
Cocode

2022/12/14 07:03

↓このコードで function valueTest(e) { const newValue = e.value; const oldValue = e.oldValue; const newUnixTime = (newValue - 25569) * 86400000; const oldUnixTime = (oldValue - 25569) * 86400000; const newDate = new Date(newUnixTime); const oldDate = new Date(oldUnixTime); Logger.log(newDate); Logger.log(oldDate); } ↓これが取得できています (新)Sat Dec 24 09:00:00 GMT+09:00 2022 (旧)Fri Dec 09 09:00:00 GMT+09:00 2022
Cocode

2022/12/14 07:06

あと、質問者様のコード誤字もう一つ発見しましたが、こちらは大丈夫でしょうか? kではなくlです〜 let slackText =  "更新前のデータ   :" + e.Value + "\n" +  "更新後のデータ   :" + e.OldValue + "\n" ; sendSlack(skackText); → sendSlack(slackText);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問