在SharePoint 2010客户端API中获取listItem的字段名称 - (强类型?)

时间:2011-10-06 13:33:08

标签: c# sharepoint sharepoint-2010 caml sharepoint-api

我对SharePoint很新,使用2010.试着看看我们可以用它来做什么,尤其是列表。我有一种感觉,我错过了一些非常明显的东西,但找不到它......

在Sharepoint网站上,我创建了一个名为Famous People的列表:添加了一些人,Frank Sinatra等。

  • 姓氏:Sinatra
  • 名字:Frank
  • 电子邮件地址:frank.sinatra@ratpack.com
  • 职位名称:歌手

那么我一直在尝试将这些信息放到一个简单的C#控制台应用程序中,引用并尝试我发现的许多示例。 但是我一直在努力弄清楚我需要引用的实际fieldNames(?)是什么,因为它看起来并不是强类型的。但是,使用“电子邮件地址”之类似乎也不起作用

这是我一直在尝试的一个例子。 (来自: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服务从我的应用程序中找到有效的字段名称?

感谢。

3 个答案:

答案 0 :(得分:2)

需要注意的是,每个SPListItem都有一组不同的字段,具体取决于底层内容类型。 这也会根据项目所在的列表进行修改。 所以这就是为什么字段中没有强类型索引...

但是,添加以下代码可以帮助您了解每个listitem中的内容

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

答案 1 :(得分: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();

答案 2 :(得分:0)

您可以通过indexed property上的ListItem访问其他媒体资源。

您必须将属性ViewFields添加到ViewXml

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

请注意空格的_x0020_编码。