当日期已经存在时,MS CRM DateTime字段将引发错误c#和MVC

问题描述

| 尝试以编程方式更新已存储日期的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;
}
那应该可以解决您遇到的问题。