簡體   English   中英

已使用無效數據更新列表項。 您嘗試更新的字段可能是只讀的

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

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

}

我在這里給出答案,萬一人們通過谷歌搜索這個SO問題標題中的錯誤信息來找到這個問題。 這個答案可能會幫助其他人遇到這個奇怪的錯誤信息。

當我使用服務器端代碼更新日歷事件時,我遇到了同樣的錯誤。

我的代碼首先添加了一個新的空列表項。 此新列表項具有開始日期和結束日期的默認值。 幾行后,列表項字段逐個更新(類似於操作碼),然后調用列表項update 在我的情況下,我的代碼沒有更新開始日期並保持默認值。 結束日期由我的代碼更新,並使結束日期早於開始日期。 調用列表項update時,此錯誤將顯示在我的例外日志中。

一旦我更正了這一點,並將開始日期調整為始終在結束日期之前,然后調用update ,則錯誤消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM