Una delle feature più interessanti di SharePoint 2010 per ECM(Enterprise Content Management) è rappresentata dai Document Set, il concetto di Fascicolo/Pratica molto caro alla pubblica amministrazione.
Per attivare la feature e crearlo dalla user interface è molto facile e potete leggere questo ottimo articolo, diventa un po più complicato farlo da codice.
Come prima cosa bisogna aggiungere la referenza alla Dll Microsoft.Office.DocumentManagement.
Faccio l'esempio di creare un nostro content type che chiamo "Pratica" che eredita da Document Set ed ha solamente i campi Cliente e Ragione Sociale.
Inoltre andiamo a creare una vista che viene utilizzata nella Welcome Page del document Set, per avere una vista diversa su i documenti contenuti nel document set.
Bene dalla nostra feature creouna document library e gli associamo il content type Pratica e poi creo un nuovo item.
Il Codice è il seguente:
const
string urlSite = "http://mysite";
using
(SPSite site = new
SPSite(urlSite))
{
SPWeb web = site.OpenWeb();
web.AllowUnsafeUpdates = true;
//Creo la lista delle pratiche
Guid
listGuid = web.Lists.Add("Pratiche","",SPListTemplateType.DocumentLibrary);
SPDocumentLibrary
doc = (SPDocumentLibrary)web.Lists[listGuid];
//imposto le proprietà per la lista
doc.ContentTypesEnabled = true;
doc.ContentTypes.Add(web.ContentTypes["Pratica"]);
doc.OnQuickLaunch = true;
doc.Update();//salvo le impostazioni per la
lista
/creo la vista per i dettagli che serve per la
visualizzazione nel document set
SPView view =
doc.Views.Add("Details", null, "",
uint.MaxValue, true,
false);
view.ViewFields.Add("Type");
view.ViewFields.Add("Name");
view.ViewFields.Add("Modified");
view.ViewFields.Add("Author");
view.ViewFields.Add("Editor");
view.ViewFields.Add("CheckoutUser");
view.Update();//salvo la vista
//imposto le proprietà per creare la pratica
Hashtable properties = new Hashtable(3);
properties.Add("DocumentSetDescription",
"Questa è una pratica di test");
properties.Add("Cliente", "ACME");
properties.Add("Ragione_x0020_Sociale",
"ACME S.p.a.");
//recupero l'id del ct pratica
SPContentTypeId ctId =
doc.ContentTypes["Pratica"].Id;
//Creo la pratica
Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet.Create(doc.RootFolder, "Pratica
di test", ctId, properties,true);
//imposto le proprietà del template in
particolare Shared Fields e vista da utilizzare
SPContentType ctDS =
doc.ContentTypes[ctId];
Microsoft.Office.DocumentManagement.DocumentSets.DocumentSetTemplate template
=
Microsoft.Office.DocumentManagement.DocumentSets.DocumentSetTemplate.GetDocumentSetTemplate(ctDS);
SPField fdDesc
= doc.Fields["Description"];
template.WelcomePageView =
doc.Views["Details"];
template.SharedFields.Add(fdDesc);
template.Update(true);//aggiorno il template
ctDS.Update();//aggiorno il content type
web.AllowUnsafeUpdates = false;