For the love of SharePoint

Did quite a bit of blog reading tonight, mostly related to SharePoint, and it has prompted me to reflect the last 3 years and how my attitude towards SharePoint has gradually shifted. 

Here is a journey of a .NET developer who stumbled upon a technology called SharePoint, and finally made some sense of it.

2004: Does the world really need another Portal Software?

It was 2004 when I first head about this SharePoint portal server.  At the time where everyone was busy building first .NET applications, then ASP.NET applications.  The world was different then, perhaps a bit more black and white and mostly in code.

Everyone is out there building portals with web technologies, and failing that… build an engine for other people to build their portal upon.  Community Server, DotNetNuke, DasBlog… and these were the good ones.

So here’s this silly product from Microsoft, called SharePoint.  Immediately dismissed as a DotNetNuke –ish portal software and promptly forgotten.

2007: Many software seems to be built on top of the SharePoint platform, what is it?

I was working elsewhere in 2007.  Happily working on ASP.NET with nhibernate and spring.net.  SharePoint, unsubtly, crawled in front of the view screen again.

What intrigued me then was that Microsoft was refusing to let SharePoint die.  What surprised me was that it was no longer the portal software that I had in mind.  It had become a platform.

Still, I wouldn’t have given up my freedom with writing my own code to live within the confines of another platform that isn’t built by me.  (the "not invented here" syndrome)

So, performance point and BI flew past me.  Though in hindsight, I’m still pretty sure I wasn’t interested in that type of work…  May be in another decade I’d say differently.

2008: Jumping in the deep end.  The wars between SharePoint vs. Developer

I jumped into SharePoint some point in early 2008 – we were working on a heavily customized SharePoint publishing site, and there are a few areas where we needed the ASP.NET muscles to force SharePoint to bend to our will.  Considering myself an ASP.NET blackbelt, I jump in to sumo wrestle with the giant that is SharePoint.

I won.  Most of the time.  But SharePoint made me pay for my victories.  Years later, there are battle scars and silent tears for the hours that was thrown in to fight SharePoint.

It is in those hours that I learned:

2009: Seeing SharePoint for what it really is.

Perhaps my lessons came later.  Perhaps it’s seeing the unnecessary wounds that I earned from wrestling, that got me to sit down, and work out what is SharePoint.  And what is the right thing to do.

So half way through 2008 and throughout all of 2009, I tell myself OK.  I’m going to give myself and this thing one chance and really work out what SharePoint is.

The Internet does not fail, and SharePoint knowledge is out there, free for you to find and to read.  The funny thing is that all these information has always been available.  But perhaps I was just too stubborn to turn my head to have a good look at SharePoint. 

If you want a reading list, this is the biggest list I could find:
http://www.dynamicevents.com/MCM/MCMSharePointPre-Reads.pdf
Recommended reading list for Microsoft SharePoint Certified Masters.  There are 81 articles and some are reference books.  You will probably never finish reading before SharePoint 2010 comes out with more required reading.

2010: At the edge of my seat.

As SharePoint became fun, I come to enjoy working in this platform.  Around mid 2009 after prompting from boss Adam Cogan, I wrote a brief presentation of 8 things I really wish SharePoint 2007 could do better, for me as a developer.  And presented it in Adelaide and Sydney SharePoint user groups.

As Microsoft show its hands with SharePoint 2010, I worked to update the same presentation to see if MS has addressed my wishes.

Somewhat surprisingly, Microsoft addressed almost all my annoyances.  From CAML, packaging, debugging, BCS, search, and even a much cleaner DOM for our designers.

And even added more that I wasn’t too worried about: Silverlight, OData, ribbons and enterprise taxonomy.

Looking back over the last 3 years, our internal SharePoint installation has turned from an “oh we have a SharePoint running here somewhere” service, to an “essential production” service.  There was a time where if mail wasn’t available people would complain within 10 minutes, but SharePoint may be down for extended periods of time without people noticing or caring.  Not anymore.  Now, if SharePoint is unavailable for just 5 minutes due to a feature upgrade, you will hear people complain.

Too much writing, time to wrap it up

There’s still plenty more things to do in SharePoint, and plenty more things to do with SharePoint.  I’m glad I jumped on this path.  No idea where I’ll be in another 10 years, but I think I’ll always look back on 2010 with much fondness.

SharePoint 2010 CAML List Joins

SharePoint 2010, you can finally do List Joins in CAML.  This would be a great boon to the type of views that you can create in SharePoint and in code.

http://msdn.microsoft.com/en-us/library/ee539975(office.14).aspx

There is a catch – it looks like the field that you can use for joins must be a Lookup type field to the foreign list.

Join type can be LEFT or INNER.

Given that LINQ to SharePoint sits on top of CAML – all the LINQ join statements will translate properly as well.

 

 

When I first started developing with SharePoint, I really hated CAML. 

