2016-09-28 3 views
1

Je reçois cette erreur lors de la mise à jour des propriétés de l'élément de discussion sur SharePoint en ligne. L'erreur ne se produit pas dans le cas d'une bibliothèque de documents et de listes personnalisées. Le code d'erreur est -2147024809 mon code va comme ceci.Des données invalides ont été utilisées pour mettre à jour l'élément de liste. Le champ que vous essayez de mettre à jour est peut-être en lecture seule.

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

}

Répondre

0

Je mettais ma réponse ici dans les cas de trouver cette question par googler le message d'erreur dans le titre de cette question SO. Cette réponse pourrait aider d'autres personnes qui rencontrent ce message d'erreur étrange.

J'ai eu la même erreur lors de la mise à jour d'un événement de calendrier avec le code côté serveur.

Mon code a d'abord ajouté un nouvel élément de liste vide. Ce nouvel élément de liste avait des valeurs par défaut pour la date de début et la date de fin. Quelques lignes plus tard, les champs de l'élément de liste sont mis à jour un par un (similaire au code op), puis un élément de liste update est appelé. Dans mon cas, la date de début n'était pas mise à jour par mon code et restait la valeur par défaut. La date de fin a été mise à jour par mon code et a fait la date de fin plus tôt que la date de début. Lorsque l'élément de liste update a été appelé, cette erreur s'affichait dans mes journaux d'exception.

Une fois que j'ai corrigé cela et ajusté la date de début de tomber toujours avant la date de fin, puis appelez update, l'erreur est partie.