query()
指定のオブジェクトに対してクエリを実行して、指定の条件に一致したデータを返します。
構文
1QueryResult = connection.query(string queryString);使用方法
query() コールを使用すると、オブジェクトからデータを取得できます。クライアントアプリケーションが query() コールを呼び出すとき、クエリするオブジェクトを指定するクエリ式、取得する項目、および特定のオブジェクトが該当するかどうかを判断する条件を渡します。クエリに関して使用される構文と規則に関するさまざまなトピックについては、『Salesforce SOQL および SOSL リファレンスガイド』を参照してください。
呼び出し時に、API は特定のオブジェクトに対するクエリを実行し、API 上のクエリの結果をキャッシュし、クエリレスポンスオブジェクトをクライアントアプリケーションに返します。それから、クライアントアプリケーションは、クエリレスポンスの行を通して反復し、情報を取得するために、クエリレスポンスオブジェクト上のメソッドを使用できます。
オブジェクト内で個々のオブジェクトをクエリしたり、項目リスト内で項目をクエリしたりするには、適切なアクセス権でクライアントアプリケーションにログインする必要があります。詳細は、「データアクセスに影響する要素」を参照してください。
いくつかのオブジェクトは、API 経由でクエリを実行できません。query() コールを介してオブジェクトをクエリするには、オブジェクトがクエリ可能に設定されている必要があります。クエリ可能かどうかを判断するために、クライアントアプリケーションは、オブジェクト上の describeSObjects() コールを呼び出すことができ、queryable プロパティを確認できます。
アーカイブされているかどうかにかかわらず、すべての ToDo と 行動 のレコード上では、queryAll() でクエリを実行できます。アーカイブ済みのオブジェクトのみを検索するには、isArchived 項目を絞り込みに利用できます。query() は、isArchived が true に設定されている場合、すべてのレコードを自動的に除外するため、query() は使用できません。アーカイブ済みのレコードの挿入、更新、または削除も可能です。
クエリ結果のオブジェクトには、デフォルトで、最大 500 行のデータが含まれます。クエリ結果が 500 行を超える場合、���ライアントアプリケーションは queryMore() コールとサーバ側のカーソルを使用して、追加の行を 500 行のチャンクで取得します。QueryOptions ヘッダーのデフォルトサイズを最大 2,000 行に増やすことができます。詳細は、『Force.com SOQL および SOSL リファレンス』の「クエリのバッチサイズの変更」を参照してください。
処理が 2 分以上経過したクエリは、タイムアウトします。タイムアウトしたクエリに関しては、API は、InvalidQueryLocatorFault の API 失敗エラー要素を返します。タイムアウトが発生した場合は、より少量のデータをスキャンするか、クエリを再構成します。
型が Base64 の項目について (「base64」参照) クエリする場合には、クエリレスポンスオブジェクトは、一度に 1 つのレコードしか返しません。query() コールのバッチサイズを変更しても、これを変更することはできません。
サンプルコード —Java
このサンプルでは、すべての取引先責任者の名および姓を取得するクエリを実行します。クエリ文字列を渡して、query() をコールし、レコードの最初のバッチを取得します。次に、ループで queryMore() をコールして、レコードが返されなくなるまで、後続のバッチを取得します。クエリした取引先責任者の名と姓をコンソールに書き込みます。
1swfobject.registerObject("clippy.codeblock-2", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public void queryRecords() {
18 QueryResult qResult = null;
19 try {
20 String soqlQuery = "SELECT FirstName, LastName FROM Contact";
21 qResult = connection.query(soqlQuery);
22 boolean done = false;
23 if (qResult.getSize() > 0) {
24 System.out.println("Logged-in user can see a total of "
25 + qResult.getSize() + " contact records.");
26 while (!done) {
27 SObject[] records = qResult.getRecords();
28 for (int i = 0; i < records.length; ++i) {
29 Contact con = (Contact) records[i];
30 String fName = con.getFirstName();
31 String lName = con.getLastName();
32 if (fName == null) {
33 System.out.println("Contact " + (i + 1) + ": " + lName);
34 } else {
35 System.out.println("Contact " + (i + 1) + ": " + fName
36 + " " + lName);
37 }
38 }
39 if (qResult.isDone()) {
40 done = true;
41 } else {
42 qResult = connection.queryMore(qResult.getQueryLocator());
43 }
44 }
45 } else {
46 System.out.println("No records found.");
47 }
48 System.out.println("\nQuery succesfully executed.");
49 } catch (ConnectionException ce) {
50 ce.printStackTrace();
51 }
52}サンプルコード —C#
このサンプルでは、すべての取引先責任者の名および姓を取得するクエリを実行します。クエリ文字列を渡して、query() をコールし、レコードの最初のバッチを取得します。次に、ループで queryMore() をコールして、レコードが返されなくなるまで、後続のバッチを取得します。クエリした取引先責任者の名と姓をコンソールに書き込みます。
1swfobject.registerObject("clippy.codeblock-3", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public void queryRecords()
18{
19 QueryResult qResult = null;
20 try
21 {
22 String soqlQuery = "SELECT FirstName, LastName FROM Contact";
23 qResult = binding.query(soqlQuery);
24 Boolean done = false;
25 if (qResult.size > 0)
26 {
27 Console.WriteLine("Logged-in user can see a total of "
28 + qResult.size + " contact records.");
29 while (!done)
30 {
31 sObject[] records = qResult.records;
32 for (int i = 0; i < records.Length; ++i)
33 {
34 Contact con = (Contact)records[i];
35 String fName = con.FirstName;
36 String lName = con.LastName;
37 if (fName == null)
38 {
39 Console.WriteLine("Contact " + (i + 1) + ": " + lName);
40 }
41 else
42 {
43 Console.WriteLine("Contact " + (i + 1) + ": " + fName
44 + " " + lName);
45 }
46 }
47 if (qResult.done)
48 {
49 done = true;
50 }
51 else
52 {
53 qResult = binding.queryMore(qResult.queryLocator);
54 }
55 }
56 }
57 else
58 {
59 Console.WriteLine("No records found.");
60 }
61 Console.WriteLine("\nQuery succesfully executed.");
62 }
63 catch (SoapException e)
64 {
65 Console.WriteLine("An unexpected error has occurred: " +
66 e.Message + "\n" + e.StackTrace);
67 }
68}引数
| 名前 | 型 | 説明 |
|---|---|---|
| queryString | string | クエリの対象となるオブジェクト、受け取る項目、およびクエリに特定のオブジェクトを含む任意の条件を指定するクエリ文字列。詳細は、『Salesforce SOQL および SOSL リファレンスガイド』を参照してください。 |