0

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

2 回答 2

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();
}
于 2013-11-15T06:51:19.680 回答
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(); 
    }
于 2013-11-15T18:09:06.933 回答