2016-09-28 9 views
1

Я получаю эту ошибку при обновлении любого свойства элемента обсуждения в SharePoint в Интернете. Ошибка не возникает в случае библиотеки документов и пользовательских списков. Код ошибки -2147024809, мой код выглядит следующим образом.Недействительные данные были использованы для обновления элемента списка. Поле, которое вы пытаетесь обновить, может быть прочитано только

public static SBUpdatePropsResponse UpdateProps(string siteCollectionUrl,string webUrl ,SBUpdatePropsRequest updateRequest) 
{ 
    var updateResponse = new SBUpdatePropsResponse(); 
    var clientContext = Admin.GetAuthenticatedClientContext(webUrl); 
    var web = clientContext.Web; 
    var oList = clientContext.Web.Lists.GetById(updateRequest.ListID); 

    var itemProps = updateRequest.ItemProperties; 
    var itemUserProps = updateRequest.UserTypeProperties; 
    var itemDateTimeProps = updateRequest.DateTimeItemProperties; 

    ListItem listItem = oList.GetItemById(updateRequest.DocID); 
    clientContext.Load(web); 
    clientContext.Load(listItem); 
    clientContext.ExecuteQuery();     
    try 
    { 
     //Need to create a extra dictionary to save server time against property     
     var itemDateTimePropsLocal = new Dictionary<string, string>(); 
     foreach (var prop in itemDateTimeProps) 
     { 
      var dateTimeLocal = new DateTime(prop.Value, DateTimeKind.Utc); 
      var temp = web.RegionalSettings.TimeZone.UTCToLocalTime(dateTimeLocal); 
      clientContext.ExecuteQuery(); 
      itemDateTimePropsLocal.Add(prop.Key, temp.Value.ToString()); 
     } 

     foreach (var userProp in itemUserProps) 
     { 
      if (userProp.Value != null && !string.IsNullOrEmpty(userProp.Value.ToString())) 
      { 
       var uservalues = userProp.Value as int[]; 
       //Handle for multi user property 
       if (uservalues.Length > 1) 
       { 
        var propValues = new List<FieldUserValue>(); 
        foreach (var values in uservalues) 
        { 
         if (values > 0) 
          propValues.Add(new FieldUserValue { LookupId = values }); 
        } 
        listItem[userProp.Key] = propValues.ToArray(); 
       } 
       else 
        listItem[userProp.Key] = (new FieldUserValue { LookupId = uservalues[0] }); 
      } 
     }    

     foreach (var prop in itemProps) 
     { 
      if (prop.Key.Equals("ContentType")) 
       continue; 
      if (prop.Value != null && !string.IsNullOrEmpty(prop.Value.ToString()) && prop.Value.GetType() != typeof(FieldUrlValue)) 
       listItem.ParseAndSetFieldValue(prop.Key, prop.Value.ToString()); 
     } 

     foreach (var prop in itemDateTimePropsLocal) 
     { 
      listItem[prop.Key] = prop.Value; 
     } 
     listItem.Update(); 
     clientContext.ExecuteQuery(); 
     updateResponse.IsSuccess = true; 
    } 
    catch(Exception ex) 
    { 
     Logging.LogWriteLine("Failed to update list item properties", ex); 
     updateResponse.IsSuccess = false; 
    } 

}

ответ

0

Я кладу мой ответ здесь в случае, если люди находят этот вопрос прибегая к помощи сообщение об ошибке, что в названии этого SO вопроса. Этот ответ может помочь другим, кто сталкивается с этим странным сообщением об ошибке.

У меня была такая же ошибка, когда я обновлял событие календаря с кодом на стороне сервера.

В мой код сначала добавлен новый элемент с пустым списком. Этот новый элемент списка имел значения по умолчанию для даты начала и окончания. Несколько строк позже, поля списка элементов обновляются один за другим (аналогично операционному коду), а затем вызывается элемент списка update. В моем случае дата начала не обновлялась моим кодом и оставалась значением по умолчанию. Дата окончания была обновлена ​​моим кодом и дала дату окончания раньше времени, чем дата начала. Когда был вызван элемент списка update, эта ошибка будет отображаться в моих журналах исключений.

Как только я исправил это и скорректировал дату начала, чтобы всегда падать до даты окончания, а затем позвонить update, ошибка исчезла.