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

}

4

1 回答 1

0

我把我的答案放在这里,以防人们通过谷歌搜索这个 SO 问题标题中的错误消息找到这个问题。此答案可能会帮助遇到此奇怪错误消息的其他人。

当我使用服务器端代码更新日历事件时,我遇到了同样的错误。

我的代码首先添加了一个新的空列表项。这个新的列表项具有开始日期和结束日期的默认值。几行之后,列表项字段被一一更新(类似于操作码),然后update调用一个列表项。在我的情况下,我的代码没有更新开始日期,并且仍然是默认值。结束日期由我的代码更新,并使结束日期早于开始日期。调用列表项update时,此错误将显示在我的异常日志中。

一旦我纠正了这一点并将开始日期调整为总是在结束日期之前,然后调用update,错误就消失了。

于 2017-03-24T20:25:01.547 回答