我是Sharepoint客户端对象模型的新手,我很难从特定List
获取所有项目及其列数据。我认为这让我感到困惑,因为它实际上是Folder
设置为List
,然后由View
过滤!
设置如下:
列表:托管抵押品
查看:提案抵押品
文件夹:提案抵押品
文件夹相对网址:/ sites / collateral / maaged Collateral / Proposal Collateral
看起来像这样:
我可以使用Lists.GetByTitle("title");
和GetFolderByServerRelativeUrl("path");
等方法分别获取List
和Folder
个对象。我从这些中得到了正确的Count
,所以我认为它们是正确的。
我已尝试迭代这些但我似乎只能访问file.Name
和file.TimeLastModified
之类的静态属性,但我的列表显示了Content_x0020_Type
和Proposal_x0020_Type
等列。
我尝试了file["Content_x0020_Type"]
之类的东西,但这对我来说也不起作用。
如何获取文件夹,然后遍历每个项目并从关联的列表/视图中的列中获取数据?
如果需要,我可以发布我的代码,但我觉得这只会让事情变得混乱。
谢谢!
答案 0 :(得分:1)
你知道,当你有两天的问题时,你已经阅读了无数的文档和论坛帖子,最后在某个地方发布了一个问题,只是为了在不久之后解决问题吗?是的,那个。
无论如何,我认为我有能力以最有效的方式获取我想要的数据。我会在这里发布,而不是删除我的问题以防其他人帮助。
如果有人有任何改进或建议,我可能会更改已接受的答案。
// Fields
private static string _siteUrl;
private static string _userName;
private static string _passWord;
private static string _domain;
private static DataTable dataTable;
private ClientContext _clientContext;
private Web _spWebsite;
// We'll store the data in a table for ease
dataTable = new DataTable();
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Path", typeof(string));
dataTable.Columns.Add("Proposal Grouping", typeof(string));
dataTable.Columns.Add("Modified", typeof(DateTime));
_clientContext = new ClientContext(_siteUrl);
_clientContext.Credentials = new NetworkCredential(_userName, _passWord, _domain);
_spWebsite = _clientContext.Web;
List list = _spWebsite.Lists.GetByTitle(@"Managed Collateral");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = @"<View><Query></Query></View>";
camlQuery.FolderServerRelativeUrl = @"/sites/collateral/Managed Collateral/Proposal Collateral";
ListItemCollection listItems = list.GetItems(camlQuery);
_clientContext.Load(listItems, items => items.Include(
item => item.File.Name,
item => item.File.ServerRelativeUrl,
item => item["Proposal_x0020_Navigation_x0020_Grouping"],
item => item["Modified"]));
_clientContext.ExecuteQuery();
if (listItems != null)
{
foreach (ListItem item in listItems)
{
DataRow dr = dataTable.NewRow();
dr["Name"] = item.File.Name;
dr["Path"] = item.File.ServerRelativeUrl;
dr["Proposal Grouping"] = item["Proposal_x0020_Navigation_x0020_Grouping"];
dr["Modified"] = item["Modified"];
dataTable.Rows.Add(dr);
}
}
dataGridView.DataSource = dataTable;
答案 1 :(得分:1)
有几种方法可以完成您在问题中描述的内容。
由于您已设法获得对SPFolder
对象的引用,因此请继续并从那里开始。
您已使用Files
对象的SPFolder
属性来获取对SPFileCollection
的引用。在迭代此集合时,您正在使用SPFile
个对象,一次一个。正如您已经发现的那样,SPFile
对象包含有关文件本身的几个有趣属性。但是,为了访问您要查找的其他元数据,您需要使用Item
对象的SPFile
属性。通过引用文件的基础SPListItem
对象,您可以引用要尝试枚举的列表字段。
可以使用您之前尝试过的索引器来访问列表字段(列)。要构建您提供的代码段:
SPFolder folder = web.GetFolderByServerRelativeUrl("path")
foreach (SPFile file in folder.Files)
{
SPListItem item = file.Item
String contentType = item["Content_x0020_Type"]
}
与往常一样,考虑包括适当的异常处理并选择适合您特定需求的变量类型。
当您开始使用不同的字段类型时,我保留以下参考资料,以指导我使用SharePoint提供的所有不同类型的字段: http://social.technet.microsoft.com/wiki/contents/articles/20831.sharepoint-a-complete-guide-to-getting-and-setting-fields-using-powershell.aspx
此处的示例适用于PowerShell,但函数名称与您在其他语言(例如C#)中使用的函数名称相同。