こんにちは!長塚電話工業所の佐藤です。
かなり間が空いてしまいましたが、こちらの後編もよろしくお願いいたします。
前回の内容については、こちらをご確認ください。
Google Apps Scriptを使用して、kintoneからデータを取得してみましょうという内容でしたね。
今回は、その取得してきたデータをどのように活用するか?例を挙げてご説明いたします。
ソースコード
早速ではありますが、ソースコードをご確認ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | function findAndGenerateUrls() { const spreadsheet = SpreadsheetApp.openById("your-spread-sheet-id"); const sheet = spreadsheet.getActiveSheet(); const range = sheet.getDataRange(); const values = range.getValues(); const headers = values[0]; const columnIndex = headers.indexOf('保守終了'); const statusIndex = headers.indexOf('契約ステータス'); const recordIdIndex = headers.indexOf('レコード番号'); const titleIndex = headers.indexOf('保守タイトル'); if (columnIndex === -1 || statusIndex === -1 || recordIdIndex === -1 || titleIndex === -1) { throw new Error('必要な列が見つかりませんでした。'); } const today = new Date(); today.setHours(0, 0, 0, 0); const oneMonthLater = new Date(today.getFullYear(), today.getMonth() + 1, today.getDate()); const outputData = []; // ここで outputData を定義 values.forEach((row, index) => { if (index === 0) return; const expirationDate = new Date(row[columnIndex]); expirationDate.setHours(0, 0, 0, 0); const contractStatus = row[statusIndex]; if (expirationDate >= today && expirationDate <= oneMonthLater && contractStatus !== '契約終了') { const recordId = row[recordIdIndex]; const maintenanceTitle = row[titleIndex]; const baseUrl = 'https://xxxx.cybozu.com/k/xx/show#record='; const url = `${baseUrl}${recordId}`; outputData.push({ url, title: maintenanceTitle }); } }); return outputData; } function sendEmailWithResults(outputData) { const recipient = "xxx@xxx.co.jp"; // 宛先のメールアドレス const subject = "your-mail-subject"; // メールの件名 let body = "<p>以下のリンクから保守情報が確認できます。</p><ul>"; // リストの形式でURLとタイトルを追加 outputData.forEach(data => { body += `<li>${data.title}: <a href="${data.url}">${data.url}</a></li>`; }); body += "</ul>"; // メールの送信 MailApp.sendEmail({ to: recipient, subject: subject, htmlBody: body // HTML形式でメールを送信 }); Logger.log('メールが送信されました。'); } function main(){ getKintoneRecords(); Utilities.sleep(5000); // 5秒待つ var outputData = findAndGenerateUrls(); // findAndGenerateUrls 関数を呼び出し、その結果を outputData に代入 sendEmailWithResults(outputData); // outputData を sendEmailWithResults 関数に渡す } |
こちらのソースコードは、前回ご紹介したGASのファイルの下にそのまま追記していただいて構いません。
ソースコード詳細
内容について、簡単にご説明します。
- findAndGenerateUrls()
役割: Googleスプレッドシートのデータを基に、指定された条件に一致するレコードのURLを生成します。
主な処理:
・「保守終了日」が今日から1ヶ月以内で、かつ「契約ステータス」が「契約終了」でないレコードを抽出します。
・該当するレコードのURLとタイトルを生成し、outputDataというリストに保存します。
- sendEmailWithResults(outputData)
役割: findAndGenerateUrls()で生成されたデータを使用して、メールで通知を送信します。
主な処理:
・メールの受信者、件名、本文を設定し、GoogleのMailAppを使ってHTML形式のメールを送信します。
・メールの本文には、生成されたURLとタイトルのリストが含まれます。
- main()
役割:全体のプロセスを順番に実行します。
主な処理:
getKintoneRecords()を実行してKintoneのレコードを取得し、スプレッドシートに書き込みます。5秒待機した後、findAndGenerateUrls()で条件に一致するデータのURLを生成し、sendEmailWithResults()でメール通知を送信します。
注意点
コピー&ペーストでは動作しません
ソースコードの一部はプライバシーやセキュリティの関係上マスクしたり、別の文字列に置き換えたりしています。ですので適宜、変換を行ったうえでご活用ください。
別の条件および抽出方法について
今回は、kintone側のステータスなどを条件にレコード抽出を行いました。しかし場合によって○○の条件の上位xx件、など、様々な抽出方法が考えられます。ここではパターン別の紹介はいたしませんので、各自お調べの上実装ください。
メール送信について
GAS側でデフォルト実装が可能なのは、GASを実行しているプロジェクトのメールアドレス(gmail)です。会社のドメインや特定のアドレスから送信したい!という場合は、別途サービスと組み合わせる必要があるかと思われますので、各自お調べの上ご調整ください。
今回はここまでです。最後までお読みいただきありがとうございました!