この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

動的 SOSL

動的 SOSL は、Apex コードを使用して、実行時に SOSL 文字列の作成を参照します。動的 SOSL によって、さらに柔軟なアプリケーションの作成が可能になります。たとえば、エンドユーザの入力に基づいた検索を作成したり、さまざまな項目名のレコードを更新したりできます。

実行時に動的 SOSL クエリを作成するには、search query メソッドを使用します。次に例を示します。

1List<List <sObject>> myQuery = search.query(SOSL_search_string);

次の例では、単純な SOSL クエリ文字列を実行しています。

1String searchquery='FIND\'Edge*\'IN ALL FIELDS RETURNING Account(id,name),Contact, Lead'; 
2List<List<SObject>>searchList=search.query(searchquery);

動的 SOSL ステートメントは、sObject のリストを評価します。ここでは、各リストは特定の sObject データ型の検索結果を含みます。結果リストは常に、動的 SOSL クエリで指定された順序と同じ順序で返されます。上記の例では、Account の結果が最初、次に Contact、Lead と続きます。

通常の割り当てステートメントや for ループなど、インライン SOSL クエリが使用可能な場合はいつでも、search query メソッドを使用できます。結果は、静的 SOSL クエリの処理とほぼ同様の方法で処理されます。

動的 SOSL クエリには、静的クエリと同じガバナ制限があります。ガバナ制限についての詳細は、「実行ガバナと制限」を参照してください。

SOSL クエリの構文の詳細は、『SOQL および SOSL リファレンス』の「Salesforce Object Search Language (SOSL)」を参照してください。

スニペットを返す動的 SOSL の使用

検索結果内でより多くのレコードのコンテキストを提供するには、SOSL WITH SNIPPET 句を使用します。スニペットにより、探しているコンテンツを容易に特定できるようになります。スニペットの生成方法についての詳細は、『SOQL および SOSL リファレンス』「WITH SNIPPET」を参照してください。

実行時に動的 SOSL クエリで SOSL WITH SNIPPET 句を使用するには、Search.find メソッドを使用します。
1Search.SearchResults searchResults = Search.find(SOSL_search_string);

次の例では、WITH SNIPPET 句を含む単純な SOSL クエリ文字列を実行しています。この例は System.debug() をコールして返されたタイトルとスニペットを出力します。コードによって Web ページにタイトルとスニペットが表示されます。

1Search.SearchResults searchResults = Search.find('FIND \'test\' IN ALL FIELDS RETURNING 
2KnowledgeArticleVersion(id, title WHERE PublishStatus = \'Online\' AND Language = \'en_US\') WITH SNIPPET (target_length=120)');
3 
4List<Search.SearchResult> articlelist = searchResults.get('KnowledgeArticleVersion');
5
6for (Search.SearchResult searchResult : articleList) { 
7	KnowledgeArticleVersion article = (KnowledgeArticleVersion) searchResult.getSObject(); 
8	System.debug(article.Title); 
9	System.debug(searchResult.getSnippet()); 
10}

SOSL インジェクション

SOSL インジェクションとは、ユーザが SOSL ステートメントをあなたのコードに渡すことで、あなたのアプリケーションで意図していなかったデータベースメソッドを実行する手法です。動的 SOSL ステートメントを構築するためにアプリケーションがエンドユーザ入力に依存し、入力が適切に処理されなかった場合、常に SOSL インジェクションが Apex コードで発生する可能性があります。

SOSL インジェクションを防ぐには、escapeSingleQuotes メソッドを使用します。このメソッドは、ユーザから渡される文字列のすべての単一引用符にエスケープ文字 (\) を追加します。このメソッドにより、すべての単一引用符を、データベースコマンド���はなく、囲まれた文字列として処理します。