Oi pessoal,
Recentemente estive trabalhando com a criação de vários document sets em substituição à criação de pastas. É muito fácil criar document sets manualmente, mas quando você precisa criar vários deles, a melhor solução é fazê-los programaticamente.
Document sets são mais do que simples pastas. Eles contêm metadados, que estão mudando a maneira que os usuários estão trabalhando, os quais estão usufruindo das novas features.
Como uma nota rápida, nesse post mostrarei como criar document sets programaticamente, explorando o assembly Microsoft.Office.DocumentManagement.dll, disponível no diretório \14\ISAPI\.
A Solução
Basicamente esta solução mostra como criar um document set e adicioná-lo à uma Document Library.
OBS: 2 content types foram criados manualmente para o propósito dessa demo: Word Template e Excel Spreadsheet Template.
Veja o código abaixo:
Code Snippet
- static void Main(string[] args)
- {
- var url = ConfigurationManager.AppSettings["Url"].ToString();
- var sub = ConfigurationManager.AppSettings["Sub"].ToString();
- var library = ConfigurationManager.AppSettings["Library"].ToString();
-
- using (SPSite site = new SPSite(url))
- {
- using (SPWeb web = (sub == "*") ? site.RootWeb : site.OpenWeb(sub))
- {
- string docsetName = "Document Set Test";
- SPContentType ctype = null;
-
- if (web.ContentTypes[docsetName] == null)
- {
- // Creating the document set (content type)
- ctype = new SPContentType(web.ContentTypes["Document Set"], web.ContentTypes, "Document Set Test");
- ctype.FieldLinks.Add(new SPFieldLink(web.Fields["Author"]));
- ctype.Group = "Test Content Types";
- web.ContentTypes.Add(ctype);
-
- // Getting the document set (content type)
- DocumentSetTemplate docsetTemplate = DocumentSetTemplate.GetDocumentSetTemplate(ctype);
-
- // Setting the content types
- docsetTemplate.AllowedContentTypes.Remove(web.ContentTypes["Document"].Id);
- docsetTemplate.AllowedContentTypes.Add(web.ContentTypes["Word Template"].Id);
- docsetTemplate.AllowedContentTypes.Add(web.ContentTypes["Excel Spreadsheet Template"].Id);
-
- // Sharing fields
- docsetTemplate.SharedFields.Add(web.Fields["Author"]);
-
- // Displaying fields
- docsetTemplate.WelcomePageFields.Add(web.Fields["Author"]);
-
- // Adding default document
- FileStream wordFile = File.OpenRead(Path.GetFullPath(@"DocumentSet\Default.dotx"));
- byte[] binWordFile = new byte[wordFile.Length];
- wordFile.Read(binWordFile, 0, binWordFile.Length);
-
- docsetTemplate.DefaultDocuments.Add("Default.dotx", web.ContentTypes["Word Template"].Id, binWordFile);
-
- // Updating the document set (content type),
- docsetTemplate.Update(true);
- ctype.Update();
- }
-
- ctype = ctype ?? web.ContentTypes[docsetName];
-
- if (web.Lists.TryGetList(library) == null)
- {
- // Creating document library
- Guid libraryGuid = web.Lists.Add(library, "", SPListTemplateType.DocumentLibrary);
- SPDocumentLibrary list = (SPDocumentLibrary)web.Lists[libraryGuid];
-
- // Setting properties
- list.OnQuickLaunch = true;
- list.ContentTypesEnabled = true;
- list.EnableFolderCreation = false;
-
- // Defining content types
- list.ContentTypes.Delete(list.ContentTypes["Document"].Id);
- list.ContentTypes.Add(ctype);
- list.Update();
-
- System.Collections.Hashtable properties = new System.Collections.Hashtable();
- properties.Add("DocumentSetDescription", "Just an example"); //InternalName
- properties.Add("_Author", "MM"); //InternalName
-
- // Creating the document set
- DocumentSet.Create(list.RootFolder, "DocSet1", list.ContentTypes.BestMatch(ctype.Id), properties, true);
- }
- }
- }
- }
OBS: Uma Document Library é criada dinamicamente para o propósito dessa demo.
Faça o download da solução aqui.
Espero que isso ajude.
Referências:
http://technet.microsoft.com/en-us/library/ff603637.aspx
http://office.microsoft.com/en-us/sharepoint-server-help/CH010372625.aspx
http://msdn.microsoft.com/en-us/library/ee574540.aspx
[]’s,
Marcel Medina
Clique aqui para ler o mesmo conteúdo em Inglês.