SlideShare a Scribd company logo
1 of 40
Working with site policies in
SharePoint 2013
DRAGAN PANJKOV, PLANB.

B: WWW.DRAGAN-PANJKOV.COM
T: @PANJKOV

SHAREPOINT AND PROJECT CONFERENCE ADRIATICS 2013
ZAGREB, NOVEMBER 27-28 2013
sponsors
About
• Dragan Panjkov
• Working with SharePoint since 2007
• www.dragan-panjkov.com
• www.twitter.com/panjkov

• PlanB. d.o.o.
• www.planb.ba

• SharePoint user group
• www.1sug.com
Agenda
• Information Management Policies
• Site Policies
• Configuration steps needed to enable Site Policies on sites
• Creating Site Policies in SharePoint UI
• Working with Site Policies using Server OM
• Working with Site Policies using Client OM
Information management policy?
• An information management policy is a set of rules that govern
the availability and behavior of a certain type of important
content. Policy enables administrators to control and
evaluate who can access information, how long to retain
information, and how effectively people are complying with the
policy.
In other words
• Information Management Policy connects business need and
technical implementation of the solution to ensure that
standards are met
Business
Outcomes

Information
Classification

Functional
Preferences

Information
Architecture

Functional
Design

Information
Management
Standards

Information
Management
Policies

Information
Management
Architecture

Technical
Considerations

Service
Management
Policies

Service
Architecture

Project Constraints
Budget, Timeframe, Resources
Information Management Policy Scopes
• List
• Library
• Content Type
• Site
Site Retention?
• How do we control site lifecycle?
• Are we able to track old and unused sites?
• Are we able to easily delete old, unused, expired sites?
Site Policies
• Opportunity to predefine retention rules for sites
• Assign retention policy at site creation
• Site Policies can be configured that sites are:
• Closed and then deleted automatically
• Deleted automatically after certain period of time
• Marked as read-only

• Site Policies can be published in Content Type Hub
Enabling Site Policy functionality
In UI:
• Enable features in Site Collection
• Library and Folder Based Retention
• Site Policy
• Hidden feature “Record Resources” activated automatically

In onet.xml
<SiteFeatures>
<Feature ID="5bccb9a4-b903-4fd1-8620-b795fa33c9ba" Name="RecordResources" />
<Feature ID="063c26fa-3ccc-4180-8a84-b6f98e991df3" Name="LocationBasedPolicy" />
<Feature ID="2fcd5f8a-26b7-4a6a-9755-918566dba90a" Name="ProjectBasedPolicy" />
</SiteFeatures>
CREATING AND APPLYING SITE POLICIES IN UI
Creating Site Policies in UI
Creating Site Policies in UI
Creating Site Policies in UI
Creating Site Policies in UI
Creating Site Policies in UI
Applying Site Policies in the UI
Applying Site Policies in the UI
Applying Site Policies in the UI
Applying Site Policies in the UI
Site Policies in SSOM
namespace Microsoft.Office.RecordsManagement.InformationPolicy
{
public class ProjectPolicy
{
public string Description { get; internal set; }
public string EmailBody { get; set; }
public string EmailBodyWithTeamMailbox { get; set; }
public string EmailSubject { get; set; }
public string Name { get; internal set; }
public
public
public
public
public
public
public
public
public
public
public
}
}

