2011-10-06 62 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

这只是似乎没有为我工作,除非有更多我需要添加? –

相关问题