2011-10-06 61 views
1

(?強類型)我很新到SharePoint,使用2010年想看看,我們可以用它做,特別是與列表。我有一種感覺,我失去了一些東西很明顯,但無法找到它.....獲取一個ListItem的字段名 - 在SharePoint 2010客戶端API

在SharePoint網站,我創建了一個名爲名人名單:添加了幾個人,弗蘭克·西納特拉等。

  • 姓:西納特拉
  • 名字:弗蘭克
  • 電子郵件地址:[email protected]
  • 職位名稱:歌手

於是我一直在試圖獲得這些信息到一個簡單的C#控制檯應用程序,參考並試圖很多例子我已經找到。 但是我在周圍搞清楚實際的fieldNames(?)是什麼,我需要參考,因爲它看起來沒有強類型。而且採用的「E-mail地址」喜歡似乎並沒有工作,要麼

這裏有一個例子,我一直在努力。 (來源:How to: Retrieve List Items

  string siteUrl = "http://servername/site/"; 
     var clientCtx = new ClientContext(siteUrl); 
     Microsoft.SharePoint.Client.List oList = clientCtx.Web.Lists.GetByTitle("Famous People"); 

     var camlQuery = new CamlQuery {ViewXml = "<View><RowLimit>100</RowLimit></View>"}; 

     ListItemCollection collListItem = oList.GetItems(camlQuery); 

     clientCtx.Load(collListItem, 
      items => items.Include(
       item => item.Id, 
       item => item.DisplayName, 
       item => item.HasUniqueRoleAssignments)); 

     clientCtx.ExecuteQuery(); 

     foreach (ListItem oListItem in collListItem) 
     { 
      Console.WriteLine("ID: {0} \nDisplay name: {1} \nUnique role assignments: {2}", 
       oListItem.Id, oListItem.DisplayName, oListItem.HasUniqueRoleAssignments); 
     } 

     Console.ReadLine(); 
     clientCtx.Dispose(); 

這使回:

ID: 1 
Display name: Clough 
Unique role assignments: False 
ID: 2 
Display name: Sinatra 
Unique role assignments: False 
ID: 3 
Display name: Simpson 
Unique role assignments: False 
ID: 4 
Display name: Skywalker 
Unique role assignments: False 

我試圖每個的上實施例中的方法鏈接我的上方。但從那裏我不知道如何去其他屬性,如「工作」,或「電子郵件地址」。
或者例如,如果我正在處理一個我不知道的List,我如何通過Web服務從我的應用程序中找到有效的字段名稱?

謝謝。

+1

獲取SharePointManager複印件(spm.codeplex.com) – Nat

回答

1

要注意的問題是,每個SPListItem具有依賴於底層的內容類型不同的一組字段的。 這也會根據項目所在的列表進行修改。 所以這就是爲什麼沒有強類型索引的原因......

然而,加入以下代碼應能幫助您獲得的是各列表項

foreach(SPField field in oListItem.Fields) 
{ 
    Console.Write(field.Title + " (" + field.InternalName + "): "); 
    Console.WriteLine(oListItem[field.Id].ToString()); 
} 

酒店SPField.SchemaXml顯示了每個字段的配置的全部細節裏的感覺。 擁有SharePointManager的副本可以讓您很好地瞭解特定網站是如何掛在一起的。

如果您只能使用客戶端對象模型,發現這個

foreach(string fieldName in oListItem.FieldValues.Keys) 
{ 
    Console.Write(fieldName); 
    Console.WriteLine(oListItem.FieldValues[fieldName]); 
} 
+0

oListItem似乎並沒有給我一個oListItem.Fields。不是SP的東西;例如。 SPFields;在服務器上工作,而不是客戶端/ API? –

+0

對不起,爲此您需要迭代filedvalues.keys – Nat

+0

這更好,謝謝。 –

0

如果你到你的列表設置,您可以通過點擊它找到列名。這會將您發送到以下鏈接:http://servername/_layouts/FldEdit.aspx?List=%7BEACD90E2%2DED64%2D42EE%2DB1FB%2D2631687C545F%7D&Field=Title
該字段的名稱是Field = Title的RHS。 既然你知道列名,你可以使用下面的代碼:

cxt.Load(items, 
    c => c.Include(
     item => item["ID"], 
     item => item["Title"], 
     item => item["AssignedTo"], 
     item => item["Status"])); 
    cxt.ExecuteQuery(); 
+0

你是對的,看着那些網址確實給我的字段名,但不是動態的。它感覺非常骯髒;我之後是從API /客戶端對象模型返回代碼中的字段名稱。 –

0

您可以在ListItem通過indexed property訪問的其他屬性。

您必須將屬性ViewFields添加到ViewXml

var camlQuery = new CamlQuery 
{ 
    ViewXml = "<View><ViewFields><FieldRef Name='Last_x0020_Name'/></ViewFields><RowLimit>100</RowLimit></View>" 
}; 

注意_x0020_編碼空間。

+0

這只是似乎沒有爲我工作,除非有更多我需要添加? –

相關問題