When you do and don’t want Shelfware

No matter the size of your organization, you can be sure you have old software sitting on a shelf somewhere. Robert Bogue talks about how to reduce the shelfware in your company.

Every organization has “shelfware” (software that has been put on a shelf). Whether an organization has 100,000 people or only one person, you can be sure there’s software sitting on a shelf somewhere in the building. In some ways, shelfware is like cholesterol. There’s a good kind of shelfware and a bad kind of shelfware. The trick is to increase the good shelfware and reduce the bad shelfware.

How does shelfware become shelfware?

There are actually a few different kinds of shelfware, some shelfware was never used or never returned the value that was intended. Other shelfware was retired to its position only after it had performed its service and was no longer needed.

For example, I once licensed a program called LinkBot Pro from Watchfire that validates web references. This tool was invaluable in helping me validate links in older versions of Que Publishing’s Official Internet Yellow Pages. I bought the license, used it for the project, and then it became shelfware. This is a good form of shelfware —software that more than provids its value and is then peacefully put out to pasture.


Preventing users from using the UI to manage web parts

There has been a fair amount of talk lately about how any web part page in SharePoint — including many pages like list pages that people don’t think are web part pages — can have the web parts manipulated by simply adding parameters to the query string.  Those parameters cause the ToolPartPane to appear even if there was no administrative control on the page to cause it to appear.

This is true of the existing pages, but you can create your own site definition that doesn’t allow users to use the user interface to modify the web part placement or even add new items to the web part zone.  The WebPartZone class (and consequently the WebPartZone tag) support three interesting attributes/properties…

  • AllowCustomization – Indicates whether customization is allowed or not.
  • AllowPersonalization – Indicates whether personalization is allowed or not
  • LockLayout – Indicates whether the layout of the zone is fixed — and can not be edited.

Quick testing shows that AllowCustomization must be set to true and LockLayout must be set to false for SharePoint to even show the web part zone in design mode.  Further investigation has shown that using the web services calls to modify web parts in the web part zone still seems to work — and editing the page in front page including web part placement still seems to work as well.  In other words, it’s possible to prevent users from modifying web parts in special zones, like navigation, while retaining the ability to control web parts in these special zones via code.


Folder Taxonomy, Path Limitations, and Meta Data

I was searching out some things and ran across an old blog entry from Bil Simser talking about the limitations of using folders because of path length limitations.  Here are a few observations from a recent client experience.

1) The path limitation is indeed 255 (or 256 characters).  It’s documented in some of the planning documents (and in a KB article as well if memory serves.)

2) The idea of using meta data to categorize information instead of folders has at least two limitations …

a) WebDAV doesn’t natively support the assignment of meta-data during a save operation.  Therefore saving with applications which are not fully SharePoint aware is a bad experience.  The documents end up in the “root” of the view since they have no data to categorize them.

b) Retreiving files without context from a SharePoint document library can be very difficult without the property information.  Since the WebDAV File-Open dialog doesn’t understand the meta data it can be frustrating to find the right document to email to someone when the file name doesn’t contain all of the useful information.  One solution around this particular problem is to use the free Outlook Power Tool for SharePoint from Winapp Technology.  Of course, that doesn’t solve the problem when you’re trying to use a file from another application.

In general… Use meta data if you need the ability to reorganize the data in multiple hierarchies.  Use folders to make it easy to use within non-SharePoint enabled applications.

As a sidebar, the experience on SharePoint with WebDAV is much better in Windows XP vs. Windows 2000.  Every application I’ve tested has been able to save to SharePoint via WebDAV in Windows XP.  The same applications have trouble with Windows 2000’s support for WebDAV.  XP also allows files to be dragged from one WebDAV folder to another where Windows 2000 does not.


No PDC for me

For those of you who have been asking … I’m not going to the PDC.  I had a decision to make — admittedly a tough one.  The MVP Summit is at the end of the month.  I don’t have enough slack in my schedule to do two events in one month.  So, as much as I wanted to hear about SharePoint V3 as soon as possible … I had to decide to go to the Redmond campus at the end of the month.  It gives me a lot more opportunities to talk with the program managers — in a slightly more intimate setting.

So, keep the blog entries about the PDC coming, I’ll be reading them intently.


XML Namespaces and Bad Exception Propigation

Two quick things …

