Поле MS CRM DateTime выдает ошибку, когда дата уже присутствует (c # & MVC) - PullRequest
1 голос
/ 26 мая 2011

У меня проблема при попытке программно обновить поле 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); 
        }
   }

Любая помощь по этому вопросу будет принята с благодарностью.

1 Ответ

2 голосов
/ 27 мая 2011

Если вы хотите обновить дату, когда она равна нулю, вы должны изменить свой метод обновления, чтобы не отбрасывать свойство, если оно равно нулю, а вместо этого обнулять его, иначе обновление для этого атрибута не произойдет -

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

, и это должно решить проблему, с которой вы столкнулись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...