Wednesday, November 14, 2007

Promote and recommend SharePoint content

So where do you currently go to look for pointers on various SharePoint content…? There are so many sites which claim to provide links to "good" SharePoint content that it's hard to keep count. Why not have a central place where users can recommend various content on functionality related to SharePoint Products and Technologies and then other users can recommend that content if they find it useful... Kinda like how currently does it.

Well, this concept is now a reality! was launched a couple of weeks ago and it contains community driven content recommendations. It doesn't have that much content out there yet, but it's growing steadily. You can be a part of it as well and submit or recommend content. It's as simple as signing up on the site.

Monday, November 12, 2007

SharePoint Information Worker Conference 2008

Early bird registration for the SharePoint Information Worker Conference 2008 is available until December 1.
$1,495 USD will get you full access to the world's only SharePoint Conference dedicated 100% to non-technical content.
This conference is the business and power-user's dream conference. We will have numerous topics on features and functionality and how to apply them to solve business problems. We will also have several in-depth case studies from companies that have been wringing every bit of value possible out of the SharePoint product line.
Our speakers will include experts from SharePoint Solutions, Microsoft, Project Performance Corporation, SharePoint MVPs and others from government and industry.
Finally, the conference venue, Gaylord Opryland Resort and Convention Hotel, is truly a one-of-a-kind place to visit. Inside the hotel are nine acres of lush, indoor gardens, shopping and restaurants. The multiple indoor atriums and gardens have year-round climate control so that it is enjoyable no matter what the weather is outside!
If you are interested in the business aspects and application of MOSS and WSS, don't miss this conference.

Wednesday, October 31, 2007

SharePoint Connections Booth #626 - See You There!

We'll be heading over to Las Vegas this weekend for the SharePoint Connections conference. Jeremy Luerkens and myself will be manning our SharePoint Solutions booth #626 in the exhibitor's hall, so please stop by.

If your organization is thinking about setting up a SharePoint-based extranet, our team has done more SharePoint extranet implementations than just about anyone. Come to booth #626 and talk with our expert team about our award-winning Extranet Collaboration Manager add-on product. Your users will be happy you did.

Additionally, we'll be launching the Beta 1 release of Alert Manager 2007 in conjunction with the conference, and we'll be happy to speak with you about this new product's rich feature set for managing all Alerts for all users in your SharePoint farm.

We also have an exciting new partner program for systems integrators who use our award-winning products to meet their customers' needs. We'll be happy to talk about the incentives program and its details with you.

I've heard rumor that we have a few iPods to give away, and I know we've got plenty of "Dude, where's my Alert?" tee shirts to toss around. The SharePoint Connections conference runs Monday November 5th through Thursday November 8th at the Mandalay Bay Resort in Las Vegas. We're looking forward to meeting with you.

SharePoint Designer Workflows: How to Tell Which Fields Have Changed

If a workflow is set to start when an item is changed, you might think that it's impossible to determine exactly which field, or fields, have changed. This is because the workflow doesn't start until after the item has already changed. This can actually be accomplished though, using a SharePoint Designer workflow without too much pain.

The Scenario
For our scenario, we have a document library named "Documents". We have added a custom column named "Comments" to that library. If the Comments field ever changes on any item, we want to receive an email letting us know what the comments were before the change was made, and what the comments are now. Here is how you can accomplish that using a workflow written in SharePoint Designer 2007.

Step 1: Create a Duplicate Document Library
The trick that were going to employ is to create a second copy of the document library. We'll let our workflow keep this library synchronized with the first library. This library will need to be set up exactly like the first one, including the custom "Comments" field. We'll name this library, "Documents2". Note: The Comments field on the Documents library MUST be a required field. If it isn't, the workflow will start as soon as new documents are uploaded, even before you enter in the original comments. By making this a required field, the workflow will wait on the Comments to be entered before it sends the synchronized copy to the Documents2 library.

Step 2: Begin Writing the Workflow
Open your site in SharePoint Designer 2007 and create a new workflow. Here are the options I chose:
Name: Changed Comments Handler
List: Documents
Start: Automatically start this workflow when a new item is created AND Automatically start this workflow whenever an item is changed.

The only thing that deserves an explanation are the Start Options. Remember that our workflow is responsible for keeping Documents and Documents2 synchronized. In order to do this, it will need to start whenever a new item is created and whenever an item is changed.

Step 3: In the Workflow, Add a Condition and Action to Handle New Documents
To see if a new document has been uploaded to Documents, we'll compare its name to the names of the documents in Documents2. If a document with that name ISN'T found in the Documents2 library, our workflow will send a copy there.

  1. Click on the Conditions button and choose Compare any data source.
  2. Click on the first value link and then the Display data binding [fx] button.
  3. In the Define Workflow Lookup dialog box, set the Source to Documents2:ID. Then, in the Find the List Item section, set the Field to Documents2:Name (for use in forms). For the Value, click on [fx]. In this second Define Workflow Lookup dialog box, choose Current Item: Name (for use in forms).
  4. Click OK, OK to close both dialog boxes. You will receive a warning that the lookup isn't guaranteed to return a single value. That's OK--it just means that Workflow Designer can't guarantee that there will only be one item in the list that has the same name. Just click Yes to continue.
  5. The first value returned will be the ID of the document in Documents2. If the document exists, this will be an integer greater than zero. If no document exists with the same name, this value will be zero. Click on the second value link and enter 0.
  6. To create the action for this condition, click on the Actions button and select Copy List Item.
  7. Click on the first this list link, choose Current Item, and click OK.
  8. Click on the second this list link, choose Documents2, and click OK.
This completes the handling of new documents that are uploaded to the Documents library.
Your workflow should like this:

