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

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

目次

はじめに

今回は、 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 で動作を確認しています。