1) If you’re trying to use XPath on XML you get back from SharePoint… don’t forget you’re going to need the XmlNamespaceManager object to use with SelectSingleNode or SelectNodes to get back what you’re looking for.  I repeatedly forget that SharePoint uses XML Namespaces extensively… and that using SelectSingleNode and SelectNodes does require namespaces in the XPath.  (Today was lesson #3.)

2) Bad error handling.  You may find it interesting to note that the WebPartPages web services’ GetWebPartProperties method doesn’t seem to throw soap exceptions.  I ran into my favorite “Cannot complete…” error again.  However, it didn’t show up immediately because rather than throwing a soap exception this particular method returns the error as a comment node — rather than throwing an error.  So you’ll have to look for comments one level down from the root.  (Sidebar: It doesn’t look like this web service even works against SharePoint Portal Server areas.  At least – I keep getting an error about XML namespaces — back as a comment.)


SharePoint: An update on IRuntimeFilter

A few weeks ago I posted on the IRuntimeFilter interface in SharePoint. Here are a few updates…

1) I’ve validated that IRuntimeFilter’s CheckRuntimeRender() method is only called when the IsIncludedFilter property of a web part is non-null.

2) By default, Windows SharePoint Services will put administrators and web designers into a shared page view rather than in a my page view.  The net effect is that the shared page isn’t a personalized view and therefore IRuntimeFilter’s CheckRuntimeRender() method isn’t called.  To fix this create a new site definition and add the following tag into the <HEAD> tag.  <META name=”WebPartPageDefaultViewPersonal”>  Then make sure you do an IISReset so it can take effect.  (You’ll have to create a new site to see this.)

3) ValidateRuntimeFilter() is called everytime the web part is serialized — which is often.  So keep the code that you write in this method very simple.

4) If you decide to do post backs in the chooser form that you create, you’ll need to add a tag to the <HEAD> tag.  That tag is <base target=”_self”>  If you don’t do this then the form will cause a new window to open.

My next step is to fix some impersonation issues with roles (the ones that Michael Donovan mentioned to in his post.  From there, I’ll be writing a IRuntimeFilter chain to allow the Portal audiences IRuntimeFilter to run side-by-site with our own IRuntimeFilter.


How to Gather Windows SharePoint Services Requirements

Getting good requirements for a SharePoint project is in some ways more critical than for a project that’s based on more widely understood technologies. The fact that SharePoint isn’t widely understood by clients — whether internal or external — means the potential for misunderstandings is much greater. For this reason, it’s more critical to discuss each feature of SharePoint to understand of how the feature works out-of-the-box and to understand how the organization envisions those features. Whether you choose to design and architect your SharePoint technologies solution yourself or decide to work with an outside partner to perform the architecture and design steps, you’ll find that having a foundation in solid requirements makes the development process run smoother and results in a better solution for your business needs. [Article removed from the website]


Harnessing Properties in SharePoint Search

Most users of SharePoint Portal Server rapidly become enamored with the ability to add new fields (containing meta data) to documents in the document library. All of the sudden it becomes possible to associate information to a file beyond the file name that we’ve been limited to since the beginning of the computing era.

Few users, however, have the opportunity to understand how this meta data is used by SharePoint for searching. This leads to problems when users decide that it’s necessary to use SharePoint Portal Server Search to search on information contained in a field that they have added. In this article you’ll learn how SharePoint uses document library fields to create properties that are searchable and how to enable searching on those properties.

Article reposted here: Retro: Harness Properties in SharePoint Search


Debugging in the GAC

There are sometimes when your assembly almost has to be in the GAC and when you need to debug it.  This was difficult since if you registered a .NET assembly into the GAC the debugger wouldn’t break on it.  This is because the .PDB file information didn’t get loaded since it’s not in the same directory as the DLL.  Here’s how to work around that.

1) Install the Assembly in the GAC
2) Start-Run, %SYSTEMROOT%\Assembly\GAC
3) Navigate into the folder with name of the DLL that you want to debug
4) Navigate into the folder with the version number and public key that you want
5) Copy the .PDB file into this directory

Now you’ll be able to run a debugger against code running in the GAC.


Creating Artifacts — what you don’t know

[Authors Note: There’s a very interesting discussion brewing about what artifacts are good and what artifacts are bad. Check it out.]

Just as artifacts from ancient times give us information about early man, the documents and presentations you create in IT can give insight into your technology initiatives.

We know relatively little about the humans that were roaming the earth thousands of years ago. But because we have the artifacts they left behind–pots, arrowheads, and so forth–we have a glimpse give us a glimpse into their daily lives and who they were.

Artifacts (documents, Powerpoint presentations, spreadsheets, etc.) also allow a glimpse into the processes that are happening in your IT organization. Learning how to encourage the creation of artifacts is an essential part of managing an IT department.

The power of the artifact

An artifact is anything crafted by human hand that is left behind. This can be a product, a training manual, help documentation, project management documentation, or anything else which is tangible. Most of the time artifacts are documentation or diagrams of some sort but they can also be the finished product or some piece of the finished product.