特定条件でレコード削除をキャンセル!

著者名:北川 恭平(サイボウズ)

目次

はじめに

今回は、 2016年5月のアップデート で追加された、削除イベントのキャンセル機能の使いどころについて紹介したいと思います。

今までは削除イベントはキャンセルできなかったため、JavaScriptで削除の制御をできませんでした。
この機能実装によって、たとえば「削除可の決済がおりていなければ削除できない」といったカスタマイズが可能になります。

おさらいしておきますと、削除イベントのキャンセル対応が入ったイベントは下記2つになります。

では、実際にサンプルコードを交えて試していきたいと思います。

アプリの準備

今回は削除キャンセルを試すために、アプリストアから「レンタル機器官理」アプリを追加し、次のフィールドを追加しました。

フィールドタイプ フィールド名 フィールドコード 項目と順番
チェックボックス 削除承認 delete_flag

アプリを作成したら、レコードを1件登録しておきましょう。

サンプルコード

ではさっそく、試していきたいと思います。
今回のアップデートでは、以下2つのイベントに対して削除イベントをキャンセルできるようになっています。

  • app.record.detail.delete.submit
  • app.record.index.delete.submit

削除キャンセルできるパターンは、上記イベントハンドラー内で以下の3つの処理の場合のときに可能です。

  1. return falseした場合
  2. event.errorにメッセージを代入して、return eventする。
  3. thenableなオブジェクトを返す場合はresolve(false)するか、event.errorをセットして、resolve(event)する。

今回は、2つめのevent.errorにメッセージを代入してreturn eventをしてみます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
/*
 * 特定条件でレコード削除をキャンセルするサンプルプログラム
 * Copyright (c) 2016 Cybozu
 *
 * Licensed under the MIT License
 * https://opensource.org/license/mit/
 */

(function() {
  'use strict';
  const events = ['app.record.detail.delete.submit', 'app.record.index.delete.submit'];
  kintone.events.on(events, (event) => {
    const record = event.record;
    if (record.delete_flag.value.length === 0) {
      event.error = '削除承認が下りていません!';
      return event;
    }
  });
})();

動作確認

ではサンプルコードをkintoneに適用して、動きをみてみたいと思います。

「承認」フィールドにチェックを入れない状態で、レコード詳細画面から「削除」をしてみます。

画面にエラーメッセージが出て、削除がキャンセルされれば成功です。

逆に、「承認」フィールドにチェックを入れた状態で削除してみます。

レコードが削除されました。

おわりに

今回はPromiseを使ったパターンを紹介しませんでしたが、たとえば「レコードを削除する時に関連したレコードを含めて消したい」といったケースも、エラーハンドリングがしやすくなると思います。
実際に活用してみてください。

information

このTipsは、2016年5月版kintoneで動作を確認しています。