embulk-output-salesforce 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 29d21f4cf7365b79ed58cbd012c48bf59b31d7ae
4
- data.tar.gz: 77f464e7f1dbfb7aa3d5b9cfc7b27904e3d73688
3
+ metadata.gz: b0d15f227f70f2cf1136aa8c4228366381f953c5
4
+ data.tar.gz: 865df205e83934d43b93ad717412059e701236b3
5
5
  SHA512:
6
- metadata.gz: 06b13aea4bdcc54b1e654788814db4178766b7b7e169b109095acd8ec91c7778827b75fd105fa507993498b6b113f91bb62e3c71a8d51741036e6810e3da8d10
7
- data.tar.gz: 661a287aa359c72769d9a8bf5820db0ef19b50bc3f405fcd999dc9c1f34561d7873cc41ef5f2cf56d585ce2b92aec59fd30fd0489029fbc0460eec23b3a53de7
6
+ metadata.gz: 0c85452ec9d4749e668f85d07d02bae621efa3891fa945e25594600da4f6e2b9086ae18c39db9d4e2a8a33ce2ac9f6fa9852903154bd251b2a7eeb162168cbc7
7
+ data.tar.gz: abe53b74e7629da47408fafa034bfe6552b4229faedc7982988b790475608f218929103cb0eaa48f98f67925ef74e08ca5fd29a6e78ef35600939828da5bfa88
data/README.md CHANGED
@@ -22,8 +22,29 @@ Embulk output plugin to load into Salesforce.com.
22
22
  - **version**: API version (string, default: "34.0")
23
23
 
24
24
  ## Example
25
+ The column names must be salesforce API field name.
25
26
 
