こんにちは、にいるです。
タイトル通り、あいまい検索を使用したレコードの検索画面を作りました。
レコード検索画面は結構な頻度で作成することもあるので、テンプレとしてシンプルなコードにしています。
・【ヘルプ】apex:pageBlockTable
・【ヘルプ】apex:column
・【ヘルプ】apex:inputText
1.Apex
最低限のコードです。
ページの読み込み時には、100件だけ取得するようにしています。
検索ボタンを押すと、「その入力した文字を商談名に含む」レコードだけを取得するようにしています。
検索結果が0件の場合は、何も表示されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class OppSearchController { // 検索結果 public List<Opportunity> oppResultList {get; set;} // 検索文字 public String inputValue {get; set;} // コンストラクタ public OppSearchController(){ // 画面読み込み時は100件のみ取得 String searchQuery='SELECT Id,Name,AccountId,Amount,CloseDate,StageName from Opportunity ORDER BY CloseDate ASC LIMIT 100'; oppResultList = Database.query(searchQuery); } // 検索メソッド public void search(){ // inputTextの値で商談名を検索 String searchQuery='SELECT Id,Name,AccountId,Amount,CloseDate,StageName from Opportunity WHERE Name LIKE \'%' + inputValue + '%\'ORDER BY CloseDate ASC'; oppResultList = Database.query(searchQuery); } } |
2.Visualforce
反復コンポーネントのapex:pageblockTableを使用しているので、取得したListの変数名を指定しているだけです。
あとはコントローラ側でoppResultListのsizeによってテーブルを表示するかアラートを出すかの制御を行っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<apex:page controller="OppSearchController" tabStyle="Opportunity"> <apex:form > <apex:pageBlock title="検索メニュー"> <apex:inputText value="{!inputValue}" label="Input">検索文字:</apex:inputText> <apex:commandButton action="{!search}" value="検索"/> </apex:pageBlock> <apex:pageBlock title="検索結果"> 件数:{!oppResultList.size}件 <apex:pageblockTable value="{!oppResultList}" var="o" rendered="{!(oppResultList.size > 0)}"> <apex:column value="{!o.AccountId}"/> <apex:column value="{!o.Name}"/> <apex:column value="{!o.Name}"/> <apex:column value="{!o.StageName}"/> <apex:column value="{!o.Amount}"/> <apex:column value="{!o.CloseDate}"/> </apex:pageblockTable> <br/> <apex:outputText rendered="{!(oppResultList.size == 0)}"> 検索結果はありません。</apex:outputText> </apex:pageBlock> </apex:form> </apex:page> |
3.出来上がりの画面
3-1.ページ読み込み時
読み込み時は100件を取得しています。
ちなみに、取得する基準は商談完了日をASCで取っています。
3-2.検索実行時
こちらは入力した文字を商談名に含む結果です。
「テスト」で検索したので、テストが商談名に含まれるレコードだけが表示されています。
4.まとめ
いかがでしたでしょうか。
取得するオブジェクトを変更したい場合、SOQLを変更するだけで取得できると思います。
ページデザインはVisualforceでOpportunityを指定しているので、デザインは好きなものに変更して使用できます。
レコードの検索画面は結構作ることが多いので、半日でテストクラスまで作れるようになりたいです。
皆さんもぜひ色々と試してみてください。
他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。
ではでは!
コメント