static void ApplyProjectPolicy(SPWeb web, ProjectPolicy projectPolicy);
static void CloseProject(SPWeb web);
static bool DoesProjectHavePolicy(SPWeb web);
static ProjectPolicy GetCurrentlyAppliedProjectPolicyOnWeb(SPWeb web);
static DateTime GetProjectCloseDate(SPWeb web);
static DateTime GetProjectExpirationDate(SPWeb web);
static List<ProjectPolicy> GetProjectPolicies(SPWeb web);
static bool IsProjectClosed(SPWeb web);
static void OpenProject(SPWeb web);
static void PostponeProject(SPWeb web);
void SavePolicy();
SERVER-SIDE OBJECT MODEL DEMOS
Create Site Policies
// 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);
Read Site Policies that exist on site
private static void ReadProjectPolicies()
{
using (SPSite targetSite = new SPSite(siteUrl))
{
SPWeb targetWeb = targetSite.RootWeb;
List<ProjectPolicy> projectPolicies = ProjectPolicy.GetProjectPolicies(targetWeb);
if (projectPolicies!= null && projectPolicies.Count > 0)
{
Console.WriteLine("Project Policies on web {0}", siteUrl);
foreach (var item in projectPolicies)
{
Console.WriteLine("Name: {0}",item.Name);
Console.WriteLine("Desc: {0}",item.Description);
Console.WriteLine();
}
}
Console.WriteLine();
try
{
targetWeb.Dispose();
}
catch { }
}
}
Get Applied Policy
private static void GetAppliedPolicy()
{
using (SPSite targetSite = new SPSite(siteUrl))
{
SPWeb targetWeb = targetSite.RootWeb;
ProjectPolicy appliedPolicy = ProjectPolicy.GetCurrentlyAppliedProjectPolicyOnWeb(targetWeb);
if (appliedPolicy != null)
{
Console.WriteLine("Currently applied Project Policy on web {0}", siteUrl);
Console.WriteLine(appliedPolicy.Name);
Console.WriteLine(appliedPolicy.Description);
}
else
{
Console.WriteLine("Project Policy is not applied on web {0}", siteUrl);
}
Console.WriteLine();
try
{
targetWeb.Dispose();
}
catch { }
}
}
Is Policy Applied?
private static void IsPolicyApplied()
{
using (SPSite targetSite = new SPSite(siteUrl))
{
SPWeb targetWeb = targetSite.RootWeb;
bool isPolicyApplied = ProjectPolicy.DoesProjectHavePolicy(targetWeb);
if (isPolicyApplied)
{
Console.WriteLine("Web has policy applied {0}", siteUrl);
}
else
{
Console.WriteLine("Project Policy is not applied on web {0}", siteUrl);
}
Console.WriteLine();
try
{
targetWeb.Dispose();
}
catch { }
}
}
Apply Policy
private static void ApplyPolicySSOM()
{
string policyName = "DEVSITE DoNotClose-ReadOnly Policy";
using (SPSite targetSite = new SPSite(siteUrl))
{
SPWeb targetWeb = targetSite.RootWeb;
List<ProjectPolicy> webPolicies = ProjectPolicy.GetProjectPolicies(targetWeb);
ProjectPolicy selectedPolicy = webPolicies.Where(p => p.Name ==
policyName).FirstOrDefault();
if (selectedPolicy != null)
{
ProjectPolicy.ApplyProjectPolicy(targetWeb, selectedPolicy);
targetWeb.Update();
Console.WriteLine("Successfully applied policy '{0}' on web '{1}'", policyName,
targetWeb);
}
}
}
Get Project Close and Expiration Date
private static void GetProjectCloseExpirationDate()
{
using (SPSite targetSite = new SPSite(siteUrl))
{
SPWeb targetWeb = targetSite.RootWeb;
DateTime closedDate = ProjectPolicy.GetProjectCloseDate(targetWeb);
DateTime expirationDate = ProjectPolicy.GetProjectExpirationDate(targetWeb);
if (closedDate != DateTime.MinValue)
{
Console.WriteLine("Close Date: {0}", closedDate);
}
if (expirationDate != DateTime.MinValue)
{
Console.WriteLine("Expiration Date: {0}", expirationDate);
}
Console.WriteLine();
try
{

targetWeb.Dispose();
}
catch { }
}
}
Open Closed Site ELEVATED
private static void OpenProject()
{
using (SPSite site = new SPSite(siteUrl))
{
SPSecurity.RunWithElevatedPrivileges(delegate
{
using (SPSite targetSite = new SPSite(siteUrl))
{
SPWeb targetWeb = targetSite.RootWeb;
bool isClosed = ProjectPolicy.IsProjectClosed(targetWeb);
Console.WriteLine("Site is Closed! {0}", siteUrl);
if (isClosed)
{
Console.WriteLine("Trying to open site.");
ProjectPolicy.OpenProject(targetWeb);
Console.WriteLine("Site is now Open! {0}", siteUrl);
}
Console.WriteLine();

try
{
targetWeb.Dispose();
}
catch { }
}
});
}
}
Site Policies in CSOM
namespace Microsoft.SharePoint.Client.InformationPolicy
{
[ScriptType("SP.InformationPolicy.ProjectPolicy", ServerTypeId = "{ec5e0a70-0cc3-408f-a4dc-1bb3495aac75}")]
public class ProjectPolicy : ClientObject
{
[EditorBrowsable(EditorBrowsableState.Never)]
public ProjectPolicy(ClientRuntimeContext context, ObjectPath objectPath);
[Remote]
public static void ApplyProjectPolicy(ClientRuntimeContext context, Web web, ProjectPolicy projectPolicy);
[Remote]
public static void CloseProject(ClientRuntimeContext context, Web web);
[Remote]
public static ClientResult<bool> DoesProjectHavePolicy(ClientRuntimeContext context, Web web);
[Remote]
public static ProjectPolicy GetCurrentlyAppliedProjectPolicyOnWeb(ClientRuntimeContext context, Web web);
[Remote]
public static ClientResult<DateTime> GetProjectCloseDate(ClientRuntimeContext context, Web web);
[Remote]
public static ClientResult<DateTime> GetProjectExpirationDate(ClientRuntimeContext context, Web web);
[Remote]
public static ClientObjectList<ProjectPolicy> GetProjectPolicies(ClientRuntimeContext context, Web web);
protected override bool InitOnePropertyFromJson(string peekedName, JsonReader reader);
[Remote]
public static ClientResult<bool> IsProjectClosed(ClientRuntimeContext context, Web web);
[Remote]
public static void OpenProject(ClientRuntimeContext context, Web web);
[Remote]
public static void PostponeProject(ClientRuntimeContext context, Web web);
[Remote]
public void SavePolicy();
}
}
CLIENT-SIDE OBJECT MODEL DEMOS
Read Site Policies that exist on site
private static void ReadProjectPoliciesCsom()
{
ClientContext policyContext = new ClientContext(siteUrl);
Web targetWeb = policyContext.Web;
ClientObjectList<ProjectPolicy> projectPolicies =
ProjectPolicy.GetProjectPolicies(policyContext, targetWeb);
policyContext.Load(projectPolicies);
policyContext.ExecuteQuery();
if (projectPolicies != null && projectPolicies.Count > 0)
{
Console.WriteLine("Project Policies on web {0}", siteUrl);
foreach (var item in projectPolicies)
{
Console.WriteLine("Name: {0}", item.Name);
Console.WriteLine("Desc: {0}", item.Description);
Console.WriteLine();
}
}
Console.WriteLine();
}
Get Applied Policy
private static void GetAppliedPolicyCsom()
{
ClientContext policyContext = new ClientContext(siteUrl);
Web targetWeb = policyContext.Web;
ClientResult<bool> isPolicyApplied = ProjectPolicy.DoesProjectHavePolicy(policyContext, targetWeb);
policyContext.ExecuteQuery();
if (isPolicyApplied.Value)
{
ProjectPolicy appliedPolicy = ProjectPolicy.GetCurrentlyAppliedProjectPolicyOnWeb(policyContext, targetWeb);
policyContext.Load(appliedPolicy);
policyContext.ExecuteQuery();
if (appliedPolicy.TypedObject.ServerObjectIsNull != true)
{
Console.WriteLine("Currently applied Project Policy on web {0}", siteUrl);
Console.WriteLine(appliedPolicy.Name);
Console.WriteLine(appliedPolicy.Description);
}
}
else
{
Console.WriteLine("Project Policy is not applied on web {0}", siteUrl);
}
Console.WriteLine();
}
Is Policy Applied?
private static void IsPolicyAppliedCsom()
{
ClientContext policyContext = new ClientContext(siteUrl);
Web targetWeb = policyContext.Web;
ClientResult<bool> isPolicyApplied = ProjectPolicy.DoesProjectHavePolicy(policyContext,
targetWeb);
policyContext.ExecuteQuery();
if (isPolicyApplied.Value)
{
Console.WriteLine("Web has policy applied {0}", siteUrl);
}
else
{
Console.WriteLine("Project Policy is not applied on web {0}", siteUrl);
}
Console.WriteLine();
}
Apply Policy
private static void ApplyPolicyCsom()
{
string policyName = "DEVSITE DoNotClose-ReadOnly Policy";

ClientContext policyContext = new ClientContext(siteUrl);

targetWeb);

