No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
queryMore()
query() からオブジェクトの次のバッチを取得します。
構文
1QueryResult = connection.queryMore( QueryLocator QueryLocator);使用方法
このコールを使用して query() コールを処理し、結果セット内に大量のレコード (通常 500 超) を取得します。query() コールは、最初の 500 レコードを取得し、queryLocator オブジェクト内にサーバ側カーソルを作成します。queryMore() コールは、最大 500 レコードのチャンクまで後続のレコードを処理し、新規に生成された QueryLocator を返します。結果セット内のレコードを反復処理するために、一般的には、すべての結果セット内のレコードが処理される (Done フラグが true になる) まで、queryMore() を繰り返しコールします。返されるレコードの最大数は最高 2,000 にまで変更可能です。詳細は、『Salesforce SOQL および SOSL リファレンス』の「クエリのバッチサイズの変更」を参照してください。
クエリに GROUP BY 句がある場合、queryMore() を使用できません。詳細は、『Salesforce SOQL および SOSL リファレンス』の「GROUP BY」および「queryMore()」を参照してください。
Platform Connect では、Open Data Protocol (OData) バージョン 2.0 を使用して外部データソースに接続します。リモートデータセットを使用してクライアント側のページ処理を行う場合、queryMore() は OData コールで $top および $skip システムクエリオプションを使用します。これは、LIMIT および OFFSET 句を使用した結果セットのページ処理に似ています。
標準またはカスタムオブジェクトをクエリすると、すべての ID が収集され、ページ処理をするためのサーバ側カーソルが作成されます。外部オブジェクトをクエリすると、queryMore() コールごとに、外部データソースへの新しい OData コールアウトが行われます。次の queryMore() コールまでの間に外部データが変更された場合、予期しない QueryResult になることがあります。外部データのクエリの場合、デフォルトのバッチサイズである 500 行よりも少ない行を返すように絞り込むことをお勧めします。また、頻繁に変更される外部データへの queryMore() コールを避けることもお勧めします。
SELECT ステートメントの主オブジェクト (「主導」オブジェクト) が外部オブジェクトの場合、queryMore() は主オブジェクトのみをサポートし、サブクエリをサポートしません。
サンプルコード —Java
このサンプルでは、すべての取引先責任者の名および姓を取得するクエリを実行します。クエリ文字列を渡して、query() をコールし���レコードの最初のバッチを取得します。次に、ループで queryMore() をコールして、レコードが返されなくなるまで、後続のバッチを取得します。クエリした取引先責任者の名と姓をコンソールに書き込みます。
1swfobject.registerObject("clippy.codeblock-1", "9");public 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() をコールして、レコードが返されなくなるまで、後続のバッチを取得します。クエリした取引先責任者の名と姓をコンソールに書き込みます。
1swfobject.registerObject("clippy.codeblock-2", "9");public 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}引数
| 名前 | 型 | 説明 |
|---|---|---|
| queryLocator | QueryLocator | クエリ結果セットにおいて、現在の処理位置を追跡するサーバ側のカーソルを表します。 |