Programmgesteuertes Erstellen von Ordnern in SharePoint 2013
-
20-12-2019 - |
Frage
Derzeit habe ich Code, der einen Ordner im erstellt Documents
Verzeichnis beim Ausführen:
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;
}
Ich habe Probleme beim Erstellen von Unterordnern in Ordnern, die ich bereits mit diesem Code erstellt habe.Wenn ich also einen Ordner mit dem Namen erstellen wollte Feb
unter Documents
das würde das bewirken.Aber wenn ich einen Ordner namens erstellen wollte Week 2
unter dem neuen Ordner Feb
.Das wird es nicht tun.Ich erhalte diesen Fehler:
{"List 'Feb' does not exist at site with URL 'https://my.sharepoint.com/sites/labels'."}
Mir ist klar, dass das Problem wahrscheinlich ist docs.RootFolder.Folders.Add(folderName);
Weil Feb
wäre nicht der Stammordner und wenn danach gesucht würde, würde eine Ausnahme ausgelöst.
Deshalb hatte ich gehofft, dass mir jemand mit etwas Code helfen könnte, um Unterordner zu bereits erstellten Ordnern hinzuzufügen.Ich verwende Visual Stuidos 2010 und kann sonst nicht auf 2012 aktualisieren.Ich habe den 2013 Microsoft.Sharepoint.Client
DLLs, auf die in VS 2010 verwiesen werden kann.
Lösung
So erstellen Sie einen Ordner (einschließlich verschachtelter) über CSOM in 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;
}
Verwendung
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");
}
So erhalten Sie ein Ordner-Clientobjekt
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;
}
Verwendung
var existingFolder = GetFolder(ctx.Web, "Shared Documents/FolderA/SubFolderA/SubSubFolderA");
Andere Tipps
Sie können Ordner wie folgt erstellen:
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");