salesforce-sql 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/salesforce/sql/app.rb +47 -4
- data/lib/salesforce/sql/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39135041a9aef55d8bc41f053c6734a48a81539c
|
4
|
+
data.tar.gz: 217155859971b571c010ff51ca06924d3149633e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81ac9b04b995b7ce8cac6ac74fc9186a1a05f94424594f3b1c611b4bbd178ddd739c1fafa576c5c33db9d446b23814e1736bd30d26a59a64d51347a5aa736ab7
|
7
|
+
data.tar.gz: 10e95d94b77fede78cf71c6746c35f88924ac5479349c66b62002df3dd8d9f6c04ffd650f3fc6fd301a15145ad38aa95f193d66edd17fc5b791561cf1bc7a876
|
data/lib/salesforce/sql/app.rb
CHANGED
@@ -5,6 +5,9 @@ module Salesforce
|
|
5
5
|
attr_accessor :debug
|
6
6
|
attr_accessor :username
|
7
7
|
attr_accessor :step
|
8
|
+
attr_accessor :salesforce_bulk_client
|
9
|
+
attr_accessor :restforce_client
|
10
|
+
attr_accessor :default_ignore_fields
|
8
11
|
|
9
12
|
def initialize credentials
|
10
13
|
|
@@ -20,7 +23,6 @@ module Salesforce
|
|
20
23
|
@default_ignore_fields = [
|
21
24
|
'Id',
|
22
25
|
'IsDeleted',
|
23
|
-
'IsPartner',
|
24
26
|
'MasterRecordId',
|
25
27
|
'ParentId',
|
26
28
|
'OwnerId',
|
@@ -100,6 +102,49 @@ module Salesforce
|
|
100
102
|
|
101
103
|
end
|
102
104
|
|
105
|
+
# Description: It will resolve the id mapping for a set of records
|
106
|
+
# parameters:
|
107
|
+
# source: The Salesforce::SQL of the source organization
|
108
|
+
# dependency_object: The DEPENDENCY object name
|
109
|
+
# dependency_object_pk: the DEPENENCY field to be used as primary key
|
110
|
+
# object_fk_field: The foreign key field name in the OBJECT
|
111
|
+
|
112
|
+
def map_ids source: , records: , object_fk_field: , dependency_object_pk: , dependency_object: nil
|
113
|
+
|
114
|
+
# Get dependency object ids from the object
|
115
|
+
dependency_ids = records.map{|row| row[object_fk_field]}.compact.sort.uniq
|
116
|
+
|
117
|
+
# Use those Ids to get the object records from source including the dependency_object_pk
|
118
|
+
source_object = source.query "Select Id,#{dependency_object_pk} FROM #{dependency_object}", dependency_ids
|
119
|
+
|
120
|
+
# Get the dependency_object_pk values and export the IDs from the target object
|
121
|
+
dependency_object_pk_values = source_object.map {|row| row[dependency_object_pk].gsub("'", %q(\\\')) if not row[dependency_object_pk].nil? }.compact
|
122
|
+
target_object = self.query_select_in "Select Id,#{dependency_object_pk} FROM #{dependency_object} WHERE #{dependency_object_pk}", dependency_object_pk_values
|
123
|
+
|
124
|
+
# Now we have source_object and target_object ids and values, we can do the mapping on records
|
125
|
+
records.map! do |record|
|
126
|
+
|
127
|
+
# If the :object_fk_field is nil, then there is no reference to map and we import the record as itis
|
128
|
+
next record if record[object_fk_field].nil?
|
129
|
+
|
130
|
+
# Grab the source dependency item for this record using the :object_fk_field id, if the source item doesn't exist, don't insert the record
|
131
|
+
source_item = source_object.select {|row| row['Id'] == record[object_fk_field] }
|
132
|
+
next if source_item.empty?
|
133
|
+
|
134
|
+
# Grab the target dependency item for this record using the :dependency_object_pk, if the target item doesnt exist, don't insert the record
|
135
|
+
target_item = target_object.select {|row| row[dependency_object_pk] == source_item.first[dependency_object_pk]}
|
136
|
+
next if target_item.empty?
|
137
|
+
|
138
|
+
# The actual mapping
|
139
|
+
record[object_fk_field] = target_item.first['Id']
|
140
|
+
record
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
records
|
145
|
+
|
146
|
+
end
|
147
|
+
|
103
148
|
# Description: Copy an object from one source to target
|
104
149
|
# Parameters:
|
105
150
|
# object: The object to copy
|
@@ -137,7 +182,7 @@ module Salesforce
|
|
137
182
|
source_object = source.query "Select Id,#{dep[:dependency_object_pk]} FROM #{dep[:dependency_object]}", dependency_ids
|
138
183
|
|
139
184
|
# Get the dependency_object_pk values and export the IDs from the target object
|
140
|
-
dependency_object_pk_values = source_object.map {|row| row[dep[:dependency_object_pk]].gsub("'", %q(\\\'))}
|
185
|
+
dependency_object_pk_values = source_object.map {|row| row[dep[:dependency_object_pk]].gsub("'", %q(\\\')) if not row[dep[:dependency_object_pk]].nil? }.compact
|
141
186
|
target_object = self.query_select_in "Select Id,#{dep[:dependency_object_pk]} FROM #{dep[:dependency_object]} WHERE #{dep[:dependency_object_pk]}", dependency_object_pk_values
|
142
187
|
|
143
188
|
# Now we have source_object and target_object ids and values, we can do the mapping on bulk_import_records
|
@@ -207,8 +252,6 @@ module Salesforce
|
|
207
252
|
count_after - count_before
|
208
253
|
end
|
209
254
|
|
210
|
-
private
|
211
|
-
|
212
255
|
def bulk_insert object, records
|
213
256
|
(0..(records.size-1)).step(@bulk_api_step).each do |n|
|
214
257
|
job = @salesforce_bulk_client.create object, records[n..n+@bulk_api_step-1]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: salesforce-sql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan Breinlinger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|