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



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

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

  • 姓氏:Sinatra
  • 名字:Frank
  • email地址:frank.sinatra@ratpack.com
  • 职位:歌手

所以,我一直试图得到这些信息到一个简单的c#控制台应用程序,参考和尝试许多例子,我发现。但是我在计算我需要引用的实际fieldNames(?)是什么时遇到了困难,因为它似乎不是强类型的。但是,使用"电子邮件地址"之类的字符似乎也不起作用

这是我一直在尝试的一个例子。(选自:如何:检索列表项)

            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

我已经尝试了上面提供的示例链接中的每种方法。但从那里我不知道如何获得其他属性,如"工作",或"电子邮件地址"。
或者,如果我正在处理一个我不知道的列表,我如何通过web服务从我的应用程序中找到有效的字段名称?

谢谢。

需要注意的是,每个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]);
}

您可以通过ListItem上的索引属性访问其他属性。

您必须将属性作为ViewFields添加到ViewXml:

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

注意空格的_x0020_编码

如果您转到您的列表设置,您可以通过单击它找到列名。这会将您发送到一个链接,如: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();

最新更新