简体   繁体   中英

Invalid data has been used to update the list item. The field you are trying to update may be read only

I am getting this error while updating discussion item's any property on SharePoint online. Error doesn't occur in case of document library and custom lists. Error Code is -2147024809 my code goes like this.

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

}

I am putting my answer here in case people find this question by googling the error message that in the title of this SO question. This answer might help others who come across this strange error message.

I had the same error when I was updating a calendar event with server side code.

My code first added a new empty list item. This new list item had default values for the start date and end date. A few lines later, the list item fields are updated one by one (similar to the op code) and then a list item update is called. In my case, the start date was not being updated by my code and remained the default value. The end date got updated by my code and made the end date earlier in time than the start date. When the list item update was called, this error would be displayed in my exception logs.

Once I corrected this and adjusted the start date to always fall before the end date and then call update , the error went away.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM