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.

War es hilfreich?

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");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top