4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【kintone】テーブルの入力内容の重複チェックの方法を紹介

Posted at

##はじめに
kintoneのテーブルの入力内容の重複チェックの方法について紹介します。

image.png
このようにテーブル内に1つの項目がある状態を前提としています。
今回はルックアップを使用しているため、同じデータを取得してしまうケースが発生することを考慮し重複チェックを入れました。

##kintoneでの挙動
image.png
1行目と3行目に同じ値、2行目と4行目は空で入力して保存ボタンを押下します。

image.png
値が重複している行に対してエラーを表示します。
空白行は同じ入力内容ではありますが、この行はスルーします。
通常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という変数に重複しているインデックスを追加します。

##さいごに
上記参考になれば幸いです:point_up_tone1:
よりよい方法が他にあれば紹介してください!

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?