private static function create($entry, $form, $feed)
 {
     self::log_debug(__METHOD__ . ': Starting the create process...');
     $api = self::get_api();
     $token = self::getToken();
     // There was no token. This is all wrong.
     if (empty($token)) {
         self::log_error(__METHOD__ . ': There was no OAuth token. It was likely revoked. Aborting.');
         return false;
     }
     if (!isset($feed['is_active']) || $feed['is_active'] == 0) {
         self::log_error(sprintf('%s: Feed `%s` is not active.', __METHOD__, $feed['meta']['contact_object_name']));
         return false;
     }
     $merge_vars = self::process_merge_vars($entry, $form, $feed);
     $merge_vars = apply_filters('gf_salesforce_create_data', $merge_vars, $form, $entry, $feed, $api);
     // Make sure the charset is UTF-8 for Salesforce.
     $merge_vars = array_map(array('GFSalesforce', '_convert_to_utf_8'), $merge_vars);
     // Don't send merge_vars that are empty. It can cause problems with Salesforce strict typing.  For example,
     // if the form has a text field where a number should go, but that number isn't always required, when it's
     // not supplied, we don't want to send <var></var> to Salesforce. It might choke because it expects a Double
     // data type, not an empty string
     $merge_vars = array_filter($merge_vars, array('GFSalesforce', '_remove_empty_fields'));
     // We create the object to insert/upsert into Salesforce
     $Account = new SObject();
     // The fields to use are the merge vars
     $Account->fields = $merge_vars;
     // Set the type of object
     $Account->type = $feed['meta']['contact_object_name'];
     $foreign_key_label = self::primary_key_id($feed);
     try {
         if (!self::$instance instanceof GFSalesforce) {
             self::$instance = self::Instance();
         }
         // If the primary field has been set, use that to upsert instead of create.
         // @since 2.5.2, to avoid duplicates at Salesforce
         if (!empty($feed['meta']['primary_field'])) {
             self::log_debug(sprintf('%s: Upserting using primary field of `%s`', __METHOD__, $feed['meta']['primary_field']));
             if (empty(self::$instance->result->id)) {
                 // old upsert
                 // https://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_upsert.htm
                 self::log_debug(__METHOD__ . ': Upserting');
                 $result = $api->upsert($feed['meta']['primary_field'], array($Account));
             } else {
                 self::log_debug(sprintf('%s: Creating with previous id %s', __METHOD__, self::$instance->result->id));
                 $Account->fields[$feed['meta']['primary_field']] = self::$instance->result->id;
                 $result = $api->create(array($Account));
             }
         } else {
             self::log_debug(__METHOD__ . ': Creating, not upserting');
             $result = $api->create(array($Account));
         }
         $api_exception = '';
         self::log_debug(sprintf('%s: $Account object: %s', __METHOD__, print_r($Account, true)));
     } catch (Exception $e) {
         self::log_error(sprintf("%s:\n\nException While Exporting Entry\nThere was an error exporting Entry #%s for Form #%s. Here's the error:\n%s", __METHOD__, $entry['id'], $form['id'], $e->getMessage()));
         $api_exception = "\r\n\t\t\t\tException Message: " . $e->getMessage() . "\nFaultstring: " . $e->faultstring . "\nFile: " . $e->getFile() . "\nLine: " . $e->getLine() . "\nArgs: " . serialize($merge_vars) . "\nTrace: " . serialize($e->getTrace());
         gform_update_meta($entry['id'], 'salesforce_api_result', 'Error: ' . $e->getMessage());
     }
     if (isset($result) && count($result) == 1 && !empty($result[0])) {
         self::$instance->result = $result = $result[0];
     }
     if (isset($result->success) && !empty($result->success)) {
         $result_id = $result->id;
         self::$foreign_keys[$foreign_key_label] = $result_id;
         gform_update_meta($entry['id'], 'salesforce_id', $result_id);
         gform_update_meta($entry['id'], 'salesforce_api_result', 'success');
         $success_note = sprintf(__('Successfully added/updated to Salesforce (%s) with ID #%s. View entry at %s', 'gravity-forms-salesforce'), $Account->type, $result_id, self::getTokenParam('instance_url') . '/' . $result_id);
         self::log_debug(__METHOD__ . ': ' . $success_note);
         self::add_note($entry["id"], $success_note);
         self::admin_screen_message(__('Entry added/updated in Salesforce.', 'gravity-forms-salesforce'), 'updated');
         /**
          * @since 3.1.2
          */
         do_action('gravityforms_salesforce_object_added_updated', $Account, $feed, $result_id);
         return $result_id;
     } else {
         if (isset($result->errors[0])) {
             $errors = $result->errors[0];
         }
         if (isset($errors)) {
             self::log_error(sprintf('%s: There was an error exporting Entry #%s for Form #%s. Salesforce responded with:', __METHOD__, $entry['id'], $form['id']) . "\n" . print_r($errors, true));
             if ($email = self::is_notify_on_error()) {
                 $error_heading = __('Error adding to Salesforce', 'gravity-forms-salesforce');
                 // Create the email message to send
                 $message = sprintf(apply_filters('gravityforms_salesforce_notify_on_error_message', '<h3>' . $error_heading . '</h3>' . wpautop(__("There was an error when attempting to add %sEntry #%s from the form \"%s\"", 'gravity-forms-salesforce')), $errors, $entry, $form), '<a href="' . admin_url('admin.php?page=gf_entries&view=entry&id=' . $entry['form_id'] . '&lid=' . $entry['id']) . '">', $entry['id'] . '</a>', $form['title']);
                 // Send as HTML
                 $headers = "Content-type: text/html; charset=" . get_option('blog_charset') . "\r\n";
                 // Send email
                 $sent = wp_mail($email, $error_heading, $message, $headers);
                 if (!$sent) {
                     self::log_error(__METHOD__ . ': There was an error sending the error email. This really isn\'t your day, is it?');
                 }
             }
             self::add_note($entry["id"], sprintf(__('Errors when adding to Salesforce (%s): %s', 'gravity-forms-salesforce'), $Account->type, $errors->message . $api_exception));
         }
         self::admin_screen_message(__('Errors when adding to Salesforce. Entry not sent! Check the Entry Notes below for more details.', 'gravity-forms-salesforce'), 'error');
         return false;
     }
 }