+ Reply to Thread
Results 1 to 6 of 6
This is a discussion on QueryMore returns 4 rows at a time within the Salesforce Coding Discussions forums, part of the Salesforce category; Hi, I've got some code that's running a query that is returning
  1. #1
    bakum is offline Junior Member
    Join Date
    Jan 2008
    Posts
    4

    QueryMore returns 4 rows at a time

    Hi,

    I've got some code that's running a query that is returning well over 2000 rows. My code handles this fine, runs querymore, blah blah blah. THe problem is that once the initial 2000 rows are returned, each QueryMore returns only 4 rows at a time. E.G. I had a query that returned 3700 rows, it grabbed 2000 in the first pass then ran for about 90 minutes grabbing 4 rows every few seconds. Eventually it timed out or froze or I don't know what at row 3500. Maybe I'd hit my query limit?

    Anyway, the point being, what's up with returning 4 rows? Anyone ever seen that?

    -mb

  2. #2
    mike's Avatar
    mike is offline Administrator
    Join Date
    May 2007
    Location
    Wylie, Texas
    Posts
    607
    Blog Entries
    16
    mb

    Thanks for joining the site! Listen I had the same thing happen to me, but cannot remember what the problem is

    Can you post some of your code so I, and others, can take a look at it?

  3. #3
    bakum is offline Junior Member
    Join Date
    Jan 2008
    Posts
    4

    here's dat code. Thanks!

    I took out everything except the most basic parts. This code does nothing but query, cycle through and count each record, display how many records are being dealt with at a time, then query more until done.

    ~~~~~~~~~~~
    PHP Code:
    try
    {
        
    $wsdl "partner.wsdl.xml";   
        
    $u "";
        
    $p "";

        
    $mySforceConnection = new SforcePartnerClient();
        
    $mySoapClient $mySforceConnection->createConnection(DIR_FS_SF_SOAP_CLIENT.$wsdl);
        
    $mylogin $mySforceConnection->login($u,$p);
       
        
    $query "Select c.Sales_Region__c, c.MailingState, c.MailingCountry, c.Id From Contact c
                  WHERE c.Sales_Region__c = ''"
    ;             
      
        echo 
    "<br>Query: ".$query."<br>";
       
        
    $queryResult $mySforceConnection->query($query);
        
    $totalQuerySize $queryResult->size;
        echo 
    "Total results from this query: ".$totalQuerySize."<br><hr><br><br>";
        
    $numQueries 1;
        
    // Checks response records
        
    if ($queryResult->size 0)
        {
            
    $records $queryResult->records;
            
    $record_count =  0;
            foreach (
    $records as $record)
            {
              
    $record_count++;
              
    $sContact = new SObject($record);
              
    $id = (string)$sContact->Id;
              
    $state = (string)$sContact->fields->MailingState;     
              
    $country = (string)$sContact->fields->MailingCountry;
           
              
    $contacts[$record_count]['id']=$id;     
              
    $contacts[$record_count]['state']=$state;
              
    $contacts[$record_count]['country']=$country;           
            }
           
            
    $total_count $record_count;
           
            echo 
    "Examing ".$record_count."/".$totalQuerySize." records in pass #".$numQueries."  Total records examined: ".$total_count."/".$totalQuerySize."<br>";
                
    // Cycles through additional responses if the number of records
                // exceeds the batch size
            
    while (!$queryResult->done)
            {
                
    //unsetting just to be sure we don't get polluted data
                
    unset ($sObject);
                unset (
    $sObjects);
                unset (
    $contacts);
                unset (
    $records);
               
                
    $numQueries++;
                echo 
    "Performing pass ".$numQueries."<br>";
                
    $records $mySforceConnection->queryMore($queryResult->queryLocator);
               
                
    $record_count =  0;
               
                foreach (
    $records as $record)
                {
                  
    $record_count++;
                  
    $sContact = new SObject($record);
                  
    $id = (string)$sContact->Id;
                  
    $state = (string)$sContact->fields->MailingState;     
                  
    $country = (string)$sContact->fields->MailingCountry;
               
                  
    $contacts[$record_count]['id']=$id;     
                  
    $contacts[$record_count]['state']=$state;
                  
    $contacts[$record_count]['country']=$country;           
                }
               
                
    $total_count += $record_count;
               
                echo 
    "Examing ".$record_count."/".$totalQuerySize." records in pass #".$numQueries."  Total records examined: ".$total_count."/".$totalQuerySize."<br>";
                                
            }
        }
       

       
       
    }
    catch (
    Exception $e)
    {
      echo 
    $e->faultstring;


  4. #4
    mike's Avatar
    mike is offline Administrator
    Join Date
    May 2007
    Location
    Wylie, Texas
    Posts
    607
    Blog Entries
    16
    Bakum
    I checked out your code and it looks okay to me, I cannot run it but I did create this script which works from my development account

    PHP Code:

    <?php
    ini_set
    ("soap.wsdl_cache_enabled""0");
    require_once (
    './includes/soapclient/SforcePartnerClient.php');
    require_once (
    './includes/soapclient/SforceHeaderOptions.php');

    //Salesforce Connection information
    $wsdl './includes/soapclient/partner.wsdl.xml';
    $userName "......";
    $password "......";

    $client = new SforcePartnerClient();
    $client->createConnection($wsdl);
    $loginResult $client->login($userName$password);


    $soql "Select Id, Name FROM Product2";
    //Processes the query to get account information from Salesforce
    $records get_records($client$soql);

    if (
    $records)
    {
        echo 
    '<p>There are currently ' count($records) . ' accounts:</p>';

        
    //Loops through all records which come back from get_accounts function and
        //stores them into an array $pass_this
        
    foreach ($records as $r)
        {
            
    //echo '<pre>' . print_r($r,true) . '</pre>';
            
    echo "The Id for this is <strong>" .$r->Id[0]. "</strong> with a product name of <strong>" .$r->any"</strong><br />";
        }

    }




    function 
    get_records($connection,$query)
    {
        
    $queryOptions = new QueryOptions(500);
        
    $response $connection->query(($query), $queryOptions);
        
    // check count to see if we are done
        
    if ($response->size 0)
        {
            
    $records $response->records;
            
    // Cycles through additional responses if the number of records
            // exceeds the batch size
            
    while (!$response->done)
            {
                
    set_time_limit(100);
                
    $response $connection->queryMore($response->queryLocator);
                
    $records array_merge($records$response->records$queryOptions);
            }
        }

        return 
    $records;
    }

    ?>
    See if this helps at all, sorry I could not be more help man!

    ~Mike

  5. #5
    bakum is offline Junior Member
    Join Date
    Jan 2008
    Posts
    4
    No luck remembering how you fixed it in the past, eh?

  6. #6
    mike's Avatar
    mike is offline Administrator
    Join Date
    May 2007
    Location
    Wylie, Texas
    Posts
    607
    Blog Entries
    16
    Man I tried to remember what it was but when I come across errors like this all I try and do is correct them as fast as possible and don't always list the errors or take notes on them. At least that was the way it was prior to starting this little site. So sorry about that

+ Reply to Thread

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

SEO by vBSEO 3.5.2