No commit activity in last 3 years
No release in over 3 years
Salesforce JSON-based Bulk API Client
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

SalesforceBulkClient

SalesforceBulkClient is a Ruby gem which allows for integration with the Salesforce.com Bulk API.

Although there are many other gems to choose from for this purpose, this gem offers the following features:

  • JSON is used for all API requests and responses (instead of XML) in order to reduce message size.
  • Splitting data into batches for inserts, updates, and deletes are handled automatically. Batches will be split further if the 10,000,000 character limit per batch would be exceeded.
  • Large sets of data can be processed without pre-loading multiple batches.
  • Connect using the Restforce client instance.

Installation

Add this line to Gemfile:

gem 'salesforce_bulk_client'

And then execute:

$ bundle

Or install it as follows:

$ gem install salesforce_bulk_client

Usage

Instantiate the Bulk API Client

Authentication is done via the Restforce gem:

require 'salesforce_bulk_client'
restforce_client = Restforce.new(
    username:       ENV['SALESFORCE_USERNAME'],
    password:       ENV['SALESFORCE_PASSWORD'],
    security_token: ENV['SALESFORCE_SECURITY_TOKEN'],
    client_id:      ENV['SALESFORCE_OAUTH_CONSUMER_KEY'],
    client_secret:  ENV['SALESFORCE_OAUTH_CONSUMER_SECRET'].to_i,
    host:           ENV['SALESFORCE_HOST'])
bulk_client = SalesforceBulkClient::Client.new(restforce_client)

Inserting records

records = [ { Name: 'Test Account 1' }, { Name: 'Test Account 2' } ]
result = bulk_client.insert(sobject, records)

Upserting records

records = [ { Id: '00136000014tyyF', Name: 'Test Account 1' }, { Name: 'Test Account 2' } ]
result = bulk_client.upsert(sobject, records, 'Id')

Updating records

records = [ { Id: '00136000014tyyF', Name: 'Test Account 1' }, { Id: '00136000014tyyP', Name: 'Test Account 2' } ]
result = bulk_client.update(sobject, records)

Deleting records

records = [ { Id: '00136000014tyyF' }, { Id: '00136000014tyyP' } ]
result = bulk_client.delete(sobject, records)

Query records

result = bulk_client.query('Account', "select Id, Name from Account where Id = '00136000014tyyF'", true)

Process batches without pre-loading

result = bulk_client.query('Account', "select Id, Name from Account where Id = '00136000014tyyF'", false)
bulk_client.job_from_id(result.id).each_batch do |batch, batch_results|
  # Add batch-level processing logic here
end

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/FronteraConsulting/salesforce_bulk_client.