重複チェックについて
1.はじめに
今回は、ユニークな値を格納するフィールドについて考えてみます。
例えば、商品マスターの商品コード、ある会社の社員の社員番号、・・・。
これらの登録画面で、入力値をどのようにチェックしたらいいのだろうか?
FileMakerでの方法について考えてみました。
2.フィールドの設定による方法
たとえば、下のような3つのフィールドを持つデータ。
フィールド_1 がユニークな値のフィールドたとしたらどのようにチェックしたらいいだろう。
図1.ユニークフィールドを持つ画面
FileMakerでは、フィールドの設定によってある程度は解決できます。
データーベースの設定で、フィールド_1のオプションの設定を以下のように「ユニークな値」にチェックを入れます。
図2.オプション設定画面
こうすると、同一レコードを入力し他のフィールドに移ろうとすると、以下のメッセージがでます。
図3.同一レコードエラーメッセージボックス
ここで、「フィールドを復帰」を選択すると今回の入力前のデータに戻り、再度入力になります。「はい」では、入力したデータは、重複したままで、カーソルも移動。「いいえ」では、入力したデータは穣復したまま、フィールドはフィールド_1のままという結果になります。
「きちっとアラーム出しましたよ。どうするかは自分で決めてね」という対応です。
このメッセージが出た時、どう対応するかわかっている人だけが使うのであれば、このメッセージで十分ですが、そうでなく、帳票を見て入力するだけのオペレータとか、複数の人が操作する画面であったりした場合は、不十分です。
①入力ミス
②コードの採番ミス
のいずれなのか、
①ならばその場で入れ直し、
②ならば同一コードの採番・入力のリカバリーを行うか、このレコードの採番について見直す必要があります。
ですから、ここで「はい」が押されては困ります。
このような事情から別の方法を探ってみました。
3.自己連結リレーションシップによる方法
『「テーブル_1」の「フィールド_1」の値と同じ、「テーブル_1’」の「フィールド_1」を持つ別レコードの有無のチェック』ができれば、それで判断できると考えてみました。
これを実現するためのキーが2つあります。
・自己リレーションシップ
・識別用フィールド
です。
まず、テーブルにIDというユニークな値を持つフィールドを作ります。
図4.IDを追加したテーブル
図5.IDの設定画面
そして、テーブルオカレンスを追加(メイン_T_ID付き_同一チェックの追加)して、自己連結リレーションシップを作成します。
リレーションの条件は、
フィールド_1の値が等しく、IDの値が異なる です。
図6.自己連結リレーション
図7.自己同一リレーションの設定画面
これで、テーブル_1(メイン_T_ID付き)のフィールド_1に値の入力があったとき、
・テーブル_1’(メイン_T_ID付き_同一チェック)のIDの値を見た時、
値があれば別レコードがあり、値がなければ別レコードはない ということが判別できます。
このスクリプトが、以下の通りです。
図8.重複チェックスクリプト
このスクリプトを、フィールド_1の入力が終了したところで動かします。スクリプトトリガOnObjectExitです。
図9.スクリプトトリガの設定
ここで忘れてはいけないのが、判断で使用するフィールドは、画面上に用意するということです。
下の画面の赤い長方形で囲った部分です。
これを、「見えない」「入力できない」状況にして画面に張り付けておく必要があります。
(ここでは、皆さんにご説明するため見えるようにしてあります。)
図10.入力画面
同一の値を入れてみます。
図11.重複エラーメッセージ画面
重複エラーのメッセージが出ます。
ここで、もう一点注意しなければならないことが、メッセージを出力した後のスクリプトステップの「現在のスクリプト終了(結果:False)」です。
これがないと、カーソルが遷移してしまい。前の方法の「はい」の処理と同じになってしまいます。
4.まとめ
以前、私は、別画面を用意して、フィールド_1の値と同じものを検索し、その有無で重複エラーを表示していました。この方法では、作業用の画面が1つ増えてしまいます。
自己連結リレーションシップによる方法は、よりシンプルないい方法と思います。
しかしながら、フィールドの設定による方法で済むと判断できるケースも多々あります。
工数も複雑さも少なく、FileMakerの持つメリットを理解して利用することこそ大切なことだと思います。
2016.10.8 Sage
本記事は、FileMaker_Zakkaより転載しました。