运行SharePoint ClientObject模型时出现以下错误。我查看了我的代码并检查了我是否错过了任何要加载的东西,但没有看到。
“进程被终止:属性或字段尚未初始化。尚未请求或请求尚未执行。可能需要明确请求。”
在搜索了几个小时之后,我不确定我错过了什么。
以下是我的代码。希望任何人都能提供帮助。
public static void UpdatePackageStatus(string Teamsite, string Libname, string Packagename, string User, string Password, string Domain, string PackageStatus, string DeploymentSucceeded, string query)
{
using(clientOM.ClientContext Ctx = new clientOM.ClientContext(Teamsite))
{
Ctx.Credentials = new System.Net.NetworkCredential(User, Password, Domain);
clientOM.Web Web = Ctx.Web;
Ctx.Load(Web);
Ctx.ExecuteQuery();
clientOM.List list = Web.Lists.GetByTitle(Libname);
Ctx.Load(list);
Ctx.ExecuteQuery();
clientOM.CamlQuery CamlQuery = new clientOM.CamlQuery();
CamlQuery.ViewXml = query;
clientOM.ListItemCollection Items = list.GetItems(CamlQuery);
Ctx.Load(Items);
Ctx.ExecuteQuery();
if(Items.Count > 0)
{
clientOM.ListItem Item = Items.GetById(Items[0].Id);;
Ctx.Load(Item);
Ctx.ExecuteQuery();
if(Item.DisplayName == Packagename)
{
Item[PackageStatus] = DeploymentSucceeded;
Item.Update();
Ctx.ExecuteQuery();
}
}
}
}
答案 0 :(得分:1)
应手动指定DisplayName,Id和PackageStatus等所有已使用的字段。您可以使用CAML查询并编写如下内容:
string queryText = @"<View>
<Query>
<Where>
<Eq>
<FieldRef Name='{0}'/>
<Value Type='Text'>{1}</Value>
</Eq>
</Where>
</Query>
</View>";
CamlQuery query = new CamlQuery();
query.ViewXml = string.Format(queryText, 'DisplayName', Packagename); //FieldRef = internal field name
ListItemCollection listItems = list.GetItems(query);
Ctx.Load(listItems, items => items.Include(item => item[PackageStatus]);
Ctx.ExecuteQuery();
if (listItems.Count > 0)
{
listItems[0][PackageStatus] = DeploymentSucceeded;
Item.Update();
Ctx.ExecuteQuery();
}
答案 1 :(得分:0)
我看到了修复。
我可以使用File对象,而不是使用Item.DisplayName。当我使用File并通过load(File)像其他属性实例化它时,它可以工作。
clientOM.File file = Item.File;
Ctx.Load(file);
Ctx.ExecuteQuery();
if(file.Name == Packagename)
{
Item[PackageStatus] = DeploymentSucceeded;
Item.Update();
Ctx.ExecuteQuery();
}