前提・実現したいこと
SlackのSlash CommandsとGASを使ってスプレッドシートの欲しい値を取ってくる
ここに質問の内容を詳しく書いてください。
該当ユーザの行を検索する際に、シートの後半のユーザーだと検索し終わるまでに時間がかかり、Slash Commands上でエラーメッセージとなってしまいます。
発生している問題・エラーメッセージ
Slackbot 16:20 /**** はエラー「operation_timeout」により失敗しました
該当のソースコード
GoogleAppsScript
1function doPost(e) { 2 var verificationToken = e.parameter.token; 3 if (verificationToken != '****************') { // AppのVerification Tokenを入れる 4 throw new Error('Invalid token'); 5 } 6 7 // Slackコマンドのパラメータ(該当ユーザのメールアカウント)取得 8 var useraccount = e.parameter.text; 9 10 // シート取得 11 var sheet = SpreadsheetApp.getActiveSheet(); 12 13 // 検索列指定(今回はC列) 14 var col = 'C'; 15 16 // 該当ユーザの行を検索 17 for(var i=1;i<='100';i++){ 18 if(sheet.getRange(col+i).getValue() === useraccount){ 19 20 // 該当ユーザがある行を取得 21 var userrow = i; 22 23 // 該当ユーザの各サービスのアカウント権限値を取得 24 var valD = sheet.getRange('D'+userrow).getValue(); 25 var valE = sheet.getRange('E'+userrow).getValue(); 26 var valF = sheet.getRange('F'+userrow).getValue(); 27 var valG = sheet.getRange('G'+userrow).getValue(); 28 29 // 結果を取得 30 var kekka1 = useraccount+'が持っているアカウントは↓ '+'(★:オーナー ◎:admin ◯:user)'+' \n'+'Slack'+' : '+valD+' \n'+'GSuite'+' : '+valE+' \n'+'Docbase'+' : '+valF+' \n'+'Jira'+' : '+valG; 31 32 // 結果をSlackに返す 33 var response = {text: kekka1}; 34 return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON); 35 } 36 } 37 38 //該当ユーザがいなかった場合の内容をSlackに返す 39 var kekka2 = useraccount+' のユーザーはいません' 40 var response = {text: kekka2}; 41 return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON); 42} 43
試したこと
- 考えていること
シートの値を1つ1つ検索しているため膨大な時間がかかっている。
なので、「シートの値を一気に取得してそこに該当のユーザーがいるかいないか?」のフローに書き換えた方がいい
- 困っていること
力不足でどう書き換えれば正しいかが分からないです...
補足情報(FW/ツールのバージョンなど)
これを参考に作っています。https://qiita.com/akibin/items/d7bda60b038890d770b7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/24 04:55