Saturday, March 10, 2012

SharePoint - Feature Activation Tool

Here is sample code which will activate/deactivate site/web feature for whole web application

Configuration:


    < add key="WebApplicationName" value="{Web Application URL}" />
    < add key="DeploymentType" value="Deploy {or Rollback}" />
    < add key="FeatureID" value="{Feature Id}" />
    < add key="FeatureType" value="web{or Site}" />


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("Orphaned site or could be any other reason. Please check log for more detail: " + ex.Message + ex.StackTrace); ;
                                        logWriter.WriteLine("Orphaned site or could be any other reason. Please check log for more detail: " + ex.Message + ex.StackTrace);
                                        logWriter.WriteLine("==========================================================================");
                                        continue;
                                    }


                                    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)
                                {
                                    try
                                    {
                                        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)
                                            {
                                                // for sub sites.
                                                Console.WriteLine("Orphaned site or could be any other reason. Please check log for more detail: " + ex.Message + ex.StackTrace);
                                                logWriter.WriteLine("Orphaned site or could be any other reason. Please check log for more detail: " + ex.Message + ex.StackTrace);
                                                logWriter.WriteLine("==========================================================================");
                                                continue;
                                            }
                                            objTempWeb.Close();
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        // for site collection.
                                        Console.WriteLine("Orphaned site or could be any other reason. Please check log for more detail: " + ex.Message + ex.StackTrace);
                                        logWriter.WriteLine("Orphaned site or could be any other reason. Please check log for more detail: " + ex.Message + ex.StackTrace);
                                        logWriter.WriteLine("==========================================================================");
                                        continue;
                                    }

                                    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