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

query()

指定のオブジェクトに対してクエリを実行して、指定の条件に一致したデータを返します。

構文

1QueryResult = connection.query(string queryString);

使用方法

query() コールは、オブジェクトからデータを取得する場合に使用します。クライアントアプリケーションが query() コールを呼び出すとき、照会するオブジェクトを指定するクエリ式、取得する項目、および特定のオブジェクトが該当するかどうかを判断する条件を渡します。クエリで使用される構文や規則についての詳細は、『Salesforce SOQL および SOSL リファレンスガイド』の「SOQL SELECT の構文」を参照してください。

呼び出し時に、API は特定のオブジェクトに対するクエリを実行し、API 上のクエリの結果をキャッシュし、クエリレスポンスオブジェクト QueryResult を返します。それから、クライアントアプリケーションは、クエリレスポンスの行を通して反復し、情報を取得するために、QueryResult 上のメソッドを使用できます。

指定のオブジェクトを照会したり、指定の項目リスト内で項目を照会したりするには、適切なアクセス権でクライアントアプリケーションにログインする必要があります。詳細は、「データアクセスに影響する要素」を参照してください。

オブジェクトは、API を使用して照会するように設定する必要があります。ただし、オブジェクトによっては、API 経由で照会できないものもあります。オブジェクトがクエリ可能かどうかを判断するには、オブジェクト上の describeSObjects() コールを使用して、その queryable プロパティを確認します。

Enterprise WSDL を使用している場合、選択リストへのデータ入力に describe を使用しないでください。たとえば実行後に、Salesforce システム管理者が、その sObject に項目を追加する場合、describe コールは項目をプルダウンしますが��ツールキットではシリアライズを処理できないため、このインテグレーションは失敗します。

ヒント

query() コールは、削除されたレコードとアーカイブされたレコードを自動的に除外します。削除されたレコードまたはアーカイブされたレコードを結果に含めるには、queryAll() を使用します。

クエリ結果のオブジェクトでは、最大 2,000 行のデータを返すことができます。この最大値は、デフォルト設定にもなっています。ただし、パフォーマンスを最適化するために、返されるバッチサイズは、照会されたレコードのサイズと複雑さに基づいて、最大値またはリクエストで設定された値よりも少なくすることができます。クエリ結果がデフォルト値を超える場合は、queryMore() コールを使用して、バッチの追加の行を取得します。デフォルトのバッチの結果の数は QueryOptions ヘッダーで調整します。詳細およびバッチサイズの更新の例については、『SOQL および SOSL リファレンス』「クエリのバッチサイズの変更」を参照してください。

処理が 2 分以上経過したクエリは、タイムアウトになります。タイムアウトしたクエリに関しては、API は、InvalidQueryLocatorFault の API 失敗エラー要素を返します。タイムアウトが発生した場合は、より少量のデータをスキャンするか、クエリを再構成します。

型が base64 の項目を照会する場合には、クエリレスポンスオブジェクトは、一度に 1 つのレコードしか返しません。query() コールのバッチサイズを変更しても、このプロセスを変更することはできません。

マルチ通貨組織に関しては、異なる通貨の値を含んでいる通貨項目を照会するには、特別な処理が必要です。たとえば、クライアントアプリケーションで、UnitPrice 項目の値に基づいて PricebookEntry オブジェクトを照会する場合や、UnitPrice の金額が異なる通貨で表示される場合には、クエリのロジックで、この状況を正しく処理する必要があります。次に、10 USD 以上の単価の全商品の商品コードを取得する場合のクエリ式の例を示します。

1SELECT Product2Id,ProductCode,UnitPrice FROM PricebookEntry 
2   WHERE (UnitPrice >= 10 and CurrencyIsoCode='USD') 
3   OR (UnitPrice >= 5.47 and CurrencyIsoCode='GBP')
4   OR (UnitPrice >= 8.19 and CurrencyIsoCode='EUR')

メモ

引数

名前 説明
queryString string クエリの対象となるオブジェクト、受け取る項目、およびクエリに特定のオブジェクトを含む任意の条件を指定する SOQL クエリが含まれます。『Salesforce SOQL および SOSL リファレンス』を参照してください。

サンプルコード — Java

このサンプルでは、すべての取引先責任者の名および姓を取得するクエリを実行します。クエリ文字列を渡して、query() をコールし、レコードの最初のバッチを取得します。また、この例では、ループで queryMore() をコールして、レコードが返されなくなるまで、後続のバッチを取得します。照会した取引先責任者の名と姓をコンソールに書き込みます。

1public void queryRecords() {
2   QueryResult qResult = null;
3   try {
4      String soqlQuery = "SELECT FirstName, LastName FROM Contact";
5      qResult = connection.query(soqlQuery);
6      boolean done = false;
7      if (qResult.getSize() > 0) {
8         System.out.println("Logged-in user can see a total of "
9            + qResult.getSize() + " contact records.");
10         while (!done) {
11            SObject[] records = qResult.getRecords();
12            for (int i = 0; i < records.length; ++i) {
13               Contact con = (Contact) records[i];
14               String fName = con.getFirstName();
15               String lName = con.getLastName();
16               if (fName == null) {
17                  System.out.println("Contact " + (i + 1) + ": " + lName);
18               } else {
19                  System.out.println("Contact " + (i + 1) + ": " + fName
20                        + " " + lName);
21               }
22            }
23            if (qResult.isDone()) {
24               done = true;
25            } else {
26               qResult = connection.queryMore(qResult.getQueryLocator());
27            }
28         }
29      } else {
30         System.out.println("No records found.");
31      }
32      System.out.println("\nQuery succesfully executed.");
33   } catch (ConnectionException ce) {
34      ce.printStackTrace();
35   }
36}

サンプルコード — C#

このサンプルでは、すべての取引先責任者の名および姓を取得するクエリを実行します。クエリ文字列を渡して、query() をコールし、レコードの最初のバッチを取得します。また、この例では、ループで queryMore() をコールして、レコードが返されなくなるまで、後続のバッチを取得します。照会した取引先責任者の名と姓をコンソールに書き込みます。

1public void queryRecords()
2{
3   QueryResult qResult = null;
4   try
5   {
6      String soqlQuery = "SELECT FirstName, LastName FROM Contact";
7      qResult = binding.query(soqlQuery);
8      Boolean done = false;
9      if (qResult.size > 0)
10      {
11         Console.WriteLine("Logged-in user can see a total of "
12            + qResult.size + " contact records.");
13         while (!done)
14         {
15            sObject[] records = qResult.records;
16            for (int i = 0; i < records.Length; ++i)
17            {
18               Contact con = (Contact)records[i];
19               String fName = con.FirstName;
20               String lName = con.LastName;
21               if (fName == null)
22               {
23                  Console.WriteLine("Contact " + (i + 1) + ": " + lName);
24               }
25               else
26               {
27                  Console.WriteLine("Contact " + (i + 1) + ": " + fName
28                        + " " + lName);
29               }
30            }
31            if (qResult.done)
32            {
33               done = true;
34            }
35            else
36            {
37               qResult = binding.queryMore(qResult.queryLocator);
38            }
39         }
40      }
41      else
42      {
43         Console.WriteLine("No records found.");
44      }
45      Console.WriteLine("\nQuery succesfully executed.");
46   }
47   catch (SoapException e)
48   {
49      Console.WriteLine("An unexpected error has occurred: " +
50                                 e.Message + "\n" + e.StackTrace);
51   }
52}

応答

QueryResult