【问题标题】:Error with sharepoint client object model共享点客户端对象模型错误
【发布时间】:2013-11-15 02:53:58
【问题描述】:

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

【问题讨论】:

    标签: sharepoint sharepoint-clientobject


    【解决方案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();
    }
    

    【讨论】:

    • 是的,应该也可以。顺便说一句,我正在用 powershell 编写这段代码。
    【解决方案2】:

    我看到了解决办法。

    我可以使用 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(); 
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 2010-12-13
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      相关资源
      最近更新 更多