Sharepoint客户端对象模型属性或字段尚未初始化

本文关键字:初始化 字段 客户端 对象模型 属性 Sharepoint | 更新日期: 2023-09-27 18:14:50

我有一个使用Sharepoint客户端对象模型管理Sharepoint列表的c#程序。偶尔我们会遇到服务器问题,这将阻止程序访问sharepoint服务器。我正在使用一个助手类来运行ExecuteQuery方法,并有异常处理继续执行,直到没有异常。

       private void ExecuteContextQuery(ref ClientContext siteContext)
    {
        int timeOut = 10000;
        int numberOfConnectionErrors = 0;
        int maxNumberOfRetry = 60;
            while (numberOfConnectionErrors < maxNumberOfRetry)
            {
                try
                {
                    siteContext.ExecuteQuery();
                    break;
                }
                catch (Exception Ex)
                {
                    numberOfConnectionErrors++;
                    Service.applicationLog.WriteLine("Unable to connect to the sharepoint site. Retrying in " + timeOut);
                    Service.applicationLog.WriteLine("Exception " + Ex.Message + " " + Ex.StackTrace);
                    System.Threading.Thread.Sleep(timeOut);
                    if (numberOfConnectionErrors == maxNumberOfRetry)
                    {
                        throw Ex;
                    }
                }
         }
    }

但是我得到一个错误消息

属性或字段"LoginName"尚未初始化。

集合尚未初始化。它没有被请求或者请求没有被执行。它可能需要显式请求。

错误消息似乎与我调用Load方法的方法有关。下面是我的代码的一个例子,它调用了上面的方法。

                List sharepointList = siteContext.Web.Lists.GetByTitle(this._listName);
            CamlQuery query = CamlQuery.CreateAllItemsQuery();
            items = sharepointList.GetItems(query);
            siteContext.Load(items);
            //siteContext.ExecuteQuery();
            ExecuteContextQuery(ref siteContext);

我是否需要在每次调用ExecuteQuery时重新加载站点上下文?这就是为什么我看到上面的错误信息吗?

这是我用来获取生成错误的登录ID的函数

    public String getLoginIDbyUserId(int userID)
    {
        ClientContext siteContext = getClientContextObject();
        User _getUser = siteContext.Web.SiteUsers.GetById(userID);
        siteContext.Load(_getUser);
        //siteContext.ExecuteQuery();
        ExecuteContextQuery(ref siteContext);
        String loginID = String.Empty;
        String formatedLoginID = String.Empty;
        loginID = _getUser.LoginName;
        if (loginID.Contains('|'))
        {
            formatedLoginID = loginID.Substring(loginID.IndexOf('|') + 1);
        }
        siteContext.Dispose();
        return formatedLoginID;
    }

Sharepoint客户端对象模型属性或字段尚未初始化

请尝试在加载用户对象时加载LoginName属性。在excutequery方法之后,尝试使用UserLoginName属性

siteContext.Load(_getUser, u => u.LoginName);

修改后你的代码应该是这样的

public String getLoginIDbyUserId(int userID)
    {
        ClientContext siteContext = getClientContextObject();
        User _getUser = siteContext.Web.SiteUsers.GetById(userID);
        siteContext.Load(_getUser, u => u.LoginName);
        //siteContext.ExecuteQuery();
        ExecuteContextQuery(ref siteContext);
        String loginID = String.Empty;
        String formatedLoginID = String.Empty;
        loginID = _getUser.LoginName;
        if (loginID.Contains('|'))
        {
            formatedLoginID = loginID.Substring(loginID.IndexOf('|') + 1);
        }
        siteContext.Dispose();
        return formatedLoginID;
    }