##はじめに
kintoneのテーブルの入力内容の重複チェックの方法について紹介します。
このようにテーブル内に1つの項目がある状態を前提としています。
今回はルックアップを使用しているため、同じデータを取得してしまうケースが発生することを考慮し重複チェックを入れました。
##kintoneでの挙動
1行目と3行目に同じ値、2行目と4行目は空で入力して保存ボタンを押下します。
値が重複している行に対してエラーを表示します。
空白行は同じ入力内容ではありますが、この行はスルーします。
通常kintoneでは保存時のエラーの場合はモーダルでもエラーを表示していますが、このカスタマイズは難易度が高いため行っていません。
サンプルコード
(function () {
'use strict';
// 定数の定義
const ERROR_DUPLICATE_MESSAGE = '値が重複しています。';
/*
* 保存前イベント
*/
kintone.events.on([
'app.record.create.submit',
'app.record.edit.submit'
], function (event) {
// 申請NOのバリデーションチェック
return validApplyNo(event);
});
/*
* 申請NOのバリデーションチェック
*/
function validApplyNo(event) {
const record = event.record;
// 保存しようとしている申請NOリスト
const tableApplytNoList = record['テーブル'].value;
// バリデーションチェック用の申請NOリスト
let applyNoList = [];
for (let i = 0; i < tableApplytNoList.length; i++) {
// エラーを一度初期化する
record['テーブル'].value[i].value['申請NO'].error = null;
// 値が空ではないかつ既に申請NOが存在していた場合、エラー
if (
tableApplytNoList[i].value['申請NO'].value !== undefined
&& applyNoList.includes(tableApplytNoList[i].value['申請NO'].value)) {
// 値が重複しているインデックスと現在のインデックスをリストに追加
const indexList =
[applyNoList.lastIndexOf(tableApplytNoList[i].value['申請NO'].value), i]
// 値が重複している2つの行に対してエラーを設定
for (let n in indexList) {
record['テーブル'].value[indexList[n]].value['申請NO'].error =
ERROR_DUPLICATE_MESSAGE;
}
}
applyNoList.push(tableApplytNoList[i].value['申請NO'].value);
}
return event;
}
})();
解説
applyNoListについて
バリデーションチェックのために作成した変数です。tableApplytNoListの値をチェックした後に全ての値はここに入っていきます。
条件式部分
tableApplytNoList[i].value['申請NO'].value !== undefined
値が空の場合はスルーするチェックです。
applyNoList.includes(tableApplytNoList[i].value['申請NO'].value)
値が重複している場合はエラーとするため、applyNoListに既に値が含まれているかのチェックです。
条件式内の処理
// 値が重複しているインデックスと現在のインデックスをリストに追加
const indexList =
[applyNoList.lastIndexOf(tableApplytNoList[i].value['申請NO'].value), i]
値が重複している2つの行に対してエラーを追加するため、indexListという変数に重複しているインデックスを追加します。
##さいごに
上記参考になれば幸いです
よりよい方法が他にあれば紹介してください!