例えば各ユーザーに通知する「掲示板」のようなアプリをイメージした時に、掲示期限が過ぎたら非公開にする機能が欲しいなと思ったのですが、
現在日付と比較して何か操作をする、ということはkintone標準機能では実現できず・・・。
標準機能ではできないならば別サービスと連携カスタマイズで良いじゃない、ということで試してみました。
今回はGoogleの Google Apps Script で実現してみます。
Googleアカウントに関しては、もはや誰でも1つは持っていると思われるので、すぐに試すことができますね。
下準備
kintone側(1)掲示板アプリを作成する
アプリの項目は以下です。
(最低限の項目のみ追加しています。)
「タイトル」、「内容」は掲示内容の基本情報として必要なので追加しているだけで、
今回のカスタマイズの肝は「公開期限」と「公開状態」です。
kintone側(2)掲示板アプリのレコードのアクセス権を設定する
「公開期限」が”非公開”になったレコードを非公開にするように、レコードのアクセス権を設定します。
今回は非公開の権限だけ設定していますが、実際の運用を考えると、非公開であっても特定のユーザー(管理者など)だけ閲覧/編集/削除が可能、のようなアクセス権が適切です。
kintone側(3)掲示板アプリのAPIトークンを発行する
後述のGoogle Apps Scriptで使用するAPIトークンを発行します。
この時最低限必要な権限のみアクセス権を設定するようにします。
(今回は、「レコード閲覧」と「レコード編集」)
Google Apps Script側(1)スクリプトにライブラリを読み込む
Google Apps Scriptからkintoneを簡単に操作できるライブラリ「kintoneManager」を読み込みます。
読み込み方、及びライブラリの説明は作者様がQiitaにて記事を書いてくださっています。
Google Apps Script側(2)スクリプトを記述する
実際にコーディングしていきます。
内容としては、「公開期限が実行日より前日のレコードを取得し、公開状態を”非公開”に更新する」というものです。
kintoneアクセス情報のappid、tokenや、KINTONE_DOMAINは各自の環境の値を指定します。
// kintoneアクセス情報 const kintoneApps = { "掲示板アプリ": { appid: 999, guestid: null, token: "your-api-token" } }; const KINTONE_DOMAIN = "your-kintone-domain"; function execute() { const manager = new KintoneManager.KintoneManager(KINTONE_DOMAIN, kintoneApps); const today = new Date(); const todayString = today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate(); const query = "公開期限 < \"" + todayString + "\""; const result = manager.search("掲示板アプリ", query); const resp = JSON.parse(result.getContentText()); const updateRecords = []; for (var i = 0; i < resp.records.length; i++) { const record = resp.records[i]; updateRecords.push({ id: record["$id"].value, record: { 公開状態: { value: "非公開" } } }); } manager.update("掲示板アプリ", updateRecords); }
Google Apps Script側(3)トリガーを設定する
Google Apps Scriptは定期実行が可能なので、それを利用して上記のスクリプトを定期実行する設定をしていきます。
遷移後の画面で「トリガーを追加」でトリガーを追加していきます。
ダイアログ内で詳細を設定していきます。
今回は日次で実行したいので、「時間ベースのトリガー」を「日付ベースのタイマー」に、「時刻」を「午前0時〜1時」に設定します。
もちろん、各自の運用に合わせて変更して問題ありませんが注意として「午前0時〜1時」のように範囲で指定する為、○時○分ぴったりに実行する、ということはできません。
上記設定後、毎日「午前0時〜1時」に更新処理が実行されます。