Memos About Salesforce

Salesforceにハマってたこと!

salesforce クエリ 動的 SOQL

こんにちは、管理人の@Salesforce.Zです。

今日は動的クエリについての記事です。

Apex コードを使用して、実行時に SOQL 文字列の作成を参照することは動的クエリが実現可能です。

動的 SOQL によって、もっと柔軟なアプリケーションの作成が可能

たとえば

・エンドユーザの入力に基づいた検索クエリを作成できる

 取引先コードが入力された場合、取引先コードで取引先を検索する

・ログインユーザの種類によって、CSV出力に使う項目のクエリが変動するのを対応する

動的クエリは便利ですが、できれば、静的クエリを使用したほうがいいです。

Salesforce社の技術者と共同開発時に、あえて言ってくれた。まあ静的クエリは検索速度が早いからね

読んだら得ること

★ 動的クエリの基本記載方法
★ 動的クエリの動的(状況次第に条件を付け)

目次

動的クエリ

実行時に動的 SOQL クエリを作成するには、database query メソッドを使う

動的クエリ発行方法

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

方法1(1 つのレコードを返す)

sObject s = Database.query(string_limit_1);

方法2(複数レコードを返す)

List<sObject> sobjList = Database.query(string);

使用例

バインド変数

String myTestString = 'TestName';
List<sObject> sobjList = Database.query('SELECT Id FROM MyCustomObject__c WHERE Name = :myTestString');
String query = 'SELECT Id';
query += ' FROM User';
query += ' WHERE IsActive = TRUE';
query += ' AND Account.RecordType.DeveloperName = ' + '\'' + 変数 + '\'';

注意点(SOQL インジェクション)

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

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