Coding and life; what our kids are missing

Wandering around the land of Facebook, came across a video (watch it above) shared by a common friend. It got me thinking back in the time when I first got access to a PC (maybe way back in 1988 or 89) with a green screen and a blinking cursor announcing proudly the DOS prompt.

I just cannot forget the rush, the excitement of running first set of commands on DOS prompt and toying around with BASIC, DBase. Document editing with WordStar and WordPerfect. Playing around with DotMatrix printers and access to first Daisy Wheel Electronic Typewriter and excitement of connecting it to a computer and watching with wide wondering eyes, as each character printed itself (without touching the keys).

So what has learning to code to do with everyone’s life? Continue reading “Coding and life; what our kids are missing”

How to find all the websites using enterprise features in SharePoint

A customer came up and said, we are having a large number of SharePoint Enterprise licenses and we want to know how many websites in our Farm are actually using Enterprise features of SharePoint.

In SharePoint, enterprise features are available by enabling the SharePoint Feature called as “PremiumWeb” with featureID as “0806D127-06E6-447a-980E-2E90B03101B8”. A good list of available enterprise features and their contents is available at http://blogs.msdn.com/ekraus/archive/2008/08/13/enterprise-features-exposed.aspx.

Now to find out which websites are actually have the Enterprise features (using them or not, is a totally different area of discussion) enabled for them, we should be easily able to iterate through the webs and their sub-webs and then check the feature list of each SPWeb object and see if we have “PremiumWeb” feature available or not. If the feature exists, that particular web has got enterprise features enabled.

Below is the code that I used to create a sample console application, which would give us a count of SPWebs which have got “PremiumWeb” feature enabled.

namespace FindPremiumWebs 
{ 
    class Program 
    { 
        static long featureCounter = 0; 
        static void Main(string[] args) 
        { 
            if (args.Length > 0) 
            { 
                Console.WriteLine("Checking webs under {0}...", args[0]); 
                Console.WriteLine("Found {0} webs using Enterprise Features.", 
                                   getAllPremiumWebs(args[0])); 
            } 
            else 
            { 
                Console.WriteLine("URL not specified"); 
            } 
        } 
        
        public static long getAllPremiumWebs(string siteURL) 
        { 
            using (SPSite site = new SPSite(siteURL)) 
            { 
                using (SPWeb web = site.RootWeb) 
                { 
                    CheckSubWebs(web); 
                } 
            } 
            return featureCounter; 
        } 
        
        private static void CheckSubWebs(SPWeb web) 
        { 
            foreach (SPWeb subWeb in web.Webs) 
            { 
                foreach (SPFeature feature in subWeb.Features) 
                { 
                    if (feature.Definition.DisplayName == "PremiumWeb") 
                    { 
                        featureCounter++; 
                    } 
                } 
                CheckSubWebs(subWeb); 
                subWeb.Dispose(); 
            } 
        } 
    } 
}

This console application expects that a URL of the root site be passed to it and it will iterate all the sub-webs under that root site and give out a total count of webs using (oops! enabled with) enterprise features.

As always… Happy Coding

Control a Windows Service from SharePoint Central Admin site

You are a very good developer and have created a great windows service that works like a charm and your CEO likes the functionality and would love to have your SharePoint Administrator control it from the SharePoint Central Administration Site !!!!

What a lovely scenario 🙂

But what also is interesting in this is, that the usual way to control windows services will not work properly when used from within the SharePoint. So then how do you do it? Well, SharePoint itself comes to our rescue and provides us a couple of classes knows as SPWindowsService and SPServiceInstance which will allow you to control your windows service from SharePoint.

Well, there are a few steps that you need to follow to make sure you are able to control and use the windows service from within the SharePoint’s context.

  • Use the classes SPWindowsService and SPServiceInstance classes to wrap the Windows Service.
  • Add these services to the Services to the servers of the farm.
  • Register the service to the desired servers in the farm.
  • Provide custom aspx pages (as Application Pages) that can be used to start/stop the service.
  • Use SPJobDefinition to start the service. This way, the service can also be started on a remote server.

For further reading, I would suggest that you go through this article in April 2009 edition of MSDN magazine.