Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Datamapper Adapter for Salesforce
Failed to load latest commit information.
config Update README and examples to be current with latest library changes.
lib Upgrade to bundler 1.0, use gemspec
script update to the new bundler style of inclusion
spec fix a spec
.gitignore Add bundler 1.0 stuff to .gitignore
Gemfile
LICENSE Salesforce adapter becomes a gem
README.markdown Update with note about new gem and ongoing DM1 support.
Rakefile Upgrade to bundler 1.0, use gemspec
dm-salesforce.gemspec Upgrade to bundler 1.0, use gemspec

README.markdown

dm-salesforce

A gem that provides a Salesforce Adapter for DataMapper 0.10.x, and basic 1.0.x support.

If you're looking for ongoing DM1 support, dm-salesforce-adapter is actively maintained to support it so use that instead.

There are older versions of dm-salesforce specifically for 0.9.x, but they are no longer supported.

What it looks like

class Account
  include DataMapper::Salesforce::Resource

  def self.default_repository_name
    :salesforce
  end

  # Old method for declaring which fields are Salesforce-style IDs.  Alternatively,
  # can use the Salesforce-specific Serial custom DM type (see next model).
  def self.salesforce_id_properties
    :id
  end

  property :id,          String, :key => true
  property :name,        String
  property :description, String
  property :fax,         String
  property :phone,       String
  property :type,        String
  property :website,     String
  property :is_awesome,  Boolean

  has 0..n, :contacts
end

class Contact
  include DataMapper::Salesforce::Resource

  def self.default_repository_name
    :salesforce
  end

  property :id,         Serial
  property :first_name, String
  property :last_name,  String
  property :email,      String

  belongs_to :account
end

DataMapper.setup(:salesforce, {:adapter  => 'salesforce',
                               :username => 'salesforceuser@mydomain.com',
                               :password => 'skateboardsf938915c9cdc36ff5498881b',
                               :path     => '/path/to/wsdl.xml',
                               :host     => ''})

account = Account.first
account.is_awesome = true
account.save

See the fixtures for more examples.

How it works

Salesforce provides an XML-based WSDL definition of an existing schema/object model for download. The dm-salesforce adapter uses this WSDL to auto-generate a SOAP-based Ruby driver and classes, which is then used to implement a basic, low-level DataMapper Adapter.

Upon first access, the driver and classes are cached locally on disk in one of the following locations (in order of precedence):

  • In apidir, defined in database.yml (see included database.yml-example)
  • In ENV['SALESFORCE_DIR']
  • In ENV['HOME']/.salesforce/

Getting set up

  1. Obtain a working salesforce.com account

  2. Get a valid security token (if you don't already have one)

  3. Get the Enterprise WSDL for your object model

    • Login to https://login.salesforce.com
    • Click "Setup"
    • Click "App Setup" / "Develop" / "API"
    • Click "Generate Enterprise WSDL", then click the "Generate" button
    • Save that to an .xml file somewhere (path/extension doesn't matter - you specify it in database.yml / DataMapper.setup)
  4. Copy and modify config/example.rb to use your info

    • The :password field is the concatenation of your login password and the API key
    • If your password is 'skateboards' and API key is 'f938915c9cdc36ff5498881b', then the :password field you specify to DataMapper.setup should be 'skateboardsf938915c9cdc36ff5498881b'

Run 'ruby example.rb' and you should have access to the Account and Contact models (schema differences withstanding).

Don't forget to:

  • Retrieve a new copy of your WSDL anytime you make changes to your Salesforce schema
  • Wipe the auto-generated SOAP classes anytime you update your WSDL

Special Thanks to those who helped

  • Yehuda Katz
  • Corey Donohoe
  • Tim Carey-Smith
  • Andy Delcambre
  • Ben Burkert
  • Larry Diehl
  • Jordan Ritter
  • Martin Emde
  • Jason Snell
Something went wrong with that request. Please try again.