Web targetWeb = policyContext.Web;
ClientObjectCollection<ProjectPolicy> webPolicies = ProjectPolicy.GetProjectPolicies(policyContext,
policyContext.Load(webPolicies);
policyContext.ExecuteQuery();

ProjectPolicy selectedPolicy = webPolicies.Where(p => p.Name == policyName).FirstOrDefault();
if (selectedPolicy != null)
{
ProjectPolicy.ApplyProjectPolicy(policyContext, targetWeb, selectedPolicy);
policyContext.ExecuteQuery();
Console.WriteLine("Successfully applied policy '{0}' on web '{1}'", policyName, siteUrl);
}
Console.WriteLine();
}
Get Project Close and Expiration Date
private static void GetProjectCloseExpirationDateCsom()
{
ClientContext policyContext = new ClientContext(siteUrl);
Web targetWeb = policyContext.Web;
ClientResult<DateTime> closedDate = ProjectPolicy.GetProjectCloseDate(policyContext, targetWeb);
ClientResult<DateTime> expirationDate = ProjectPolicy.GetProjectExpirationDate(policyContext, targetWeb);
policyContext.ExecuteQuery();
if (closedDate.Value != DateTime.MinValue)
{
Console.WriteLine("Close Date: {0}", closedDate.Value);
}
if (expirationDate.Value != DateTime.MinValue)
{
Console.WriteLine("Expiration Date: {0}", expirationDate.Value);
}
Console.WriteLine();
}
Close Site
private static void CloseProjectCsom()
{
ClientContext policyContext = new ClientContext(siteUrl);
Web targetWeb = policyContext.Web;
ClientResult<bool> isClosed = ProjectPolicy.IsProjectClosed(policyContext, targetWeb);
policyContext.ExecuteQuery();
if (!isClosed.Value)
{
ProjectPolicy.CloseProject(policyContext, targetWeb);
}
policyContext.ExecuteQuery();
isClosed = ProjectPolicy.IsProjectClosed(policyContext, targetWeb);
policyContext.ExecuteQuery();
if (isClosed.Value)
{
Console.WriteLine("Project is closed! {0}", siteUrl);
}
else
{
Console.WriteLine("Project is NOT closed!");
}
Console.WriteLine();
}
Resources
• http://msdn.microsoft.com/enus/library/microsoft.office.recordsmanagement.informationpolicy.proj
ectpolicy_members.aspx
• http://technet.microsoft.com/en-us/library/jj219569.aspx
• http://blog.dragan-panjkov.com/archive/2013/06/30/creating-sitepolicy-in-sharepoint-2013-using-server-code.aspx
• http://blog.dragan-panjkov.com/archive/2013/10/27/configuring-sitepolicy-in-sharepoint-2013-using-server-code.aspx
• http://blogs.technet.com/b/tothesharepoint/archive/2013/03/28/sitepolicy-in-sharepoint.aspx
• http://stevemannspath.blogspot.com/2012/08/sharepoint-2013-siteretention-getting.html
• http://www.booden.net/ProjectPolicy.aspx
questions?
WWW.DRAGAN-PANJKOV.COM

@PANJKOV
thank you.
SHAREPOINT AND PROJECT CONFERENCE ADRIATICS 2013
ZAGREB, NOVEMBER 27-28 2013

More Related Content

Similar to Working with site policies in SharePoint 2013

Relearning SharePoint Development
Relearning SharePoint DevelopmentRelearning SharePoint Development
Relearning SharePoint Developmentbgerman
 
SharePoint 2013 Search and Creating Dynamic Content Management Solutions
SharePoint 2013 Search and Creating Dynamic Content Management SolutionsSharePoint 2013 Search and Creating Dynamic Content Management Solutions
SharePoint 2013 Search and Creating Dynamic Content Management SolutionsInnoTech
 
Consider performance and security for SharePoint WP/App
Consider performance and security for SharePoint WP/AppConsider performance and security for SharePoint WP/App
Consider performance and security for SharePoint WP/AppTuấn Hải
 
Getting Started with Site Designs and Site Scripts - SPSChi
Getting Started with Site Designs and Site Scripts - SPSChiGetting Started with Site Designs and Site Scripts - SPSChi
Getting Started with Site Designs and Site Scripts - SPSChiDrew Madelung
 
20150211 seo in drupal presentation
20150211 seo in drupal presentation20150211 seo in drupal presentation
20150211 seo in drupal presentationDagmar Muth
 
Using Microsoft Project to automate a workplace culture that works
Using Microsoft Project to automate a workplace culture that worksUsing Microsoft Project to automate a workplace culture that works
Using Microsoft Project to automate a workplace culture that worksProductivity Intelligence Institute
 
Getting Started with SharePoint Patterns and Practices Provisioning Engine-SP...
Getting Started with SharePoint Patterns and Practices Provisioning Engine-SP...Getting Started with SharePoint Patterns and Practices Provisioning Engine-SP...
Getting Started with SharePoint Patterns and Practices Provisioning Engine-SP...Prashant G Bhoyar (Microsoft MVP)
 
SharePoint Saturday San Diego - SharePoint 2013 Apps
SharePoint Saturday San Diego - SharePoint 2013 AppsSharePoint Saturday San Diego - SharePoint 2013 Apps
SharePoint Saturday San Diego - SharePoint 2013 AppsRyan Schouten
 
Developing For Multiple Environments on SharePoint Online
Developing For Multiple Environments on SharePoint OnlineDeveloping For Multiple Environments on SharePoint Online
Developing For Multiple Environments on SharePoint OnlineFrank Sikorski
 
SharePoint 2016 Hybrid Overview
SharePoint 2016 Hybrid OverviewSharePoint 2016 Hybrid Overview
SharePoint 2016 Hybrid OverviewRoy Kim
 
Governance of content, permissions & apps in sharepoint 2013
Governance of content, permissions & apps in sharepoint 2013Governance of content, permissions & apps in sharepoint 2013
Governance of content, permissions & apps in sharepoint 2013Kashish Sukhija
 
