Last active
October 13, 2015 19:58
-
-
Save jefftrull/4247933 to your computer and use it in GitHub Desktop.
Reproducing Date serialization issue - VF page
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<apex:page controller="DateIssueRepro"> | |
<!-- Simple VF page to demonstrate issue with setting Date fields of SObjects via Remoting --> | |
<!-- This is case 08471144 --> | |
<!-- Author: Jeff Trull <jetrull@sbcglobal.net> 2012-12-09 --> | |
<apex:form > | |
<table> | |
<tr> | |
<th>Date source</th> | |
<th>New value</th> | |
</tr> | |
<tr> | |
<td><apex:outputLabel value="SObject field" for="sobjdate"/></td> | |
<td><apex:inputText id="sobjnewvalue"/></td> | |
<td><input type="button" value="Submit" | |
onclick="setDate('{!$Component.sobjnewvalue}','{!$Component.sermethod}')"/> </td> | |
</tr> | |
<tr> | |
<td><apex:outputLabel value="Date" for="regulardate"/></td> | |
<td><apex:inputText id="regularnewvalue"/></td> | |
<td><input type="button" value="Submit" | |
onclick="setDate('{!$Component.regularnewvalue}','{!$Component.sermethod}')"/></td> | |
</tr> | |
</table> | |
<apex:outputLabel value="Serialization Method:" for="sermethod" style="font-weight: bold"/> | |
<apex:selectRadio id="sermethod" value="{!selectedSer}"> | |
<apex:selectOption itemValue="none" itemLabel="None"/> | |
<apex:selectOption itemValue="epoch" itemLabel="Seconds since Epoch"/> | |
<apex:selectOption itemValue="date" itemLabel="Javascript Date"/> | |
<apex:selectOption itemValue="utc" itemLabel="UTC String"/> | |
</apex:selectRadio> | |
</apex:form> | |
<script> | |
function setDate(inputid, methodid) { | |
var datestr = document.getElementById(inputid).value; | |
// find desired method from radio buttons | |
var methodels = document.getElementsByName(methodid); | |
var method; | |
for (var i = 0; i < methodels.length; i++) { | |
if (methodels[i].checked) { | |
method = methodels[i].value; | |
} | |
} | |
console.log('using method "' + method + '" to process "' + datestr + '"'); | |
var serializedDate; | |
if (method == 'none') { | |
// just send it directly | |
serializedDate = datestr; | |
} else if (method == 'epoch') { | |
serializedDate = new Date(datestr).getTime(); // works for Date field inside sObject (as of Spring 13) | |
} else if (method == 'date') { | |
serializedDate = new Date(datestr); | |
} else if (method == 'utc') { | |
serializedDate = new Date(datestr).toUTCString(); // works for plain Date values | |
} else { | |
console.log('unknown serialization method:', method); | |
return; | |
} | |
console.log('serialized data is:', serializedDate); | |
// launch to appropriate remote method | |
if (endsWith(inputid, 'regularnewvalue')) { | |
DateIssueRepro.updateDate(serializedDate, | |
function(response, e) { | |
if (!e.status) { | |
console.log('call failed with status', e.message); | |
} else { | |
console.log('call succeeded'); | |
}}); | |
} | |
if (endsWith(inputid, 'sobjnewvalue')) { | |
DateIssueRepro.updateContact({Birthdate: serializedDate}, | |
function(response, e) { | |
if (!e.status) { | |
console.log('call failed with status', e.message); | |
} else { | |
console.log('call succeeded'); | |
}}); | |
} | |
} | |
// utility function. Thanks, Stack Overflow: | |
function endsWith(str, suffix) { | |
return str.indexOf(suffix, str.length - suffix.length) !== -1; | |
} | |
</script> | |
</apex:page> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment