Skip to content

What I missed – MOSS Camp 2007 (Chicago)

There were many reasons to miss the MOSS Camp 2007 in Chicago that the MS DPE team hosted.  It conflicted with SharePoint Connections (which I didn’t attend) and TechED Europe (which I also didn’t attend).  The reason I didn’t make it was that I was supporting a Women’s Ministry candle light dinner at my church.  I committed to that before knowing about the MOSS Camp event.  It was held on 11/9/2007.

Larry Clarkin posted a report about how it went.  There were some “grievances” aired.  I want to respond to a few of them because I think that they could look at the problem from a better angle or they’re the result of some relatively simple errors.  In all honestly several others I don’t understand (Filtering views is not clear, having all fields available on contacts, etc.).  If someone wants to explain them to me perhaps I can dispel a few of them too.

  1. Column level security on lists – Another perspective on this is helpful.  How many people use column level security in their database?  (Does the word “none” come to mind?)  The real core issue here, the thing that’s absolutely missing is relationships between lists.  Two relationship types — one-to-one and one-to-many relationships – would be a great help.  With a one-to-one relationship you can suddenly just put fields that you want to control access to in a separate table.  So I’m not saying that we don’t have issues here – we do, but the real problem – the one that the product team can solve and get more scenarios – is relationships.  By the way, as a workaround, it’s possible to set a field not to display on the display form and it’s possible to change the forms to your own forms so people don’t see those fields if they don’t need to.
  2. Impersonation testing – I can only assume people are having problems with the SPSecurity.RunwithElevatedPrivileges() call.  This is pretty common. Most of the time it’s someone trying to use SPContext.Current.Site (or SPContext.Current.Web).  These already contain the authentication information for the current user – you have to create your own instances inside the RunWithElevatedPrivileges call.
  3. HTML Editor – Yea, ok, the built in editor is weak.  However, Telerik offers their commercial RadEditor that can be dropped in as a replacement.  Or you can get the commercial version or the free lite version off the version selector page.  Admittedly Telerik’s site is impossible to navigate.  However, with those links you should be able to get everything you need.
  4. Lotus Notes Integration – This is one of those items that is on the line for me not understanding their point.  From my perspective, SharePoint should be used to replace Lotus Notes except where rich offline support is needed.  Notes can be searched and you can embed direct links to Notes documents if the client has Notes installed.  What else do you want/need?
  5. Relative links are broke(n) – Yea, they are.  Server relative links work.  Absolute links back to the SharePoint server are converted to server relative links and thus work across different access paths (think internally (server) vs. externally (server.mycompany.com))  Fully relative links don’t work, and here’s why:  You don’t know where the content will be displayed.  If I display it on the home page vs. on the listing page the path is different.  Thus the relative paths wouldn’t work.  So yes, the system totally strips them and you can’t prevent it from doing this.  That being said, server relative links can be used as a workaround if you plan correctly.
  6. WYSYWIG on Web Parts – Another perspective on this is helpful.  There isn’t a WYSYWIG for server controls either and people don’t complain about that – they user controls.  Web Parts are essentially sophisticated server controls.  So my response is use user controls wrapped in a web part.  There are public samples of how to do this all over the place.  The most famous is undoubtedly SmartPart.  Admittedly there are issues there.  However, I have a configuration management supported process that works well for this – I just haven’t had time to convert it into a book yet.  (If someone wants to engage me to show them how to do it I can.)

Two quick things I agree with:

  1. Service Unavailable Message – We need better control of error messages.  The 404 error is another example of this.
  2. XHTML Compliance –Some of this is fixable with new master pages and new page layouts – however, there’s some that can’t be fixed.  The ListViewWebPart and ListFormWebPart are tops on my hit list for this.  In addition to standards compliance issues, they hardcode attributes rather than using CSS.  (Check the output of a display form, you’ll find hardcoded cell widths.)

Feel free to send me mail on this if you don’t agree – or you need more details.

Windows SharePoint Services Search – No Results and Errors

I had a client who has WSS.  They weren’t seeing any search results.  There were also some errors being logged on the server the most prevalent of which was:

 

Event Type:        Warning
Event Source:    Windows SharePoint Services 3 Search
Event Category:                Gatherer
Event ID:              2436
Date:                     11/5/2007
Time:                     10:00:03 AM
User:                     N/A
Computer:          SERVER
Description:
The start address <sts3://server/contentdbid={70792d37-74fc-430d-8939-d55afebdb795}> cannot be crawled.

Context: Application ‘Search index file on the search server’, Catalog ‘Search’

Details:
The object was not found.   (0x80041201)

 

The reason for the error … the server couldn’t reach the web application on its default URL.  Once I changed the alternate access mappings so that the default URL was reachable from the server and issued a command to start a full search (see below), it finally indexed things correctly.  The command to force a full crawl is:

STSADM –o spsearch –action fullcrawlstart

Restoring a site collection and an error

I recently received the following message while trying to restore a site collection backup:

“No content databases are available for this operation.  Create a content database, and then try the operation again.  To create a content database, click “Content databases” on the Application Management page, select the Web application to use, and then click “Add a content database”

The issue was that I had already restored the backup on the system and in the existing content database for the web application.  Since the site collection doesn’t change GUIDs you can’t restore a site collection into two site collections in a web application that has only one content database – it has to be in a separate content DB.  Add a new content DB and the error goes away.

Training Resources for Web Content Management

[Note: I put this together for a client a few months ago and forgot to post it here.]
[Note: 07-11-12: Updated a few links.]

This is a list of resources for Microsoft Office SharePoint Server 2007’s (MOSS) Web Content Management feature (WCM).

On-Line

The following resources are On-Line resources.  This includes web casts, blog entries, articles, etc.

Microsoft (Free)

The following links are free links from Microsoft’s web sites.

MS Site Content
Downloads 2007 Office System Video: Enterprise Content Management [resource removed]
Channel9 Web Content Management in MOSS 2007
MSDN Customizing and Branding Web Content Management-Enabled SharePoint Sites (Part 1 of 3): Understanding Web Content Management and the Default Features
MSDN Customizing and Branding Web Content Management-Enabled SharePoint Sites (Part 2 of 3): Extending WCM
MSDN
Customizing and Branding Web Content Management-Enabled SharePoint Sites (Part 3 of 3): Creating and Configuring WCM-Enabled Sites
MSDN Webcasts
The Evolution of Web ContentMangagement in the 2007 Version of Microsoft Office – Level 200

[These were all removed – sorry!]

Microsoft Office SharePoint Server 2007 Web Content Management for Developers and Designers

Microsoft Office SharePoint Server 2007 Web Content Management for Site Administrators and Owners

Microsoft Office SharePoint Server 2007 Web Content Management for Content Owners and Authors

 

Microsoft eLearning

The following resource is a for-pay resource available from Microsoft:

  • Course 5253: Implementing Content Management Solutions by Using Microsoft Office SharePoint Server 2007

Microsoft Blogs

The following are Microsoft sponsored blogs that contain content relative to Web Content Management:

Books

The following books may be of assistance with Web Content Management topics.  I didn’t list books which were not available today:

Title Notes
Real World SharePoint 2007: Indispensable Experiences from 16 MOSS and WSS MVPs One chapter by Andrew Connell.  I did a tech edit for this book on all but one chapter – the one I wrote on workflow.
Essential SharePoint 2007 No coverage of web content management but has some decent appendices on SharePoint end user use.
Microsoft SharePoint 2007 Unleashed 24 pages on Web Content Management
Microsoft Office SharePoint Server 2007 Administrator’s Companion 30 pages on Web Content Management with a heavy focus on administrative issues.

Training

There’s only one course available for Web Content Management right now.  That is Developing Publishing Sites with SharePoint Server 2007 WCM.  It’s available as an on-site or an on-line version.

SPWorkflowAssociation.AutoCleanupDays

One of the things I like (mostly) about working with SharePoint is that I get the opportunity to learn stuff almost every day.  I say mostly because although I love to learn, sometimes I have to learn by making mistakes – and that’s never fun.

About a month ago Dave Wollerman learned something about the way workflow’s worked and blogged about it.  The post titled “Huge MOSS Workflow Issue… What is Microsoft Thinking!!!!”  The post lays out how workflows based on the out of the box workflows – Approval is the one he calls out – lose their workflow history after 60 days.  In his post he’s frustrated (as in fact I might be) because he expects that workflow history stays around as long as the item does.  He mentions that there’s a performance reason for doing this but doesn’t dig behind the scenes.

In a recent conversation with some folks on the product team I got to mention Dave’s post and talk through it with them.  Out of that conversation I was struck by a few things.

First, there is a real performance issue that they were trying to address.  Because of the way that lists are implemented there’s a soft limit around 2000 items per “view” where the performance starts to decrease.  It’s a long story about the database table that items are stored in, how SQL treats the query, etc.  The short of which is that you need to be cognizant of how big lists get.  Steve Peschka wrote a white paper on this “Working with large lists in Office SharePoint Server 2007”.  It’s good reading if you want to know more about this.  But what does this have to do with Workflow History?

Well, each workflow history entry is placed into a big list.  In that list you have all of the workflow history items for all of the workflow instance for every workflow association that has that workflow history list associated with it.  If you figure on five workflow history entries per workflow it’s easy to see that even a few hundred items with workflow can quickly cross that 2,000 item mark.  As a result deleting items – making sure that the list doesn’t get really, really huge, is an important part of maintaining performance on the system.

Second, Dave’s thinking about the workflow history list as a permanent audit record.  MOSS provides an audit mechanism – but the workflow history list isn’t it.  I have to admit that I’ve fallen into this trap.  I do have some workflows that I think of the workflow history list as a part of the auditing – so I need to go back and revisit these workflows.  A better way to think about the workflow history list is a log.  The log files that MOSS creates – the ULS Log – are automatically recycled. Based on the schedule you set new logs are created and eventually deleted.  Workflow histories are designed to be like this.

Third, there’s a gap in the documentation.  It’s not precisely clear how this automatic recycling of the list takes place.  The object model reference lets you know that SPWorkflowAssociation.AutoCleanupDays exists, however, it doesn’t offer any additional information about how it works, why it exists or how it works.  I’ve found only a few references to this property in the Blogosphere.  I haven’t found an article or book that covers it (including my chapter in Real World SharePoint 2007 or articles.)  That means that it’s not going to jump out at you – unless you go looking for it because you already know it’s there.

Fourth, and finally, I’ve not been able to find any place that it is documented how to set the AutoCleanupDays when the workflow is associated.  However, a buddy on the program team showed me where this can be set so it will apply to every new association of the workflow – it won’t solve the built in workflows but it can help you with your own workflows.  Note the addition of an node in the following sample Element Manifest Xml:

<Elements …>
<Workflow …>
<MetaData …>
<AutoCleanUpDays>9999</AutoCleanupDays>
</MetaData>
</Workflow>
</Elements>

 

That’s pretty cool and not unlike the idea of feature stapling – where you can handle all of the new instances created even if you have to go back and update the existing associations.

[Update: 2007-10-16: It turns out that autocleanup doesn’t actually clean out the workflow history.  It does, however, remove the entry from the workflow instances that connects the workflow history to the item that the workflow ran on.  It also turns out it deletes any tasks that were created by the workflow.  The net effect of this is that the actual auditing is OK — the user interface just doesn’t look so good.]

WhitePaper: Managing Enterprise Metadata with Content Types

For some months I’ve been working on a whitepaper for TechNet which walks you through all of the steps to connect metadata in a document through a content type and up into Search — basically giving you the complete lifecycle for a document from creation through retrieval.  Last week it published to the site.  The title of the whitepaper is “Managing Enterprise Metadata with Content Types.”  Unfortunately, search still hasn’t found it yet :(  However, if you want to see it you can find the landing/summary page at [link removed] and the actual document at [link also removed].

Please let me know what you think of it.

Mondosoft SharePoint Search Workshops — Including Seattle

As I’ve mentioned on my blog before, I’ve been doing some of the Mondosoft SharePoint Search workshops where we demonstrate MOSS search, explain how it works, and show off some of the Mondosoft Ontolica product — which makes SharePoint search even better.  In a last minute change, I agreed to do the Seattle event next week on the 16th.   That means I’ll be doing the events in these cities:

  • Seattle, October 16th
  • Chicago, October 24th
  • Indianapolis, October 25th

Go register at www.ontolica.com so you can come introduce yourself to me at the event.

Organising Knowledge: Taxonomies, Knowledge and Organisational Effectiveness

Book Review-Organising Knowledge

When I write a book review most of the time, I write the review within a week or two after completing the book.  I do that because it allows me to keep the topics the book presents fresh in my mind.  However, it has the disadvantage of not having been fully integrated into my thinking and certainly hasn’t had the opportunity to be “road tested.”  When it comes to Organising Knowledge: Taxonomies, Knowledge and Organizational Effectiveness (and yes, it pains me not to spell it with a ‘z’ like my US English says I should), I waited before posting this review.

The reason I waited was because I felt like in this case having a more complete set of feelings about the book and it’s thoughts was more important than being able to distinguish specific thrusts of the text.  Instead, I opted to try it out for a while – to see if any of the material I gained from the book was valuable.  Good news it is.

I had my assistant type up a few excerpts from the book – things that I felt were highly relevant to the topics of taxonomy and organization.  I’ve referred back to this document on several occasions to pick out relevant snippets and to clarify my thinking.  I’ve passed the excerpts on to a few friends and colleagues who have been interested in the topics of taxonomy and organization.  In short, I know that there is value in the book because I’ve seen its value.

The book itself tries (mostly successfully) to crystallize your thoughts on organization.  It helps you see the organization that you already do and learn to apply these techniques to the kinds of problems that confront you when you’re trying to create a taxonomy.

It also covers how you can implement different structures with different levels of technology support.  At the lowest level there are organizational patterns that work with paper.  Higher levels of technology offer up additional options.  For instance, it is completely impractical to do a full text search over paper stored in a file cabinet – however, it is possible to leverage technology to do this kind of a full text search.  In a paper system it’s difficult to attach a single item to multiple places – multiple dimensions.  However, technology can make this practical and very useful to helping users find the information they’re looking for.

If you’re trying to put your arms around Taxonomy and Organization this book won’t give you all the answers – but it will certainly add a few more tools to your toolbox.  Pickup Organizing Knowledge: Taxonomies, Knowledge and Organisational Effectiveness if you’re seeking a better way to organize or the tools you need to create a taxonomy for your organization.

The Wisdom of Crowds

Book Review-The Wisdom of Crowds

I was recently reading a blog post titled Mild Super Power on the Dilbert Blog.  It made me think about how there are sometimes more factors at play than may be immediately obvious.  While I don’t subscribe to Scott Adam’s claim that he can avoid speeding tickets because he understands the economics of placing police cars at various points – mainly because economists assume that people are rational and we all know that people aren’t.  I’d also suggest that there are other factors – such as the desire to get some sleep on the job – which may play a factor in where cars are positioned to catch speeders.

One of Scott’s statements which rings very true is “My reason for majoring in economics in college was to understand how the world works, so I would be more equipped to navigate in it.”  I think this is a singular point of clarity – choosing to use your educational opportunities to help you better understand (and therefore navigate) the world around you.  I didn’t choose to major in economics – in fact, it was a topic that until quite recently that I cared very little about.  Recently however, the emergent behaviors of groups – that is complex (or different) patterns that emerge when many individual actors follow simple behavior rules – has become quite interesting.

The Wisdom of Crowds holds a similar mystery to me.  It illuminates how crowds can be very (hyper) intelligent and why sometimes they’re not.  Traditional thinking (in the US at least, I can’t speak for other areas of the world) is that you get together a group of exceptionally smart people and you put them in a room and eventually you’ll get something good out of them.  However, this necessarily is restrictive.  There are only so many people that are included.  There’s always some bar of “exceptionally smart” vs. “really smart”.

The fundamental premise for the book is that there can be a lot of value to allowing larger groups of people work on the same problem.  That the individual errors that are contained in their solutions tend to cancel each other out.  If you read Stumbling on Happiness you’ll know that we all have a very poor ability to predict the future because we tend to leave things out of our mental images.  I suspect that we have similar foibles when it comes to our ability to solve problems.

Fundamentally the author (James Surowiecki) suggests that there are three types of problems cognition (a problem of knowledge), coordination (getting everything to fit together), and cooperation (getting everyone to get along.)  He illustrates how groups solve the different types of problems differently.

One of the interesting tangents in the book is a discussion – in a few places – about Tacit knowledge.  That is knowledge gained by doing. I help the church I attend by supporting the technology around the delivery of Sunday services.  I’ve learned tons about the subtleties of music and of sound than I could have ever learned via reading a book.  (And I learn really well by reading.)  I’ve learned by having to run the sound board.  This knowledge isn’t easily capture and shared with others.

One of the considerations for problem solving large coordination and cooperation problems is the influence of tacit knowledge – you have to have “been there and done that.”  When you get the people together to solve problems those who’ve actually done it have the greatest chance of coming up with solutions that will work.

I’m reminded of a story about the infamous Skunk Works at Lockheed Martin.  That’s where Kelly Johnson and his team came up with some of the most sophisticated and radical aircraft designs of the time including the U-2, F-117, and my personal favorite plane the SR-71 (Blackbird).  The story is that when they were building one of the prototype aircrafts one of the machinists came up with a problem because one of the parts wouldn’t fit quite right.  An engineer walked out on the manufacturing floor, bent a piece of cardboard and told the machinist to “make it like that” – and asked the machinist to return the cardboard to the engineer because he’d have to draw the part later.  What’s striking to me about this is that the two different disciplines (engineering and machining) met at the point where the problem surfaced and they both exercised their tacit knowledge about the situation to solve the problem – without a hierarchy of structure, without bureaucracy, just taking the best of what (arguably the smallest) crowd knew.

If you find the ability of a crowd to create a solution that no one person could come up with – or don’t believe that a pool of different people with different perspectives and experiences could be smarter than 99% of everyone out there – you need to read The Wisdom of Crowds

InfoPath Form Services and Workflow Tasks

InfoPath Forms Services and Workflows in SharePoint can deal a one-two punch to your business problems.  It’s a simple form to create and a framework to take action on those forms.  However, there are a few caveats, however, one of them is that getting a form to open up in InfoPath Forms Services can be setup in the library where the form is stored but when a workflow task is created the link back to the item will try to open up in the InfoPath client (if present) – not in forms services.

Getting the document library to force the InfoPath form to open in InfoPath Forms Services can be done from the document library home page by selecting  Settings-Document Library Settings-Advanced Settings and changing the Browser-enabled Documents to Open browser-enabled documents to “Display as a web page”.

If you want to change the link so that it will open in the browser you’ll have to add a handler to the CreateTask activity.  I’ve added some support routines to break the code up into meaningful chunks. (that you can copy into your project).  The result looks something like:

private void createTask_MethodInvoking(object sender, EventArgs e)
{
string formsServerUrl = GetFormsServerUrl(workflowProperties.Item);
WorkflowTaskProperties.ExtendedProperties[SPBuiltInFieldId.WorkflowLink] = CreateUrlFieldString(“Open form for – ” + workflowProperties.Item.File.Name, formsServerUrl);
}

public static string CreateUrlFieldString(string name, string url)
{
return (string.Format(“{0}, {1}”, url, name));
}

public static string GetFormsServerUrl(SPListItem item)
{
return (item.Web.Url + “/_layouts/FormServer.aspx?XmlLocation=” + HttpUtility.UrlEncode(item.Web.ServerRelativeUrl) + “/” + HttpUtility.UrlEncode(item.Url) + “&OpenIn=Browser”);
}

Working from the bottom up, the GetformsServerUrl takes in the item you want the forms server URL for.  It does this by referencing the formserver.aspx and providing the correct parameters.  Above that CreateURLFieldString takes in the URL and a text description to create the string that you have to put into the field.

The actual MethodInvoking event for the createTask activity calls GetFormsServerUrl to get the actual URL and then CreateUrlFieldString to create a meaningful description for the link.  It then uses the SPBuiltInFieldId to get the Guid for the WorkflowLink field.

The net is a link that displays with a customized message and opens in the browser.

Recent Posts

Public Speaking