问题描述
|
尝试以编程方式更新已存储日期的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;
}
}
}
这是验证DateTime值以传递到CRM的代码:
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);
}
}
任何帮助,将不胜感激。
解决方法
如果您想在日期为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;
}
那应该可以解决您遇到的问题。