query()
構文
1QueryResult = connection.query(string queryString);使用方法
query() コールは、オブジェクトからデータを取得する場合に使用します。クライアントアプリケーションが query() コールを呼び出すとき、照会するオブジェクトを指定するクエリ式、取得する項目、および特定のオブジェクトが該当するかどうかを判断する条件を渡します。クエリで使用される構文や規則についての詳細は、『Salesforce SOQL および SOSL リファレンスガイド』の「SOQL SELECT の構文」を参照してください。
呼び出し時に、API は特定のオブジェクトに対するクエリを実行し、API 上のクエリの結果をキャッシュし、クエリレスポンスオブジェクト QueryResult を返します。それから、クライアントアプリケーションは、クエリレスポンスの行を通して反復し、情報を取得するために、QueryResult 上のメソッドを使用できます。
指定のオブジェクトを照会したり、指定の項目リスト内で項目を照会したりするには、適切なアクセス権でクライアントアプリケーションにログインする必要があります。詳細は、「データアクセスに影響する要素」を参照してください。
オブジェクトは、API を使用して照会するように設定する必要があります。ただし、オブジェクトによっては、API 経由で照会できないものもあります。オブジェクトがクエリ可能かどうかを判断するには、オブジェクト上の describeSObjects() コールを使用して、その queryable プロパティを確認します。
query() コールは、削除されたレコードとアーカイブされたレコードを自動的に除外します。削除されたレコードまたはアーカイブされたレコードを結果に含めるには、queryAll() を使用します。
クエリ結果のオブジェクトでは、最大 2,000 行のデータを返すことができます。この最大値は、デフォルト設定にもなっています。ただし、パフォーマンスを���適化するために、返されるバッチサイズは、照会されたレコードのサイズと複雑さに基づいて、最大値またはリクエストで設定された値よりも少なくすることができます。クエリ結果がデフォルト値を超える場合は、queryMore() コールを使用して、バッチの追加の行を取得します。デフォルトのバッチの結果の数は QueryOptions ヘッダーで調整します。詳細およびバッチサイズの更新の例については、『SOQL および SOSL リファレンス』の「クエリのバッチサイズの変更」を参照してください。
処理が 2 分以上経過したクエリは、タイムアウトになります。タイムアウトしたクエリに関しては、API は、InvalidQueryLocatorFault の API 失敗エラー要素を返します。タイムアウトが発生した場合は、より少量のデータをスキャンするか、クエリを再構成します。
型が base64 の項目を照会する場合には、クエリレスポンスオブジェクトは、一度に 1 つのレコードしか返しません。query() コールのバッチサイズを変更しても、これを変更することはできません。
引数
| 名前 | 型 | 説明 |
|---|---|---|
| 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}