class Salesforce::Bulk::Job

Attributes

batches[RW]
columns[RW]
concurrency_mode[RW]
content_type[RW]
id[RW]
number_batches_completed[RW]
number_batches_failed[RW]
number_batches_in_progress[RW]
number_batches_total[RW]
number_of_batches_queued[RW]
number_records_processed[RW]
number_retries[RW]
object[RW]
object_type[RW]
operation[RW]
state[RW]

Public Class Methods

new(object_type, operation, columns = :all) click to toggle source
# File lib/salesforce/bulk/job.rb, line 18
def initialize(object_type, operation, columns = :all)
  self.object_type = object_type
  self.object = object_type.table_name
  self.operation = operation.to_s.downcase
  self.parallel!
  self.batches = []
  self.columns = columns
end

Public Instance Methods

batch(&block) click to toggle source
# File lib/salesforce/bulk/job.rb, line 35
def batch(&block)
  Batch.new(self).tap do |batch|
    Blockenspiel.invoke(block, batch)
    self.batches << batch
  end
end
completed?() click to toggle source
# File lib/salesforce/bulk/job.rb, line 48
def completed?
  self.batches.each(&:update_status)
  self.batches.all? { |batch| batch.completed? || batch.failed? }
end
parallel!() click to toggle source
# File lib/salesforce/bulk/job.rb, line 27
def parallel!
  self.concurrency_mode = "Parallel"
end
process!() click to toggle source
# File lib/salesforce/bulk/job.rb, line 42
def process!
  create_job!
  create_batches!
  close_job!
end
results() click to toggle source
# File lib/salesforce/bulk/job.rb, line 53
def results
  self.batches.map(&:results).flatten
end
serial!() click to toggle source
# File lib/salesforce/bulk/job.rb, line 31
def serial!
  self.concurrency_mode = "Serial"
end

Private Instance Methods

close_job!() click to toggle source
# File lib/salesforce/bulk/job.rb, line 68
def close_job!
  response = ::Salesforce.connection.async_post("job/#{id}", close_job_xml, :format => :xml)
  assign_attributes!(response)
end
close_job_xml() click to toggle source
# File lib/salesforce/bulk/job.rb, line 81
def close_job_xml
  job_xml do |job_info|
    job_info.state "Closed"
  end
end
create_batches!() click to toggle source
# File lib/salesforce/bulk/job.rb, line 64
def create_batches!
  batches.each(&:create!)
end
create_job!() click to toggle source
# File lib/salesforce/bulk/job.rb, line 59
def create_job!
  response = ::Salesforce.connection.async_post("job", create_job_xml, :format => :xml)
  assign_attributes!(response)
end
create_job_xml() click to toggle source
# File lib/salesforce/bulk/job.rb, line 73
def create_job_xml
  job_xml do |job_info|
    job_info.operation self.operation
    job_info.object    self.object
    job_info.contentType "CSV"
  end
end
csv_header() click to toggle source
# File lib/salesforce/bulk/job.rb, line 96
def csv_header
  csv_columns.map(&:original_name)
end
job_xml(&block) click to toggle source
# File lib/salesforce/bulk/job.rb, line 87
def job_xml(&block)
  xml = Builder::XmlMarkup.new(:indent => 2)
  xml.instruct!
  xml.jobInfo :xmlns => "http://www.force.com/2009/06/asyncapi/dataload" do |job_info|
    block.call(job_info)
  end
  xml.target!
end