2018年06月06日
SOQLとSOSLについて
Salesforceの開発で最も使われるクエリが
SOQLでしょう
E.X.
Account[] accList = [SELECT Id, Name FROM Account];
しかし、もう一つクエリがあります。
それがなにでしょうか
はい、それがSOSLです。
今回、この二つのクエリについて
少しずつ解明して行きたいと思います。
間違えたら、ご指導ほどを宜しくです。
SOQLとSOSLの大きい違いは
・SOQL
一度に
1 つの標準またはカスタムオブジェクトしか照会できない
・SOSL
1つの SOSL クエリですべてのオブジェクトを検索できます
もう 1 つの相違点として、
SOSL が単語の一致に基づいて項目を検索する
SOQL はデフォルトで完全一致検索を実行します (ワイルドカードを使用しない場合)。
たとえば、SOSL で「Apple」を検索すると、
項目値が「Apple」や「The Apple is so Big」のレコードが返される
SOQL では項目値が「Apple」のレコードのみが返される
SOQLを使用するケース
SOQL:Salesforce Object Query Language
SOQL は、標準の SQL 言語と似ています、
メインは1つのオブジェクト(テーブル)に対する
参照をすること
しかし、違いもあります。
特に
Account[] accList = [SELECT * FROM Account];
が使えませんよー
SOQLは以下の2種類に分けて使われております。
静的クエリ
E.X.
Account[] accList = [SELECT Id, Name FROM Account];
このようにデータベースへの問い合わせ文書
SELECTのところがそのまま書いて、直接SOQLステートメント
として認識できると私が思っている。
こう書いてもわからないかも。
続けて見て、
動的を見てから、
なんとなく、静的と動的の違いがわかってくると思いますので
このまま、進んでいただけたら、幸いです。
動的クエリ
//まずクエリしたいものを文字列として作成し結合する String query = 'SELECT Id'; query += ' , Name'; query += ' FROM Account'; query += ' WHERE FlagField = TRUE'; If(something){ query += ' AND fiedlA = '欲しい条件1''; }else{ query += ' AND fiedlA = '欲しい条件2''; } //クエリしたい文字列をDatabaseメソッドでSOQLとして発行させる List<sObject> sobjList = Database.query(query); if(sobjList != NULL && !sobjList.isEmpty()){ //なんかの処理 }
SOSLを使用するケース
SOSL:Salesforce Object Search Language
複数のオブジェクト(テーブル)に対する
参照したい時に使われます。
E.X.
FIND {トリガ} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName,LastName,Department)
さらにSOQLのように条件も追加できます。
条件使用E.X.
FIND {トリガ} IN ALL FIELDS RETURNING Account(Name WHERE FlagFieldX = TRUE), Contact(FirstName,LastName,Department)
SOSLもSOQLのように静的と動的に分けて使います。
大体前述のSOQLのようにほぼ一緒ですが
違いがSOQLのクエリ文字列を発行するのは
Database.query()メソッドに対して、
SOSLがsearch.query()メソッドを使って、文字列をSOSL
として発行させるところ
静的SOSL
E.X.
FIND {トリガ} IN ALL FIELDS RETURNING Account(Name WHERE FlagFieldX = TRUE), Contact(FirstName,LastName,Department)
動的SOSL
E.X.
String searchquery='FIND\'Edge*\'IN ALL FIELDS RETURNING Account(id,name),Contact, Lead'; List<List<SObject>>searchList=search.query(searchquery);
しかし、
私、これまでのキャリアでは、案件では、
使用した経験がありません!!!
使い方を知っているくらいです。
苦労なんかもありませんので、美味しい技術を共有できかねます。
どなたが経験があり、いいところを教えていただきたいです。
-
no image
-
no image
-
no image
-
no image
-
no image