Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MS CRM DateTime字段在日期已存在时抛出错误(c&MVC)_C#_Asp.net Mvc 3_Dynamics Crm - Fatal编程技术网

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

C# MS CRM DateTime字段在日期已存在时抛出错误(c&MVC),c#,asp.net-mvc-3,dynamics-crm,C#,Asp.net Mvc 3,Dynamics Crm,当试图以编程方式更新已存储日期的DateTime字段时,我遇到了一个问题 我得到的错误是: System.InvalidOperationException:生成XML文档时出错。-->System.ArgumentException:不支持类型为“CrmDateTimeProperty”的值。 参数名称:value 这是执行CRM更新的代码: public bool UpdatePromptList(PromptList list) { DynamicEntit

当试图以编程方式更新已存储日期的DateTime字段时,我遇到了一个问题

我得到的错误是:

System.InvalidOperationException:生成XML文档时出错。-->System.ArgumentException:不支持类型为“CrmDateTimeProperty”的值。 参数名称:value

这是执行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的日期时间值的代码:

    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;
似乎发生了错误,因为您正在将属性值设置为CrmDateTimeProperty,而它需要CrmDateTime

改变这个-

if (entity.Properties.Contains(property))
{
    entity.Properties[property] = crmProp;
}
为此—

if (entity.Properties.Contains(property))
{
    entity.Properties[property] = crmDate;
}
这将解决您遇到的问题