salesforce_bulk2 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/salesforce_bulk/batch.rb +25 -10
- data/lib/salesforce_bulk/client.rb +9 -9
- data/lib/salesforce_bulk/connection.rb +7 -1
- data/lib/salesforce_bulk/job.rb +19 -17
- data/lib/salesforce_bulk/version.rb +1 -1
- data/lib/salesforce_bulk.rb +4 -1
- data/{salesforce_bulk.gemspec → salesforce_bulk2.gemspec} +3 -3
- metadata +4 -4
@@ -1,6 +1,6 @@
|
|
1
1
|
module SalesforceBulk
|
2
2
|
class Batch
|
3
|
-
attr_accessor :
|
3
|
+
attr_accessor :session_id
|
4
4
|
|
5
5
|
attr_reader :apex_processing_time
|
6
6
|
attr_reader :api_active_processing_time
|
@@ -14,18 +14,29 @@ module SalesforceBulk
|
|
14
14
|
attr_reader :total_processing_time
|
15
15
|
attr_reader :data
|
16
16
|
|
17
|
-
@@
|
17
|
+
@@batch_size = 10000
|
18
18
|
|
19
|
-
def self.
|
20
|
-
@@
|
19
|
+
def self.batch_size
|
20
|
+
@@batch_size
|
21
21
|
end
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
update(data)
|
26
|
-
|
22
|
+
|
23
|
+
def self.new_from_xml xml_data, session_id = nil
|
24
|
+
batch = Batch.new
|
25
|
+
batch.update(data)
|
26
|
+
batch.session_id = session_id
|
27
|
+
batch
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.find job_id, batch_id, session_id
|
31
|
+
batch = Batch.new
|
32
|
+
batch.id = batch_id
|
33
|
+
batch.job_id = job_id
|
34
|
+
batch.session_id = session_id
|
35
|
+
batch.refresh
|
36
|
+
batch
|
27
37
|
end
|
28
38
|
|
39
|
+
|
29
40
|
def update(data)
|
30
41
|
@data = data
|
31
42
|
|
@@ -41,6 +52,10 @@ module SalesforceBulk
|
|
41
52
|
@apex_processing_time = data['apex_processing_time'].to_i
|
42
53
|
end
|
43
54
|
|
55
|
+
def job
|
56
|
+
@job ||= Job.find(@job_id, @session_id) if @session_id
|
57
|
+
end
|
58
|
+
|
44
59
|
### State Information ###
|
45
60
|
def in_progress?
|
46
61
|
state? 'InProgress'
|
@@ -79,7 +94,7 @@ module SalesforceBulk
|
|
79
94
|
end
|
80
95
|
|
81
96
|
def refresh
|
82
|
-
xml_data = http_get_xml("job/#{jobId}/batch/#{batchId}")
|
97
|
+
xml_data = @connection.http_get_xml("job/#{jobId}/batch/#{batchId}")
|
83
98
|
update(xml_data)
|
84
99
|
end
|
85
100
|
end
|
@@ -16,12 +16,12 @@ module SalesforceBulk
|
|
16
16
|
@connection.disconnect
|
17
17
|
end
|
18
18
|
|
19
|
-
def connect
|
20
|
-
@connection.connect
|
19
|
+
def connect options = {}
|
20
|
+
@connection.connect(options)
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
24
|
-
Job.new
|
23
|
+
def new_job operation, sobject, options = {}
|
24
|
+
Job.new(add_job(operation, sobject, options), self)
|
25
25
|
end
|
26
26
|
|
27
27
|
def add_job operation, sobject, options={}
|
@@ -39,7 +39,7 @@ module SalesforceBulk
|
|
39
39
|
xml = '<?xml version="1.0" encoding="utf-8"?>'
|
40
40
|
xml += '<jobInfo xmlns="http://www.force.com/2009/06/asyncapi/dataload">'
|
41
41
|
xml += " <operation>#{operation}</operation>"
|
42
|
-
xml += " <object>#{sobject}</object>"
|
42
|
+
xml += " <object>#{sobject}</object>" if sobject
|
43
43
|
xml += " <externalIdFieldName>#{options[:external_id_field_name]}</externalIdFieldName>" if options[:external_id_field_name]
|
44
44
|
xml += " <concurrencyMode>#{options[:concurrency_mode]}</concurrencyMode>" if options[:concurrency_mode]
|
45
45
|
xml += " <contentType>CSV</contentType>"
|
@@ -66,11 +66,11 @@ module SalesforceBulk
|
|
66
66
|
@connection.http_post_xml("job/#{job_id}", xml)
|
67
67
|
end
|
68
68
|
|
69
|
-
def
|
69
|
+
def get_job_info job_id
|
70
70
|
@connection.http_get_xml("job/#{job_id}")
|
71
71
|
end
|
72
72
|
|
73
|
-
def
|
73
|
+
def get_batch_info job_id, batch_id
|
74
74
|
@connection.http_get_xml("job/#{jobId}/batch/#{batchId}")
|
75
75
|
end
|
76
76
|
|
@@ -190,9 +190,9 @@ module SalesforceBulk
|
|
190
190
|
end
|
191
191
|
|
192
192
|
def perform_operation(operation, sobject, data, external_id = nil, batch_size = nil)
|
193
|
-
job =
|
193
|
+
job = new_job(operation, sobject, :external_id_field_name => external_id)
|
194
194
|
|
195
|
-
data.each_slice(batch_size || Batch.
|
195
|
+
data.each_slice(batch_size || Batch.batch_size) do |records|
|
196
196
|
job.add_batch(records)
|
197
197
|
end
|
198
198
|
|
@@ -44,7 +44,13 @@ module SalesforceBulk
|
|
44
44
|
@debugging = options[:debugging] || @@debugging
|
45
45
|
end
|
46
46
|
|
47
|
-
def connect
|
47
|
+
def connect options = {}
|
48
|
+
raise Error.new("Already connected") if connected?
|
49
|
+
|
50
|
+
@username = options[:username] || @username
|
51
|
+
@password = options[:password] || @password
|
52
|
+
@version = options[:version] || @version
|
53
|
+
|
48
54
|
xml = '<?xml version="1.0" encoding="utf-8"?>'
|
49
55
|
xml += '<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
|
50
56
|
xml += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
|
data/lib/salesforce_bulk/job.rb
CHANGED
@@ -7,10 +7,11 @@ module SalesforceBulk
|
|
7
7
|
attr_reader :data
|
8
8
|
|
9
9
|
@@fields = [:id, :operation, :object, :createdById, :state, :createdDate,
|
10
|
-
:systemModstamp, :externalIdFieldName, :concurrencyMode, :contentType,
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
10
|
+
:systemModstamp, :externalIdFieldName, :concurrencyMode, :contentType,
|
11
|
+
:numberBatchesQueued, :numberBatchesInProgress, :numberBatchesCompleted,
|
12
|
+
:numberBatchesFailed, :totalBatches, :retries, :numberRecordsProcessed,
|
13
|
+
:numberRecordsFailed, :totalProcessingTime, :apiActiveProcessingTime,
|
14
|
+
:apexProcessingTime, :apiVersion]
|
14
15
|
|
15
16
|
@@valid_operations = [:delete, :insert, :update, :upsert, :query]
|
16
17
|
@@valid_concurrency_modes = ['Parallel', 'Serial']
|
@@ -28,9 +29,10 @@ module SalesforceBulk
|
|
28
29
|
@@valid_concurrency_modes.include?(concurrency_mode)
|
29
30
|
end
|
30
31
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
32
|
+
def new_from_xml xml_data, client = nil
|
33
|
+
job = Job.new
|
34
|
+
job.update(xml_data)
|
35
|
+
job.client = client
|
34
36
|
end
|
35
37
|
|
36
38
|
def update xml_data
|
@@ -45,7 +47,7 @@ module SalesforceBulk
|
|
45
47
|
instance_variable_set(field, xml_data[field])
|
46
48
|
end
|
47
49
|
|
48
|
-
#Special cases
|
50
|
+
#Special cases and data formats
|
49
51
|
@created_date = DateTime.parse(xml_data['createdDate'])
|
50
52
|
@system_modstamp = DateTime.parse(xml_data['systemModstamp'])
|
51
53
|
|
@@ -76,26 +78,26 @@ module SalesforceBulk
|
|
76
78
|
end
|
77
79
|
|
78
80
|
def close
|
79
|
-
update(@client.
|
81
|
+
update(@client.close_job(@id))
|
80
82
|
end
|
81
83
|
|
82
84
|
def abort
|
83
|
-
update(@client.
|
85
|
+
update(@client.abort_job(@id))
|
84
86
|
end
|
85
87
|
|
86
88
|
def refresh
|
87
|
-
update(@client.
|
88
|
-
end
|
89
|
-
|
90
|
-
#Statuses
|
91
|
-
def batches_finished?
|
92
|
-
@number_batches_queued == 0 and
|
93
|
-
@number_batches_in_progress == 0
|
89
|
+
update(@client.get_job_info(@id))
|
94
90
|
end
|
95
91
|
|
96
92
|
def get_results
|
97
93
|
batch_list.map(&:result).flatten
|
98
94
|
end
|
95
|
+
|
96
|
+
#Statuses
|
97
|
+
def batches_finished?
|
98
|
+
(@number_batches_queued == 0) and
|
99
|
+
(@number_batches_in_progress == 0)
|
100
|
+
end
|
99
101
|
|
100
102
|
def finished?
|
101
103
|
failed? or
|
data/lib/salesforce_bulk.rb
CHANGED
@@ -14,4 +14,7 @@ require 'salesforce_bulk/job'
|
|
14
14
|
require 'salesforce_bulk/batch'
|
15
15
|
require 'salesforce_bulk/batch_result'
|
16
16
|
require 'salesforce_bulk/batch_result_collection'
|
17
|
-
require 'salesforce_bulk/query_result_collection'
|
17
|
+
require 'salesforce_bulk/query_result_collection'
|
18
|
+
|
19
|
+
module SalesforceBulk
|
20
|
+
end
|
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = "salesforce_bulk2"
|
7
7
|
s.version = SalesforceBulk::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Adam Kerr", "Jorge Valdivia","Javier Julio"]
|
10
|
-
s.email = ["ajrkerr@gmail.com", "jorge@valdivia.me","jjfutbol@gmail.com"]
|
9
|
+
s.authors = ["Adam Kerr", "Jorge Valdivia", "Javier Julio"]
|
10
|
+
s.email = ["ajrkerr@gmail.com", "jorge@valdivia.me", "jjfutbol@gmail.com"]
|
11
11
|
s.homepage = "https://github.com/ajrkerr/salesforce_bulk"
|
12
12
|
s.summary = %q{Ruby support for the Salesforce Bulk API}
|
13
13
|
s.description = %q{This gem is a simple interface to the Salesforce Bulk API providing support for insert, update, upsert, delete, and query.}
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
|
-
s.add_dependency "
|
20
|
+
s.add_dependency "activesupport"
|
21
21
|
s.add_dependency "xml-simple"
|
22
22
|
|
23
23
|
s.add_development_dependency "mocha"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: salesforce_bulk2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,10 +11,10 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-08-01 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
17
|
+
name: activesupport
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
@@ -134,7 +134,7 @@ files:
|
|
134
134
|
- lib/salesforce_bulk/query_result_collection.rb
|
135
135
|
- lib/salesforce_bulk/salesforce_error.rb
|
136
136
|
- lib/salesforce_bulk/version.rb
|
137
|
-
-
|
137
|
+
- salesforce_bulk2.gemspec
|
138
138
|
- test/fixtures/batch_create_request.csv
|
139
139
|
- test/fixtures/batch_create_response.xml
|
140
140
|
- test/fixtures/batch_info_list_response.xml
|