Office 2007 SP2 and SharePoint: ODF Friendly

Microsoft announced on May 21st that the new Service Pack for Office 2007 (SP2) will add native support for ODF and PDF files. Yes, that means opening and saving Open Document files (ODT for documents, ODS for spreadsheets, ODP for presentations), together with Microsoft-backed Open XML file format.

The official SharePoint blog quickly commented on the issue, too. Nice screenshot 😉

I think that this will mean, for SharePoint of course, a fully Microsoft-supported ODF and PDF IFilter, and maybe (although it’s a long shot) a DHTML viewer (à la Excel Services). Maybe not for the SharePoint 2007 SP2 but in time for SharePoint 2009. Who knows?

Where to Store those Large Files? A Tale of a BLOB

Few months ago I noticed that the WSS 3.0 introduced the notion of a external file storage provider to SharePoint world. Since then I kept myself updated about it, and I have mixed feelings for it.

The Rationale

If your SharePoint is mainly a glorified File Share, then this may be interesting to you. In essence, SharePoint saves the binary data for your files in SQL Server as BLOBs(Binary Large OBjects). So, it’s easy for the SQL Server database files to grow rapidly in size as you add more and more large binary files.

The Hope

If only we could say to SharePoint not to save that large files into the database but to a file server or a distributed file system…..then we could do as Documentum does, saving the metadata into a database and the binaries to the file system.

The Good News

Well, it’s possible. SharePoint allows us to create our own external binary large object (BLOB) store provider, or EBS Provider. We must inherit from ISPExternalBinaryProvider class and implement our own Save and Load procedures.

ebs_provider

This provider operates deeply in SharePoint infrastructure stack, low enough to be completely transparent to the content and the SharePoint object model.

The Bad News

Unfortunately, too many of them:

  • Currently it can only be configured at SPFarm level, which means that we use it for ALL the lists and libraries or NONE of them. A major screw-up issue that prevents it to be really useful in production.
  • Any updates will create new BLOBs instead of updating the old ones. Want to garbage-collect the old ones? Do it yourself!
  • The code runs outside .NET environment, but it a dreaded COM world. HRESULTs, hex errors, mysterious hangs…..the old friends are welcome again!
  • Microsoft says that SharePoint 2009/2010 might have another implementation of EBS Provider, possibly related to SQL Server 2008 transactional FILESTREAM storage system. No compatibility is assured nor suggested.
  • The performance will almost surely be crippled, compared to SQL Server database storage.

Still Want to Try?

You can find more information on MSDN SharePoint SDK: http://msdn.microsoft.com/en-us/library/bb802976.aspx

SharePoint Predictions for 2008: Be Aware

The good folks at CMS Watch wrote their "crystal ball" predictions in CMS world last December. There is one prediction regarding SharePoint 2007, originally posted at http://www.cmswatch.com/Feature/172-2008-Predictions:

image
MOSS enters the valley of disappointment

SharePoint will continue to grow at viral rates as a low cost, low touch, document collaboration system. But in 2008 we will see the start of a noticeable backlash, particularly among larger enterprises.

The backlash will be two-fold. First larger enterprises will exhibit major compliance and litigation discovery issues across numerous unmanaged and unaccountable SharePoint locations. You will also see a backlash against sizable development costs and times to build maintainable applications in the MOSS environment. With the more complex SharePoint projects struggling to launch, customers are realizing a disconnect between Redmond’s heavy promotion and the realities of a product that is significantly less out-of-the-box than most expect.

Well, I’m going to add my humble two cents on this issue. I do partially agree with the analysis.

I think that there’s indeed a disconnect between the marketing movement behind SharePoint and its real experience in a more that out-of-the-box scenarios. There are some features in SharePoint that are unacceptable to almost any company as they come by default, such as Record Center or Publication, even the workflows are too basic for the most. However, these basic features are a huge improvement for the companies that do not have them, as having a basic document center or a rudimentary workflow approval is better than not having them at all.

For a bigger company or a bigger project, there are two realities often neglected:

  • SharePoint out-of-the-box features MUST be customized or extended to be of business value. It’s the "one-size-doesn’t-fit-all" adage in action.
  • There MUST be a clear Governance Policy in place for SharePoint applications and content. This cannot be overstated. Failure to do so is an invitation to SharePoint chaos.

So, the message I want to put across is this one: yes, SharePoint default settings are a no-go for the most of the customers; and no, there won’t be a "valley of dissappointment" for the customers. Well, not while there are qualified Microsoft partners to guide them through the customization and governance opportunities.

USEFUL RESOURCES

Sample SharePoint Governance Plan by Microsoft Consulting Services fellow, Mark Wagner
SharePoint 2007 Governance Checklist Guide by Microsoft, nicely formatted and ready to print
SharePoint Customization Policy, an excellent "menu-choice" book where all the varieties of SharePoint tweaking customizing are listed, with advantages, shortcomings and a short example.
SharePoint Governance workspace at CodePlex, steadily growing toolbox to help control the exploding sites nightmare.

SharePoint Protocols “explained”

If you were not aware, Microsoft released a bunch of PDF documents specifying various protocols that SharePoint uses to communicate internally and with other servers. The package is available for download at Microsoft Download site and weighs about 134 MB, but if you are used to downloading the SDKs it’s no sweat.

The "bunch" of documents is grossly divided into Front-End protocols (SharePoint internal communication) and Back-End protocols (talking to SQL Server, Exchange, etc). Excel Services calls, Active Directory communication and Office/Outlook protocols are also included.

Good news, huh? Well…a sort of.

The not-so-good news is that it’s not like SDK or technical documentation we’re used to. Microsoft just dumped 152 ugly PDF files that have a ton of links to each other. It’s very hard to just skim the content, the "noise" is very high (and the "Preliminary" watermark doesn’t help either).

