function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
k_ogawak_ogawa 

重複チェックについて

いつもお世話になっております。
小川です。

度々のご質問大変恐縮なのですが、お答えいただけると幸いです。

標題の通り重複チェックについてです。

visualforceで情報の登録画面を作っており、登録ボタンを押下した際に重複チェックの処理が流れるのですが、
処理仕様としては、
登録名、開始日をキーにSOQL文を走らせ、同一の内容があればカウントを取り、
1以上の場合は警告文を出すようにしています。

問題はここからで、登録名はテキストタイプになっているので、全角、半角自由に記入できてしまいます。
その結果、同じ名称を全角、半角それぞれ登録するとエラーとなって『予期せぬエラーが発生しました。』が表示されてしまいます。
IDで判断できれば一番いいのですが、IDが採番されるのはINSERT時?なのでチェックは難しいのかなと思っています。

SOQLでキーチェックをすることしか今のところ思い浮かばないので、何か打開策を与えて頂けたらと思います。
どうぞよろしくお願い致します。
Best Answer chosen by k_ogawa
Taiki YoshikawaTaiki Yoshikawa
String型の値の比較ですが、「A == B」のように方法だと大文字と小文字の区別はしてくれませんが、
「A.equals(B)」のようにequals関数を利用すると大文字と小文字を区別して比較してくれます。

また、重複判定を行う項目はユニーク項目として設定して、
登録時にDmlExceptionでエラーメッセージを表示する方法でも対応できると思います。

All Answers

Taiki YoshikawaTaiki Yoshikawa
String型の値の比較ですが、「A == B」のように方法だと大文字と小文字の区別はしてくれませんが、
「A.equals(B)」のようにequals関数を利用すると大文字と小文字を区別して比較してくれます。

また、重複判定を行う項目はユニーク項目として設定して、
登録時にDmlExceptionでエラーメッセージを表示する方法でも対応できると思います。

This was selected as the best answer
Taiki YoshikawaTaiki Yoshikawa
equals関数の使用例
String myString1 = 'abcde';
String myString2 = 'abcd';
Boolean result = 
   myString1.equals(myString2);
System.assertEquals(result, false);

String Methods
http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#StartTopic=Content/apex_methods_system_string.htm?SearchType=Stem
k_ogawak_ogawa
Taiki 様
いつもありがとうございます。

今回はequals関数ではなく、insert時にDmlExceptionを使用しようかと思います。
下記のように実装しようかと思います。

try{
   insert evtstrlst ;
   /** STEP1の画面に戻ります */
   Pagereference prevPage = Page.CompanyAndBrandSelect;
   return prevPage;
  } catch (DmlException e){
   ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '既に登録されているイベントデータがあります。'));
   return null;
  }

そこで、二点質問があるのですが、

1.
>>重複判定を行う項目はユニーク項目として設定
上記の部分についてなのですが、設定というのはどのように行うことでしょうか?

2.
エラー時にgetDmlMessageでエラー内容を取得できると思うのですが、その際IDのみを抽出することは可能でしょうか?
できれば、既に登録されている~の横に該当のレコードを表示させたいと考えております。
Taiki YoshikawaTaiki Yoshikawa
ユニーク項目の設定はカスタム項目の編集画面で設定できます。

User-added image



DmlException発生時のID取得は、getDmlIdで取得できるんじゃないかと思います。

DMLException and EmailException Methods
http://www.salesforce.com/us/developer/docs/dbcom_apex230/Content/apex_classes_exception_methods.htm
k_ogawak_ogawa
なるほど!
編集画面を見たら既に作られていました。
だから普通に処理が通ったんですね。

getDmlIdというのがあったんですね。
これで取得してみようと思います。

いつも初歩的な質問ばかりですみません。
今後ともよろしくお願いいたします。