سؤال

لدي حاليًا رمز يقوم بإنشاء مجلد في ملف 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 dll التي يمكن الرجوع إليها في VS 2010.

هل كانت مفيدة؟

المحلول

كيفية إنشاء مجلد (بما في ذلك المتداخل) عبر CSOM في 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;
}

الاستخدام

 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");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top