public void Run() { Trace.TraceInformation("Document Set Manager Initiated"); List documentLibrary = DocumentWeb.Lists.GetByTitle(Config.DocumentLibrary); Folder rootFolder = documentLibrary.RootFolder; Ctx.Load(documentLibrary); Ctx.Load(rootFolder, i => i.Folders, i => i.Name); Ctx.ExecuteQuery(); foreach (KeyValuePair <string, string> folderToDocumentMap in Config.FolderToDocumentSetMapping) { Trace.TraceInformation($"Mapping: {folderToDocumentMap.Key} to {folderToDocumentMap.Value}. Major Versions Only: {Config.MajorVersionsOnly}"); ContentType documentSetCt = DocumentWeb.ContentTypes.GetByName(folderToDocumentMap.Value); Folder folder = rootFolder.Folders.GetByName(folderToDocumentMap.Key); DocumentSetTemplate dst = DocumentSetTemplate.GetDocumentSetTemplate(Ctx, documentSetCt); Ctx.Load(documentSetCt); Ctx.Load(folder); Ctx.Load(dst, i => i.DefaultDocuments); Ctx.ExecuteQuery(); Trace.TraceInformation($"Deleting existing documents from the {folderToDocumentMap.Value}"); dst.Clear(); CamlQuery cq = CreateAllFilesQuery(); cq.FolderServerRelativeUrl = folder.ServerRelativeUrl; ListItemCollection documents = documentLibrary.GetItems(cq); Ctx.Load(documents, icol => icol.Include(i => i.File)); Ctx.Load(documents, icol => icol.Include(i => i.ContentType)); Ctx.Load(documents, icol => icol.Include(i => i.ContentType.Id)); Ctx.ExecuteQuery(); Trace.TraceInformation($"Returned {documents.Count} files for processing"); int count = 0; foreach (ListItem document in documents) { count++; ContentType docCt = DocumentWeb.ContentTypes.GetByName(document.ContentType.Name); Ctx.ExecuteQuery(); string contentTypeFolder = ContentTypeFolder(document, rootFolder, folder); if (Config.ExcludedFolders.Contains(contentTypeFolder.TrimEnd('/'), StringComparer.CurrentCultureIgnoreCase)) { Trace.TraceInformation($"{document.File.Name} not proceesed due to ExcludedFolder rule: {contentTypeFolder.TrimEnd('/')}"); continue; } Trace.TraceInformation($"Adding document {count}: {document.File.Name}"); dst.Add(document, folderToDocumentMap.Value, contentTypeFolder, docCt.Id, Config.MajorVersionsOnly); dst.Update(true); Ctx.ExecuteQuery(); } } }