尝试以编程方式更新已存储日期的DateTime字段时,我遇到了问题。
我得到的错误是:
System.InvalidOperationException:生成XML文档时出错。 ---> System.ArgumentException:不支持“CrmDateTimeProperty”类型的值。 参数名称:值
这是执行CRM更新的代码:
public bool UpdatePromptList(PromptList list)
{
DynamicEntity c = crmService.RetrieveDynamicEntity("ntup1_promptlist", list.PromptListId);
if (c != null)
{
c.UpdateBoolean("examplebooleanfield", list.booleanField);
c.UpdateDateTime("exampledatefield", list.dateField);
c.UpdateString("examplestringfield", list.stringField);
try
{
crmService.Update(c);
}
catch (SoapException)
{
return false;
}
}
}
以下是验证要传递到CRM的DateTime值的代码:
public static CrmDateTime FromUser(DateTime userTime)
{
return new CrmDateTime(string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0:s}", userTime));
}
public static void UpdateDateTime(this DynamicEntity entity, string property, DateTime? date)
{
if (date == null)
{
if (entity.Properties.Contains(property))
{
entity.Properties.Remove(property);
}
return;
}
CrmDateTime crmDate = FromUser(date.Value);
CrmDateTimeProperty crmProp = new CrmDateTimeProperty(property, crmDate);
if (entity.Properties.Contains(property))
{
entity.Properties[property] = crmProp;
}
else
{
entity.Properties.Add(crmProp);
}
}
对此的任何帮助将不胜感激。
答案 0 :(得分:2)
如果你想更新它为null的日期,你应该改变你的更新方法,如果它是null,则不删除该属性,而是将其清零,否则不会对该属性进行更新 -
CrmDateTime myDateTime = new CrmDateTime();
myDateTime.IsNull = true;
myDateTime.IsNullSpecified = true;
看起来您的错误正在发生,因为您在期望CrmDateTime时将属性值设置为CrmDateTimeProperty。
改变这个 -
if (entity.Properties.Contains(property))
{
entity.Properties[property] = crmProp;
}
到此 -
if (entity.Properties.Contains(property))
{
entity.Properties[property] = crmDate;
}
这应该可以解决您遇到的问题。