2013-11-15 201 views
0

運行SharePoint ClientObject模型時出現以下錯誤。我檢查了我的代碼,並檢查是否錯過了要加載的東西,但沒有看到。Sharepoint客戶端對象模型出錯

「進程終止:該屬性或字段尚未初始化,尚未請求它或請求尚未執行,可能需要明確請求。」

我不知道我搜索了幾個小時後失去了什麼。

下面是我的代碼。希望任何人都可以幫忙。

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

回答

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(); 
} 
+0

是的,這應該也可以。順便說一下,我正在使用PowerShell編寫此代碼。 – Sawlah

0

我看到一個修復程序。

而不是使用Item.DisplayName,我可以使用File對象。當我使用File並通過像其他屬性一樣通過加載(File)來實例化它時,它可以工作。

clientOM.File file = Item.File; 
    Ctx.Load(file); 
    Ctx.ExecuteQuery(); 

    if(file.Name == Packagename) 
    { 
    Item[PackageStatus] = DeploymentSucceeded; 
    Item.Update(); 
    Ctx.ExecuteQuery(); 
    } 
相關問題