Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save kaspersorensen/6061171 to your computer and use it in GitHub Desktop.

Select an option

Save kaspersorensen/6061171 to your computer and use it in GitHub Desktop.
From 10b5b77b3643782bcf240375d4ed82ac3b1e2a96 Mon, 22 Jul 2013 12:04:30 +0200
From: kaspers <[email protected]>
Date: Mon, 22 Jul 2013 12:03:37 +0200
Subject: [PATCH] Fixed Salesforce.com UPDATE semantics error when updated ID does not exist.
diff --git a/salesforce/pom.xml b/salesforce/pom.xml
index 1dcd83a..8ebdce8 100644
--- a/salesforce/pom.xml
+++ b/salesforce/pom.xml
@@ -41,7 +41,7 @@
<!-- test -->
<dependency>
<groupId>org.slf4j</groupId>
- <artifactId>slf4j-nop</artifactId>
+ <artifactId>slf4j-log4j12</artifactId>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceUpdateCallback.java b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceUpdateCallback.java
index 281276a..21669d3 100644
--- a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceUpdateCallback.java
+++ b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceUpdateCallback.java
@@ -135,9 +135,26 @@
logger.debug("Succesfully {}ed record with id={}", action, saveResult.getId());
successes++;
} else {
+ final com.sforce.soap.partner.Error[] errorArray = saveResult.getErrors();
+
+ if (!"insert".equals(action)) {
+ boolean onlyMalformedId = true;
+ for (com.sforce.soap.partner.Error error : errorArray) {
+ if (com.sforce.soap.partner.StatusCode.MALFORMED_ID == error.getStatusCode()) {
+ logger.debug("Encountered MALFORMED_ID error for {} action. Ignoring.", action);
+ } else {
+ onlyMalformedId = false;
+ break;
+ }
+ }
+
+ if (onlyMalformedId) {
+ return;
+ }
+ }
+
errors++;
- final com.sforce.soap.partner.Error[] errorArray = saveResult.getErrors();
for (com.sforce.soap.partner.Error error : errorArray) {
if (firstError == null) {
firstError = error;
diff --git a/salesforce/src/test/java/org/apache/metamodel/salesforce/SalesforceDataContextTest.java b/salesforce/src/test/java/org/apache/metamodel/salesforce/SalesforceDataContextTest.java
index edc911f..361174b 100644
--- a/salesforce/src/test/java/org/apache/metamodel/salesforce/SalesforceDataContextTest.java
+++ b/salesforce/src/test/java/org/apache/metamodel/salesforce/SalesforceDataContextTest.java
@@ -244,6 +244,15 @@
assertEquals("Another test value", ds.getRow().getValue(0));
assertFalse(ds.next());
ds.close();
+
+ // UPDATE (a record that does not exist)
+
+ dc.executeUpdate(new UpdateScript() {
+ @Override
+ public void run(UpdateCallback callback) {
+ callback.update(tableName).where("id").eq("fooooooobaaaaaaaar").value("name", "A test value that should never occur").execute();
+ }
+ });
// DELETE
diff --git a/salesforce/src/test/resources/log4j.xml b/salesforce/src/test/resources/log4j.xml
new file mode 100644
index 0000000..d46c4d4
--- /dev/null
+++ b/salesforce/src/test/resources/log4j.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+ <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
+ <param name="Target" value="System.out" />
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%-5p %d{HH:mm:ss} %c{1} - %m%n" />
+ </layout>
+ </appender>
+
+ <logger name="org.apache.metamodel">
+ <level value="info" />
+ </logger>
+
+ <root>
+ <priority value="warn" />
+ <appender-ref ref="consoleAppender" />
+ </root>
+
+</log4j:configuration>
\ No newline at end of file
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment