テーブルの中に複数のテーブル行がある場合に、そのテーブル内で値の重複があるかをチェックしたいときは、次のような方法でチェックが可能です。


今回は、レコード保存時に重複チェックを行い、重複があればエラー表示して保存をキャンセルする方法と、それに加えてフィールドのエラー表示を行う方法をご紹介します。


例1:レコード行数で重複を判断する方法

アプリ構成


文字列1行だけのテーブルというシンプルな構成にしています。


フィールド名

フィールドコード

テーブル

フィールドタイプ

テーブル

テーブル


テーブル

製品名

製品名

テーブル

文字列1行



カスタマイズ


Customineのカスタマイズ内容は図のとおりです。



重複チェックの一連のアクションの最初の条件を「レコードを保存する直前(削除時は除く)」にすることで、もしテーブル内に重複があった場合には保存キャンセルすることができます。

まず、アクション1番で「テーブル行をレコードとして取得する」とし、アクション2番で1番で取得したレコードについて「レコードから重複を除去する」で「製品名」が重複しているレコードを除去します。

「製品名」に重複がある場合は次の図のようにアクション1番とアクション2番の結果の件数が等しくない状態になります。例えば、次の図では「AAA」が重複しており、重複除去前のレコード行数は5、重複除去後レコード行数は4になります。


そのため、アクション5番のように追加条件「2つの値を比較して条件を満たすならば」を使うと、重複するレコードがあるかどうか判断できます。


例2:重複箇所にフィールドエラーを表示する方法


例1の方法の場合、テーブル内の重複があることはわかるのですが、どの行に重複があったかがわかりづらいです。

そこで、テーブル行に対して1行ずつ重複がないかチェックし、重複がある行のフィールドにエラーを表示するカスタマイズ例をご紹介します。


アプリ構成については同じアプリを利用するため省略します。


カスタマイズ


Customineのカスタマイズ内容は図のとおりです。



アクションごとにポイントをご説明します。


アクション12番「テーブル行をレコードとして取得する」、アクション13番「レコードから重複を除去する」までは例1と同様です。


アクション17番からは、「リストから要素を取り出す」を利用してテーブル行を1行ずつ処理していきます。取り出すリストは、重複を除去したレコードとします。


アクション18番で同じ製品名の行数をカウントし、1行以上であれば重複ありとし、同じ製品名の行に「フィールドエラーを表示する」でエラー表示をします。そうでなければ重複なしのため「なにもしない」で次のリストの要素取り出しに進みます。


リストを使ったループ処理については、アクショングラフが次のように矢印が輪を描くよう設定してください。



実行結果


重複箇所にフィールドエラーが表示され、その上で保存がキャンセルされます。


まとめ


2つの例でテーブル内に値の重複があるフィールドをチェックする方法をご説明しました。
実際に作成してみられてご不明な点などございましたら、お気軽にチャットでご質問ください。