Skip to content

Commit eb01c25

Browse files
committed
Merge pull request #3 from tzmfreedom/change-type-value
change referenced sobject type and change version
2 parents 6a55716 + ea70471 commit eb01c25

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ configurations {
1212
provided
1313
}
1414

15-
version = "0.1.1"
15+
version = "0.1.2"
1616

1717
dependencies {
1818
compile "org.embulk:embulk-core:0.6.11"

src/main/java/org/embulk/output/SalesforceOutputPlugin.java

+23-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import com.google.common.base.Optional;
44
import com.sforce.soap.partner.Connector;
55
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;
69
import com.sforce.soap.partner.GetUserInfoResult;
710
import com.sforce.soap.partner.PartnerConnection;
811
import com.sforce.soap.partner.SaveResult;
@@ -18,11 +21,14 @@
1821
import java.util.ArrayList;
1922
import java.util.Calendar;
2023
import java.util.Date;
24+
import java.util.HashMap;
2125
import java.util.List;
26+
import java.util.Map;
2227
import org.embulk.config.CommitReport;
2328
import org.embulk.config.Config;
2429
import org.embulk.config.ConfigDefault;
2530
import org.embulk.config.ConfigDiff;
31+
import org.embulk.config.ConfigException;
2632
import org.embulk.config.ConfigSource;
2733
import org.embulk.config.Task;
2834
import org.embulk.config.TaskSource;
@@ -46,7 +52,8 @@ public class SalesforceOutputPlugin
4652
{
4753
protected static Logger logger;
4854
private static PartnerConnection client = null;
49-
55+
private static Map<String, String> externalIdToObjectNameMap = null;
56+
5057
public interface PluginTask
5158
extends Task
5259
{
@@ -113,6 +120,13 @@ public ConfigDiff transaction(ConfigSource config,
113120
client = Connector.newConnection(connectorConfig);
114121
GetUserInfoResult userInfo = client.getUserInfo();
115122
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+
}
116130
}
117131
} catch(ConnectionException ex) {
118132
logger.error("Login error. Please check your credentials.");
@@ -226,7 +240,12 @@ private void columnWithReferenceCheck(String name, Object value) {
226240
String externalIdFieldName = tokens[1];
227241

228242
SObject sObjRef = new SObject();
229-
sObjRef.setType(referencesFieldName.replaceAll("__(r|R)", "__c"));
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+
}
230249
sObjRef.addField(externalIdFieldName, value);
231250
record.addField(referencesFieldName, sObjRef);
232251
} else {
@@ -247,6 +266,8 @@ private void columnWithReferenceCheck(String name, Object value) {
247266
this.action(this.records);
248267
logger.info("Number of processed records: {}", this.numOfSuccess + this.numOfError);
249268
}
269+
} catch (ConfigException ex) {
270+
logger.error("Configuration Error: {}", ex.getMessage());
250271
} catch (ApiFault ex) {
251272
logger.error("API Error: {}", ex.getExceptionMessage());
252273
} catch (ConnectionException ex) {

0 commit comments

Comments
 (0)