La création de Dossiers par programmation dans SharePoint 2013
-
20-12-2019 - |
Question
Actuellement, j'ai un code qui crée un Dossier dans le Documents
répertoire lors de l'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;
}
Je vais avoir des ennuis de créer des sous dossiers dans les dossiers que j'ai créé à l'aide de ce code déjà.Donc, comme si je voulais créer un dossier appelé Feb
en vertu de Documents
cela permettrait de le faire.Mais si j'ai voulu créer un dossier appelé Week 2
sous le nouveau dossier Feb
.Il n'allons pas le faire.J'obtiens 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 cherche une exception sera levée.
Alors j'espérais que quelqu'un pourrait m'aider avec un peu de code pour ajouter des sous-dossiers à déjà créé des dossiers.Je suis à l'aide de Visual Stuidos 2010 et ne peut pas mettre à 2012 sinon je le ferais.J'ai l'2013 Microsoft.Sharepoint.Client
dll peuvent être référencées dans VS 2010.
La solution
Comment créer un Dossier (y compris imbriquée) via otite chronique dans 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;
}
L'utilisation de la
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");
}
Comment obtenir le Dossier client de l'objet
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;
}
L'utilisation de la
var existingFolder = GetFolder(ctx.Web, "Shared Documents/FolderA/SubFolderA/SubSubFolderA");
Autres conseils
Vous pouvez créer des Dossiers comme ceci:
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");