はじめに
kintoneはアプリの設定で、以下のイベント時にwebhookのURLを叩いてもらうことが可能
- レコードの追加
- レコードの編集
- レコードの削除
- コメントの書き込み
- ステータスの更新
しかし、レコードの編集や削除の際は、変更前・削除前のレコード情報を返してくれないので非常に困る...
代替案
同じ内容で困っている人の記事を見つけた。
上記を参考に、更新時のwebhookであればレコード情報を返すことを利用できないかと考えた。
解決方法
フィールド内に「delete_flag」というフィールドIDでチェックボックスがある想定。
updateのwebhookを削除だけで使えるのであれば不要だけど、そうもいかない状況だったのでフラグで解決することにした。
触られたくないものなのでグループで囲み、初期表示は折りたたんだ状態にしておくスタイル。
(ユーザーの眼に見える箇所へ置くことになるけど、仕方がない...)
そしてjavascriptでカスタマイズ
削除時のイベントの発生時、削除よりも前に更新イベントを発生させて、成功したら後続の処理へ進ませることに成功した。
(() => {
'use strict';
kintone.events.on(['app.record.index.delete.submit', 'app.record.detail.delete.submit'], function(event){
return kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', {
"app": kintone.app.getId(),
"id": event.recordId,
"record": {
"delete_flag": { "value": ["ok"] }
}
}).then((resp) => {
return event;
}).catch((err) => {
console.error(err);
});
});
})();
あとはwebhook側で削除フラグが立っているかを判断して、更新か削除かを切り分ければ良い。
...というゴリ押し方法(´・ω・`)
おわりに
今回は削除だけ対応すればよかったが、更新時の変更前後を一緒に取る方法はまた別途考えてみたい。
変更前の情報をどこかに持っておくようにフィールドを作成しておけば、「前後で何も変わってない=削除のイベント」みたいな判断もできそうな気がする。