You are here

function _sf_import_get_soql_records in Salesforce Suite 7.2

Same name and namespace in other branches
  1. 6.2 sf_import/sf_import.module \_sf_import_get_soql_records()

For the fieldmap provided, attempt to pull updated Salesforce IDs using the SOQL query defined for the map.

Parameters

object $map: A Salesforce fieldmap object, @see salesforce_api_fieldmap_load().

Return value

FALSE if failed, or an object containing an array of Ids and the latest date covered. $response->ids = an array of SFIDS $response->latestDateCovered = timestamp of latest updated Salesforce object

2 string references to '_sf_import_get_soql_records'
sf_import_import_records in sf_import/sf_import.module
This function is called on cron run. It is responsible for calling functions to import records using the getUpdated() method or a custom SOQL query, depending on what the user selected in admin settings for sf_import.
sf_import_settings_form in sf_import/sf_import.admin.inc
Main import settings form for Salesforce Import module.

File

sf_import/sf_import.module, line 82

Code

function _sf_import_get_soql_records($map, $start, $end) {

  // Ensure that there is a Salesforce object set in the fieldmap.
  if (!isset($map->salesforce)) {
    return FALSE;
  }
  $date_time = gmdate(DATE_ATOM, $start);
  $default_soql = 'SELECT Id, LastModifiedDate FROM ' . $map->salesforce . ' WHERE LastModifiedDate > ' . $date_time;
  $soql_where = variable_get('sf_import_' . $map->name . '_soql', NULL);
  $soql = NULL;
  $order_by = ' ORDER BY LastModifiedDate DESC';
  is_null($soql_where) ? $soql = $default_soql . $order_by : ($soql = $default_soql . ' AND ' . $soql_where . $order_by);
  if ($soql) {

    // Run the query
    $results = salesforce_api_query($soql, array(
      'queryAll' => FALSE,
      'queryMore' => TRUE,
      'limit' => 2000,
    ));
    salesforce_api_log(SALESFORCE_LOG_ALL, 'Query to retreive updated records: %soql. !count result(s) returned: <pre>%ret</pre>', array(
      '%soql' => print_r($soql, TRUE),
      '!count' => count($results),
      '%ret' => print_r($results, TRUE),
    ));
    if (empty($results)) {
      return FALSE;
    }
  }
  $response = new stdClass();
  $records = array();
  foreach ($results as $key => $object) {

    // Check to see that the last_import field in {salesforce_object_map} is older than
    // the LastModifiedDate on this object
    $last_import = db_query("SELECT last_import FROM {salesforce_object_map} WHERE sfid = :sfid", array(
      ':sfid' => $object->Id,
    ))
      ->fetchField();
    if ($last_import < strtotime($object->LastModifiedDate)) {
      $records[] = $object->Id;
    }
  }
  $response->ids = $records;
  $response->latestDateCovered = $results[0]->LastModifiedDate;

  // NOTE: it has IDs.
  return $response;
}