現在処理している事
・新規レコードを登録時、「日付」・プルダウンから「拠点ID」を選択して登録。
・同じ「日付」「拠点ID」で既にレコード登録されているかを判定し、存在した場合は既にあるレコードのサブテーブル内容を変数に格納
・新規で登録した内容のサブテーブル内容を、既存のサブテーブルに追記
という処理をしています。
問題なく動いているのですが、同時に数人が登録作業をすると、追記されずに別レコードで登録されてしまいます。
数秒程度登録をずらして貰う事で回避しているのですが、何か回避策はあるでしょうか?
swen様
お世話になっております.
重複登録自体は避けられないかと思います.
一覧画面にボタンなどを設置しておき,重複を検知してマージする仕組みなどを作っておくと良いかもしれません.
江田様
お世話になっています。ありがとうございます。
やはりそうなのですね。
運用から1ヶ月を経過し重複登録は0件ですが、テストでわざと複数人に当時に登録して貰うと重複は発生します。
重複を検知してマージする仕組みですが、参考で良いのでどのようなものか教えて頂く事は可能でしょうか?
swen様
お世話になっております.
前回は思いつかなかったのですが,重複禁止の「文字列 (1行)」フィールドを用意して,JSカスタマイズでsubmit時に「日付」と「拠点ID」を連結した値を代入するようにしておけば,比較的容易に重複を避けられるかと思います.
また,下記で非表示にしておけば,フォームの見た目にも影響を与えず実装できるかと思います.
https://developer.cybozu.io/hc/ja/articles/360015513211
不要かもしれませんが,重複を検知してマージは下記のような手順になるかと思います.
- レコードの全件取得をする.(参考: https://developer.cybozu.io/hc/ja/articles/202331474#step2)
- ループを回して,重複しているコードを抽出する.(参考: https://qiita.com/cocottejs/items/7afe6d5f27ee7c36c61f)
- 重複したレコードの内の1つにサブテーブルの値をまとめる.
- いらないレコードを削除する.(参考: https://developer.cybozu.io/hc/ja/articles/201941794)