実現したいこと
プログラミング独学の初心者です。よろしくお願いいたします。
スプレッドシート更新通知をslackに送信する仕組みを作っています。
GASとincoming webhookを連携しました。
【かなえたいこと】
・スプレッドシート指定[sheet]、ブック指定[book]
・行2つ指定[column1,colomn2]
・指定した行が記入されたとき、それぞれ指定した値[AまたはA',B]になった場合のみ通知送信
・column1=Aのときとcolumn1=A'のときで通知内容は異なる
・初回のみ通知送信し、以降は通知しない
発生している問題・分からないこと
column1=AまたはA' かつ column2=Bの状態で、
同じ行の別のセルを更新(追記、編集、削除ともに)すると再び通知が来てしまうので
これを無くしたいです。
エラーメッセージ
error
1エラーは発生しておりません。
該当のソースコード
///////////////////////////////////////////////// // onEdit(e):slack更新通知 // //////////////////////////////////////////////// function onEdit(e) { var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // スプレッドシート(book) var activeSheet = activeSpreadsheet.getActiveSheet(); // アクティブシート(sheet) if(activeSheet.getName() != "sheet"){ // 特定のシート以外の時は処理を中断する return; } var activeCell = activeSheet.getActiveCell(); // アクティブセル var activeValue = activeCell.getValue(); // アクティブセルの値 var newInputRow = activeCell.getRow(); // アクティブ行 var newInputColumn = activeCell.getColumn(); // アクティブ列 var spreadsheetUrl = "spreadsheeturl"; // スプレッドシートのURL if(activeSheet.getRange(activeCell.getRow(),1).getValue() == " A " && activeSheet.getRange(activeCell.getRow(),2).getValue() == " B " && activeSheet.getRange(activeCell.getRow(),99).getValue() == "FALSE") { // 通知1 // 送信するSlackのテキスト1 var slackText = "**test message1**"; sendSlack(slackText); }else if(activeSheet.getRange(activeCell.getRow(),1).getValue() == " A' " && activeSheet.getRange(activeCell.getRow(),2).getValue() == " B " && activeSheet.getRange(activeCell.getRow(),99).getValue() == "FALSE") { // 通知2 // 送信するSlackのテキスト2 var slackText = "**test message2**"; sendSlack(slackText); } } ///////////////////////////////////////////////// // sendSlack:slackに更新通知を送信 // //////////////////////////////////////////////// function sendSlack(slackText){ // slackにて追加したWebhook URLを設定 var webHookUrl = "**webhookurl**"; var jsonData = { // "channel": "#test", // // 'icon_emoji' : "test.png", // "text" : slackText, "link_names" : 1, "username" : "bot名" }; var payload = JSON.stringify(jsonData); var options = { "method": "post", "contentType": "application/json", "payload": payload }; // リクエスト UrlFetchApp.fetch(webHookUrl, options); }
試したこと・調べたこと
上記の詳細・結果
調べてみたところ、新たに通知済みフラグ列[flag]を作成し、
flag=falseの場合のみ通知を送信→送信後にflag=trueに書き換える、
という処理を追加すると希望が叶いそうです。
条件を追加し、flag=falseの場合のみ通知を送信までは出来るようになったのですが、
通知送信後の書き換え処理がうまくいきません。
Googleで検索してそれらしい記述を追記してみましたが、
エラーは出ないものの希望どおりの挙動になりません。
【追記した内容】
sheet.getRange(lastRow, noticedCol).setValue(true);
を sendSlack(slackText); の後ろに追記
【その結果】
通知自体が動かなくなりました
補足
皆様のお力をどうかお貸しください。
よろしくお願いいたします。
0 コメント