レコードの同時登録について

現在処理している事

・新規レコードを登録時、「日付」・プルダウンから「拠点ID」を選択して登録。

・同じ「日付」「拠点ID」で既にレコード登録されているかを判定し、存在した場合は既にあるレコードのサブテーブル内容を変数に格納

・新規で登録した内容のサブテーブル内容を、既存のサブテーブルに追記

という処理をしています。

問題なく動いているのですが、同時に数人が登録作業をすると、追記されずに別レコードで登録されてしまいます。

数秒程度登録をずらして貰う事で回避しているのですが、何か回避策はあるでしょうか?

swen様

お世話になっております.

重複登録自体は避けられないかと思います.
一覧画面にボタンなどを設置しておき,重複を検知してマージする仕組みなどを作っておくと良いかもしれません.

江田様

 

お世話になっています。ありがとうございます。

やはりそうなのですね。

運用から1ヶ月を経過し重複登録は0件ですが、テストでわざと複数人に当時に登録して貰うと重複は発生します。

重複を検知してマージする仕組みですが、参考で良いのでどのようなものか教えて頂く事は可能でしょうか?

swen様

お世話になっております.

前回は思いつかなかったのですが,重複禁止の「文字列 (1行)」フィールドを用意して,JSカスタマイズでsubmit時に「日付」と「拠点ID」を連結した値を代入するようにしておけば,比較的容易に重複を避けられるかと思います.
また,下記で非表示にしておけば,フォームの見た目にも影響を与えず実装できるかと思います.
https://developer.cybozu.io/hc/ja/articles/360015513211

不要かもしれませんが,重複を検知してマージは下記のような手順になるかと思います.

  1. レコードの全件取得をする.(参考: https://developer.cybozu.io/hc/ja/articles/202331474#step2)
  2. ループを回して,重複しているコードを抽出する.(参考: https://qiita.com/cocottejs/items/7afe6d5f27ee7c36c61f)
  3. 重複したレコードの内の1つにサブテーブルの値をまとめる.
  4. いらないレコードを削除する.(参考: https://developer.cybozu.io/hc/ja/articles/201941794)