In time, I’ve learnt to live with CAML, the lack of good tools drives me crazy.  But it is a necessary evil when you work in SharePoint.

SharePoint 2010 beta TaxonomyPicker in EventLog

Load control template file /_controltemplates/TaxonomyPicker.ascx failed: Could not load type 'Microsoft.SharePoint.Portal.WebControls.TaxonomyPicker' from assembly 'Microsoft.SharePoint.Portal, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'.

 

The TaxonomyPicker user control shipped in the beta version of SharePoint 2010 is invalid.  Open it up and change fix the Type,Assembly reference to a comma. 
(Note) You’ll need administrator rights to save to this folder.

 

<%@ Control className="TaxonomyPickerControl" Language="C#" Inherits="Microsoft.SharePoint.Portal.WebControls.TaxonomyPicker&#44;Microsoft.SharePoint.Portal, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

Change the '&#44;' to comma (,)

SharePoint: referencing SCRIPT done right

Our scenario is pretty simple – we have a package that includes some JavaScript files.  We had them deployed to /Style Library/ similar to our CSS resources.

We then refer to them in our page layouts and master page via

<script src=”/Style Library/project/myscript.js” />

It works fine on dev.

Problems!

This makes no assumption about the web application or site collections of the destination server.  When the site was exported and imported into various different site collection configurations, things start to go silly with 404 script file not found.

Site collection: http://mysharepoint.com/sites/mysite/
The JavaScript then is at: http://mysharepoint.com/sites/mysite/Style Library/project/myscript.js
But the reference is still looking for http://mysharepoint.com/Style Library/project/myscript.js
Oops – 404 error.

Fix!

The solution comes in a two steps:

  1. Deploy to _layouts/ instead, so the script resource is at
    http://mysharepoint.com/sites/mysite/_layouts/project/myscript.js
  2. Use the SharePoint control ScriptLink
    <SharePointWebControls:ScriptLink Name=”/project/myscript.js” Localizable=”false” runat=”Server” />
  3. The localizable = false is important – otherwise SharePoint will look for
    http://mysharepoint.com/sites/mysite/_layouts/~language/project/myscript.js

SharePoint 2010 vs. 2007 comparison chart (ongoing effort)

 

This would be an on-going effort as I gather more details.  But at the moment I’m publishing what I have.

Different capabilities

 

2007
WSS3

2007
MOSS

2010
SP Foundation

2010
SP Standard

2010
SP Enterprise

Sites

         

Office Web Apps

     

X

X

User Experience

...

...

X
(ribbon)

X

X

Line of Business

 

X
(read-only)

X

X

X

Mobile Connectivity

...

...

X

(mobile dev enhancement)

X

X

Enterprise Management

...

...

(some reports)

X

(dev dashboards, monitors and self-checks)

X

(web analytics)

X

Tagging

   

X

X

X

Audience Targetting

 

...

X

X

X

           

Communities

         

Enterprise Social Network

 

...

 

X

X

Find People

 

...

...

X

X

My Site

 

...

 

X

X

Presence

 

X

...

X

X

Ask me...

     

X

X

Note board, recent activity

     

X

X

Enterprise Taxonomy

     

X

X

Community of interest / Tag Profile

     

X

X

Participation and Social feedback

     

X

X

Tag / Tag Cloud

     

X

X

Ratings

     

X

X

Navigation

     

X

X

Social Bookmarks

...
(add favourite)

...

...

X

X

           

Content

         

Compliance

     

X

X

Flexible Records Management

     

X

X

Shared Content Types

     

X

(enterprise content types)

X

Managed Metadata service

     

X

(indexed filtering)

X

Rich Media Content

     

X

X

Document Sets

     

X

X

Word Automation Service

     

X

X

Support for Accessibility Standards

     

X

X

Improved Alerts

 

...

X

X

X

Content Organizer

     

X

X

Document ID Service

     

X

X

Web Content improvements

   

X

X

X

           

Search

         

People Search

 

X

...

X

X

Windows Federated Search

   

X

X

X

Refinement

  (3rd party faceted-search)

X

X

X

Social behaviour improves relevance

     

X

X

Thumbnails, previews, and view in browser

     

X

X

Advanced content processing with strong linguistics

     

X

X

           

Insights

         

Business Connectivity Services

   

X

X

PerformancePoint Services

  X  

X

X

Excel Services

  X  

X

X

           
           
           
           

Composites

         

Client Object Model

   

X

X

X

List Improvements

   

X

X

X

Query Enhancements

   

X

X

X

Sandboxed Solutions

   

X

X

X

Silverlight Integration

   

X

X

X

Windows PowerShell

   

X

X

X

Workflow Improvements

...

...

X

X

X

InfoPath Form Services

  X  

X

X

Access Services

     

X

X

Site Templates

...

...

X

X

X

Synch Framework

   

X

X

X

 

Still to do:

1. add legend
2. add references / sources
3. link to specific details for some points
Let me know what you guys think: