Creating Site Policy in SharePoint 2013 using server code

Tags: SharePoint 2013, ECM, Visual Studio, Policy, Programming

Site policy is new functionality introduced in SharePoint 2013 which enables to apply retention rules to complete sites. Great post about concepts, usage and configuration of site policies is posted on TechNet Blogs http://blogs.technet.com/b/tothesharepoint/archive/2013/03/28/site-policy-in-sharepoint.aspx.

In our solutions we often need to create policies programmatically, to ensure easier deployment and reusability. However, ProjectPolicy class does not provide public method to create new ProjectPolicy http://msdn.microsoft.com/en-us/library/microsoft.office.recordsmanagement.informationpolicy.projectpolicy_members.aspx.

How to create new ProjectPolicy?

In a nutshell, this can be accomplished by creating new Content Type that inherits from ProjectPolicy content type, and then creating new Policy object based on our newly created content type. This procedure is similar to internal ProjectPolicy method for creation of new policies (that can be verified using ILSpy). For portability and reusability reasons, new policy should be created on Content Type Hub site and then published as any other content type. In such scenario, new policy can automatically be deployed to all sites that consume content types from Content Type Hub.

Code

using(SPSite site = new SPSite(siteUrl)) 
 {
 // ProjectPolicy Content Type ID 
  SPContentTypeId policyCTID= new SPContentTypeId("0x010085EC78BE64F9478aAE3ED069093B9963");
  SPContentTypeCollection contentTypes = site.RootWeb.ContentTypes;  
  // ProjectPolicy is parent content type
   
  SPContentType parentContentType = contentTypes[policyCTID];
  // we create new content type based on ProjectPolicy
  policyContentType = new SPContentType(parentContentType, contentTypes, "New Project Policy"); 
  policyContentType = contentTypes.Add(policyContentType); 
  policyContentType.Group = parentContentType.Group; 
  policyContentType.Hidden = true; 
  policyContentType.Update(); 
  // Final step is to create new Policy with new content type 
  Policy.CreatePolicy(policyContentType, null);
         }

No Comments

Add a Comment