sharepoint客户端对象模型出错

时间:2013-11-15 02:53:58

标签: sharepoint client-object-model

运行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(); 
                    }
                }   
            }
        }

2 个答案:

答案 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(); 
    }