2015-10-29 4 views
1

Я новичок в объектной модели клиента Sharepoint, и мне трудно получить все предметы из определенного List вместе с их данными о столбцах. Я думаю, что это меня путает, потому что на самом деле это Folder, который будет отображаться как List, который затем фильтруется View!Как мне перебирать файлы в папке и получать данные из связанных столбцов списка?

Установка такова:

Список: Управляемый Сопутствующий
Просмотр: Предложение Сопутствующий
Папка: Предложение Сопутствующий
Папка относительный URL:/сайты/залога/Managed Залог/Предложение Залог

Это выглядит следующим образом:

enter image description here

можно использовать методы как Lists.GetByTitle("title"); и GetFolderByServerRelativeUrl("path"); получить List и Folder объектов соответственно. Я возвращаю правильные Count, поэтому я думаю, что они вернулись правильно.

Я попытался перебором их, но я могу только когда-либо, кажется, чтобы получить доступ статических свойств, как file.Name и file.TimeLastModified, но мой список показывает столбцы как Content_x0020_Type и Proposal_x0020_Type.
Я пробовал такие вещи, как file["Content_x0020_Type"], но это тоже не сработало.

Как получить папку, затем пропустить каждый элемент и получить данные из столбцов из соответствующего списка/вида?

Я могу выслать свой код при необходимости, но я чувствовал, что это просто смутит вопросы.

Спасибо!

ответ

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

Существует несколько способов добиться того, что вы описываете в своем вопросе.

Поскольку вам уже удалось получить ссылку на объект 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#.

+1

Спасибо Серхио, это отличная помощь. Я обязательно сделаю закладку для этого руководства. Просто будьте осторожны, что я использую объектную модель клиента, где ваш код указывает объектную модель сервера. – Equalsk