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
VS 2010에서 참조할 수 있는 dll입니다.
해결책
SharePoint 2010/2013에서 CSOM을 통해 폴더(중첩 포함)를 만드는 방법
/// <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");
제휴하지 않습니다 StackOverflow