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;
}
请尝试在加载用户对象时加载LoginName属性。在excutequery方法之后,尝试使用User的LoginName属性
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;
}