Some of you may have read Joel's recent blog posting regarding the MVP program in general, and it appears, the SharePoint MVP program specifically. While some of the point raised may be valid I do not think they tell the entire story. I am not sure if this will help or hurt but I felt like I needed to write something.
First a little background for those who do not know me. I am proud to have been one of the first SharePoint MVPs and kept my MVP award until last year when I joined Microsoft. I have left Microsoft and who knows what the future will hold. In any case I feel that this gives me insight into the program from both sides of the fence.
1. The magic around becoming an MVP is too good ol' boy - Since MVPs are responsible for recognizing and nominating, recognizing, and seeking out people for the Award....
This is not entirely true. MVPs may nominate people for the award but they do not actually determine who will become MVPs. When I was an MVP our lead asked our opinions of people if she was not familiar with them. That only makes sense since MVPs are the ones that are in the communities and will have an idea of who people are. However I have not heard of anyone getting an award just because they were nominated by other MVPs.
2. If you want to be one careful how you ask or you will NOT be one...
Again, while the the case used may actually be true, the cases I have seen are people whose only goal is to become a MVP and it was obvious that this was the only reason they were doing what they were doing.
3. If you loose your MVP it's like you are shunned...
This is one that can absolutely state is not the case. I still talk to other MVPs...at least the ones I talked to while I was a MVP.
Granted, there is a decrease in the amount of communication since a large portion was done in the DL (more on that later) but I have never felt that any MVP thought less of me because I was no longer a MVP.
4. MVP social exclusivity...
Not sure what is meant by this. Is it the MVP summit or the fact that large events often have a MVP social gathering associated with them? I have not been to any large conference other than the summit so I have not comment on this one.
5. Politics are often personal...
I have not heard of this occuring so I have no comment on it.
6. Bow down to the power of the DL...
All I can say is that before the DL (and I am refering to the SharePoint MVP DL, I do not know of any other DL) the MVPs really had no clue what was going on. The DL allowed us (now them) to communicate not only with each other but with people at MS to get needed information. As far as distributing it outside the DL I seem to recall that we were told to treat everything as NDA unless specifically told otherwise.
7. Unhealthy reliance on MVP...
I have not done any speaking engagements while a MVP or now that I am no longer a MVP so I have nothing to say on this.
8. Regional...
Never heard of this happening so I have no comment on it.
9. Company Politics need to be left outside the program...
Not sure where this is coming from but the only thing I can say on this is how exactly is this the MVP program's fault? People are people. I know there are MVPs that I do no like and I certainly would not hang out with them....heck I had to work with one of them! (Just kidding Adam and Stacy if you are reading this) I have worked with and against MVPs (got to love the world of consulting) and business is business. If it comes down between an award and a job, I am going to err on the side of my job.
10. Your way of doing things vs. Ours...
OK, this one has always bugged me. I never knew what it was that earned me my MVP award (although considering I had not done much community programming or speaking it must have been the newsgroup postings) but what are going to do. Should MS say that if you post X number of blog postings and Z number of newsgroup postings you will get an award? This is a tough line to walk.
Just remember that the MVP program is an award not an entitlement. Did I agree with everything about the MVP program? Absolutely not. Are there things I would like to see changed? Absolutely, but I strongly believe there is more good than bad in the program.
We have been using a lot of updatepanels (yeah, I know there is a performance issue but that is a different post) and, as usual, it worked great on my computer but not so great at the customer site. What the panel does is to process a search request without the postback. At the customer site we saw the information being sent to the search engine and the data coming back, but it would never show the results.\
To make a long story short, after many network traces and a rather long call with Microsoft support the answer was actually rather simple. Our customer was using a master page based on the "BlueBand" master page. However there is a small issue with this master page. If you look at it you will see
<body class="body" onload="BLOCKED SCRIPT_spBodyOnLoadWrapper();">
<WebPartPages:SPWebPartManager runat="server" />
<form runat="server" onsubmit="return _spFormOnSubmitWrapper();">
Turns out that this is wrong. By moving the "WebPartPages:SPWebPartManager" tag underneath the "form" tag everything worked fine!
Since we called Microsoft Office SharePoint Server 2007 MOSS what are we going to call Microsoft SharePoint Server 2010? MSS is already taken as an acronymn (Microsoft Search Server) but I would bet it catches on in the general population. I was thinking we would call it "Mizz S" or "Missus". Maybe take some leeway with the acronym and call it "MiSS"? Any other ideas?
Well, assuming the release schedule that Microsoft just posted is actually correct we will. Now if only they would start releasing tidbits as to what we can expect in the product.
So no more MOSS, or SharePoint Portal Server. Now it is just SharePoint!
http://www.microsoft.com/presspass/features/2009/Apr09/04-15Office2010.mspx
Other good tidbits in there other than SharePoint also.
Well, maybe not the best technically....or graphically, but you have got to love the subject matter! 
http://www.ferrari.com/Pages/Country_selector.aspx
I have a XSLT file where I need to pass strings to javascript. Due to the way the code is written the string designator is the single quote. Typically that is not an issue but what happens if the text you pass in contains an apostrophe, AKA single quote? You will need to perform a translation within XSLT to change the apostrophe to " Now comes the fun part. Here is a XSLT translation:
<xsl:value-of select="translate(.,'a','A')" />
so how to you tell XSLT that you want to translate a single quote into the " After trying various combinations of escapes and multiple single quotes I found that
<xsl:value-of select="translate(.,"'",'"')" />
works. What a pain!
Kind of like sales on Microsoft licenses:
http://www.microsoftincentives.com/
For a limited time only! 15% off L&SA - Exchange Server Standard, Office Communication Server Standard, SQL Server Standard, Office SharePoint Server, Visual Studio Team Suite, Office Project Standard, Office Project Professional, Office Visio Standard and Office Visio Professional. 25% off L&SA: Exchange Server Enterprise, Office Communication Server Enterprise, Windows Server Enterprise and Sever Management Suite Enterprise (SMSE).
I have run into this while trying to get the AjaxControlToolkit working with MOSS. Turns out there are a couple of things that can cause this. The first is using CreateChildControls to create your controls. While this is typically a best practice in this case it can cause an error. You can create your controls in the OnInit call instead.
The second one, and the most annoying is any other error thrown but not caught. This took a while to figure out and can be a real pain if you do not have the ability to debug remotely.
Final word of warning, watch out for that quirky mode in Internet Explorer. It can be a real pain!
Recently I came across an issue where I had checkboxes outputted via XSLT (which only outputs HTML) but needed to have the values of the selected checkboxes sent to a C# object. After banging my head against the wall and trying various schemes I remembered that JavaScript can be used to perform a postback. Now if there was only some way to pass data when performing the postback. Turns out there is.
In JavaScript you can use the call "__doPostBack(variablename, value);" to perform the postback and send the variable along with it. For instance,
__doPostBack("ShareBlog","Rocks");
performs a postback, sending the variable "ShareBlog" with the value "Rocks".
In your code (C# in my case) you can read in this variable and use it as you will
Page.ClientScript.GetPostBackEventReference(this,"arg");
if (Page.IsPostBack)
{
string eventTarget = Page.Request["__EVENTTARGET"];
string eventArgument = Page.Request["__EVENTARGUMENT"];
if (eventTarget != String.Empty && eventTarget == "ShareBlog")
{ //do what you will with the eventArgument }
}
Note that you would replace "Shareblog" in the second if statement with the name of your variable you used in the "__doPostBack" statement.
I just created a new SQL Server 2008 server with Hyper-V and was in the process of setting up my VMs complete with AD. When I got to the point of adding a SQL Server 2008 to the mix I recieved the above error when I was trying to add the domain users as the service owners. Another odd thing was when I tried to add a domain account to a local security group it would say the user was added however I would not see the account show up in the group.
After rebuilding my AD and SQL 2008 VMs a few times I realized that when I ran SYSPREP on my baseline image I did not check the box called "Generalize" which removes all unique information like the SID. Hence, it appeared that I was running 2 machines with the same SID. After rebuilding my baseline image and running SYSPREP the correct way everything worked correctly.
"PerformancePoint scorecarding and dashboarding capabilities will now become part of SharePoint Enterprise CAL and available to customers who are on SharePoint SA. This means that customers who want to deploy PerformancePoint can do so today at no additional cost. "
Read the full story at the SharePoint Team Blog
http://blogs.msdn.com/sharepoint/archive/2009/01/23/microsoft-business-intelligence-strategy-update-and-sharepoint.aspx
I have had a few customers ask how they can control who can create a MySite, whether it was just for a trial run, to try to control hard drive usage, or for other reasons. In any case here is how you can do it
- Open the "Central Administration" web site
- Go to your Shared Service Provider's Administration page
- Click on the "My Site settings" link
- On the left side of the screen click on the "Personalization Services Permissions" link
- In this screen you can take away the "Personal Site" from "NT AUTHORITY\Authenticated Users" and add it to any User or Group that you want to.
Without the "Personal Site" permissions, users will not see the "My Site" link and will not be able to create a My Site.
I just dropped off my XBox 360 at my local UPS store to get the infamous red ring of death issue resolved. Without me even saying anything the clerk behind the counter knew it was a XBox being returned! Now this is not exactly a major UPS Hub we are talking about, it is a small store in a strip mall in Cary, NC. Guess there may be a problem here and there with the 360 
Good news: Lots of bug fixes and some new features
Bad news: Still does not work with VS 2008 (but the next version should!)
Get more information here
It is with mixed emotions that I announce I am taking a position with Microsoft soon. I am happy because I feel that Microsoft is a great place to work and has many great opportunities (not to mention benefits!) but I am sad because I will no longer be a MVP and will not be posting to this blog anymore.
I have been a SharePoint MVP for the last 7 years (and if memory serves I am the only one of the original 6 left) and it has been a great 7 years. Meeting my fellow MVPs, not only in SharePoint, has always been an experience and I have been lucky enough to meet some people that I felt were the giants in the industry. I can only hope that this continues with my career with Microsoft.
I am not going to disappear into the woodwork. As soon as I can I will start this blog on the MSDN blog and will post a link to my new site as soon as I get it setup.
So, in the words of the immortal bard, So Long and Thanks for all the Fish!
Gary
Explains some of the enhancements in Visual Studio 2008. Can you say debugging? =) Also some talk about a new power tool that can take a SPD workflow and pull it into Visual Studio!!!!
http://blogs.msdn.com/vsto/archive/2008/01/17/sharepoint-workflow-tools-video-interview-with-john-durant.aspx
http://www.infoworld.com/article/08/01/08/Microsoft-bids-for-Fast-Search-and-Transfer_1.html
"By integrating Fast Search's products with SharePoint, and drawing on its worldwide network of partners, Microsoft hopes to bring Fast Search's products to a wider audience, it said Tuesday. "
You can find out more about Fast's products at http://www.fastsearch.com/
Overall it looks like good news for SharePoint searching.
Had an interesting problem come up at work the other day. I had written some custom code that reads from ListA (which has 3 required fields one of which is a lookup into ListB) and outputs them. Every so often the web part would come back saying that one of the entries was missing a field. I could not figure out how an entry was being created that did not have all the required fields. I tried the SharePoint UI and the dataview and both would not let me create the entry without having the required field filled in.
Turns out that you cannot create the entry without the required fields. However, one of the fields is a lookup into ListB and if that entry is deleted from ListB then the field in ListA that was using that entry is now blank. I can see why MS did this (and if memory serves this is different than how it worked in 2003) but what a pain figuring it out!
Of course the other option is to check every field to make sure it is not NULL before trying to process it and ignore those entries that were not completebut it was decided that we would not that in this case.
I just got the confirmation from my company ( MicroLink) that I will be attending the conference in March. If you are not familiar with it, check out the the confernece's homepage. We are also an exhibitor so I will be spending a lot of time in our booth. Stop by to check us out!

Saw a newgroup question the other day about how to do this in SharePoint 2007. While the solution posted works quite well here is some code that I wrote that should accomplish what the user needs. This will either start at the root of your site collection or a specified location (which may or may not be the site you are on). It will then add all the sites and sub-sites to a treeview control, security trimmed of course. Note that it uses recursion to view all the sub-sites so depending on how your system is architected this may take a while. Guess a simple enhancement would be to add a parameter to limit the depth of your treeview. You could get even more fancy and show X levels by default and then if you expand beyond that add the nodes dynamically.
using System;
using System.Runtime.InteropServices;
using System.Web;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Publishing.Navigation;
namespace GBushey.Portal.SiteMap
{
[Guid("1e900b56-1f33-4772-b5b9-9df73612c40d")]
public class PortalSiteMap : System.Web.UI.WebControls.WebParts.WebPart
{
string _StartNodeName;
bool _StartAtTopLevel = false;
[WebBrowsable(true),
Personalizable(PersonalizationScope.Shared),
FriendlyName("Start at the Root Node?")]
public bool StartAtTopLevel
{
get
{
return _StartAtTopLevel;
}
set
{
_StartAtTopLevel = value;
}
}
[WebBrowsable(true),
Personalizable(PersonalizationScope.Shared),
FriendlyName("The name of the root level site")]
public string StartNodeName
{
get
{
return _StartNodeName;
}
set
{
_StartNodeName = value;
}
}
protected override void CreateChildControls()
{
this.ChromeType = PartChromeType.None;
try
{
if (_StartAtTopLevel || _StartNodeName.Length > 0)
{
PortalSiteMapDataSource siteMapDataSource = new PortalSiteMapDataSource();
siteMapDataSource.TrimNonCurrentTypes = Microsoft.SharePoint.Publishing.NodeTypes.Page;
siteMapDataSource.TrimNonCurrentTypes = Microsoft.SharePoint.Publishing.NodeTypes.List;
base.CreateChildControls();
PortalSiteMapProvider portalSiteMap = new PortalSiteMapProvider();
portalSiteMap.IncludePages = PortalSiteMapProvider.IncludeOption.Never;
portalSiteMap.IncludeHeadings = false;
portalSiteMap.EncodeOutput = true;
SiteMapNode startNode;
if (_StartAtTopLevel)
{
startNode = portalSiteMap.RootNode;
}
else
{
startNode = portalSiteMap.FindSiteMapNodeFromKey(_StartNodeName);
}
SiteMapNodeCollection nodes = portalSiteMap.GetChildNodes(startNode);
SPTreeView siteTreeView = new SPTreeView();
siteTreeView.ExpandDepth = 10;
siteTreeView.Nodes.Add(new TreeNode(startNode.Title, startNode.Url, "", startNode.Url, ""));
TreeNode topNode = siteTreeView.Nodes[0];
ProcessWeb(topNode, nodes);
Controls.Add(siteTreeView);
}
else
{
Controls.Clear();
Label errorMessage = new Label();
errorMessage.Text = "Enable the web part to start either at the root node or at a specific Url";
Controls.Add(errorMessage);
}
}
catch (Exception ex)
{
Controls.Clear();
Label errorMessage = new Label();
errorMessage.Text = "There was an error in the code. Please contact your system administrator and rely the following " +
"message: " + ex.Message;
Controls.Add(errorMessage);
}
}
private void ProcessWeb(TreeNode topNode, SiteMapNodeCollection nodes)
{
try
{
foreach (SiteMapNode currentMapNode in nodes)
{
TreeNode currentNode = new TreeNode(currentMapNode.Title, currentMapNode.Url, "", currentMapNode.Url, "");
if (currentMapNode.ChildNodes.Count > 0)
{
ProcessWeb(currentNode, currentMapNode.ChildNodes);
}
topNode.ChildNodes.Add(currentNode);
}
}
catch (Exception e)
{
}
}
}
}
More Posts
Next page »