Building MuleSoft Applications with Google BigQuery Meetup 4
Building MuleSoft Applications with Google BigQuery Meetup 4Building MuleSoft Applications with Google BigQuery Meetup 4
Building MuleSoft Applications with Google BigQuery Meetup 4MannaAkpan
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Derek Jacoby
 
An Introduction to Django Web Framework
An Introduction to Django Web FrameworkAn Introduction to Django Web Framework
An Introduction to Django Web FrameworkDavid Gibbons
 
BS 8878: Systematic Approaches to Documenting Web Accessibility Policies and ...
BS 8878: Systematic Approaches to Documenting Web Accessibility Policies and ...BS 8878: Systematic Approaches to Documenting Web Accessibility Policies and ...
BS 8878: Systematic Approaches to Documenting Web Accessibility Policies and ...lisbk
 
Custom Runtimes for the Cloud
Custom Runtimes for the CloudCustom Runtimes for the Cloud
Custom Runtimes for the CloudCloudBees
 
DevOpsGuys - Cloud Adoption Frameworks - IPExpo April 2018
DevOpsGuys - Cloud Adoption Frameworks - IPExpo April 2018DevOpsGuys - Cloud Adoption Frameworks - IPExpo April 2018
DevOpsGuys - Cloud Adoption Frameworks - IPExpo April 2018DevOpsGroup
 
Secrets of Custom API Policies on the Oracle API Platform
Secrets of Custom API Policies on the Oracle API PlatformSecrets of Custom API Policies on the Oracle API Platform
Secrets of Custom API Policies on the Oracle API PlatformPhil Wilkins
 

Similar to Working with site policies in SharePoint 2013 (20)

Relearning SharePoint Development
Relearning SharePoint DevelopmentRelearning SharePoint Development
Relearning SharePoint Development
 
SharePoint 2013 Search and Creating Dynamic Content Management Solutions
SharePoint 2013 Search and Creating Dynamic Content Management SolutionsSharePoint 2013 Search and Creating Dynamic Content Management Solutions
SharePoint 2013 Search and Creating Dynamic Content Management Solutions
 
Consider performance and security for SharePoint WP/App
Consider performance and security for SharePoint WP/AppConsider performance and security for SharePoint WP/App
Consider performance and security for SharePoint WP/App
 
Getting Started with Site Designs and Site Scripts - SPSChi
Getting Started with Site Designs and Site Scripts - SPSChiGetting Started with Site Designs and Site Scripts - SPSChi
Getting Started with Site Designs and Site Scripts - SPSChi
 
20150211 seo in drupal presentation
20150211 seo in drupal presentation20150211 seo in drupal presentation
20150211 seo in drupal presentation
 
Using Microsoft Project to automate a workplace culture that works
Using Microsoft Project to automate a workplace culture that worksUsing Microsoft Project to automate a workplace culture that works
Using Microsoft Project to automate a workplace culture that works
 
Getting Started with SharePoint Patterns and Practices Provisioning Engine-SP...
Getting Started with SharePoint Patterns and Practices Provisioning Engine-SP...Getting Started with SharePoint Patterns and Practices Provisioning Engine-SP...
Getting Started with SharePoint Patterns and Practices Provisioning Engine-SP...
 
SharePoint Saturday San Diego - SharePoint 2013 Apps
SharePoint Saturday San Diego - SharePoint 2013 AppsSharePoint Saturday San Diego - SharePoint 2013 Apps
SharePoint Saturday San Diego - SharePoint 2013 Apps
 
Developing For Multiple Environments on SharePoint Online
Developing For Multiple Environments on SharePoint OnlineDeveloping For Multiple Environments on SharePoint Online
Developing For Multiple Environments on SharePoint Online
 
SharePoint 2016 Hybrid Overview
SharePoint 2016 Hybrid OverviewSharePoint 2016 Hybrid Overview
SharePoint 2016 Hybrid Overview
 
Governance of content, permissions & apps in sharepoint 2013
Governance of content, permissions & apps in sharepoint 2013Governance of content, permissions & apps in sharepoint 2013
Governance of content, permissions & apps in sharepoint 2013
 
Building MuleSoft Applications with Google BigQuery Meetup 4
Building MuleSoft Applications with Google BigQuery Meetup 4Building MuleSoft Applications with Google BigQuery Meetup 4
Building MuleSoft Applications with Google BigQuery Meetup 4
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9
 
An Introduction to Django Web Framework
An Introduction to Django Web FrameworkAn Introduction to Django Web Framework
An Introduction to Django Web Framework
 
BS 8878: Systematic Approaches to Documenting Web Accessibility Policies and ...
BS 8878: Systematic Approaches to Documenting Web Accessibility Policies and ...BS 8878: Systematic Approaches to Documenting Web Accessibility Policies and ...
BS 8878: Systematic Approaches to Documenting Web Accessibility Policies and ...
 
Custom Runtimes for the Cloud
Custom Runtimes for the CloudCustom Runtimes for the Cloud
Custom Runtimes for the Cloud
 
Getting started with Content Deployment in SharePoint 2013
Getting started with Content Deployment in SharePoint 2013Getting started with Content Deployment in SharePoint 2013
Getting started with Content Deployment in SharePoint 2013
 
Pyramid tutorial
Pyramid tutorialPyramid tutorial
Pyramid tutorial
 
DevOpsGuys - Cloud Adoption Frameworks - IPExpo April 2018
DevOpsGuys - Cloud Adoption Frameworks - IPExpo April 2018DevOpsGuys - Cloud Adoption Frameworks - IPExpo April 2018
DevOpsGuys - Cloud Adoption Frameworks - IPExpo April 2018
 
Secrets of Custom API Policies on the Oracle API Platform
Secrets of Custom API Policies on the Oracle API PlatformSecrets of Custom API Policies on the Oracle API Platform
Secrets of Custom API Policies on the Oracle API Platform
 

More from Dragan Panjkov

Leveraging APIs from SharePoint Framework solutions
Leveraging APIs from SharePoint Framework solutionsLeveraging APIs from SharePoint Framework solutions
Leveraging APIs from SharePoint Framework solutionsDragan Panjkov
 
