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

query()

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

構文

1QueryResult = connection.query(string queryString);

使用方法

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

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

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

いくつかのオブジェクトは、API 経由でクエリを実行できません。query() コールを介してオブジェクトをクエリするには、オブジェクトがクエリ可能に設定されている必要があります。クエリ可能かどうかを判断するために、クライアントアプリケーションは、オブジェクト上の describeSObjects() コールを呼び出すことができ、queryable プロパティを確認できます。

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

ヒント

アーカイブされているかどうかにかかわらず、すべての ToDo行動 のレコード上では、queryAll() でクエリを実行できます。アーカイブ済みのオブジェクトのみを検索するには、isArchived 項目を絞り込みに利用できます。query() は、isArchivedtrue に設定されている場合、すべてのレコードを自動的に除外するため、query() は使用できません。アーカイブ済みのレコードの挿入、更新、または削除も可能です。

クエリ結果のオブジェクトには、デフォルトで、最大 500 行のデータが含まれます。クエリ結果が 500 行を超える場合、���ライアントアプリケーションは queryMore() コールとサーバ側のカーソルを使用して、追加の行を 500 行のチャンクで取得します。QueryOptions ヘッダーのデフォルトサイズを最大 2,000 行に増やすことができます。詳細は、『Force.com SOQL および SOSL リファレンス』のクエリのバッチサイズの変更を参照してください。

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

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

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

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

メモ

サンプルコード —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 リファレンスガイド』を参照してください。

応答

QueryResult