Create a SharePoint Website from a CRM Plug-in



using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Principal;

using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using MyCrmService = ProfessionalServicesPlugins.CrmSdk;

using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;

namespace ProfessionalServicesPlugins
{
public class CreateProjectPlugin : IPlugin
{
///
/// Provision a SharePoint web when new Projects are created
///

public void Execute(IPluginExecutionContext context)
{
DynamicEntity entity = null;

// Create the task on the Microsoft CRM server.
MyCrmService.CrmService crmService = GetCrmService();

// Check if the input parameters property bag contains a target
// of type DynamicEntity and it is the correct entity type
if (context.InputParameters.Properties.Contains("Target") &&
context.InputParameters.Properties["Target"] is DynamicEntity &&
context.PrimaryEntityName == MyCrmService.EntityName.new_project.ToString())
{
// Obtain the target business entity from the input parmameters
entity = (DynamicEntity)context.InputParameters.Properties["Target"];

// Get the Project CRM properties
string projectName = entity.Properties["new_name"].ToString();

// Because plug-ins run as Network Service,
// we need to run with elevated
// privileges within SharePoint
SPSecurity.RunWithElevatedPrivileges(delegate()
{
// Access the root site collection
using (SPSite elevatedSite = new
SPSite("http://localhost:7777/sites/projects"))
{
SPWebCollection sites = elevatedSite.AllWebs;
elevatedSite.AllowUnsafeUpdates = true;

// Create the new Web
using (SPWeb web = sites.Add(projectName, projectName,
projectName, 1033, "STS#0", false, false))
{
// Add the URL to the entity
entity.Properties.Add(new StringProperty("new_sharepointurl",
web.Url));
}
}
});
}
}

private MyCrmService.CrmService GetCrmService()
{
// Setup the Authentication Token
MyCrmService.CrmAuthenticationToken token = new
MyCrmService.CrmAuthenticationToken();
token.OrganizationName = "MicrosoftCRM";

MyCrmService.CrmService crmService = new MyCrmService.CrmService();
crmService.Credentials = System.Net.CredentialCache.DefaultCredentials;
crmService.CrmAuthenticationTokenValue = token;

return crmService;
}
}
}