Actuellement, j'ai du code qui crée un dossier dans le répertoire Documents
lors de son exécution:
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;
}
J'ai des problèmes pour créer des sous-dossiers dans des dossiers que j'ai déjà créés à l'aide de ce code. Donc, comme si je voulais créer un dossier appelé Feb
sous Documents
, cela ferait cela. Mais si je voulais créer un dossier appelé Week 2
Sous le nouveau dossier Feb
. Cela ne fera pas ça. Je reçois cette erreur:
{"List 'Feb' does not exist at site with URL 'https://my.sharepoint.com/sites/labels'."}
Je me rends compte que le problème est probablement docs.RootFolder.Folders.Add(folderName);
parce que Feb
ne serait pas le dossier racine et quand il le chercherait une exception serait levée.
J'espérais donc que quelqu'un pourrait m'aider avec du code pour ajouter des sous-dossiers aux dossiers déjà créés. J'utilise Visual Stuidos 2010 et je ne peux pas passer à 2012 sinon je le ferais. J'ai les DLL Microsoft.Sharepoint.Client
2013 qui peuvent être référencées dans VS 2010.
/// <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;
}
Usage
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;
}
Usage
var existingFolder = GetFolder(ctx.Web, "Shared Documents/FolderA/SubFolderA/SubSubFolderA");
Vous pouvez créer des dossiers comme celui-ci:
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");