Skip to main content
Build the future with Agentforce at TDX in San Francisco or on Salesforce+ on March 5–6. Register now.

SOQL クエリにバインド変数を使ってみる

メモ

メモ

日本語で受講されている方へ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻訳を参照しながら進めていってください。Challenge での評価は英語データを対象に行われるため、英語の値のみをコピーして貼り付けるようにしてください。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

学習の目的

この単元を完了すると、次のことができるようになります。

  • SOQL クエリにバインド変数を動的に渡す。

SOQL クエリにバインド変数を動的に渡す

新しい Database.queryWithBindsDatabase.getQueryLocatorWithBindsDatabase.countQueryWithBinds メソッドでは、クエリのバインド変数が Apex コード変数からではなく、Map パラメーターからキーを使用して直接解決されます。

この変更は、Enterprise Edition、Performance Edition、Unlimited Edition、および Developer Edition の Lightning Experience および Salesforce Classic に適用されます。

この例では、SOQL クエリで取引先名のバインド変数が使用されています。値 (Acme Inc.) は、nameBind Map を使用してメソッドに渡されます。クエリがメソッド内で実行されるとき、accountName 変数はそのスコープ外です (スコープ内である必要はありません)。

public static List<Account> simpleBindingSoqlQuery(Map<String, Object> bindParams) {
    String queryString =
        'SELECT Id, Name ' +
        'FROM Account ' +
        'WHERE name = :name';
    return Database.queryWithBinds(
        queryString,
        bindParams,
        AccessLevel.USER_MODE
    );
}
String accountName = 'Acme Inc.';
Map<String, Object> nameBind = new Map<String, Object>{'name' => accountName};
List<Account> accounts = simpleBindingSoqlQuery(nameBind);
System.debug(accounts);

ハンズオン Challenge の準備をする

下記のハンズオン Challenge では、バインド変数を操作します。

ではここで新しい Trailhead Playground を作成し、このモジュールの手順を実行してみましょう。ページの最下部までスクロールし、Playground 名をクリックして、[Playground を作成] を選択します。Trailhead Playground が作成されるまで通常 3 ~ 4 分かかります。 

メモ

必ず新しい Trailhead Playground を使用してください。既存の組織または Playground を使用すると、Challenge を行うときに問題が発生することがあります。

ハンズオン Challenge に使用する組織を起動して、次の事前準備をします。

  1. Apex クラスを作成する
    1. 名前: QueryContact
    2. QueryContact の内容を次のコードに置き換えます。
public class QueryContact {
  public static Id getContactID(String lastName, String title) {
    try {
      Contact myContact = Database.query(
        'SELECT ID FROM Contact WHERE lastName = :lastName AND title = :title LIMIT 1'
      );
      return myContact.Id;
    } catch (Exception ex) {
      return null;
    }
  }
  public static Id getContactIDWithBinds(Map<String, Object> bindVars) {
    //do not modify any code above this line
    //implement the logic that will use bindVars to retrieve the contact's ID
    return null;
    }
}

リソース

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む