NetWork9-Pretvorite svoju poslovnu aplikaciju u Teams Tab u tri jednostavna k...
NetWork9-Pretvorite svoju poslovnu aplikaciju u Teams Tab u tri jednostavna k...NetWork9-Pretvorite svoju poslovnu aplikaciju u Teams Tab u tri jednostavna k...
NetWork9-Pretvorite svoju poslovnu aplikaciju u Teams Tab u tri jednostavna k...Dragan Panjkov
 
Developing with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premisesDeveloping with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premisesDragan Panjkov
 
Building serverless applications with Microsoft Graph and Azure Functions
Building serverless applications with Microsoft Graph and Azure FunctionsBuilding serverless applications with Microsoft Graph and Azure Functions
Building serverless applications with Microsoft Graph and Azure FunctionsDragan Panjkov
 
Building serverless applications with Microsoft Graph and Azure Functions
Building serverless applications with Microsoft Graph and Azure FunctionsBuilding serverless applications with Microsoft Graph and Azure Functions
Building serverless applications with Microsoft Graph and Azure FunctionsDragan Panjkov
 
How to create custom connector for Microsoft Flow
How to create custom connector for Microsoft FlowHow to create custom connector for Microsoft Flow
How to create custom connector for Microsoft FlowDragan Panjkov
 
Developing with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premisesDeveloping with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premisesDragan Panjkov
 
How to create custom Connector for Microsoft Flow
How to create custom Connector for Microsoft FlowHow to create custom Connector for Microsoft Flow
How to create custom Connector for Microsoft FlowDragan Panjkov
 
Building serverless applications with Microsoft Graph and Azure Functions - S...
Building serverless applications with Microsoft Graph and Azure Functions - S...Building serverless applications with Microsoft Graph and Azure Functions - S...
Building serverless applications with Microsoft Graph and Azure Functions - S...Dragan Panjkov
 
How to create custom connector for Microsoft Flow - SPSNL18
How to create custom connector for Microsoft Flow - SPSNL18How to create custom connector for Microsoft Flow - SPSNL18
How to create custom connector for Microsoft Flow - SPSNL18Dragan Panjkov
 
Building Serverless Applications with Microsoft Graph - ECS 2018
Building Serverless Applications with Microsoft Graph - ECS 2018Building Serverless Applications with Microsoft Graph - ECS 2018
Building Serverless Applications with Microsoft Graph - ECS 2018Dragan Panjkov
 
How to: Create a custom connector for Microsoft Flow
How to: Create a custom connector for Microsoft FlowHow to: Create a custom connector for Microsoft Flow
How to: Create a custom connector for Microsoft FlowDragan Panjkov
 
Microsoft Graph and Azure Functions - SharePoint User Group Frankfurt
Microsoft Graph and Azure Functions - SharePoint User Group FrankfurtMicrosoft Graph and Azure Functions - SharePoint User Group Frankfurt
Microsoft Graph and Azure Functions - SharePoint User Group FrankfurtDragan Panjkov
 
ATD 13 - Enhancing your applications using Microsoft Graph API
ATD 13 - Enhancing your applications using Microsoft Graph APIATD 13 - Enhancing your applications using Microsoft Graph API
ATD 13 - Enhancing your applications using Microsoft Graph APIDragan Panjkov
 
SPS Vienna 2017 - Getting started with APIs for Groups and Planner
SPS Vienna 2017 - Getting started with APIs for Groups and PlannerSPS Vienna 2017 - Getting started with APIs for Groups and Planner
SPS Vienna 2017 - Getting started with APIs for Groups and PlannerDragan Panjkov
 
SPS Lisbon 2017 - Enhancing your applications using Microsoft Graph API
SPS Lisbon 2017 - Enhancing your applications using Microsoft Graph APISPS Lisbon 2017 - Enhancing your applications using Microsoft Graph API
SPS Lisbon 2017 - Enhancing your applications using Microsoft Graph APIDragan Panjkov
 
SPKonferenz 2017 - Introducing SDKs for Microsoft Graph
SPKonferenz 2017 - Introducing SDKs for Microsoft GraphSPKonferenz 2017 - Introducing SDKs for Microsoft Graph
SPKonferenz 2017 - Introducing SDKs for Microsoft GraphDragan Panjkov
 
SPKonferenz 2017 - Planning with Planner
SPKonferenz 2017 - Planning with PlannerSPKonferenz 2017 - Planning with Planner
SPKonferenz 2017 - Planning with PlannerDragan Panjkov
 
MSNetWork 7 - Microsoft Teams Extensibility - bots, connectors, tabs
MSNetWork 7 - Microsoft Teams Extensibility - bots, connectors, tabsMSNetWork 7 - Microsoft Teams Extensibility - bots, connectors, tabs
MSNetWork 7 - Microsoft Teams Extensibility - bots, connectors, tabsDragan Panjkov
 
MSNetWork 7 - Implementacija SharePoint 2016 farme na Azure IAAS
MSNetWork 7 - Implementacija SharePoint 2016 farme na Azure IAASMSNetWork 7 - Implementacija SharePoint 2016 farme na Azure IAAS
MSNetWork 7 - Implementacija SharePoint 2016 farme na Azure IAASDragan Panjkov
 

More from Dragan Panjkov (20)

Leveraging APIs from SharePoint Framework solutions
Leveraging APIs from SharePoint Framework solutionsLeveraging APIs from SharePoint Framework solutions
Leveraging APIs from SharePoint Framework solutions
 
NetWork9-Pretvorite svoju poslovnu aplikaciju u Teams Tab u tri jednostavna k...
NetWork9-Pretvorite svoju poslovnu aplikaciju u Teams Tab u tri jednostavna k...NetWork9-Pretvorite svoju poslovnu aplikaciju u Teams Tab u tri jednostavna k...
NetWork9-Pretvorite svoju poslovnu aplikaciju u Teams Tab u tri jednostavna k...
 
Developing with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premisesDeveloping with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premises
 
Building serverless applications with Microsoft Graph and Azure Functions
Building serverless applications with Microsoft Graph and Azure FunctionsBuilding serverless applications with Microsoft Graph and Azure Functions
Building serverless applications with Microsoft Graph and Azure Functions
 
Building serverless applications with Microsoft Graph and Azure Functions
Building serverless applications with Microsoft Graph and Azure FunctionsBuilding serverless applications with Microsoft Graph and Azure Functions
Building serverless applications with Microsoft Graph and Azure Functions
 
