Archives / 2004 / September
  • MacawSharePointSkinner, a tool for non-intrusive modifications to SharePoint

    UPDATED: VERSION IS RELEASED. See for more information.

    I did mention ( before a tool I was working on, the MacawSharePointSkinner.

    What does the MacawSharePointSkinner? I will not try to repeat myself, so I copied the introduction from the documentation of version

    Welcome to the MacawSharePointSkinner. MacawSharePointSkinner is a tool designed to enable non-intrusive modifications to the visual and functional design of SharePoint. The tool can be used for both Windows SharePoint Services 2.0 and for Microsoft Office SharePoint Portal Server 2003. Actually, it can be used for any web site utilizing the ASP.NET technology.


    One of the major issues that we encounter in the implementation of SharePoint within organizations is that organizations want modifications to the visual and functional design that are almost impossible to implement without a major overhaul of the standard files and templates provided with SharePoint. SharePoint is constructed as a kind of standard product that is best used out of the box. Some design can be applied by specifying themes (for team sites) or by modifying CSS stylesheets (for the portal). The possibilities here are limited however, and changes to the actual HTML that is rendered results in changes to hundreds of the standard files.


    When implementing customer requested visual modifications, one of the big problems that we encountered in making extensive modifications to the files and templates delivered with SharePoint was that the rendering of the same HTML is implemented differently by different pages. Some pages contain the actual HTML that is outputted and can be easily modified. Other pages contain server controls that do the rendering of the same HTML. These pages are almost impossible to modify. Another problem is that modifications must often be made to hundreds of pages.


    The approach that MacawSharePointSkinner takes is that it lets SharePoint render the final HTML, and just before this HTML is sent to the browser MacawSharePointSkinner makes the needed modifications to this HTML. This is done in such a way that no modifications are needed to the internal files of SharePoint, so it is non-intrusive. Another advantage is that it will survive service packs (although the output HTML may change in a service pack!) and template modifications.


    MacawSharePointSkinner is implemented as an HttpModule that provides functionality for powerful replacements in the HTML output rendered by SharePoint.

    Where can it be downloaded? At the below mentioned GotDotNet workspace. This is also the place to report bugs and discuss about the MacawSharePointSkinner, although I will also blog on it in this weblog. The workspace also contains the license under which the MacawSharePointSkinner is released. This can be summarized as: "You can use this Software for any commercial or noncommercial purpose, as long as the MacawSharePointSkinner is not marketed and sold as if it is your own application."

    Please let me know if it works for you. It is fun to hear something back on all the effort you make to produce a tool. If you have any questions, please drop me a message!


  • SharePoint usage blob parsing

    Usage data can be retrieved from an SPWeb by calling GetUsageData(). Problem is that only 2000 records for the site are returned. There is also a GetUsageBlob RPC call that returns all information, but the format of the blob was not documented. Until now.

    At Microsoft downloads: Windows SharePoint Services: Usage Blob Parser (

    Quote: "Use this sample download to retrieve the daily and monthly usage BLOBs that are processed from the front-end Web servers in a deployment of Windows SharePoint Services. The Usage BLOB Parser sample demonstrates how to use the GetUsageBlob RPC method to return usage data and how to parse the data."

    It is a pity the code is in C++, but the file usagedata.cpp contains the info about the format of the blob data.

    I could not get the tool working even on my local portal due to unauthorized exceptions. The info should be enough however to parse the data in a c# program doing the GetUsageBlob RPC call.