• SharePoint Conference 2009 – Highlights for Business and Technical Decision Makers
    [This blog post is also available in PDF format, see Resources below]


    When Virgin Atlantic flight number VS043 touched down at the McCarran International Airport in Las Vegas, Nevada on October 17 at about 1.40pm local time, I knew it was certainly time to convert the excitements and anticipations that have built up in the last few month over the next release of Microsoft SharePoint into concrete facts and deep understanding that will help shape and inform vital business and technical decisions. The Microsoft SharePoint Conference 2009 was billed to take place in Las Vegas from October 19, 2009 to October 22, 2009 and I had clear and precise objectives for choosing to attend the conference; including having a good time and meeting folks from around the world of course.

    Another objective of mine for attending the conference was to understand Microsoft’s strategic and long-term plans for what has become its fastest growing and probably greatest income-generating server product ever; more so, to understand Microsoft SharePoint Server 2010 and how it could (or would) deliver innovative, sustainable, and cost-saving business values to companies, organizations, and partners alike irrespective of the vertical(s) they may operate in. This article sets out to outline some highlights of the conference that should be of interest to both business and technical decision makers who are looking to either implement new SharePoint 2010 solutions within their organizations or migrate their existing SharePoint infrastructure (or legacy systems) to SharePoint 2010.

    Why SharePoint Conference?

    Microsoft describes SharePoint 2010 as “the business collaboration platform for the enterprise and the Web” and rightly so. It is a well established knowledge that several businesses and organizations across all sectors the world over, are moving their existing collaboration platforms and Enterprise Content Management (ECM) systems from solutions powered/provided by IBM, Oracle, OpenText, EMC, SAP, Vignette, etc to SharePoint. According to a Forrester survey of 259 IT professionals, 24% plan to implement or upgrade to SharePoint right away while another 41% plan to do so within the next six months; following the survey. Yet another 12% of those surveyed plan to roll out SharePoint in the next 12 months; following the survey. No wonder several existing ECM companies including HP, EMC and OpenText are paying serious attention to what SharePoint has to offer and developing products and services that complement both SharePoint and their existing offerings in a symbiotic manner. To borrow the words of Steve Ballmer: “I don’t think there’s directly anything in the market that’s trying to do; in as holistic a fashion, in as integrated a fashion, and in as comprehensive a fashion; what we are trying to do in SharePoint.

    Tom Rizzo, SharePoint Senior Director at Microsoft, made the introductory speech while Steve Ballmer, Chief Executive Officer at Microsoft, delivered the keynote. Jeff Teper, Corporate Vice President, Office Business Platform at Microsoft, delivered the business-focus keynote speech; hailing SharePoint as a “Swiss Knife”; an analogy quite similar to one once used by John Fontana of Network World back in 2008.

    Business Perspectives

    SharePoint 2010 SKU

    SharePoint technologies; in the current release; comes in 3 different flavours – WSS 3.0, Microsoft Office SharePoint Server (MOSS) 2007 Standard & Enterprise editions. SharePoint 2010, however, comes in 6 flavours; the table below shows the available SharePoint 2010 SKU.

    On Premises
    SharePoint Foundation 2010 (successor to WSS)
    SharePoint Server 2010
    SharePoint Server 2010 for Internet Site, Standard Edition
    SharePoint Server 2010 for Internet Site, Enterprise Edition
    SharePoint Online
    SharePoint Online for Internet Site

    FAST Search Server 2010 SKU

    In addition to the SharePoint 2010 SKU, there are 2 flavours of FAST Search Server as listed below:
    On PremisesFAST Search Server 2010 for SharePoint
    FAST Search Server 2010 for Internet Business


    The licensing modalities for these versions of the product stacks are yet to be made public but one of the questions most businesses would be asking would be: “What version of SharePoint 2010 should we buy?” The right response to this question would probably be: “It depends on both your immediate and strategic business objectives for SharePoint.” SharePoint can be hosted on-premise, online (using the Microsoft hosted Business Productivity Online Service – BPOS), or both. What hosting option a business decides to go with will depend greatly on lots of factors including applicable legislations, security, cost, availability, reliability, etc.

    Technical Perspectives

    SharePoint 2010 introduces a new “service application architecture” which allows you to effectively scale, extend, manage and centralize services. The service application architecture replaces the Shared Service Provider (SSP) architecture that existed in SharePoint Server 2007. A whole new set of services are also introduced in SharePoint 2010; these include Business Connectivity Services (BCS), PerformancePoint Services, Excel Services, InfoPath Form Services, Visio Services, Word Automation Services, and Managed Metadata Services.

    ECM Changes

    Two of several new ECM features introduced in SharePoint 2010 are the Document ID Services and “DocumentSet”. The Document ID Services, when activated, generates a unique identifier for each document and stores this as a metadata on the document itself. This is very useful when tracking moved or relocated documents. DocumentSet, on the other hand, refers to a collection of related documents grouped and commonly tagged together e.g. all documents relating to a specific court case, all documents relating to a specific student’s activities on a specific course, etc. A DocumentSet is a content type that inherits from the inherent “Folder” content type.

    Another new feature introduced in SharePoint 2010 is “Enterprise Content Type”. In SharePoint Server 2007, creating and managing content types across several site collections within a farm can be quite daunting. It typically required some external matrix and checklist to keep all content type changes consistent across a very large SharePoint deployment. Enterprise Content Type addresses this issue and simply takes on the responsibility of maintaining content type consistency across SharePoint deployments.

    SharePoint 2010 Development

    SharePoint 2010 development has been greatly improved. New features like “Sandboxed Solution”, Developer Dashboard, Client Object Model, Silverlight WebParts, Language Integrated Query (LINQ) for SharePoint, new set of tools in Visual Studio 2010 for creating, packaging, debugging and testing SharePoint solutions, and; perhaps the most significant of all; install (for development purposes) on Windows 7 and Windows Vista. Unfortunately, toolsets for SharePoint 2010 will not be backward compatible (i.e. will not support previous versions of SharePoint).


    A well-known; but nevertheless unfortunate; fact is that SharePoint releases have always preceded .NET framework releases; and the same is true for SharePoint 2010 and .NET 4.0. This simply means that although SharePoint releases has been built on the .NET framework since SharePoint Portal Server 2003, the latest release of SharePoint does not take full advantage of the features and capabilities offered by its .NET counterpart. This means is that we should expect to see a flurry of custom tools, add-ons and the likes from third-parties and communities; especially CodePlex. And as always, some of these custom tools and add-ons are quite brilliant and useful but businesses will need to either buy them from third-parties and get available technical support or simply get them from communities for free but without any formal service level support.

    Another big concern regarding SharePoint releases is the development cycle from the SharePoint team at Microsoft. SharePoint supported and adopted technologies always tend to get outdated rather quickly in terms of industry standards. SharePoint 2010 looks pretty up-to-date today and implements lots of today’s latest technologies like Web 2.0 but there are talks already of new technologies like Web 3.0 which SharePoint 2010 does not seem to implement. The truth here is that no software product can be “futuristic” and build on technologies or industry standards yet to be defined or established, not even SharePoint. The challenge facing Microsoft; and indeed the larger SharePoint community; is the ability to introduce new and relevant technologies; as and when they become available; into SharePoint without compromising on existing features and functionalities.

    General Information

    Public beta of SharePoint 2010 will be available next month, probably around November 18 and it is expected to RTM early next year, probably around February 2010. See resources below for links to further online resources that will help provide better understanding of the new SharePoint 2010.


    SharePoint 2010 promises lots of significant changes and new things that will make it significantly stand out. There are features and functionalities which will certainly help businesses and organizations streamline and optimize their business processes and decision-making processes by delivering relevant, updated and precise information which may be derived, harnessed and diced from data and records hosted on disparate and geo-located systems. It will help businesses and their respective service providers deliver business solutions with very little TTM. It builds and depends on today’s well established technologies and standards which in turn make it a very compelling attraction to businesses looking to cut down on IT costs while not compromising on values and benefits derived from therein. But like we all know too well, a good SharePoint deployment is only as good as the strategies, planning and people behind it. There are many failed SharePoint implementations out and you need to understand what, why, when and how to achieve the right implementation before you embark on one. Remember, SharePoint is indeed a Swiss knife.


    Microsoft SharePoint 2010 Website
    Hardware & Software Requirements for SharePoint 2010
    Why Upgrade to SharePoint Server 2010 Sites?
    Why Upgrade to SharePoint Server 2010 Communities?
    Why Upgrade to SharePoint Server 2010 Content?
    SharePoint Altering ECM Landscape
    Blog post in PDF format

  • How to: Programmatically Create a New FilteredLookup Field A popular question on the FilteredLookup field is how to programmatically create one.

    I've put together the code snippet below to demonstrate one of the ways to go about creating the field from code:

      private static void AddFilteredLookupByXml() {
        try {
          // set target site as appropriate
          using (SPSite site = new SPSite("http://localhost/")) {
            // set target web as appropriate
            using (SPWeb web = site.RootWeb) {
              // the source list, i.e. where data will be retrieved from
              SPList sList = web.GetList("/Lists/Tasks");
              // the target list, i.e. the list that will contain the lookup field
              SPList tList = web.GetList("/Lists/FilteredItems");
              // the query to use to filter retrieved data
              string q = "<Where><Eq><FieldRef Name="Status" /><Value " +
                "Type="Text">In Progress</Value></Eq></Where></Query>";
              // the CAML xml fragment for the new FilteredLookup field
              string xml = string.Format("<Field ID=\"{0}\" " +
                  "StaticName=\"{1}\" Name=\"{1}\" " +
                  "Type=\"FilteredLookup\" DisplayName=\"My FilteredLookup Tasks\" Required=\"FALSE\" " +
                  "WebId=\"{2}\" List=\"{3}\" ShowField=\"{4}\"/>",
                // the ID (GUID) of the new FilteredLookup field
                // the Name and StaticName of the new FilteredLookup field
                sList.ParentWeb.ID, // GUID of the source web
                sList.ID, // GUID of the source list
                sList.Fields.GetFieldByInternalName("Title").Id // GUID of the source column
              string fn = tList.Fields.AddFieldAsXml(xml); // add new FilteredLookup field as xml
              tList.Update(); // update target list
              FilteredLookupField f = ((FilteredLookupField)tList.Fields.GetFieldByInternalName(fn));
              // Don't set both query filter and view filter. ONLY set one or the other
              f.QueryFilterAsString = q; // set query filter
              //f.ListViewFilter = "";
              f.AllowMultipleValues = false; // set allow multiple values
              // set whether query is recursive. This ONLY applies to query filter
              f.IsFilterRecursive = true;
              f.Update(true); // finally update the new FilteredLookup field
        catch (Exception e) {
          e.Source = "AddFilteredLookupByXml";
          throw e;

    The SharePoint FilteredLookup and its source codes are available for download on the codeplex website.

  • SharePoint - Migrating From 32-Bit to 64-Bit Environment In the last few months, there have been lots of talks and conversations over how best to migrate an existing SharePoint implementation from a 32-bit environment to a 64-bit environment. These discussions have also been flamed on by recent announcements by Microsoft that the next version of SharePoint Server (i.e. SharePoint Server 2010) will only be supported on Windows 2008 64-bit Server.

    In an attempt to leverage the benefits of 64-bit computing and pro-actively prepare for the next version of SharePoint technologies, businesses and organisations are looking at ways to migrate their existing SharePoint infrastructure and applications from 32-bit environments to 64-bit environments. This has also been made a rather necessary process as Microsoft has indicated that they would not recommend upgrading from a 32-bit edition of SharePoint Server 2007 directly to SharePoint Server 2010.

    This post sets out necessary steps that should be considered and provided for during the migration planning phase. As part of the migration plan, the following factors and constraints should be considered and catered for:

    • It is recommended that, where possible, a similar topology should exist in the new 64-bit environment as in the existing 32-bit environment. Where the topology consists of one or more farms, you may “mirror” only the primary or live topology. So, as an example, if you have 8 servers in your exiting 32-bit SharePoint farm, it’s recommended that you also look at using 8 servers in your new 64-bit farm, to help keep things simple. However, advanced SharePoint professionals may choose to push these boundaries further.
    • Apply the same service packs and software updates to all servers in both old and new environments.
    • Establish a backup plan, a risk assessment & mitigation plan, and a contingency plan.
    • As some elements of the existing farm will require manual migration, it is recommended that you document all elements of the existing server configuration particularly any custom development or configuration.
    • It is recommended that for each farm in the SharePoint implementation, server migration should be performed in the following order:

    • Perform the migration order one tier at a time; i.e. migrate the database servers first, perform the appropriate tests to ensure the farm is working fine then move to the next tier – the application servers and the perform more relevant tests and then the next tier – WFE and again perform even more relevant tests.

      While a heterogeneous (a mix of 32-bit and 64-bit servers) environment in a server farm is supported by Microsoft, this is not recommended because of the inherent and potential performance issues that may occur. The recommendation is to have a homogeneous environment (servers running on the same architecture – 32-bit or 64-bit), one tier at a time. However, during the migration process it is impossible to maintain a homogeneous environment; thus, you should expect performance issues to occur during the migration process.

    The table below provides a summary of what will be generally affected by the migration from a 32-bit environment to a 64-bit environment.
    Existing Item (32-bit)Comment
    Standard SharePoint ASPX pagesNot Affected
    Standard SharePoint AssembliesNot Affected
    Custom Feature, ElementNot affected if no custom assembly is referenced in it
    Custom WebPart (contained in *.dwp files)Not affected if no custom assembly is referenced in it
    Custom AssemblyThis would need to be recompiled to run on a 64-bit platform; this includes receiver assemblies, web page, code-behinds, web parts contained in assemblies, etc. However, the recompilation isn’t necessary if the initial build option in Visual Studio was set to AnyCPU.
    Custom ApplicationVerify that this can run in a 64-bit environment to ensure compatibility.

    All further custom development for use in the new deployment should be done in a 64-bit development environment or on a 32-bit environment but with the build option set to AnyCPU.

    Most migration tools in the market today can help you migrate contents from previous versions of SharePoint technologies to SharePoint Server 2007 and some also claim to support Windows 2008 64-bit Server but none of them has clearly stated that they support the migration of SharePoint implementation running on a 32-bit environment to a 64-bit environment, and honestly, I do not think they do; at least not as at the time of writing this post.

    Advantages of 64-bit hardware and software (Office SharePoint Server 2007)
    Migrate an existing server farm to a 64-bit environment (Office SharePoint Server 2007)
    Determine hardware and software requirements (Windows SharePoint Services)

  • SharePoint Service Pack 2 (SP2) & Supported Technologies With the release today of Service Pack (sp2) updates for SharePoint, I had to review what new technologies are now "natively" supported by SharePoint - WSS 3.0 & MOSS 2007.

    The sp2 updates come with lots of improvements and bug fixes, but they all come with support for some new technologies. Here's a list of technologies now supported in SharePoint as a result of the sp2 updates:

    Full support for Windows Internet Explorer 8.
    Level 2 browser support for Mozilla Firefox (versions 2 and 3).
    Support for Windows Server 2008.

    Support in SharePoint for these technologies are welcomed but, personally, I'd also hoped to see native SharePoint support for custom field types in desktop Office clients. Currently, custom field types that inherit from some base field types like the Lookup field are not rendered in the DIP in Office clients; this means that values in such fields can only be modified directly via the SharePoint UI. The other option would be to create yet a custom DIP in InfoPath.

    Having said all that, I would strongly recommend that you consider deploying these updates in your SharePoint farm(s) as there are many significant updates, fixes and performance improvements that these updates bring with them.

    If you need to present an RFC for these updates to be deployed in your environment and wondering what business case to put forward, you may want to look at this document, it provides a very high-level business justifications for the updates.

  • SharePoint Best Practices - Pre-grow or Auto-grow Database File Size? One of the many good and highly recommended SharePoint best practices is that you should pre-grow your SQL data file to its planned and expected maximum size.

    This recommendation, however, laudable has caused some confusions amongst SharePoint technology specialists. Does pre-grow mean determining and deciding the database file size during planning and setting same during deployment and configuration? The answer, by no means no. Pre-growing your database does not equate to pre-determining and setting a fixed file size for your database.

    Pre-growing your database helps reduce the impact of fragmentation on performance. It also helps reduce the number of IOPM, and resource contentions associated with auto-growing database. However, using fixed sizes for your databases and logs files could quite easily violate the SharePoint Health model, thereby causing one of the error events; specifically Event ID 3758; to occur.

    My Recommendations
    Pre-grow does not negate auto-grow rather it is complimented by it. You should analyse and determine your database potential file size during planning. Set the initial size of your database file accordingly. Your database is now said to be pre-grown. You do not need to disable Autogrowth. The key to using autogrowth correctly and efficiently is to avoid changing the database size rather frequently. If you have correctly planned and estimated the potential growth rate of your database over a specific interval; say bi-monthly, quarterly, yearly, etc; you can reasonably grow your database by the determined size to accommodate the growing data.

    Event ID 3758 (Windows SharePoint Services health model)
    Patterns & Practices: Chapter 14 — Improving SQL Server Performance

  • Microsoft Formally Names the Next SharePoint Release Microsoft yesterday formally made known the official name of the next release of SharePoint.

    Popularly called the Office 14 "stack" amongst technology experts, Microsoft announced that the next release of SharePoint will be called Microsoft SharePoint Server 2010. This is yet another change in the name of the product, once known as SharePoint Portal Server (versions 2001 & 2003), then Microsoft Office SharePoint Server -MOSS - (version 2007) and now Microsoft SharePoint Server (version 2010).

    According to the SharePoint product team at Microsoft, the need to drop the word "Office" from the name of the product is simply to avoid any further confusion of this server product for other products from the Microsoft stable as most people (customers/businesses/end-users) associate the word "Office" with the office client applications (Office Word, Office Excel, etc.).

    According to Chris Capossela, senior vice president of Microsoft’s Information Worker Product Management Group, "Office 2010 — including Office Web applications, SharePoint Server 2010, Visio 2010 and Project 2010 — will enter a technical preview in the third quarter of 2009 and will release to manufacturing in the first half of 2010."

    The product team has also indicated that Microsoft SharePoint Server 2010 will be generally also known as SharePoint; not MSS, not MiSS and not MSPS; just SharePoint. Hopefully the name will stick this time around, at least for a bit longer than just a couple of years :)

    This, of course, does not affect the great features and improved seamless enterprise integration capabilities to be delivered in the next version. We are eagerly waiting...

    Watch this space.

    Microsoft's Chris Capossela Q&A session on the subject
    SharePoint Product Team on the subject

  • Microsoft’s Roadmap for SharePoint The first sets of “Ask the Experts” (Interactive Q&A) sessions took place today at the European SharePoint Best Practices Conference. There were 4 of these sessions running concurrently so, unless one’s the “Splitman”, one could only attend one of the sessions at a time.

    I attended the “IT PRO” session and one of my questions was around the future of SharePoint. This post attempts to put the question, the response received and my view in clearer context.

    One of the questions I get from my customers is “what is Microsoft’s roadmap for SharePoint over the next 5-10 years?” I know I can get information on current (and immediate next) releases of SharePoint from blogs and stuff, but is there a single, definitive and official resource on Microsoft’s strategic roadmap for SharePoint over the next 5 to 10 years?

    Response (paraphrased):
    The product team blogs are good resources for such information. There are several team blogs including SharePoint team blogs and ECM team blogs. Also you can get similar information (and sometime better information) from the blogs of MVPs.

    My View:
    If I were the CTO of a multi-billion dollar multinational; looking to implement a strategic (5-10 year-plan) enterprise information management, collaboration and social networking platform for my company; would I make such important decisions based on comments, views and opinions of “MVPs” or expressions made on blogs, however objective these views or expressions may be? Honestly, I will not.

    Now, don’t get me wrong. I am NOT; in anyway; implying or suggesting that blog posts or views of MVPs or product teams are not reliable or dependable, nothing could be farther from the truth. I personally use and rely on information found on several websites and blogs owned by product teams and MVPs (SharePoint team, BizTalk team, Joel Oleson, Spencer Harbar, Stephen Thomas, Andrew Connell, etc.). These guys are great at what they do and provide some of the most invaluable contributions to the communities. I also participate in user group meetings, which are certainly very useful and great.

    What I’m saying, instead, is that these user-group meetings, blog posts, comments and views focus more around existing versions of the product and also provide insights into the next immediate release of the product. While all these are good and; without a doubt; very invaluable, they don’t provide businesses and corporations with sufficient information on which to base strategic, long-term technology adoption plans. Again, I’m not trying to play the pessimist here; I personally run lots of sales pitches and recommendations for SharePoint and my honest view is that SharePoint is probably the best collaboration and ECM platform; for businesses; available in the marketplace today. But businesses and key decisions makers need to know this will continue to be true for some time to come and they also need to understand how their technology adoption decisions will affect their TCO, revenues, business directions and risks over a reasonable period of time, after all, it’s all about the business, right?

    Just as Microsoft has roadmaps and future directions for .NET Framework, C#, SQL Server, etc; we need to see definitive and official roadmaps for SharePoint (and, in my view, BizTalk).

  • European SharePoint Best Practices Conference The European SharePoint Best Practices Conference kicks off tomorrow in London, United Kingdom and I'll be attending.

    I'm quite excited about some of the sessions and speakers lined up for this inaugural event in Europe, and in keeping faith with Microsoft's event-organising traditions, the organisers of this 3-day event have cleverly arranged the sessions into tracks that match "best job role description". The event's agenda provides information on available sessions across all 4 tracks and, as always, I'm most likely to attend sessions cutting across several tracks, particularly "IT PRO", "DEV" and "Business Adoption" tracks.

    Hopefully, I'd be able to provide summaries and reviews of outcomes from these sessions right here on my blog; so watch this space.

    If you are unable to attend the conference but would love to meet the speakers (and attendees) and catch up on some techie conversations, there's an open, informal evening (aka SharePint By Night) open to everyone, see Andrew Connell's blog for details.

    Further information on the conference can be found at

  • SharePoint Filtered Lookup Field Whilst working with SharePoint lists/libraries, have you ever wanted to include a lookup field that retrieves data from a column residing in another list/library that's found found in a different site within the same site collection?

    The standard SharePoint lookup field allows you to do all that except the "...different site in the same site collection" bit; all lookups must be within the same site. I've recently published the Filtered Lookup field, a custom SharePoint field that allows you to achieve the "missing" bit.

    I must state, at this point, that there are quite a few good projects and/or free codes out there that provide the cross-site functionality to lookup fields as well, and, just like the Filtered Lookup, some indeed allow you to filter the retrieved data based on defined list views located at the source list/library. However, the Filtered Lookup field also allows you to filter the retrieved data based on dynamic/ad-hoc CAML queries; this implies that you don't need to create a new list view each time you need to retrieve filtered data from source list/library.

    The Filtered Lookup field and its source codes are published for free on codeplex.

    Feedback and comments are, of course, most welcomed.

  • Best Practices – Working With Large SharePoint Lists At the SharePoint User Group UK (SUGUK) meeting held in London yesterday, an interesting topic – Building the Perfect SharePoint Farm: A Walkthrough of Best Practices from the Field – was covered. During one of the offline discussions, the issue of applicable best practices on how to manage large SharePoint lists cropped up.

    Everyone generally agreed on the recommended best practice of “no larger than 2000 items”. The difference in opinion arose from what comes up at the end (or beginning) of the phrase in italics. Some of the opinions expressed could be paraphrased thus:

    1. You should have no larger than 2000 items in a single list irrespective of the number of views contained in the specific list.
    2. You can have more than 2000 items in a single list as long as each view within the specific list has no larger than 2000 items.

    There are few pretty good and well documented articles on the subject (please see resources below) but here’s a summary of my view on the subject matter:

    Opinion (1) does not truly reflect any of the best practice recommendations and would need to be reconsidered. While opinion (2) is correct, it’s only partly so.

    A single SharePoint list may indeed contain more than 2000 items; actually, up to 5 million items. However these items would need to be arranged into containers. Each list has a default container i.e. the root folder. So by creating subfolders in the root containers, you can distribute the items into 2000 per folder. Here’s an excerpt from the white paper titled: “Working with Large Lists in Office SharePoint Server 2007

    "…the recommendation is that a single list should not have more than 2,000 items per list container. A container in this case means the root of the list, as well as any folders in the list — a folder is a container because other list items are stored within it. A folder can contain items from the list as well as other folders, and each subfolder can contain more of each, and so on. For example, that means that you could have a list with 1,990 items in the root of the site, 10 folders that each contain 2,000 items, and so on. The maximum number of items supported in a list with recursive folders is 5 million items."

    In summary, having more than 2000 items in a single list, all in a single container (e.g. the root folder) and attempting to use list views to group the items into collections of no larger than 2000 per view isn’t exactly keeping to the best practice recommendations.

    Best practices for publishing portals
    Plan for software boundaries (Office SharePoint Server)
    Working with Large Lists in Office SharePoint Server 2007

  • How to: Create a Custom Action Specific to a List The Task
    Create a CustomAction (with GroupId of "ActionsMenu") that is specific to a custom list.

    The Challenge
    The challenge here is that the custom list is yet to be created and so the RegistrationId property of the CustomAction cannot be determined at the time of installing the CustomAction.

    The Solution(s)
    There are problably several ways to addres this task; 2 of which are:

    Option 1: Specify ControlAssembly and ControlClass properties for the CustomAction and in the custom control class build the menu item for the CustomAction if the list is the right list. The down side to this approach is that (1) the CustomAction is actually published on all list instances but built only for the appropriate list, (2) there's no way of indicating an identifier for the list without hardcoding its name/url in the custom control class. The upside is that (1) you can easily modify the behaviour of the CustomAction by simply revising the custom control class.

    Option 2: Create and activate the custom list and CustonAction using 2 different features one after the other with the feature for the custom list going first. Then using Feature event receiver class for the feature of the custom list, update the element.xml file for the CustomAction's feature; prior to attempting to install and activate it; with the GUID of the list instance you just created. This approach with ensure that the CustomAction you just created is available only in the custom list you just created as well. The downside, however, is that any change to the CustomAction requires a reinstallation & reactivation of the feature.

  • How to Change the Default ViewStyle of Calendar View in a SharePoint List I don't know about you but I find it sometimes rather upsetting when I'm looking to solve a dev task, pick up all possible resources on the subject, only to find out that some of the so much acclaimed resources don't really offer any solution. This, unfortunately, is true nearly all the time when it comes to developing SharePoint solutions and referring to Microsoft's MSDN library or books.

    Ok, let's cut through the chase, I was trying to update the default view style of a list's calendar view created via OM. I created the view using the SPView class and setting it's type property to Calendar. Then I got a collection of the SPCalendarViewStyle objects of the calendar view using the SPCalendarViewStyleCollection. Now all I needed to do was to find the right viewStyle I'd like to set as default and simply set it's properties; you would thought that would work. well I'm afraid that didn't turn out as expected!

    Below is the piece of code I'd written for this (note: this piece of code does NOT solve the problem!):

    private static void SetCalendarViewStyle(string siteUrl,
    string listName, string viewName, string newViewStyle)
    using (SPSite site = new SPSite(siteUrl)){
    using (SPWeb web = site.OpenWeb("/")){
    SPList list = web.Lists[listName];
    if (list != null){
    SPView view = list.Views[viewName];
    if (view != null){
    bool styleChanged = false;
    SPCalendarViewStyleCollection coll = new SPCalendarViewStyleCollection(web, view);
    Console.WriteLine("Before View Style: {0}", coll.DefaultViewStyle.Type);
    foreach (SPCalendarViewStyle viewStyle in coll){
    if (viewStyle.Type.ToLower() == newViewStyle.ToLower()){
    // set the new default view style
    viewStyle.Default = true;
    styleChanged = true;
    // set the default property of all other view style to false
    viewStyle.Default = false;
    if (styleChanged){
    Console.WriteLine("default view style changed");
    Console.WriteLine("After View Style: {0}", coll.DefaultViewStyle.Type);
    catch (Exception ex) { throw ex; }

    The list and it's calendar view referred to here were both created using OM and the list isn't listed in the quick launch. I've read a few articles and comments that suggested appending text to the end of the Url property of the view object appeared to address the problem; unfortunately that was not the case for me. Besides, the Url property of the view object is read only and I'd rather not append any text to the value of the Url property.

    To address the issue, I had to use reflection, this gave me a read/write access to the supposedly protected Node property. Then I made changes to the value of the property and simply updated the view object and its associated SPLimitedWebPartManager object.

    This piece of code solve the problem and the approach can be applied to existing calendar views.

    private static void SetCalendarViewStyle(SPWeb web,
    SPView view, DefaultCalendarView defaultView){
    SPLimitedWebPartManager vm =
    ListViewWebPart lv = null;
    foreach (System.Web.UI.WebControls.WebParts.WebPart part in vm.WebParts){
    if (part.GetType().ToString().ToLower() == "microsoft.sharepoint.webpartpages.listviewwebpart"){
    lv = part as ListViewWebPart;
    if (lv != null){
    PropertyInfo ViewProp = lv.GetType().GetProperty("View",
    BindingFlags.NonPublic | BindingFlags.Instance);
    SPView spView = ViewProp.GetValue(lv, null) as SPView;

    PropertyInfo viewProp = spView.GetType().GetProperty(
    "SchemaXml", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
    string root = viewProp.GetValue(spView, null) as string;
    XmlDocument doc = new XmlDocument();
    XmlNode node = doc.SelectSingleNode("/View/CalendarViewStyles");
    if (node == null){
    XmlNode stylesNodes = doc.CreateElement("CalendarViewStyles");
    stylesNodes.InnerXml = SetViewStyleNode(defaultView);
    node.InnerXml = SetViewStyleNode(defaultView);
    PropertyInfo NodeProp = spView.GetType().GetProperty(
    "Node", BindingFlags.NonPublic | BindingFlags.Instance);
    XmlNode newNode = NodeProp.GetValue(spView, null) as XmlNode;
    newNode.InnerXml = doc.DocumentElement.InnerXml;

  • Microsoft InfoPath Forms; What Are These? Working on several SharePoint related projects, some questions that have popped up from clients (both business users and technical crews) around InfoPath have been something like: what is InfoPath? How do I create an InfoPath form? Are all InfoPath forms pretty much the same when it comes to SharePoint workflows? This little writeup sets out to provide a generic response to these questions without using "strong" technical jargon.

    In very simple terms, Microsoft Office InfoPath; part of the Microsoft Office Suite; is a program used to develop electronic, XML-based forms used for entrying, gathering, and displaying data. According to Microsoft: "You can also use the InfoPath Forms Services capabilities in Microsoft Office SharePoint Server 2007 to extend your business processes beyond your corporate firewall, delivering forms as Microsoft Office Outlook e-mail messages, Web browser forms, or forms for mobile devices". Till date, there have been 2 releases of Microsoft InfoPath, versions 2003 and 2007. See Resources below for a list of relevant resources on the subject.

    Working with InfoPath forms and SharePoint workflows, I've come to identify 3 types of InfoPath forms, which I'll describe as Business Forms, Settings Forms and Task Forms.

    Business Forms: These are naturally electronic versions of standard forms that you'd have in your office. For example, vacation request forms, purchase order forms, staff evaluation forms, etc. These forms are typically used by various people, at one time or another. These forms are normally deployed to document libraries, as content types or as features, irrespective of workflow solutions that may be required to act on them.

    Setting Forms: These are forms that relate directly to workflow processes or cause of actions. These category includes workflow association form, modification form and initialization form. Typically these forms are used at the start (association and initialization forms) or during the lifetime (modification forms) of workflow instance. These forms are normally deployed alongside the workflow solution that they relate to.

    Task Forms: These are forms that normally used to action workflow tasks. These forms are typically presented only to people who have been identified (explicitly or implicitly) as associated with tasks contained within a workflow instance. These forms are normally deployed alongside the workflow solution that they relate to.

    I'll be quick to add that there are other types of InfoPath forms that do not necessarily fall within any of these categories, e.g. InfoPath forms for retrieving and displaying email messages from Microsoft Outlook program, but these identified categories refer to form types typically associated with SharePoint workflow-based solutions that utilize InfoPath forms.

    More info on task forms
    Association and Initialization forms
    Business overview of InfoPath
    InfoPath 2007 Developer Reference
    InfoPath Team Blog
    InfoPath Dev Community

  • MOSS 2007 Event Receiver Error I ran into this error this morning while working on a SharePoint workflow project that worked pretty well just yesterday:

    Event Type: Error
    Event Source: Windows SharePoint Services 3
    Event Category: General
    Event ID: 6875
    Date: 12/11/2007
    Time: 11:27:06 AM
    User: N/A
    Computer: MOSS2007PRJ
    Error loading and running event receiver Microsoft.SharePoint.Workflow.SPWorkflowAutostartEventReceiver in Microsoft.SharePoint, Version=, Culture=neutral, PublicKeyToken=71e9bce111e9429c. Additional information is below.

    : Object reference not set to an instance of an object.

    For more information, see Help and Support Center at

    I found a MS recommended solution to the problem at but I still can't place my finger on what exactly caused the error at the first place and how to reproduce it (so I'd know what to avoid going forward).

  • ReplicatorActivity and StateMachine Workflows in MOSS It's somewhat frustrating that there isn't any real POC on how the ReplicatorActivity can be used in StateMachine workflows in MOSS/WSS, not even from anyone in the SharePoint team at Microsoft. Frederick Morrison (see comments timestamped November 7, 2007 6:18 PM) even offered $500 to anyone who can provide a real sample on the subject.

    Anyway, we'll keep pushing forward and hope something useful comes out of the mills soon.

  • MOSS Installation is Broken After Server Name was Changed If you are looking to change the name of your MOSS server, there are a few articles out there that could help you understand what actions to take (see resources below).

    However, if you've already changed the name of your MOSS server (for whatever reasons) and found out, rather unfortuantely, that you can't access the Central Administration area nor any of the web applications on the MOSS installation, this article contains steps that could probably save you the nightmire and worries of reconfiguring your entire MOSS installation.

    Assumption: It's assumed that your database and MOSS run off the same server.

    1. Open a new command window and change directory to where stsadm.exe is located:

    c:\cd C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN

    2. Use stsadm.exe to invoke the setconfigdb operation

    stsadm.exe -o setconfigdb -databaseserver -farmuser - farmpassword

    NOTE: farmuser and famrpassword are marked as optional in the help description for the operation but they turned out required (at least in my case). While the command is running you might get a warning similar to the one below:

    WARNING: SharePoint no longer customizes Integrated Authentication security settings. This Web application may be using Kerberos, which can require manual configuration. See for m
    re information.

    3. After the operation has completed successfully, run the SharePoint Products and Technologies Configuration Wizard.

    4. If the configuration action fails, simply delete the "SharePoint Central Administration v3" web application from IIS and re-run the configuration wizard; the web application will be re-created by the configuration wizard.

    I think these steps equally apply to a WSS v3 installation scenario though I'm yet to personally try them out on a WSS v3 installation.

    How to Change a Server Name Post-Deployment in MOSS
    Renaming a MOSS Server

  • Applying SOA in Business Process Re-Engineering With several business constraints and fear of the unknown plaguing lots of organizations that are in obvious dire need of technology-inspired business process re-engineering, it's not too often you get to read of organizations taking the all-important leap into changing how they carry out business, thus profiting from the enormous benefits a well implemented technology-driven BPR brings with it.

    So, I was greatly excited when I read the news about what the Royal Bank of Scotland (RBS) is looking to achieve with their "single-view data services" project. It will be fair to state that this is no doubt a very ambitious project, not least the security of clients' personal and sensitive data and compliance with various UK and EU laws around how such data is managed and accessed. There's a need to find the ever-so-delicate balance between accessibility, usability, availability, adaptability, scalability, security and compliance when building such a solution.

    I must mention that one of the primary objectives of embarking on such a project is not merely providing employees with visibility to customers' data but allowing employees make informed decisions based on applicable business rules in the context of whatever business matters (mortgage, savings, investment, etc.) they could be dealing with at the time. This is not necessarily a re-design of how business is done but a re-engineering of how business processes are adhered to, achieving greater consistency and conformance to business rules at the front and middle offices.

    Achieving a successful implemention and roll-out of such an ambitious project is much more possible and feasible today, special thanks to Service Oriented Architecture (SOA).

    The diagram above illustrates a high level architecture of a possible solution. The data source contains multiple, varied, disparate and disconnected data sources. The primary business logic that manages interaction with the data source block is the configurable, datasource-agnostic data access and abstraction block. The data service block is accessed by varied, technology-specific client applications. The data that flows throughout the model is in XML format and this allows the model to support infinite number of data sources and client applications (of course the impact of this on performance should be considered). Organizations are able to utilize all available information and business intelligence to achieve cross-sell and up-sell across all businesses and divisions.

    Whether the news about customers of NatWest (a part of the RBS group) being denied access to their bank accounts has anything to do with the deployed solution (directly or remotely) is yet to be established but it should be stated that; like every good IT solution idea and concept; poor implementation can really make even the best of solutions a total disaster for business.