ブログ

2023/01/18
【プリザンター】 第178回)複合キーの重複登録をサーバスクリプトで防ぐ方法

レコードの重複登録を防ぐ方法

こんにちわ、CCSの阿原です。

ユーザにプリザンターを利用してもらう際、重複したデータを登録させたくないということはよくあるのではないでしょうか。
項目の設定で「重複禁止」を選択することで1つのキーについては重複データの登録を防ぐことができます。
では、複数項目の組み合わせで重複登録させたくない場合どうすればいいでしょうか。
以前の記事ではスクリプトを使ってキーを組み合わせて複合キーを作成し、登録前に重複チェックとエラーメッセージを出す方法を紹介しています。
【プリザンター】 第153回)複合キーを設定する方法

上記の方法ではユーザが重複登録できないように制御していますが、今回はサーバスクリプトを利用してユーザが意識しなくても登録後に重複レコードが自動で削除される仕組みを作ってみたいと思います。
これにより、既に登録済みのものと同じ登録をした場合に以前登録されたものと入れ替わりに新しい方が登録される形となります。

重複チェックと重複レコードの削除

まず、以下のようなテーブルを用意します。
必要な項目は、担当者(ClassA)、担当地域(ClassB)のみです。


続いてスクリプトを登録します。
出力する条件は「作成後」を選択しておきます。


// ①
let Tanto = model.ClassA;    // 担当者
let Area= model.ClassB;    // 担当地域

// ②
let filter = '{"View":{"ColumnFilterHash":{"ClassA":"' + Tanto+ '", "ClassB":"' + Area+ '"}}}';

// ③
let models = items.Get(サイトID, filter);
if (models.Length > 1) {
// ④
items.Delete(models[models.Length-1].ResultId);
}


※スクリプトの説明
①登録したレコードの「担当者」「担当地域」を取得する
作成後のスクリプトなので、登録した直後のレコードのデータが取得されます。
②絞り込みの条件として"ColumnFilterHash"に①で取得したデータを設定する
③条件に一致するデータを取得する
一致するデータが2件以上存在する場合、古い方のデータを削除する

 

実際に登録してみましょう。
担当者:佐藤、担当地域:北海道 を重複して登録


登録結果

変わっていないように見えますが、
ID=1006690の担当者:佐藤、担当地域:北海道のレコードが削除され
ID=1006692の担当者:佐藤、担当地域:北海道のレコードが登録されています。

ちなみに、担当者が同じでも担当地域を別の値で登録した場合は問題なく登録されます。


まとめ

いかがでしたか?

他にも、新しい方のレコードを削除するなどチェック後の対応方法はいろいろあると思います。ぜひ試してみてください。

弊社ではスタイル・スクリプトサンプル集、プリザンター逆引き辞典のほかにも、運用ノウハウ集の販売もございます。また、導入の支援や、スクリプト開発なども支援いたします。

ご相談の内容によっては有料となる場合がございますが、まずは気軽にご相談ください。
☆☆☆
ブログ内容への質問や追加説明をご希望の方は【 問い合わせフォーム 】からお気軽にお問い合わせください
☆☆☆

PAGE TOP