How to create custom connector for Microsoft Flow
How to create custom connector for Microsoft FlowHow to create custom connector for Microsoft Flow
How to create custom connector for Microsoft Flow
 
Developing with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premisesDeveloping with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premises
 
How to create custom Connector for Microsoft Flow
How to create custom Connector for Microsoft FlowHow to create custom Connector for Microsoft Flow
How to create custom Connector for Microsoft Flow
 
Building serverless applications with Microsoft Graph and Azure Functions - S...
Building serverless applications with Microsoft Graph and Azure Functions - S...Building serverless applications with Microsoft Graph and Azure Functions - S...
Building serverless applications with Microsoft Graph and Azure Functions - S...
 
How to create custom connector for Microsoft Flow - SPSNL18
How to create custom connector for Microsoft Flow - SPSNL18How to create custom connector for Microsoft Flow - SPSNL18
How to create custom connector for Microsoft Flow - SPSNL18
 
Building Serverless Applications with Microsoft Graph - ECS 2018
Building Serverless Applications with Microsoft Graph - ECS 2018Building Serverless Applications with Microsoft Graph - ECS 2018
Building Serverless Applications with Microsoft Graph - ECS 2018
 
How to: Create a custom connector for Microsoft Flow
How to: Create a custom connector for Microsoft FlowHow to: Create a custom connector for Microsoft Flow
How to: Create a custom connector for Microsoft Flow
 
Microsoft Graph and Azure Functions - SharePoint User Group Frankfurt
Microsoft Graph and Azure Functions - SharePoint User Group FrankfurtMicrosoft Graph and Azure Functions - SharePoint User Group Frankfurt
Microsoft Graph and Azure Functions - SharePoint User Group Frankfurt
 
ATD 13 - Enhancing your applications using Microsoft Graph API
ATD 13 - Enhancing your applications using Microsoft Graph APIATD 13 - Enhancing your applications using Microsoft Graph API
ATD 13 - Enhancing your applications using Microsoft Graph API
 
SPS Vienna 2017 - Getting started with APIs for Groups and Planner
SPS Vienna 2017 - Getting started with APIs for Groups and PlannerSPS Vienna 2017 - Getting started with APIs for Groups and Planner
SPS Vienna 2017 - Getting started with APIs for Groups and Planner
 
SPS Lisbon 2017 - Enhancing your applications using Microsoft Graph API
SPS Lisbon 2017 - Enhancing your applications using Microsoft Graph APISPS Lisbon 2017 - Enhancing your applications using Microsoft Graph API
SPS Lisbon 2017 - Enhancing your applications using Microsoft Graph API
 
SPKonferenz 2017 - Introducing SDKs for Microsoft Graph
SPKonferenz 2017 - Introducing SDKs for Microsoft GraphSPKonferenz 2017 - Introducing SDKs for Microsoft Graph
SPKonferenz 2017 - Introducing SDKs for Microsoft Graph
 
SPKonferenz 2017 - Planning with Planner
SPKonferenz 2017 - Planning with PlannerSPKonferenz 2017 - Planning with Planner
SPKonferenz 2017 - Planning with Planner
 
MSNetWork 7 - Microsoft Teams Extensibility - bots, connectors, tabs
MSNetWork 7 - Microsoft Teams Extensibility - bots, connectors, tabsMSNetWork 7 - Microsoft Teams Extensibility - bots, connectors, tabs
MSNetWork 7 - Microsoft Teams Extensibility - bots, connectors, tabs
 
MSNetWork 7 - Implementacija SharePoint 2016 farme na Azure IAAS
MSNetWork 7 - Implementacija SharePoint 2016 farme na Azure IAASMSNetWork 7 - Implementacija SharePoint 2016 farme na Azure IAAS
MSNetWork 7 - Implementacija SharePoint 2016 farme na Azure IAAS
 

Recently uploaded

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 

Recently uploaded (20)

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 

Working with site policies in SharePoint 2013

  • 1. Working with site policies in SharePoint 2013 DRAGAN PANJKOV, PLANB. B: WWW.DRAGAN-PANJKOV.COM T: @PANJKOV SHAREPOINT AND PROJECT CONFERENCE ADRIATICS 2013 ZAGREB, NOVEMBER 27-28 2013
  • 3. About • Dragan Panjkov • Working with SharePoint since 2007 • www.dragan-panjkov.com • www.twitter.com/panjkov • PlanB. d.o.o. • www.planb.ba • SharePoint user group • www.1sug.com
  • 4. Agenda • Information Management Policies • Site Policies • Configuration steps needed to enable Site Policies on sites • Creating Site Policies in SharePoint UI • Working with Site Policies using Server OM • Working with Site Policies using Client OM
  • 5. Information management policy? • An information management policy is a set of rules that govern the availability and behavior of a certain type of important content. Policy enables administrators to control and evaluate who can access information, how long to retain information, and how effectively people are complying with the policy.
  • 6. In other words • Information Management Policy connects business need and technical implementation of the solution to ensure that standards are met Business Outcomes Information Classification Functional Preferences Information Architecture Functional Design Information Management Standards Information Management Policies Information Management Architecture Technical Considerations Service Management Policies Service Architecture Project Constraints Budget, Timeframe, Resources
  • 7. Information Management Policy Scopes • List • Library • Content Type • Site
  • 8. Site Retention? • How do we control site lifecycle? • Are we able to track old and unused sites? • Are we able to easily delete old, unused, expired sites?
  • 9. Site Policies • Opportunity to predefine retention rules for sites • Assign retention policy at site creation • Site Policies can be configured that sites are: • Closed and then deleted automatically • Deleted automatically after certain period of time • Marked as read-only • Site Policies can be published in Content Type Hub
  • 10. Enabling Site Policy functionality In UI: • Enable features in Site Collection • Library and Folder Based Retention • Site Policy • Hidden feature “Record Resources” activated automatically In onet.xml <SiteFeatures> <Feature ID="5bccb9a4-b903-4fd1-8620-b795fa33c9ba" Name="RecordResources" /> <Feature ID="063c26fa-3ccc-4180-8a84-b6f98e991df3" Name="LocationBasedPolicy" /> <Feature ID="2fcd5f8a-26b7-4a6a-9755-918566dba90a" Name="ProjectBasedPolicy" /> </SiteFeatures>
  • 11. CREATING AND APPLYING SITE POLICIES IN UI
  • 21. Site Policies in SSOM namespace Microsoft.Office.RecordsManagement.InformationPolicy { public class ProjectPolicy { public string Description { get; internal set; } public string EmailBody { get; set; } public string EmailBodyWithTeamMailbox { get; set; } public string EmailSubject { get; set; } public string Name { get; internal set; } public public public public public public public public public public public } } static void ApplyProjectPolicy(SPWeb web, ProjectPolicy projectPolicy); static void CloseProject(SPWeb web); static bool DoesProjectHavePolicy(SPWeb web); static ProjectPolicy GetCurrentlyAppliedProjectPolicyOnWeb(SPWeb web); static DateTime GetProjectCloseDate(SPWeb web); static DateTime GetProjectExpirationDate(SPWeb web); static List<ProjectPolicy> GetProjectPolicies(SPWeb web); static bool IsProjectClosed(SPWeb web); static void OpenProject(SPWeb web); static void PostponeProject(SPWeb web); void SavePolicy();
  • 23. Create Site Policies // 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);
  • 24. Read Site Policies that exist on site private static void ReadProjectPolicies() { using (SPSite targetSite = new SPSite(siteUrl)) { SPWeb targetWeb = targetSite.RootWeb; List<ProjectPolicy> projectPolicies = ProjectPolicy.GetProjectPolicies(targetWeb); if (projectPolicies!= null && projectPolicies.Count > 0) { Console.WriteLine("Project Policies on web {0}", siteUrl); foreach (var item in projectPolicies) { Console.WriteLine("Name: {0}",item.Name); Console.WriteLine("Desc: {0}",item.Description); Console.WriteLine(); } } Console.WriteLine(); try { targetWeb.Dispose(); } catch { } } }
  • 25. Get Applied Policy private static void GetAppliedPolicy() { using (SPSite targetSite = new SPSite(siteUrl)) { SPWeb targetWeb = targetSite.RootWeb; ProjectPolicy appliedPolicy = ProjectPolicy.GetCurrentlyAppliedProjectPolicyOnWeb(targetWeb); if (appliedPolicy != null) { Console.WriteLine("Currently applied Project Policy on web {0}", siteUrl); Console.WriteLine(appliedPolicy.Name); Console.WriteLine(appliedPolicy.Description); } else { Console.WriteLine("Project Policy is not applied on web {0}", siteUrl); } Console.WriteLine(); try { targetWeb.Dispose(); } catch { } } }
  • 26. Is Policy Applied? private static void IsPolicyApplied() { using (SPSite targetSite = new SPSite(siteUrl)) { SPWeb targetWeb = targetSite.RootWeb; bool isPolicyApplied = ProjectPolicy.DoesProjectHavePolicy(targetWeb); if (isPolicyApplied) { Console.WriteLine("Web has policy applied {0}", siteUrl); } else { Console.WriteLine("Project Policy is not applied on web {0}", siteUrl); } Console.WriteLine(); try { targetWeb.Dispose(); } catch { } } }
  • 27. Apply Policy private static void ApplyPolicySSOM() { string policyName = "DEVSITE DoNotClose-ReadOnly Policy"; using (SPSite targetSite = new SPSite(siteUrl)) { SPWeb targetWeb = targetSite.RootWeb; List<ProjectPolicy> webPolicies = ProjectPolicy.GetProjectPolicies(targetWeb); ProjectPolicy selectedPolicy = webPolicies.Where(p => p.Name == policyName).FirstOrDefault(); if (selectedPolicy != null) { ProjectPolicy.ApplyProjectPolicy(targetWeb, selectedPolicy); targetWeb.Update(); Console.WriteLine("Successfully applied policy '{0}' on web '{1}'", policyName, targetWeb); } } }
  • 28. Get Project Close and Expiration Date private static void GetProjectCloseExpirationDate() { using (SPSite targetSite = new SPSite(siteUrl)) { SPWeb targetWeb = targetSite.RootWeb; DateTime closedDate = ProjectPolicy.GetProjectCloseDate(targetWeb); DateTime expirationDate = ProjectPolicy.GetProjectExpirationDate(targetWeb); if (closedDate != DateTime.MinValue) { Console.WriteLine("Close Date: {0}", closedDate); } if (expirationDate != DateTime.MinValue) { Console.WriteLine("Expiration Date: {0}", expirationDate); } Console.WriteLine(); try { targetWeb.Dispose(); } catch { } } }
  • 29. Open Closed Site ELEVATED private static void OpenProject() { using (SPSite site = new SPSite(siteUrl)) { SPSecurity.RunWithElevatedPrivileges(delegate { using (SPSite targetSite = new SPSite(siteUrl)) { SPWeb targetWeb = targetSite.RootWeb; bool isClosed = ProjectPolicy.IsProjectClosed(targetWeb); Console.WriteLine("Site is Closed! {0}", siteUrl); if (isClosed) { Console.WriteLine("Trying to open site."); ProjectPolicy.OpenProject(targetWeb); Console.WriteLine("Site is now Open! {0}", siteUrl); } Console.WriteLine(); try { targetWeb.Dispose(); } catch { } } }); } }
  • 30. Site Policies in CSOM namespace Microsoft.SharePoint.Client.InformationPolicy { [ScriptType("SP.InformationPolicy.ProjectPolicy", ServerTypeId = "{ec5e0a70-0cc3-408f-a4dc-1bb3495aac75}")] public class ProjectPolicy : ClientObject { [EditorBrowsable(EditorBrowsableState.Never)] public ProjectPolicy(ClientRuntimeContext context, ObjectPath objectPath); [Remote] public static void ApplyProjectPolicy(ClientRuntimeContext context, Web web, ProjectPolicy projectPolicy); [Remote] public static void CloseProject(ClientRuntimeContext context, Web web); [Remote] public static ClientResult<bool> DoesProjectHavePolicy(ClientRuntimeContext context, Web web); [Remote] public static ProjectPolicy GetCurrentlyAppliedProjectPolicyOnWeb(ClientRuntimeContext context, Web web); [Remote] public static ClientResult<DateTime> GetProjectCloseDate(ClientRuntimeContext context, Web web); [Remote] public static ClientResult<DateTime> GetProjectExpirationDate(ClientRuntimeContext context, Web web); [Remote] public static ClientObjectList<ProjectPolicy> GetProjectPolicies(ClientRuntimeContext context, Web web); protected override bool InitOnePropertyFromJson(string peekedName, JsonReader reader); [Remote] public static ClientResult<bool> IsProjectClosed(ClientRuntimeContext context, Web web); [Remote] public static void OpenProject(ClientRuntimeContext context, Web web); [Remote] public static void PostponeProject(ClientRuntimeContext context, Web web); [Remote] public void SavePolicy(); } }
  • 32. Read Site Policies that exist on site private static void ReadProjectPoliciesCsom() { ClientContext policyContext = new ClientContext(siteUrl); Web targetWeb = policyContext.Web; ClientObjectList<ProjectPolicy> projectPolicies = ProjectPolicy.GetProjectPolicies(policyContext, targetWeb); policyContext.Load(projectPolicies); policyContext.ExecuteQuery(); if (projectPolicies != null && projectPolicies.Count > 0) { Console.WriteLine("Project Policies on web {0}", siteUrl); foreach (var item in projectPolicies) { Console.WriteLine("Name: {0}", item.Name); Console.WriteLine("Desc: {0}", item.Description); Console.WriteLine(); } } Console.WriteLine(); }
  • 33. Get Applied Policy private static void GetAppliedPolicyCsom() { ClientContext policyContext = new ClientContext(siteUrl); Web targetWeb = policyContext.Web; ClientResult<bool> isPolicyApplied = ProjectPolicy.DoesProjectHavePolicy(policyContext, targetWeb); policyContext.ExecuteQuery(); if (isPolicyApplied.Value) { ProjectPolicy appliedPolicy = ProjectPolicy.GetCurrentlyAppliedProjectPolicyOnWeb(policyContext, targetWeb); policyContext.Load(appliedPolicy); policyContext.ExecuteQuery(); if (appliedPolicy.TypedObject.ServerObjectIsNull != true) { Console.WriteLine("Currently applied Project Policy on web {0}", siteUrl); Console.WriteLine(appliedPolicy.Name); Console.WriteLine(appliedPolicy.Description); } } else { Console.WriteLine("Project Policy is not applied on web {0}", siteUrl); } Console.WriteLine(); }
  • 34. Is Policy Applied? private static void IsPolicyAppliedCsom() { ClientContext policyContext = new ClientContext(siteUrl); Web targetWeb = policyContext.Web; ClientResult<bool> isPolicyApplied = ProjectPolicy.DoesProjectHavePolicy(policyContext, targetWeb); policyContext.ExecuteQuery(); if (isPolicyApplied.Value) { Console.WriteLine("Web has policy applied {0}", siteUrl); } else { Console.WriteLine("Project Policy is not applied on web {0}", siteUrl); } Console.WriteLine(); }
  • 35. Apply Policy private static void ApplyPolicyCsom() { string policyName = "DEVSITE DoNotClose-ReadOnly Policy"; ClientContext policyContext = new ClientContext(siteUrl); targetWeb); Web targetWeb = policyContext.Web; ClientObjectCollection<ProjectPolicy> webPolicies = ProjectPolicy.GetProjectPolicies(policyContext, policyContext.Load(webPolicies); policyContext.ExecuteQuery(); ProjectPolicy selectedPolicy = webPolicies.Where(p => p.Name == policyName).FirstOrDefault(); if (selectedPolicy != null) { ProjectPolicy.ApplyProjectPolicy(policyContext, targetWeb, selectedPolicy); policyContext.ExecuteQuery(); Console.WriteLine("Successfully applied policy '{0}' on web '{1}'", policyName, siteUrl); } Console.WriteLine(); }
  • 36. Get Project Close and Expiration Date private static void GetProjectCloseExpirationDateCsom() { ClientContext policyContext = new ClientContext(siteUrl); Web targetWeb = policyContext.Web; ClientResult<DateTime> closedDate = ProjectPolicy.GetProjectCloseDate(policyContext, targetWeb); ClientResult<DateTime> expirationDate = ProjectPolicy.GetProjectExpirationDate(policyContext, targetWeb); policyContext.ExecuteQuery(); if (closedDate.Value != DateTime.MinValue) { Console.WriteLine("Close Date: {0}", closedDate.Value); } if (expirationDate.Value != DateTime.MinValue) { Console.WriteLine("Expiration Date: {0}", expirationDate.Value); } Console.WriteLine(); }
  • 37. Close Site private static void CloseProjectCsom() { ClientContext policyContext = new ClientContext(siteUrl); Web targetWeb = policyContext.Web; ClientResult<bool> isClosed = ProjectPolicy.IsProjectClosed(policyContext, targetWeb); policyContext.ExecuteQuery(); if (!isClosed.Value) { ProjectPolicy.CloseProject(policyContext, targetWeb); } policyContext.ExecuteQuery(); isClosed = ProjectPolicy.IsProjectClosed(policyContext, targetWeb); policyContext.ExecuteQuery(); if (isClosed.Value) { Console.WriteLine("Project is closed! {0}", siteUrl); } else { Console.WriteLine("Project is NOT closed!"); } Console.WriteLine(); }
  • 38. Resources • http://msdn.microsoft.com/enus/library/microsoft.office.recordsmanagement.informationpolicy.proj ectpolicy_members.aspx • http://technet.microsoft.com/en-us/library/jj219569.aspx • http://blog.dragan-panjkov.com/archive/2013/06/30/creating-sitepolicy-in-sharepoint-2013-using-server-code.aspx • http://blog.dragan-panjkov.com/archive/2013/10/27/configuring-sitepolicy-in-sharepoint-2013-using-server-code.aspx • http://blogs.technet.com/b/tothesharepoint/archive/2013/03/28/sitepolicy-in-sharepoint.aspx • http://stevemannspath.blogspot.com/2012/08/sharepoint-2013-siteretention-getting.html • http://www.booden.net/ProjectPolicy.aspx
  • 40. thank you. SHAREPOINT AND PROJECT CONFERENCE ADRIATICS 2013 ZAGREB, NOVEMBER 27-28 2013