我目前正在编写一个使用 Salesforce API 的 C# .Net 应用程序。我正在发送带有日期时间字段的帐户对象。
我的日期时间对象均采用这种格式
dd/MM/yyyy HH:mm:ss
,这也与我执行简单查询时返回的日期字段的格式相同SELECT Name, Date FROM Account WHERE ID != null
- 我之前已在 Salesforce 中的测试帐户中手动设置了一个日期查询。我已经检查了与日期格式有关的所有内容,并且确信我正在向 Salesforce 发送正确的数据类型和日期时间格式。
我的问题是 Salesforce 似乎将日期字段留空。任何人都知道我可以确保 Salesforce 接受日期详细信息的方法。
DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
dtfi.FullDateTimePattern = "dd/MM/yyyy HH:mm:ss";
dtfi.DateSeparator = "/";
string _TempRangeEndDate = "2013-08-31"
DateTime objDateRangeEnd = Convert.ToDateTime(_TempRangeEndDate,dtfi);
_TempAccount.Date_End__c = objDateRangeStart; //Salesforce not accepting converted format which is "31/08/2013 00:00:00"
.NET SOAP 堆栈不会发送日期时间(以及其他一些基本类型,如数字),除非您设置额外的指定标志,例如
_TempAccount.Date_End__c = DateTime.Now;
_TempAccount.Date_End__c_Specified = True;
如果您不设置此标志,.NET Soap 堆栈不会序列化该元素,并且它永远不会发送到 salesforce。 (因此该字段保持空白)
我的日期时间对象都是这种格式“dd/MM/yyyy HH:mm:ss”
不,他们不是。至少如果您谈论的是 .NET
DateTime
值或数据库字段,则不是。这些都没有隐式的格式 - 它们只是值。
当你不需要时,你应该避免使用文本。因此,当您向 SQL 发送查询时,应该使用参数化 SQL,并将 DateTime
值作为参数...根本不需要字符串转换。您说 Salesforce“不接受转换后的格式,即“31/08/2013 00:00:00”” - 但您只是分配一个
DateTime
值。它没有有转换后的格式。我认为您需要仔细查看整个数据流,并尽量减少字符串转换。如果可能,请坚持仅使用
DateTime
。然后非常仔细地检查 Salesforce 中的任何错误。问题很可能不是你想象的那样。 (很难说,因为您没有告诉我们 Salesforce 给您带来了什么样的错误。)