Step 4: In the Workflow, Add a Condition to Handle Changed Comments
For this scenario, we don't care if anything else changes except the Comments field. We need to add a Condition to handle this scenario if it should occur.

  1. Click on Add 'Else If' Conditional Branch.
  2. Click on the Conditions button and choose Compare Documents field.
  3. Click on the first value link and choose Comments. This will refer to the Comments filed in the Documents library.
  4. Click on the second value link and and then [fx]. In the Define Workflow Lookup dialog box, set the Source to Documents2: Comments. This will allow us to compare the Comments field for the current item in the Documents library with the Comments field for the item with the same Name in the Documents2 library.
  5. In order to complete the Lookup, you need to set the options in the Find the List Item section. For Field, choose Documents2:Name (for use in forms).
  6. For Value, click on [fx]. In the new Define Workflow Lookup dialog box, choose Current Item, Name (for use in forms). This will cause the workflow to only use Comments field from an item in Documents2 that has the same Name as the document in Documents library.
  7. Click on OK, OK. Click Yes, again, when prompted about unique lookups.
  8. To finish this up, we only want the Action to fire when the two Comments fields aren't equal. Click on equals, and change it to not equals.
Step 5: Add an Action for When Comments Have Changed
Now that you have finished writing the Condition, you are ready to write the Action. In this action, the workflow will send an email to a particular user that includes the previous comments and the new comments. Then the workflow will delete the item in Documents2 that has the same name and copy over the new item to Documents2.

  1. Click on Actions, and choose Send an Email.
  2. Click on the this message link. A new dialog box will open for you to define the E-mail.
  3. Choose a recipient by clicking on the Select Users icon beside the To box.
  4. For the subject, I entered Some Comments Have Changed.
  5. In this dialog box, you can enter your own text and then use the Add Lookup to Body button to add other variables to your email. I added the name of the document, a link to the document, the Previous Comments, and the Current Comments. If you've followed along with the Lookups so far, you shouldn't have much trouble figuring out how to create the lookups in your email. When you are finished composing the email, click OK.

  6. Click on Actions, and choose Delete Item.
  7. Click on the this list link. In the Choose List Item dialog for the List select Documents2.
  8. In the Find the List Item section, for the Field, select Documents2:Name (for use in forms). For the Value, click on [fx], and choose Current Item: Name (for use in forms).
  9. Click on OK, OK. Click Yes, again, when prompted about unique lookups.
  10. To complete the Action section for this condition, click on the Actions button and select Copy List Item.
  11. Click on the first this list link, choose Current Item, and click OK.
  12. Click on the second this list link, choose Documents2, and click OK.
Congratulations! You're finished writing the workflow. It should look like the screenshot below.

Step 6: Save the Workflow and Test It
To save the workflow, click the Finish button at the bottom of the Workflow Designer window. Once it compiles, you're ready to test it.

  1. Return to the Documents library in your browser and upload a document--for the Comments, just enter "Original Comments".
  2. Go to the Documents2 library. You should see a copy of your document there, along with the comments you entered.
  3. Return to the Documents library and choose Edit Properties for the document. Change the Comments to "Second Comments", and click OK.
  4. Return to the Documents2 library and you will see that the comments have updated there.
  5. Check your email. You should have received an email notification about the changes that included both the previous and current comments.
A Few Caveats
I realize that this isn't a "perfect" solution. But it does show some of the power of creating workflows with SharePoint Designer. The problems that I see with it initially are:

  • It doesn't handle documents that have been deleted from the Documents library. If you delete a document there, the copy will remain in Documents2. SharePoint Designer workflows can only start manually, when something is created, or when something us updated. I currently don't see a way to start something when it is deleted because the workflow is attached to the item.
  • There is no good way to keep users from manually making changes to items in Documents2. When the workflow performs its actions, it does so using the permission of the person that did the action that initiated it. If the user has permissions to Document2, then it is hard to hide it from them.
  • It doesn't handle the case where the name of a document is changed. It would be possible to allow for this using some other unique identifier besides the document name though, perhaps something in another custom field.
  • It doesn't handle the case where a document with the same name as an existing document is uploaded.
Even with the limitations of this type of workflow, I believe this example still addresses a common need that will work for some users in some situations. I believe that some of the caveats would be difficult to overcome even with a workflow written with Visual Studio.

Thursday, October 25, 2007

Sneak peak at Alert Manager 2007

Our software team has been busy these past months working on Alert Manager 2007.

Here's a sneak peak of some screen shots for the new product, which will be launched next month.

Stay tuned for more details.

Thursday, September 06, 2007

Make Selected Links in a Links List Open in a New Window

One of the questions that comes up frequently in our classes is, "How can I make some of my links in a Links List open in a new window?" I usually explain how I would accomplish this using JavaScript. I've answered this question so often now that I guess it's time to post the solution here on the blog.

When you add a link to your SharePoint navigation, or in a Summary Link Web Part, it gives you the option to, "Open link in new window." However, the standard Links list, doesn't give you this option. Many users seem to want it though.

The first part of my solution involves training your end-users to add something extra onto links that they want to open in a new window. I like to have them add. "#openinnewwindow". There is a two-fold reason for this. One, it's fairly easy for most users to remember once they've used it a couple times. Two, if the JavaScript code isn't in place, it doesn't cause any errors when a user clicks on the link--it will just open in the same window as normal (unless there is a named anchor on the target page named "openinnewwindow", which is highly unlikely. :) )

The second part of my solution is the JavaScript code that makes this work. Here is the code. It can be placed into the source of a Content Editor web part, or even added to your master page.