Protocol documentation sample

Well, at least we have some official documents that can shed some light on the inner workings of SharePoint and help us make it better by extending them. Too bad they are barely usable in their present form.

An added bonus: you can find some geek funny protocol abbreviations such as SPFEPO (SP Front-End Protocols), SPBEPO (Back-end protocols) and SPEMAWS (SP Email Web Service), for instance.

SharePoint 2009 / 2010 / vNext Rumours

There’s no official information by Microsoft about the next version of WSS 3.0 / MOSS 2007 technologies. Nevertheless, there are bits of information that start to trickle down so that you can speculate about the most probable changes and improvements in the next SharePoint version. This version is likely to be named SharePoint 2009 or SharePoint 2010 and to be released just about when Office "14" is to be released, between 2009 and 2010.

My "educated guess" about the changes we can expect is:

  • Native AJAX and Silverlight support
  • More offline capabilities
  • Microsoft Office files HTML viewers (following the line of OWA and EWA)
  • Bi-directional BDC
  • Native support for SQL Server tables as SharePoint lists
  • Publishing module rewritten, to change the faulty Export / Import process
  • More Business Intelligence capabilities for MOSS, as PerformancePoint 2007 matures
  • Social networking improvements, maybe with Knowledge Management module included out-of-the-box

There are rumours that the first CTP should appear in 2008. So, all we need is just a little patience

Disclaimer: although it should be obvious, the information in this post is based completely on my knowledge of SharePoint and the information I could find on the Internet.

Unable to Add Summary Links Web Part (Error 0x80070002)

Funny thing happened today when I tried to export / import a site from one site collection into another one. It asked me to close the Summary Links web part, which I did. I tried to add it manually (importing a .webpart file exported from the source site), and it gave me the following error:

Unable to add selected web part(s). Could not load XSL file. The system cannot find the file specified.(Exception from HRESULT: 0x80070002).

SOLUTION:

This error is usually raised when you try to add a publishing-related web part (such as Summary Links) into a non-publishing site. You have to either add it into a site built with a publishing template (Collaboration Portal or Publishing Portal), or to activate the publishing features manually:

  • Activate Office SharePoint Server Publishing Infrastructure feature in site collection features, in Site Collection Administration section of Site Settings page
  • Activate Office SharePoint Server Publishing feature in destination site features, located on Site Administration section of Site Settings page

Import a Specific Active Directory Group User Profiles

Sometimes we want SharePoint to import only the user profiles of those user that belong to one specific Active Directory group. In this case we have to modify the import connection query expression in Shared Services Provider.

In this case we want all the users of the group Employees (in Groups OU) of the contoso.com domain to be imported:

(&(objectCategory=Person)(ObjectClass=*)(memberOf=CN=Employees,OU=Groups,DC=contoso,DC=com)

“I Need To…” Web Part and JavaScript error

If you try to customize the "I Need To…" web part, as outlined by Gary in his blog post, you might experience a JavaScript error, just like this one:

Line: 1
Char: 1
Error: Object expected
Code: 0

This error is launched by the TATWP_jumpMenu JavaScript function, because it attempts to execute a function defined in another .js file that hasn’t been loaded.

Workaround:

Add a hidden Content Editor Web Part with the following HTML source text:

<script language="javascript" src="/_layouts/portal.js?rev=INhSs9mWTnUTqdwwIXYMaQ%3D%3D"></script>

This will ensure that the referenced script file loads correctly.

Document Icon in CQWP

After the (deserved) summer vacation period, I resumed the “normal” work schedule.

One of the first issues I had to solve was how to display the document icon in a Content Query Web Part (CQWP) query results. Fortunately, I stumbled upon a post in Russian by Tatiana that explained the process.

First, we should add the DocIcon in the CommonViewFields property (export the CQWP, edit the .webpart file) as follows:

<property name=”CommonViewFields” type=”string”>DocIcon, Lookup;</property>

Then, we edit the Style Library/XSL Style Sheets/ItemStyle.xsl file in SharePoint Designer to add a new template (named “DocLib” in this example):

<xsl:template name=”DocLib” match=”Row[@Style=’DocLib’]” mode=”itemstyle”>
<p>
<xsl:variable name=”SafeLinkUrl”><xsl:call-template name=”OuterTemplate.GetSafeLink”>
<xsl:with-param name=”UrlColumnName” select=”‘LinkUrl'”/>

</xsl:call-template>
</xsl:variable>
<xsl:variable name=”DisplayTitle”>
<xsl:call-template name=”OuterTemplate.GetTitle”>
<xsl:with-param name=”Title” select=”@Title”/>
<xsl:with-param name=”UrlColumnName” select=”‘LinkUrl'”/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name=”LinkTarget”>
<xsl:if test=”@OpenInNewWindow = ‘True'” >_blank</xsl:if>
</xsl:variable>

<div >
<xsl:choose>
<xsl:when test=”@DocIcon=””>
<img src=”_layouts/images/folder.gif” alt=”” />
</xsl:when>
<xsl:otherwise>
<img src=”_layouts/images/ic{@DocIcon}.gif” alt=”” />
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name=”OuterTemplate.CallPresenceStatusIconTemplate”/>
<a href=”{$SafeLinkUrl}” target=”{$LinkTarget}” title=”{@LinkToolTip}” style=”padding-left:5px;”>
<xsl:value-of select=”$DisplayTitle”/>
</a>
</div>
</p>
</xsl:template>

PS: Sorry for the horrible formatting of the XML, my CopyTextAsHTML VS2005 add-in is having some difficulties with the leading < characters.