Создание папок программным способом в SharePoint 2013
-
20-12-2019 - |
Вопрос
В настоящее время у меня есть код, который создает папку в Documents
каталог при запуске:
using (var context = new Microsoft.SharePoint.Client.ClientContext(sharePointSite))
{
context.Credentials = new Microsoft.SharePoint.Client.SharePointOnlineCredentials(user, password);
Web web = context.Web;
Microsoft.SharePoint.Client.List docs = web.Lists.GetByTitle(<upper level folder>);
docs.EnableFolderCreation = true;
docs.RootFolder.Folders.Add(folderName);
context.ExecuteQuery();
return true;
}
У меня возникли проблемы с созданием вложенных папок в папках, которые я уже создал, используя этот код.Итак, как если бы я хотел создать папку с именем Feb
под Documents
это сделало бы именно это.Но если бы я захотел создать папку с именем Week 2
в новой папке Feb
.Он этого не сделает.Я получаю эту ошибку:
{"List 'Feb' does not exist at site with URL 'https://my.sharepoint.com/sites/labels'."}
Я понимаю, что проблема, вероятно, в docs.RootFolder.Folders.Add(folderName);
потому что Feb
это не была бы корневая папка, и при ее поиске было бы выдано исключение.
Поэтому я надеялся, что кто-нибудь сможет помочь мне с каким-нибудь кодом для добавления вложенных папок в уже созданные папки.Я использую Visual Stuidos 2010 и не могу обновиться до 2012 года, иначе я бы это сделал.У меня есть 2013 год Microsoft.Sharepoint.Client
библиотеки dll, на которые можно ссылаться в версии 2010.
Решение
Как создать папку (включая вложенную) с помощью CSOM в SharePoint 2010/2013
/// <summary>
/// Create Folder client object
/// </summary>
/// <param name="web"></param>
/// <param name="listTitle"></param>
/// <param name="fullFolderUrl"></param>
/// <returns></returns>
public static Folder CreateFolder(Web web, string listTitle, string fullFolderUrl)
{
if (string.IsNullOrEmpty(fullFolderUrl))
throw new ArgumentNullException("fullFolderUrl");
var list = web.Lists.GetByTitle(listTitle);
return CreateFolderInternal(web, list.RootFolder, fullFolderUrl);
}
private static Folder CreateFolderInternal(Web web, Folder parentFolder, string fullFolderUrl)
{
var folderUrls = fullFolderUrl.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
string folderUrl = folderUrls[0];
var curFolder = parentFolder.Folders.Add(folderUrl);
web.Context.Load(curFolder);
web.Context.ExecuteQuery();
if (folderUrls.Length > 1)
{
var subFolderUrl = string.Join("/", folderUrls, 1, folderUrls.Length - 1);
return CreateFolderInternal(web, curFolder, subFolderUrl);
}
return curFolder;
}
Использование
using (var ctx = new ClientContext("https://contoso.onmicrosoft.com/"))
{
ctx.Credentials = new Microsoft.SharePoint.Client.SharePointOnlineCredentials("username", "password");
var folder = CreateFolder(ctx.Web, "Shared Documents", "FolderA/SubFolderA/SubSubFolderA");
}
Как получить клиентский объект папки
public static Folder GetFolder(Web web, string fullFolderUrl)
{
if (string.IsNullOrEmpty(fullFolderUrl))
throw new ArgumentNullException("fullFolderUrl");
if (!web.IsPropertyAvailable("ServerRelativeUrl"))
{
web.Context.Load(web,w => w.ServerRelativeUrl);
web.Context.ExecuteQuery();
}
var folder = web.GetFolderByServerRelativeUrl(web.ServerRelativeUrl + fullFolderUrl);
web.Context.Load(folder);
web.Context.ExecuteQuery();
return folder;
}
Использование
var existingFolder = GetFolder(ctx.Web, "Shared Documents/FolderA/SubFolderA/SubSubFolderA");
Другие советы
Вы можете создавать папки, подобные этой:
Microsoft.SharePoint.Client.List docs = web.Lists.TryGetList("upper level folder");
FolderCollection folderColl = docs.RootFolder.SubFolders;
Folder newFolder = folderColl.Add("upper level folder/Feb/Week 2");