Sunday, June 17, 2012

SharePoint Feature Activation/Deactivation Tool

You can activate/deactivate feature for whole web application. Feature can be Site or Web level. Here is the configuration settings for that tool

Console Application Code : 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Microsoft.SharePoint;
using System.Configuration;
using Microsoft.SharePoint.Administration;

namespace FeatureActivation
{
    class Program
    {
        private static StreamWriter logWriter;
        private static Guid FeatureGUID;

        static void Main(string[] args)
        {
            logWriter = new StreamWriter("FeatureActivationLog.txt");
            string strWebApplicationName = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["WebApplicationName"]);
            FeatureGUID = new Guid(Convert.ToString(ConfigurationManager.AppSettings["FeatureID"]));
            string strDeploymentType = Convert.ToString(ConfigurationManager.AppSettings["DeploymentType"]);
            string strFeatureType = Convert.ToString(ConfigurationManager.AppSettings["FeatureType"]);
            int siteCollectionCount = 0;
            int siteCount = 0;
            int webCount = 0;
            DateTime startTime;
            DateTime endTime;
            if (string.IsNullOrEmpty(strWebApplicationName))
            {
                Console.WriteLine("Configuration Error");
                Console.WriteLine("Press enter to continue...");
                Console.ReadLine();
            }
            else
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {

                    if (strDeploymentType.ToLower() == "deploy")
                    {
                        if (!IsFeatureInstall())
                        {
                            Console.WriteLine("Feature is not installed");
                            logWriter.WriteLine("Feature is not installed");
                            logWriter.WriteLine("==========================================================================");
                            return;
                        }
                    }
                    if (strFeatureType.ToLower() == "site")
                    {
                        using (SPSite objSite = new SPSite(strWebApplicationName))
                        {
                            SPSiteCollection objSiteCollection = objSite.WebApplication.Sites;
                            if (objSiteCollection != null && objSiteCollection.Count > 0)
                            {
                                startTime = DateTime.Now;
                                foreach (SPSite objTempSite in objSiteCollection)
                                {
                                    siteCollectionCount++;
                                    try
                                    {
                                        if (strDeploymentType.ToLower() == "deploy")
                                        {
                                            
                                                ActivateSiteFeature(objTempSite);
                                                Console.WriteLine("Activate feature for " + objTempSite.Url);
                                                logWriter.WriteLine("Activate feature for " + objTempSite.Url);
                                                logWriter.WriteLine("==========================================================================");
                                            
                                        }
                                        else if (strDeploymentType.ToLower() == "rollback")
                                        {
                                            

                                                DeactivateSiteFeature(objTempSite);
                                                Console.WriteLine("Deactivate feature for " + objTempSite.Url);
                                                logWriter.WriteLine("Deactivate feature for " + objTempSite.Url);
                                                logWriter.WriteLine("==========================================================================");


                                            
                                        }
                                        else
                                        {
                                            logWriter.WriteLine("Unknown Deployment Type");
                                            logWriter.WriteLine("==========================================================================");
                                            Console.WriteLine("Unknown Deployment Type");
                                        }

                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine("Error : Resetting feature for " + objTempSite.Url);
                                        logWriter.WriteLine("Error : Resetting feature for " + objTempSite.Url + " Error Message is " + ex.StackTrace, ex.Message, ex.InnerException, ex.Source);
                                        logWriter.WriteLine("==========================================================================");

                                    }


                                    objTempSite.Close();
                                }
                                endTime = DateTime.Now;
                                logWriter.WriteLine("**********************SUMMARY*****************************");
                                Console.WriteLine("Total Number Of SiteCollection for " + strWebApplicationName + " is " + siteCollectionCount);
                                logWriter.WriteLine("Total Number Of SiteCollection for " + strWebApplicationName + " is " + siteCollectionCount);

                                Console.WriteLine("Start Time Of " + strWebApplicationName + " is " + startTime.ToString());
                                logWriter.WriteLine("Start Time Of " + strWebApplicationName + " is " + startTime.ToString());

                                Console.WriteLine("End Time Of " + strWebApplicationName + " is " + endTime.ToString());
                                logWriter.WriteLine("End Time Of " + strWebApplicationName + " is " + endTime.ToString());
                                logWriter.Close();
                            }
                        }
                    }
                    else if (strFeatureType.ToLower() == "web")
                    {
                        using (SPSite objSite = new SPSite(strWebApplicationName))
                        {
                            SPSiteCollection objSiteCollection = objSite.WebApplication.Sites;
                            if (objSiteCollection != null && objSiteCollection.Count > 0)
                            {
                                startTime = DateTime.Now;
                                foreach (SPSite objTempSite in objSiteCollection)
                                {
                                    siteCollectionCount++;
                                    foreach (SPWeb objTempWeb in objTempSite.AllWebs)
                                    {
                                        webCount++;
                                        try
                                        {
                                            if (strDeploymentType.ToLower() == "deploy")
                                            {
                                                    ActivateWebFeature(objTempWeb);
                                                    Console.WriteLine("Activate feature for " + objTempWeb.Url);
                                                    logWriter.WriteLine("Activate feature for " + objTempWeb.Url);
                                                    logWriter.WriteLine("==========================================================================");
                                            }
                                            else if (strDeploymentType.ToLower() == "rollback")
                                            {
                                                    DeactivateWebFeature(objTempWeb);
                                                    Console.WriteLine("Deactivate feature for " + objTempWeb.Url);
                                                    logWriter.WriteLine("Deactivate feature for " + objTempWeb.Url);
                                                    logWriter.WriteLine("==========================================================================");

                                            }
                                            else
                                            {
                                                logWriter.WriteLine("Unknown Deployment Type");
                                                logWriter.WriteLine("==========================================================================");
                                                Console.WriteLine("Unknown Deployment Type");
                                            }

                                        }

                                        catch (Exception ex)
                                        {
                                            Console.WriteLine("Error : Resetting feature for " + objTempWeb.Url);
                                            logWriter.WriteLine("Error : Resetting feature for " + objTempWeb.Url + " Error Message is " + ex.StackTrace, ex.Message, ex.InnerException, ex.Source);
                                            logWriter.WriteLine("==========================================================================");

                                        }
                                        objTempWeb.Close();
                                    }

                                    objTempSite.Close();
                                }
                                endTime = DateTime.Now;

                                logWriter.WriteLine("**********************SUMMARY*****************************");
                                Console.WriteLine("Total Number Of SiteCollection for " + strWebApplicationName + " is " + siteCollectionCount);
                                logWriter.WriteLine("Total Number Of SiteCollection for " + strWebApplicationName + " is " + siteCollectionCount);

                                Console.WriteLine("Total Number Of Web for " + strWebApplicationName + " is " + webCount);
                                logWriter.WriteLine("Total Number Of Web for " + strWebApplicationName + " is " + webCount);

                                Console.WriteLine("Start Time Of " + strWebApplicationName + " is " + startTime.ToString());
                                logWriter.WriteLine("Start Time Of " + strWebApplicationName + " is " + startTime.ToString());

                                Console.WriteLine("End Time Of " + strWebApplicationName + " is " + endTime.ToString());
                                logWriter.WriteLine("End Time Of " + strWebApplicationName + " is " + endTime.ToString());
                                logWriter.Close();
                            }
                        }
                    }
                    else
                    {
                        logWriter.WriteLine("Unknown Feature Type");
                        logWriter.WriteLine("==========================================================================");
                        Console.WriteLine("Unknown Feature Type");
                    }
                });
                Console.WriteLine("Press enter to continue...");
                Console.ReadLine();
            }
        }

        private static bool IsFeatureInstall()
        {
            bool bFound = false;
            //Finds the feature definition.
            foreach (SPFeatureDefinition featureDef in SPFarm.Local.FeatureDefinitions)
            {
                try
                {
                    if (featureDef.Id.Equals(FeatureGUID))
                    {
                        bFound = true;
                        break;
                    }
                }
                catch (Exception ex)
                {
                    //This is failing if feature is installed and feature file is not there
                    //we have to ignore this exception
                }
            }
            return bFound;
        }

        private static void ActivateSiteFeature(SPSite objSite)
        {
            bool bActive = false;
            //Checks whether the user is activated already.
            foreach (SPFeature feature in objSite.Features)
            {
                if (feature.DefinitionId.Equals(FeatureGUID))
                {
                    bActive = true;
                    break;
                }
            }

            if (!bActive)
            {
                objSite.Features.Add(FeatureGUID);
            }
        }
        private static void DeactivateSiteFeature(SPSite objSite)
        {
            bool bActive = false;
            //Checks whether the user is activated already.
            foreach (SPFeature feature in objSite.Features)
            {
                if (feature.DefinitionId.Equals(FeatureGUID))
                {
                    bActive = true;
                    break;
                }
            }

            if (bActive)
            {
                objSite.Features.Remove(FeatureGUID);
            }
        }
        private static void ActivateWebFeature(SPWeb objWeb)
        {
            bool bActive = false;
            //Checks whether the user is activated already.
            foreach (SPFeature feature in objWeb.Features)
            {
                if (feature.DefinitionId.Equals(FeatureGUID))
                {
                    bActive = true;
                    break;
                }
            }

            if (!bActive)
            {
                objWeb.Features.Add(FeatureGUID);
            }
        }
        private static void DeactivateWebFeature(SPWeb objWeb)
        {
            bool bActive = false;
            //Checks whether the user is activated already.
            foreach (SPFeature feature in objWeb.Features)
            {
                if (feature.DefinitionId.Equals(FeatureGUID))
                {
                    bActive = true;
                    break;
                }
            }

            if (bActive)
            {
                objWeb.Features.Remove(FeatureGUID);
            }
        }

    }
}

No comments:

Post a Comment