MS CRM DateTime字段在日期已存在时抛出错误(c#& MVC)

时间:2011-05-26 13:40:04

标签: c# asp.net-mvc-3 dynamics-crm

尝试以编程方式更新已存储日期的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); 
        }
   }

对此的任何帮助将不胜感激。

1 个答案:

答案 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;
}

这应该可以解决您遇到的问题。