複数フィールドの値を組み合わせた複合キーで重複禁止を実現します。レコードが既にあるかを調べてチェックするので、標準機能を利用する場合のようなチェック用フィールドは追加しません。



今回のカスタマイズで出来ること

  • 複数のフィールド値を組み合わせた複合キーで重複禁止を実現します

  • 今回は保存時にチェックしますが、「値が変わった時」「ボタンを押した時」などチェックのタイミングは自由に変更できます



アプリの準備

サンプルアプリとして以下のフィールドを作成しました。


フィールド名

フィールドコード

フィールドタイプ、他

日付

日付

日付

ラジオボタン

ラジオボタン

ラジオボタン



詳細画面での表示は次のようになります。



Customineの設定

全体の流れはこのようになります。



複合キーの重複チェック処理(前半)

「条件を指定してレコードを取得する」を「レコードを保存する直前(削除時は除く)」の条件で実行します。



この時の検索条件は、次の3つの条件が全て合致しているものになります。

・表示しているレコードではない

・日付が同一

・ラジオボタンが同一


これを検索条件用に置き換えると、以下のようになります。

レコード番号 != "${レコード番号}" and 日付 = "${日付}" and ラジオボタン in ("${ラジオボタン}")


日付とラジオボタンで、同一の表現が = と in というふうに変わっていることに注意してください。フィールドタイプごとの書式などの詳細はこちらもご覧ください。




複合キーの重複チェック処理(後半)

取得したレコード数が1以上なら登録済みなので、重複チェックエラーとしてダイアログを表示した後に保存をキャンセルします。

「他のアクションの実行が完了した時」で繋いでいる場合、条件は自動的に引き継ぐので6番にはレコード数が1以上の条件は必要ありません。



また、エラーダイアログを出すだけでは保存をキャンセルすることはできません。「レコードの保存をキャンセルする」を忘れずに追加してください。




まとめ


1つのフィールドだけなら標準機能で重複禁止の設定が可能ですが、複数フィールドの組み合わせで重複禁止の設定は標準機能では出来ません。文字列に自動計算を設定した場合は重複禁止の設定が出来なくなるため、重複キー生成のためにJavaScriptのカスタマイズが必要になります。


今回のテンプレートでは、重複チェックエラー後の処理として、エラーダイアログを出すだけでなく、値のセットや重複しているレコードのダイアログ表示など、色々な組み合わせが可能です。お試しください。