Note: In the code example below, replace the square brackets around the SCRIPT tags with angle brackets. If I included the angle brackets, the browser tried to execute the code. :(

[script language="JavaScript"]

//add an entry to the _spBodyOnLoadFunctionNames array

//so that our function will run on the pageLoad event

function rewriteLinks() {

     //create an array to store all the anchor elements in
the page

     var anchors = document.getElementsByTagName("a");

     //loop through the array

     for (var x=0; x<anchors.length; x++) {

     //does this anchor element contain #openinnewwindow?

          if (anchors[x].outerHTML.indexOf('#openinnewwindow')>0)

//store the HTML for this anchor element

oldText = anchors[x].outerHTML;

//rewrite the URL to remove our test text and add a target instead

newText = oldText.replace(/#openinnewwindow/,'" target="_blank');

//write the HTML back to the browser

anchors[x].outerHTML = newText;




That's all you need to do make this work!

For all you code junkies, I think the comments in the code explain well enough what is going on. Let me know if you have questions.

Tuesday, August 07, 2007

Case Study: La-Z-Boy Collaborates with ExCM and SharePoint

La-Z-Boy has numerous business partners, vendors and licensees, and sharing information with organizations outside the company had become a major issue. Because SharePoint out-of-the-box only allows administrators to create user accounts and assign security roles, the IT department was faced with making business decisions about what information to make accessible to outside parties in critical areas such as intellectual property.

ExCM enabled La-Z-Boy to shift the burden from IT to line-of-business employees with expertise in specific areas who know what is appropriate to share with external parties, and let them manage the account-creation process.

Friday, August 03, 2007

Take Custom Action Upon SharePoint FBA User Login

Many of our customers have use cases where by they would like to take a specific custom action when an FBA (forms based authentication) user logs in to their SharePoint Extranet. Some examples may be to update a back-end CRM system, or redirect the user to a specific page. It is actually fairly simple to implement this logic. The Visual Studio project and source code for this article can be downloaded by clicking the download link at the bottom of this page.
First under the 12 hive, open the C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS folder. Find the login.aspx file, and make a copy of it called CustomLogin.aspx. This will be our new user login page.
Next, open the web.config for your SharePoint application, find the <authentication/> element, and change it from:
    <authentication mode="Forms">
      <forms loginUrl="/_layouts/login.aspx" />
    <authentication mode="Forms">
      <forms loginUrl="/_layouts/CustomLogin.aspx" />
Now, create a new Class Library project in Visual Studio, or alternatively download my sample project from the link below. Your project will need references to Microsoft.SharePoint.dll, Microsoft.SharePoint.ApplicationPages.dll, and System.Web.
Rename the automatically created Class1.cs to CustomLoginPage.cs. To save time and effort, the CustomLoginPage class will derive from Microsoft.SharePoint.ApplicationPages.LoginPage. Here's what the class should look like:
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Security;

namespace SPSolutions.Custom
    public class CustomLoginPage : Microsoft.SharePoint.ApplicationPages.LoginPage    {
        protected override void OnLoad(EventArgs e)
            this.login.LoggedIn += new EventHandler(OnLoggedIn);

        // Fires after user has sucessfully logged in        void OnLoggedIn(object sender, EventArgs e)
            // Get the user            MembershipUser user = Membership.GetUser(this.login.UserName);

            if (user != null)
                // Do something interesting such as redirect or update CRM            }
As you can see, it is a simple matter of subscribing to the base page's login control's LoggedIn event, and then taking action when that event fires. Inside the event handler, you can instantiate a MembershipUser object for the newly logged in user, and then do something interesting.
It should also be noted that the login control has three other events which may be salient to your particular use case.
  • LoggingIn - Occurs when a user submits login information, but before authentication takes place.

  • Authenticate - Occurs when a user is authentication takes place.

  • LoggedIn - Occurs when a user logs in to the web site, and has been authenticated.

  • LoginError - Occurs when a login error is detected.
Next, open the CustomLogin.aspx page created in the first step, and modify its Assembly and Page declarations to point towards the new custom code behind assembly. If you're using my sample project, your declaration will look exactly like this:
<%@ Assembly Name="SPSolutions.Custom, Version=, Culture=neutral, PublicKeyToken=e9db3057acd9c0f6"%> 
<%@ Page Language="C#" Inherits="SPSolutions.Custom.CustomLoginPage" MasterPageFile="~/_layouts/simple.master"%>
Finally, place the compiled assembly into the _app_bin folder of your SharePoint web application (e.g. C:\Inetpub\wwwroot\wss\VirtualDirectories\\_app_bin). Optionally, you could also place the assembly into the GAC.

Wednesday, August 01, 2007

Windows IT Pro Editor's Best of 2007 Award Goes to Extranet Collaboration Manager

Windows IT Pro magazine has given our Extranet Collaboration Manager product their Editor's Best of 2007 Award in the SharePoint category. ExCM is awarded on page 30 of this month's (August) Industry Excellence Awards edition of the magazine, which is also available online here.
During this process, Windows IT Pro magazine considered products for 13 different categories, including one category for Microsoft SharePoint. ExCM took first place for the SharePoint category, followed by Quest Software's (NASDAQ: QSFT) SharePoint Administrator product in second place, and Commvault's (NASDAQ: CVLT) Galaxy Backup and Recovery product in third place.
The editors of Windows IT Pro interviewed with members of our esteemed customer DraftFCB during their review. DraftFCB specializes in integrated marketing and advertising with an emphasis on branding, interactive, emerging media, multimedia, and database technology. Headquartered in Chicago and New York, the agency's network spans 180 offices in 110 countries serving clients such as Hewlett-Packard, Verizon, Computer Associates, Kellogg, and the United States Postal Service. The agency is led by chairman and CEO Howard Draft and is a subsidiary of Interpublic, the world's third-largest advertising conglomerate. DraftFCB is an early adopter of ExCM, and is actively using our product in their SharePoint 2007 Extranet.
No other free or commercial product on the market today offers the complete set of features available from ExCM. ExCM is platform certified by Microsoft and Veritest, and is used by both large and small companies from around the globe to enable their SharePoint 2007 based Extranets.

Thursday, July 19, 2007

Keyboard Shortcuts for SharePoint Calendars

If you use Sharepoint calendar views very much, you might be able to save some time, or at least impress your co-workers, if you control them via keyboard shortcuts. I was looking at the code view of the calendar web part earlier this week and noticed that several links had accesskeys assigned to them.

Here are the keyboard shortcuts for SharePoint Calendar views:
ALT + [ - Previous day, week, or month in a view
ALT + ] - Next day, week, or month in a view
ALT + X - Expand all
ALT + P - Collapse all
ALT + . - Switch to Day view
ALT + - - Switch to Week view
ALT + = - Switch to Month view

Hitting these keys in Internet Explorer will select the link--you will need to hit the ENTER key afterwards to activate the link.

Microsoft has also provided a complete list of SharePoint Keyboard shortcuts.

UforB: New European Reseller for SharePoint Solutions Software

I'm happy to announce that we've added Utilities for Business as an authorized reseller of our software products in Europe. Marco Linders of UforB has been a friend of our software division of a few years now, helping us with language translations and sage advice on how things work across the Atlantic. We've seen an explosive growth of interest in our software products worldwide, particularly in the European market. Marco and UforB will help us to deliver the best possible service and support to our European customers.

Utilities for Business provides solutions for:
  • SharePoint Web Parts
  • Internet solutions
  • Business Intelligence
  • Interactive visual reports
  • Management Information Systems
When you get a chance, please stop by UforB's website and drop Marco a message.

Thursday, July 12, 2007

Creating Workflows for Windows Sharepoint Services and MOSS2007 - a Step by Step Tutorial by Serge Luca.

Serge Luca [MVP WWF] has begun publishing a comprehensive tutorial titled Step by Step Tutorial. Creating Workflows for Windows Sharepoint Services and MOSS2007.

Serge's article is well-written and well-illustrated. It looks like three of twenty articles have been published so far, but clearly his complete article will be an authoritative guide worth bookmarking for future reference.

Wednesday, July 11, 2007

Overcoming Challenges in Modifying and Adding Page Content with JavaScript

If you've been wishing that more web parts gave you the option to apply XSLT styles, then the methods presented in this post may just be your ticket to the customization that you're seeking!It's not the same thing, but with some clever JavaScript coding, you can achieve similar results.

I'm a frequent user of Zap Reader—the popular, and free, web based speed reading program. There were already plugins for several blogs (WordPress, Blogger, and TypePad), but nothing for SharePoint blogs. I thought it would be nice to add a button to each blog post that allowed readers to quickly load the text into Zap Reader so they could speed read it.

Conventional wisdom would have said that this needed to be written in Visual Studio and then installed as a feature that could be activated or deactivated for each blog site. Some of the existing Zap Reader tools were already written in JavaScript, so I figured why not leverage this existing code base and write something that any Power User could easily add to their blog without having to go through all the IT Department red tape to get something extra installed. (I don't necessarily think all that red tape is a bad thing, I just figure why go through it if you don't have to.)

I started with the existing code for the Greasemonkey script that adds a "Zap Read This" button to each post in BlogLines—it worked essentially the way that I wanted this one to work: the page would load; the script would then rewrite each blog post on the page to include a "Zap Read This" button. It sounded good in concept, but I encountered a couple hurdles along the way. I'm hoping to save other JavaScript developers some trouble by documenting in this post how I overcame them. Note that many Greasemonkey scripts can be modified to work within a Content Editor web part to give all your users extra functionality on that page, regardless of the browser they are using. You may want to spend some time browsing to get some inspiration, and code.

The DIVs for the blog posts don't have unique names.

Because I needed to extract the innerHTML for each post, modify it, and then write it back, I needed some way to consistently reference it. All the post DIVs did have the same "ms-PostBody" CSS class, however. To help with this, I found a nice JavaScript function called getElementsByClassName() by Jonathan Snook and Robert Nyman. Calling this function placed all the DIV objects with the "ms-PostBody" class in an array where I could work with them.

I couldn't add new FORM tags on the page.

If you've tried to add any code to a content editor web part that contained FORM tags, you got an error telling you, "FORM tags are not supported in the HTML specified in either the Content property or the Content Link property." At first I thought that would be no big deal since I was adding my tags dynamically using JavaScript to update the innerHTML of another DIV. When I tried this though, I got an "unknown runtime error" in the browser when my JavaScript ran.

I discovered that IE7 validates code that is written using the innerHTML property before it writes it, and if it is invalid markup, it will give you the "unknown runtime error". The reason that I was getting it was that almost the entire page was already wrapped in FORM tags (this is needed for all the cool out-of-the-box JavaScript functionality in SharePoint 2007) and you can't have one HTML form nested inside another one. That made sense. Since I couldn't add my form at each button, I decided to just utilize the existing form tags and have my script modify them when the button was clicked, and then change them back when the script was finished running.

You will find the code for the "Zap Read This" Button for SharePoint Blogs on the Zap Reader Tools page. The code is well documented to explain why I did some things the way I did. To use it, simply copy the code and paste it into a Content Editor web part on both the default.aspx and Lists/Posts/Post.aspx pages of your SharePoint Blog. You may want to customize the placement or look of the button, but this was written to give you just the basic functionality.

Let me know in the comments what you think!


Thursday, July 05, 2007

Changing the Number Of Blog Posts Per Page

When I posted about how to Select Multiple Categories for SharePoint Blog Posts, one reader noted in the comments that when you view items by category, it only lists 10 posts per page. This reader wanted to know how to increase the number of posts that are shown on a particular page.

Unfortunately, there isn't a quick and easy way to do this just from within a web browser. Our faithful friend, SharePoint Designer 2007 will give us the tools we need to change this, however.

First, click on one of the categories to go to the page that displays the posts for that category. The page should be at /Lists/Categories/Category.aspx. Now open this page for editing in SharePoint Designer 2007.

Once the page is open, change to code view. Then look for a section of code that looks like the following screenshot:

(Note: this screenshot was taken with Word Wrap enabled.)

You are looking for the section that is highlighted in the above screenshot.

You will see several other RowLimit sections with other numbers in them. You want to make sure you have this one.

Change the number "10" to however many blog posts you want to display on a page.

Once you've made your change, save the page and view it.

If you want to display more posts on the home page of your blog, you can do this same thing by editing default.aspx.

Adding JavaScript to a Content Editor Web Part to Run onLoad

Adding JavaScript to a page inside a Content Editor web part can be a great way to perform on-the-fly customizations to your SharePoint sites. This worked great in WSS v2 and SPS 2003. We started noticing that some of those scripts didn’t seem to work in WSS v3 and MOSS 2007, however, and it wasn’t because the names of objects and elements had changed.
For example, here is a JavaScript snippet that we had used to hide the “NEW!” icon on a page in WSS v2.
Note: In all code examples below, replace the square brackets around the SCRIPT tags with angle brackets. If I included the angle brackets, the browser tried to execute the code. :o(
[script language="JavaScript"]
var fields,i;
fields = document.getElementsByTagName('IMG');
for( i = 0; i < fields.length; i ++ ) {
  var imgsrc = fields[i].getAttribute('SRC');
  if(imgsrc.indexOf("new.gif") != -1) { 
   fields[i].style.visibility = "hidden";
When we added this to a Content Editor web part in a WSS v3 page, nothing seemed to happen. I added code to make it run on the onLoad event, and that didn’t work either. I did a little experimentation and discovered that if I added a short delay, even a delay of 1/1000 of a second, it worked fine. I placed the core code within a function and then called it with the setTimeout() method.
[script language="JavaScript"]
function HideNewIcons(){
  var fields,i;
  fields = document.getElementsByTagName('IMG');
  for( i = 0; i < fields.length; i ++ ) {
    var imgsrc = fields[i].getAttribute('SRC');
    if(imgsrc.indexOf("new.gif") != -1) { 
     fields[i].style.visibility = "hidden";
The problem occurs because most WSS v3 pages use a master page that contains the “body” element, and the page content code loads after the master page code. I didn’t know it at the time, but recently discovered (thanks to this article on the Microsoft SharePoint Products and Technologies Team Blog) that the SharePoint developers had given us a way to work around that issue—it’s the _spBodyOnLoadFunctionNames array. We can use JavaScript’s “push” method to load items into this array where they will run when the body’s onLoad event fires .
Here is what the JavaScript looks like with the setTimeout replaced with a line that pushes the function name “HideNewIcons” into the _spBodyOnLoadFunctionNames array.
[script language="JavaScript"]
function HideNewIcons(){
  var fields,i;
  fields = document.getElementsByTagName('IMG');
  for( i = 0; i < fields.length; i ++ ) {
    var imgsrc = fields[i].getAttribute('SRC');
    if(imgsrc.indexOf("new.gif") != -1) { 
     fields[i].style.visibility = "hidden";
If you’ve been having trouble getting some of your legacy JavaScript scripts to run from within Content Editor web parts in WSS v3 or MOSS 2007 pages, give this technique a try, and let me know if it works for you.

Monday, July 02, 2007

I've been Presented with the 2007 Microsoft® MVP Award for Windows SharePoint Services

I received notification over the weekend that I’ve been presented with the 2007 Microsoft® MVP Award for Windows Server - Windows SharePoint Services. I wanted to thank the SharePoint community for this nomination and award. It is always nice to gain recognition from one's peers.

The team I work with at SharePoint Solutions is the best in the industry. These folks are hard-working people who care not only about success on a professional level, but also keep perspective on the importance of family and solid values. The SharePoint Solutions team has trained literally thousands of students on the intricacies of SharePoint, helped hundred of organizations implement SharePoint environments, and delivered a wide variety of valuable software add-ons for the SharePoint platform. The owners and members of SharePoint Solutions sincerely care about their customers and colleagues.

My wife Bekkey has been incredibly supportive and tolerant of me over the years. There have been far too many evenings during which I paid only half as much attention to her as I should have, because I was doing some kind of research or work on the computer.

It is because I am lucky enough to work with this great team, and because I have been blessed with such wonderful people in my life that I’ve been presented with the WSS MVP award.

It takes a village, and the village I live in is the best. Thanks everyone!

Thursday, June 28, 2007

Select Multiple Categories for SharePoint Blog Posts

As we teach users about SharePoint Blog sites in our Applying SharePoint 2007 - MOSS Core Features class and our SharePoint 2007 Jump-Start class, one question comes up quite often--"Can I select multiple categories?"

This is very easily accomplished. Remember that just about everything in SharePoint is just lists, and the blog posts and blog categories are no different.

By default, Blog posts only allow one category, which is displayed in a drop-down menu.

This should give you some clue about how to go about changing it. When you enter a new blog post, you are just adding a new item to a SharePoint list named "Posts", and "Category" is just one of the columns in that list--it is a Lookup column that looks up information from the Categories list.

To make the change, click on View All Site Content, and then click on Posts in the Lists section. When the default view for the Posts list loads, click on Settings, List Settings. This takes you to the page where you can edit all the properties for that particular list.

In the Columns section, click on Category.

In the Additional Column Settings section, check the box beside Allow Multiple Values, and click the OK button.

When you create a new Blog Post, you will see that the control changes to allow you to select multiple categories.

Tuesday, June 26, 2007

SharePoint Information Workers Conference 2008

This past January we hosted the first-ever SharePoint Information Workers Conference in Orlando, Florida. Our team attends and speaks at numerous conferences each year, but, in general, they are all pretty technical in nature. So, after three years of teaching various training classes targeted at non-technical Information Workers, we decided it was high time that someone showed this group of SharePoint devotees a little love!

The conference in January was a great success. We had a sellout crowd, great speakers and top-notch exhibitors. We had many attendees from Europe and beyond.

We are definitely going to host this conference again in early 2008 (January or February). We've been working for several weeks to nail down a venue and final dates and hope to be able to announce the details by July 1.

If you would like to be notified via email when we have the location and dates for the 2008 conference finalized, go here and fill out the notification request form.

Monday, June 25, 2007

SharePoint Server 2007 VHD image

Microsoft has made available a SharePoint server 2007 vhd image at the following site:

Why does it matter to you? Well, you can use this virtual machine image to create a SharePoint Proof of Concept for your use case scenarios (among other uses).


Friday, June 22, 2007

The Three-State Workflow - The Forgotten Out-Of-The-Box Workflow for Both WSS and MOSS

Many people believe that MOSS comes with only four out-of-the-box workflows (Approval, Collect Feedback, Collect Signatures, and Disposition Approval), and that WSS v3 doesn't come with any out-of-the-box workflows. In actuality, there is another work flow that is available out-of-the-box to both WSS v3 and MOSS—it's called the Three-state workflow.The reason that even many seasoned SharePoint professionals don't know much about the Three-state workflow is because the feature isn't activated by default—you will have to go into the Site collection features, and activate it.

Once you have activated the Three-state workflow feature, it will be available as a workflow template to all your lists, libraries, and content types.

The Three-state workflow allows you to track the status of an item between three states. This is very useful when tracking issues, project tasks, leads, or other similar items.
I won't bore you with details on how to use it; Microsoft has already done an excellent job of explaining how to use the Three-state Workflow. My mission here is just to let you know that it exists. I will leave you with one small screenshot though, just to whet your appetite. Look at all the options you have for the task and email details for each transition step.


Tuesday, June 12, 2007

TechEd Buzz, SharePoint Governance and Site Provisioning Assistant

One of the most prevalent buzzwords floating around TechEd last week was “SharePoint Governance”. By Microsoft TechNet’s definition, the term SharePoint Governance is:

“… the set of roles, responsibilities, and processes that you put in place in an enterprise to guide the development and use of a solution based on SharePoint Products and Technologies.”

Is SharePoint Governance on your mind? If so, we believe that our new Site Provisioning Assistant product for SharePoint 2007 may help you to get a bit more sleep at night. Just as SharePoint MVP Shane Young and Microsoft’s Joel Oleson were quick to point out upon viewing a demonstration of SPA from our TechEd booth, Site Provisioning Assistant provides key features to assist in your SharePoint Governance strategy.

In a recent blog Post, Joel Oleson identifies a key component to SharePoint Governance as:

“… Self Service approach to deployment (bottoms up) - how can I keep Help desk from being a bottleneck to information worker productivity.”

We couldn’t agree more, and that is exactly why we developed the SPA add-on for WSS v3 and MOSS 2007. With Site Provisioning Assistant, you can automate the process of handling requests for new WSS v3.0 and MOSS 2007 sites. As a SharePoint administrator, SPA provides you with a solution to these key questions:
  • How can I enable our users to have the SharePoint sites they need in a timely manner, but maintain the integrity of our organization's taxonomy?
  • How can I give my users an easy to use, consistent interface for requesting new SharePoint sites?
  • How can I automate my organization's approval process for requesting new SharePoint sites?

For more information or to download an evaluation copy of SPA, visit the Site Provisioning Assistant Product home page.

Friday, June 01, 2007

Great new SharePoint book by Ted and Dan, see you at TechEd

Inside Microsoft Windows SharePoint Services 3.0

The SharePoint book that I have been waiting for the most has finally arrived. It seems like Clinton was still president when I ordered it :), but this book was well worth the wait. Back when I first heard that Ted Pattision and Daniel Larson were teaming up to write a SharePoint book, I got pretty excited. I knew these guys would have a knock-out book for SharePoint developers, and I'm happy to say I was right.

With this book, you will learn how to:
  • Build application pages and site pages
  • Develop and deploy reusable Web parts to enable customization and personalization
  • Exploit Windows SharePoint APIs to deploy Microsoft ASP.NET AJAX components
  • Use XML and Collaborative Application Markup Language (CAML) to create provisioning components
  • Design and implement custom document libraries
  • Use Windows Workflow Foundation to create applications that automate business process
  • Create Site Definitions to aggregate components and package them for deployment
  • Implement Code Access Security, Trust Levels, authentication, and authorization
Do yourself a huge favor, and go spend five minutes on Amazon ordering yourself a copy.

I hope that I get a chance to run into Ted and Daniel next week at TechEd in Orlando, to compliment them on the outstanding book. Are you going to TechEd? If so, please stop by our SharePoint Solutions booth and say hi. We'll be happy to demo our software add-ons for SharePoint, show you our training materials, talk about consulting, or just shoot the breeze. Our booth number in #254.

Wednesday, May 23, 2007

Need expert InfoPath knowledge?

There are lots of people who use and develop with InfoPath and many of them post tips, tricks, etc. to their blogs.

One that stands out, in my mind, is actually an entire company that is devoted 100% to InfoPath consulting and solutions. InfoPath is ALL they do.

The company is Qdabra Software and they share their expert InfoPath knowledge on a public site they host named On this site, there are well over 100 "How-to" articles, tips and tricks. And, they don't write articles about "101" InfoPath topics. They write about the difficult issues that we all face when we try to implement an InfoPath solution in the real world.

There is a reason that Qdabra has all of this deep InfoPath knowledge. The company was founded and is owned by Patrick Halstead, one of the original development managers at Microsoft on the development of InfoPath v1. Also, Patrick is the author of the best advanced-level book on InfoPath 2003, Developing Solutions with Microsoft InfoPath. (If you follow this link to Amazon, you will find that the book has a rating of three-stars out of five. Don't be fooled by that. I've read the entire book from cover to cover and have used it extensively to develop InfoPath-based applications. It is not perfect, but it is by far the best text out there on advanced usage of InfoPath 2003).

So, while there still is a real shortage of expert-led classroom-style InfoPath training, there are some very good resources available on the Internet and is one of the best.

(If you go to their site, you will see that a lot of the most recent tips are written in Japanese. If that is not your preferred language, keep searching their site because the tips in English still far outnumber the Japanese ones. The reason they are posting a lot of new tips in both Japanese and English is because InfoPath is BOOMING in Japan. :))

Wednesday, May 16, 2007

Branding SharePoint

There are lots of articles and tips for branding SharePoint 2007 and customizing the look and feel. Just do a Google search or hunt down the bloggers that specialize in this area.

But what if you are under the gun to do a SharePoint branding/customization job and you really need to absorb all of the details fast and get the job finished as soon as possible?

In my mind, you can't find a better solution than our Extreme Makeover SharePoint 2007 Edition course. It's a three-day class and will cost you roughly $2000, but you will leave with a thorough understanding of how to do this type of work and will have worked through numerous hands-on labs practicing the art.

Since this course is all about the visual aspects of SharePoint 2007, maybe the best way to sell you on it is to show a before and after image of the kind of thing you will do in the class:



Here's another one:

Here is a quick and dirty list of some of the topics that the course covers:
  • The SharePoint 2007 CSS files and architecture
  • Master Pages
  • Page Layouts
  • Site Definitions
  • List Definitions
  • Themes
  • SharePoint Designer Customization of navigation and the UI
  • The "Features" feature
The full course description and outline is available here.
On top of all this, the course was written and is taught by a true expert in SharePoint branding and customization. You won't often hear his name tossed around in the SharePoint Community, but he has as much, if not more, experience branding SharePoint as anybody out there.
His name is Kevin Pine and he has a background as a professional web site developer. For the past three years, he has been devoted full-time to SharePoint branding here at SharePoint Solutions. He wrote our Extreme Makeover 2003 course that was very successful and popular during 2003 - 2006. He has also done numerous SharePoint branding projects for our consulting clients including BP, Central Michigan University, Sarah Cannon Cancer Research Institute, and many others.
On top of all this, Kevin is an outstanding classroom teacher.
So, if you need to come up to speed quickly on all of the details and nuances of SharePoint 2007 branding and customization, in my opinion you can't find a faster and better way to do this than come take Kevin's class.

Wednesday, April 25, 2007

MSDN: Team-Based Development in Microsoft Office SharePoint Server 2007

Eric Charran of Microsoft recently published a MSDN article covering team-based development on the SharePoint 2007 platform. Eric begins by delineating the roles of artifact development and assembly development, discussing environmental and procedural similarities and dissimilarities. Eric’s article then covers integration builds and deployment processes, with the aid of some well-designed illustrations. Overall, Eric’s article is informative, and should be read by anyone seeking a high-level understanding of team software development on SharePoint.
For a few years now, our software engineering team here at SharePoint Solutions has been using a development environment similar to what Eric describes. Because we are geographically distributed, we rely on local virtual development environments (robust Dell laptops running Virtual Server 2005 RC2), that connect to Team Foundation Server over VPN. Prior to TFS and VPN, we used Visual Source Safe with SourceGearSourceOffSite and CruiseControl.NET. SourceOffSite was (barely) a workable solution, but now seems like the dark ages in comparison to Team Foundation Server. As for the source code vault itself, we take the approach of using a common mainline for team builds, with each of us working in isolated virtual build labs for incremental building and testing. We merge from our independent VBLs to the common Mainline, and kick off team builds for testing and release.
We are primarily focused on producing software solutions for redistribution, so every artifact and assembly we create must be packaged for deployment. In Visual Studio, our solutions are comprised of modified C# class library projects which have been customized to output SharePoint deployment packages (.wsp). Although the VSeWSS toolset has some nice conveniences, it just doesn’t provide us with the granularity we need for packaging commercial applications. A simple example of how we structure a project can be found in my October 2006 post Anatomy of a SharePoint WSS v3 Feature Project in Visual Studio 2005.
Finally, we depend on the WiX toolset for creating Windows Installer packages to distribute our software products. Here too, we use modified C# class library projects which have been customized to output MSI setup packages. The last step of our team build process zips up the appropriate outputs, then places them in a staging area where they await manual release to web (RTW).

Friday, March 30, 2007

Extranet Collaboration Manager - Standard Edition 1.0.0 Final has been Released to Web (RTW)

This morning our software developement team released Extranet Collaboration Manager - Standard Edition 1.0.0 Final for download and purchase.

I wanted to thank the literally hundreds of SharePoint Solutions software customers who have helped us with Beta testing ExCM - SE over the past few months. Your input and assistance have been invaluable in helping us to release another quality add-on product for SharePoint 2007.

For full details on the features and functionality of ExCM - SE 1.0.0, please visit its product home page.

Wednesday, March 07, 2007

Latest Release of ExCM - SE for SharePoint 2007 Adds User Profile Management

Last night we released an updated version of our ExCM - Standard Edition for SharePoint 2007 product. The new package can be downloaded from our SharePoint Solutions Software site's Releases and Downloads page.

Many of our software customers have been asking for us to add user profile management capabilities to the ExCM - SE product. As a result, with this latest release you can now define custom user profile properties of text, date and yes/no data types. You are further able to configure user profile fields as required or optional for users to complete when registering for access to your site. As well, you can apply a custom validator to your user profile properties, requiring data to be input in a specific format. From your users' perspective, you can now enable them to manage their own profile properties by selecting a menu item on SharePoint 2007's Welcome menu.

Adding functionality such as user profile management in ExCM - SE illustrates that we appreciate the feedback we receive from our software customers, and we will continue to take you seriously when we make design decisions for our products.

Thursday, February 22, 2007

Extranet Collaboration Manager for SharePoint 2007

Planning and implementing a collaborative extranet environment using SharePoint 2007 brings with it a unique set of challenges that you as a SharePoint administrator must overcome to be successful. Primarily, you want to provide SharePoint sites for your users to collaborate with customers, suppliers, and partners, but you have to be sure that proper security is maintained. You've probably decided that you want to keep extranet user account data stored separately from internal user data, but who is going to manage those extranet users, and how will these user management activities be controlled and audited? What about requests from extranet users for new SharePoint sites? How will requests for new extranet sites be processed and subsequently provisioned?

The solution to the challenges you are facing is our new Extranet Collaboration Manager for SharePoint 2007 product. ExCM comes in two versions - Standard Edition and Enterprise Edition.

  • ExCM - Standard Edition provides you with a suite of tools to Simplify SharePoint 2007 extranet user access and management. See the ExCM product page for more details.

  • ExCM - Enterprise Edition allows your users to submit a request when he or she would like to have a new SharePoint 2007 site provisioned. You can easily associate custom workflows with the new site requests, asking for approval prior to site creation. Once a site request is approved, ExCM - EE will automatically provision the site for you using any SharePoint 2007 site definition you have specified.
I'm happy to announce that ExCM - Standard Edition is now available for download from our new SharePoint Solutions Software site.
We are actively seeking organizations which are interested in using ExCM - SE to augment the collaborative capabilities of their SharePoint 2007 extranet, and are willing to particpate with us in an implementation case study. Upon completion of the case study implementation, we would want to interview the salient participants and reference them in one or more press releases. If you are interested in working with our team of SharePoint experts to implement ExCM - SE in your SharePoint 2007 extranet, please contact me for further discussion.

Wednesday, February 21, 2007

New SharePoint BI Course

As everyone is aware, one area of design emphasis for MOSS 2007 is to enable it as an industrial-strength delivery mechanism for Business Intelligence applications. In order for Business Intelligence applications to do any good they have to be accessible and usable and what better way than to use SharePoint as a front-end?

Microsoft has poured many man hours into deepening the integration between MOSS 2007 and its SQL Server and Excel Services business intelligence tools, but to-date has not provided publicly available classroom training on how all of this is designed to work, best practices and tips and tricks.

We have just completed work on a course to do just that: Building Reporting Portals and BI Dashboards with SSRS, Excel Services and MOSS 2007. You can read the full course outline here.

I think this is going to be an outstanding course (first class to be conducted in Nashville, TN on March 6 - 8 and to be conducted regularly in Nashville, Chicago and Dallas thereafter). One of the reasons I think this course will be very good is due to the deep BI experience of the author and lead instructor, Paul Vaughn.

Paul is a 20-year industry veteran and has spent the last four years developing a multi-terabyte data warehouse for a large healthcare company here in Nashville. Nashville is a hot spot for the healthcare industry (the world's largest for-profit hospital chain, HCA, is headquartered here) and the healthcare industry is a huge user of BI applications and technologies. So, Paul has some very relevant and first-hand practical experience to share with his students. This all adds up to an outstanding learning opportunity for those wanting to develop industrial-strength BI applications with MOSS 2007 as the delivery mechanism.

Thursday, February 01, 2007

Great example of Office System integration

Yesterday, I delivered the keynote address at the first-ever SharePoint Information Worker Conference. We are holding the conference in Orlando and at 8 a.m. we had a ballroom full of Information Workers eager to see what SharePoint 2007 has to offer that will help them in their daily work. It amazed me that we had attendees from around the world - as far as Kazakhstan.

I think the way Microsoft continues to enhance the integration between all of the Office programs and SharePoint may be the #1 reason why the Office System stands out from the crowd. To this end, I demo'd an application that I developed easily and with no code. The application featured my Pocket PC Phone running Windows Mobile 5.0, OneNote 2007 Mobile, OneNote 2007 on my laptop, MOSS 2007 and Outlook 2007.

In a nutshell, the application involves using the Pocket PC Phone's camera and OneNote Mobile to snap and store a picture of an expense receipt. Then Activesync automatically adds the note to OneNote on the laptop and I quickly annotate the image of the receipt. After that, I publish the OneNote page with the image to a SharePoint document library for the project the receipt relates to. The document library has the out-of-the-box MOSS Approval workflow setup to route the receipt for approval through my boss and then to accounting for reimbursement. Once the approval workflow kicks in, my boss never has to go to the document library to do his part. Instead, he is notified automatically by the workflow via Outlook 2007 and can approve the receipt right in Outlook.

This is the type of application that would have previously required hundreds of development hours to custom develop. Now, all of the pieces are baked right into the Office System. Way to go Office team in Redmond! After the demo, one of the Information Workers in the conference held up a sign with a 9.5 score (out of 10) on it. I took it as a compliment, but who knows, maybe he thought he was judging a figure skating competition :).