Я новичок в SharePoint, и я понимаю, что есть несколько сообщений на эту тему, и я также прочитал их, но я все еще не уверен, как это сделать.
Я пыталсячтобы добиться этого с помощью CSOM .NET (на самом деле я предпочел использовать REST API, но вся регистрация в Azure оказалась для него самостоятельным исследованием, поэтому вместо этого я использовал управляемый код).
В любом случае, естьэто сайт SP, которому я знаю путь к "https://(server)/sites/Pictures/".. Это место (сайт, список, папка или как он там называется) содержит несколько изображений, которые я хотел бы иметь в списке и, возможно, загрузить.
Выполнение следующих действий дает мне имя: "Pictures", Count: 393 и ServerRelativeUrl: "/sites/Pictures/Pictures".
using (ClientContext ctx = new ClientContext(site_url))
{
ctx.Credentials = new SharePointOnlineCredentials(usr, secure_pwd);
Web web = ctx.Web;
List lst_pictures = web.Lists.GetByTitle("Pictures");
ctx.Load(lst_pictures.RootFolder);
ctx.ExecuteQuery();
Console.WriteLine("Name: " + lst_pictures.RootFolder.Name);
Console.WriteLine("ItemCount: " + lst_pictures.RootFolder.ItemCount);
Console.WriteLine("ServerRelativeUrl: " + lst_pictures.RootFolder.ServerRelativeUrl);
}
С этого момента я попытался перечислить несколько вещейи циклически перебираю файлы, но что бы я ни пытался, я получаю одно и то же исключение, говорящее, что коллекция не была инициализирована, и я не могу понять, что это правильно.
Тогда у меня есть триd, чтобы посмотреть, смогу ли я как-нибудь получить помощь, используя U2U CAM Query Builder и CAML Designer для SharePoint, но ни один из этих инструментов не отображает нужный мне сайт (или список, или папку) Изображения.
IЯ думаю, что это должно быть довольно просто для тех, кто привык к не столь интуитивному способу запроса SP для ресурсов через CSOM.
Итак, кто-нибудь может подсказать мне, что я делаю отсюда,так что перечислите файлы так, чтобы их можно было загрузить (ссылка на файл должна быть в этом отношении).
Любая помощь приветствуется, спасибо.
ОБНОВЛЕНИЕ1
Я добавил предложенные вами строки, и я почти уверен, что у меня уже были эти строки в моем коде во время предыдущих тестов, но я удалил их снова, потому что это не сработало для меня- и до сих пор это не так :( Смотрите изображение здесь.
// lines not shown in the image
ctx.Load(lst_pictures.RootFolder);
ctx.Load(lst_pictures.RootFolder.Files);
ctx.ExecuteQuery();
Console.WriteLine("Name: " + lst_pictures.RootFolder.Name);
Console.WriteLine("ItemCount: " + lst_pictures.RootFolder.ItemCount);
Console.WriteLine("ServerRelativeUrl: " + lst_pictures.RootFolder.ServerRelativeUrl):
FileCollection files = lst_pictures.RootFolder.Files;
Первая часть работает, но перед изменением это было сделанокод.
ОБНОВЛЕНИЕ 2
ОБНОВЛЕНИЕ 3 Обновлен код согласно комментариямТем не менее, до сих пор нет.
ОБНОВЛЕНИЕ 4: решение
Что ж, получается, что настоящей проблемой был установлен пакет nuget с именем Microsoft.SharePoint.Client v.14.xxxx. Это должен был быть только что названный SharePoint.Client v.15.xxxx (у этого нет описания, но от Microsoft).
Итак, спасибо Адаму за попытку помочь мнеЯ отмечу ваш ответ как правильный, поскольку в конечном итоге он привел меня к проблеме, чтобы ее можно было исправить. Установка правильного пакета сразу же устранила проблему.
Правильный пакет - вот этот.
ОБНОВЛЕНИЕ 5: новая тема, настраиваемые поля / столбцы (все еще использующие CSOM)
1) У меня есть следующий код нана данный момент, но мне нужно получить некоторые дополнительные свойства (пользовательские) из файлов - что я должен добавить в код, чтобы сделать это? 2) И должен ли я использовать ListItem, а не File в этом случае? 3) И можно ли даже добавить фильтрацию по настраиваемым полям / столбцам, чтобы получать только подмножество файлов?
using (ClientContext ctx = new ClientContext("<url>"))
{
ctx.Credentials = new SharePointOnlineCredentials("<usr>", "<pwd>");
Web web = ctx.Web;
lst = web.Lists.GetByTitle("<list name>");
ctx.Load(lst);
ctx.Load(lst.RootFolder);
ctx.Load(lst.RootFolder.Folders);
ctx.ExecuteQuery();
files = lst.RootFolder.Files;
foreach (File f in files)
{
// doing stuff with some attributes like UniqueId, Name and ServerRelativeUrl, but need custom attributes as well.
}
}