令我惊讶的是,这不是一件好事;将日期保存到 Salesforce 。
我正在尝试更新一个类型日期的字段,但它会引发一些奇怪的错误。
代码:
var objSer = new JavaScriptSerializer();
string json = objSer .Serialize(new{
startdate = sfdcValue
});
MyUpdateMethod("objectName/" + id, json);
我尝试将日期转换为IS0 8601标准(如SO所示)
1。)DateTime.UtcNow.ToString(“s”,System.Globalization.CultureInfo.InvariantCulture)
2。)DateTime.UtcNow.ToString(“o”)
错误信息:
{“message”:“无法从VALUE_STRING反序列化double的实例 值2017-05-26T10:31:40.5790708Z或请求可能遗漏a [line:1,column:2]中的必填字段“,”errorCode“:”JSON_PARSER_ERROR“}
答案 0 :(得分:1)
您没有详细说明您使用哪种方法在服务器和客户端之间进行通信。我正在使用Javascript Remoting(apex方法上的@RemoteAction),我遇到了这个问题。对我来说,Salesforce期望日期和日期时间字段为日期序列(如果使用不同的访问方法,您的里程可能会有所不同)。
鉴于我正在处理一个动态的字段列表,我最终在客户端上创建了一对marshall / unmarshall函数,这些函数在将数据发送回Salesforce之前创建了我删除的仅客户端从属字段(注意:下面的示例是javascript而不是c#)。在您的情况下,马歇尔/解放者可能采取不同的方法:
// Provide an client-only date field based on a date serial (SFDC input)
function createDateDerivedField(currentRecord, fieldName) {
Object.defineProperty(currentRecord, fieldName + '__ui', {
enumerable: true,
get: function () {
return currentRecord[fieldName] == null ? null : new Date(currentRecord[fieldName]);
},
set: function(newValue) {
// Update the original field
currentRecord[fieldName] = newValue == null ? null : (new Date(newValue)).getTime(); // Convert back to date serial
}
});
}