スプレッドシートからkintoneレコードにコメント(kintone×GAS)
目次
※本ページ先頭に戻りたい場合は画面右下のボタンを押して下さい。
概要
スプレッドシートから下記情報を取得し、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 | // テスト用 function test_post_comment(){ // app情報 const APP_ID = XXX const DOMAIN = "ドメイン" const LOGIN_USER_NAME = "ログイン_ユーザー名" const LOGIN_USER_PASS = "ログイン_パスワード" // サンプル通知用 let record_id = 1 let comment_contents = "GASからkintoneレコードにコメントを追加しました" let send_user_name = "通知先メンション" // kintoneの指定レコードに対しコメント投稿 post_commment(APP_ID, DOMAIN, LOGIN_USER_NAME, LOGIN_USER_PASS, record_id, comment_contents, send_user_name) } // 概要:kintoneの指定レコードに対しコメント投稿 // 第一引数:APP_ID // 第二引数:ドメイン名 // 第三引数:コメント通知を行うユーザー名 // 第四引数:コメント通知を行うユーザーパスワード // 第五引数:レコードID // 第六引数:コメント通知内容 // 第七引数:メンション先ユーザー名 function post_commment(app_id, domain, login_user_name, login_user_pass, record_id, comment_contents, send_user_name) { console.log("コメント投稿処理:開始") let post_comment_payload = { "app": app_id, "record": record_id, "comment": { "text": comment_contents, "mentions": [ { "code": send_user_name, "type": "USER" } ] } } //コメント送信内容 var post_comment_option = { method: "post", contentType: "application/json", headers: {"X-Cybozu-Authorization" : Utilities.base64Encode(login_user_name + ":" + login_user_pass)}, payload: JSON.stringify(post_comment_payload) }; try{ // コメント送信実行 let response = UrlFetchApp.fetch("https://" + domain + ".cybozu.com/k/v1/record/comment.json", post_comment_option); }catch(e){ // 強制終了 console.log("上記のレコードのコメント送信処理でエラーが発生しました。\\n 詳細:" + e) } console.log("コメント投稿処理:終了") // 処理終了 return } |
引数の解説
- APP_ID:URL内の「k/」以降の数値
※アプリ毎、環境毎に異なるので注意
- DOMAIN:URL内の「https://」と「.cybozu.com」の間の文字
※環境毎に異なるので注意
- LOGIN_USER_NAME:kintoneに登録されている「ログイン名」を指定
※通知用のユーザーを追加するのがオススメ
(↓では「GAS」というアカウントを追加している)
※「ログイン名」は日本語非推奨
- LOGIN_USER_PASS:通知アカウントのパスワードを指定
※コード上にパスを書く為、通知用のユーザーを追加するのがオススメ
- record_id:コメントを通知したいレコード番号を指定
- comment_contents:通知文章
- send_user_name:メンション先ユーザー名
実際の使い方
上記ソースコードは「1レコードに対し、1回コメント通知」という内容の為、
スプレッドシート全行に対して実行するには下記流れとなります。
- スプレッドシートにkintoneレコード情報反映(手動でも、自動でもOK)
- レコード番号、通知先メンション、通知文章等をセルから取得
- ループして1行毎に「post_commment」関数をコールする
また、運用するにあたって「この条件を満たしているレコードのみ通知したい」となった場合は、
下記コード、画像のように「関数の結果が◎の場合のみ通知」としておけば、
関数の修正のみで臨機応変に条件を変更出来ます。
1 2 3 4 5 6 7 | //kintoneコメント送信フラグが「◎」の場合 if(kintone_send_flg === "◎"){ // コメント送信処理実行 post_commment(APP_ID, DOMAIN, LOGIN_USER_NAME, LOGIN_USER_PASS, record_id, comment_contents, send_user_name) } |
感想
GASは殆ど開発経験が無く、
下記の基礎技術もロクに知らなかった為、苦労しました
(何度も「ExcelVBAならこう書けるからGASでも出来るだろう…」とgoogle検索して試行錯誤してました)
- スプレッドシートからセルを取得
getRange.getValue()
- 値、書式、入力規則削除
getRange.clear()
getRange.clear({validationsOnly: true})
- シート取得
SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“シート名”);
今回のコメント通知でGAS開発経験を積めたのは、
今後のプログラム人生でプラスになったと思います
編集履歴
2022/08/18 新規作成