26
27
  ```yaml
28
+ in:
29
+ type: file
30
+ path_prefix: /path/to/salesforce_
31
+ parser:
32
+ charset: UTF-8
33
+ newline: CRLF
34
+ type: csv
35
+ delimiter: ','
36
+ quote: '"'
37
+ escape: ''
38
+ skip_header_lines: 1
39
+ comment_line_marker: null
40
+ allow_extra_columns: true
41
+ allow_optional_columns: false
42
+ columns:
43
+ - {name: Name, type: string}
44
+ - {name: Date__c, type: timestamp, format: '%Y-%m-%d'}
45
+ - {name: DateTime__c, type: timestamp, format: '%Y-%m-%d %H:%M:%S%Z'}
46
+ - {name: Number__c, type: double}
47
+ - {name: Reference__c, type: string}
27
48
  out:
28
49
  type: salesforce
29
50
  username: hoge@example.com
data/build.gradle CHANGED
@@ -12,7 +12,7 @@ configurations {
12
12
  provided
13
13
  }
14
14
 
15
- version = "0.1.1"
15
+ version = "0.1.2"
16
16
 
17
17
  dependencies {
18
18
  compile "org.embulk:embulk-core:0.6.11"
@@ -3,10 +3,14 @@ package org.embulk.output;
3
3
  import com.google.common.base.Optional;
4
4
  import com.sforce.soap.partner.Connector;
5
5
  import com.sforce.soap.partner.DeleteResult;
6
+ import com.sforce.soap.partner.DescribeSObjectResult;
7
+ import com.sforce.soap.partner.Field;
8
+ import com.sforce.soap.partner.FieldType;
6
9
  import com.sforce.soap.partner.GetUserInfoResult;
7
10
  import com.sforce.soap.partner.PartnerConnection;
8
11
  import com.sforce.soap.partner.SaveResult;
9
12
  import com.sforce.soap.partner.UpsertResult;
13
+ import com.sforce.soap.partner.fault.ApiFault;
10
14
  import com.sforce.soap.partner.sobject.SObject;
11
15
  import com.sforce.ws.ConnectionException;
12
16
  import com.sforce.ws.ConnectorConfig;
@@ -17,11 +21,14 @@ import java.text.SimpleDateFormat;
17
21
  import java.util.ArrayList;
18
22
  import java.util.Calendar;
19
23
  import java.util.Date;
24
+ import java.util.HashMap;
20
25
  import java.util.List;
26
+ import java.util.Map;
21
27
  import org.embulk.config.CommitReport;
22
28
  import org.embulk.config.Config;
23
29
  import org.embulk.config.ConfigDefault;
24
30
  import org.embulk.config.ConfigDiff;
31
+ import org.embulk.config.ConfigException;
25
32
  import org.embulk.config.ConfigSource;
26
33
  import org.embulk.config.Task;
27
34
  import org.embulk.config.TaskSource;
@@ -45,7 +52,8 @@ public class SalesforceOutputPlugin
45
52
  {
46
53
  protected static Logger logger;
47
54
  private static PartnerConnection client = null;
48
-
55
+ private static Map<String, String> externalIdToObjectNameMap = null;
56
+
49
57
  public interface PluginTask
50
58
  extends Task
51
59
  {
@@ -112,6 +120,13 @@ public class SalesforceOutputPlugin
112
120
  client = Connector.newConnection(connectorConfig);
113
121
  GetUserInfoResult userInfo = client.getUserInfo();
114
122
  logger.info("login successful with {}", userInfo.getUserName());
123
+ externalIdToObjectNameMap = new HashMap<>();
124
+ DescribeSObjectResult describeResult = client.describeSObject(task.getSObject());
125
+ for (Field field : describeResult.getFields()) {
126
+ if (field.getType() == FieldType.reference) {
127
+ externalIdToObjectNameMap.put(field.getRelationshipName(), field.getReferenceTo()[0]);
128
+ }
129
+ }
115
130
  }
116
131
  } catch(ConnectionException ex) {
117
132
  logger.error("Login error. Please check your credentials.");
@@ -193,7 +208,7 @@ public class SalesforceOutputPlugin
193
208
  pageReader.getSchema().visitColumns(new ColumnVisitor() {
194
209
  @Override
195
210
  public void doubleColumn(Column column) {
196
- record.addField(column.getName(), pageReader.getDouble(column));
211
+ columnWithReferenceCheck(column.getName(), pageReader.getDouble(column));
197
212
  }
198
213
  @Override
199
214
  public void timestampColumn(Column column) {
@@ -207,17 +222,37 @@ public class SalesforceOutputPlugin
207
222
  }
208
223
  @Override
209
224
  public void stringColumn(Column column) {
210
- record.addField(column.getName(), pageReader.getString(column));
225
+ columnWithReferenceCheck(column.getName(), pageReader.getString(column));
211
226
  }
212
227
  @Override
213
228
  public void longColumn(Column column) {
214
- record.addField(column.getName(), pageReader.getLong(column));
229
+ columnWithReferenceCheck(column.getName(), pageReader.getLong(column));
215
230
  }
216
231
  @Override
217
232
  public void booleanColumn(Column column) {
218
233
  record.addField(column.getName(), pageReader.getBoolean(column));
219
234
  }
220
-
235
+
236
+ private void columnWithReferenceCheck(String name, Object value) {
237
+ if (name.indexOf('.') > 0) {
238
+ String[] tokens = name.split("\\.");
239
+ String referencesFieldName = tokens[0];
240
+ String externalIdFieldName = tokens[1];
241
+
242
+ SObject sObjRef = new SObject();
243
+ String refFieldApiName = referencesFieldName.replaceAll("__R", "__r");
244
+ if (externalIdToObjectNameMap.containsKey(refFieldApiName)) {
245
+ sObjRef.setType(externalIdToObjectNameMap.get(refFieldApiName));
246
+ } else {
247
+ throw new ConfigException("Invalid Relationship Name '" + refFieldApiName + "'");
248
+ }
249
+ sObjRef.addField(externalIdFieldName, value);
250
+ record.addField(referencesFieldName, sObjRef);
251
+ } else {
252
+ record.addField(name, value);
253
+ }
254
+ }
255
+
221
256
  });
222
257
  this.records.add(record);
223
258
 
@@ -231,6 +266,10 @@ public class SalesforceOutputPlugin
231
266
  this.action(this.records);
232
267
  logger.info("Number of processed records: {}", this.numOfSuccess + this.numOfError);
233
268
  }
269
+ } catch (ConfigException ex) {
270
+ logger.error("Configuration Error: {}", ex.getMessage());
271
+ } catch (ApiFault ex) {
272
+ logger.error("API Error: {}", ex.getExceptionMessage());
234
273
  } catch (ConnectionException ex) {
235
274
  logger.error("Connection Error: {}", ex.getMessage());
236
275
  } catch (IOException ex) {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-salesforce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Makoto Tajitsu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-22 00:00:00.000000000 Z
11
+ date: 2015-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,7 +58,7 @@ files:
58
58
  - lib/partner.jar
59
59
  - src/main/java/org/embulk/output/SalesforceOutputPlugin.java
60
60
  - src/test/java/org/embulk/output/TestSalesforceOutputPlugin.java
61
- - classpath/embulk-output-salesforce-0.1.1.jar
61
+ - classpath/embulk-output-salesforce-0.1.2.jar
62
62
  - classpath/force-wsc-34.0.jar
63
63
  - classpath/partner.jar
64
64
  - classpath/super-csv-2.3.1.jar