MVP Summit 2009
I had an absolutely great time at the MVP Summit this year. It was great being able to sit with the product teams and see all the absolutely spectacular stuff that they’ve been working on. I’m truly excited to start working with it and I know my customers are going to love the new features. There’s a few things here and there that I hope gets changed before RTM but in the grand scheme of what has been done it’s all pretty minor stuff – the product teams have really been doing an excellent job based on where I was sitting.
Even if I couldn’t see all the great new O14 stuff all the social activities would have made the trip worth it – hanging out with all the super stars of the SharePoint world was awesome (and humbling). Paintball was a blast, as usual – having a wooded forest to play in added a nice new element to it but speedball was still my favorite part of the day (all that Gears of War I’ve been playing appeared to have helped me out this year
). I can’t wait for the SPC in October when I’ll get a chance to catch up with everyone again. To all the MVPs – it was great spending time with all of you and I’ll see you in October!

Follow Me On Twitter
I was having dinner the other night with lots of super star SharePoint MVPs where I ended up sitting next to Joel Oleson, Todd Baginski and Jason Medero – it wasn’t long and the subject of Twitter came up. Todd had just signed up the night before so I was able to get some insight from those who have been using it for quite some time as well as someone like Todd who just made the plunge. I’d been considering doing the twitter thing but just hadn’t made the commitment to do it – well, after talking to them I decided to go ahead and get myself setup: http://twitter.com/glapointe
I figure I’ll mainly use it as a micro-blog for the stuff I’m doing – for example, I often push out builds to my extensions but don’t write a blog post explaining what changed as it’s usually just minor bug fixes, enhancements, or tweaks. So if you use my stuff you definitely want to follow me so that you can stay more up to date on the changes that I make.
Happy Twittering
I’ll be Speaking at the SharePoint Best Practices Conference
Catch me at the SharePoint Best Practices Conference in San Diego, California. The conference will be held February 2-4, 2009. I'll be presenting two topics, both currently scheduled for the last day, Wednesday:
IA260, Using Content Types to Improve Discoverability
Content Types are one of the great new features included with SharePoint 2007 and they can be used to serve many different needs. In this session we will discuss some best practices and lessons learned when trying to use Content Types to make information more discoverable to users with different navigational needs. We will discuss some simple approaches to help determine which Content Types are needed and how to utilize those Content Types to address the specific goal of helping users find information more easily. We will also discuss various page design, taxonomy, and search capabilities that can be utilized as well as the lessons learned from real-world implementations.
IW265, Sub-site or Site Collection ? Best Practice Approaches, Considerations, and Lessons Learned
One of the more difficult tasks planners face when designing a WSS or MOSS environment is whether to use sub-sites or site collections and in what combination. This is a critical process to get right from the beginning as it could have extreme ramifications on the overall success of the implementation. This session will cover the pros and cons of using site collections and the best practices that affect the decisions to use them. We will look at the various ways in which a logical, hierarchical, taxonomy can be met using site collections and how to keep various assets synchronized between related site collections. Also, because sometimes even the best laid plans can’t account for the unforeseen we will delve into the various approaches available to change the site collection architecture post implementation (how and why you might need to convert sub-sites to site collections and site collections to sub-sites).
This will be my first conference talk so I'm real excited (and admittedly a little nervous) so please stop by and give me your support! If you're not currently registered you can do so from here: http://www.sharepointbestpractices.com/ - it's sure to be a great conference!
New CRM Blog
A good friend and former employee of mine has finally started blogging about what he's doing/done with CRM. Mark Kovalcson is an extremely bright guy who has done some extraordinary things with Microsoft Dynamics CRM. He's only just started his blog so there's not much there yet but if you're into CRM or plan to be then keep an eye on Mark's blog - expect to see great things from him. You can find his blog here: http://crmscape.blogspot.com/
10/12 – General Update
Just a friendly reminder that if you are using these commands you'll want to check back at this blog regularly. I'm sometimes posting updates to the download as often as 3-4 times a day or more depending on what I'm currently working on (there won't always be a blog post corresponding to every update).
At the time of writing this I'm trying to address some issues with the way sites are imported and I'm spending a lot of time working on the gl-convertsubsitetositecollection code to specifically address issues related to the import2 retainobjectidentity feature. At this point I've concluded that there are simply too many issues with using this feature to go from a sub-site to a site collection so I'm looking to see if I can't at least fix some of the web parts that need to be retargetted.
As this particular command has been by far the most popular of all the ones I've created (by a factor of 10) I strongly encourage everyone to keep checking back here for updates to that command and others. Also - if you see commands in the download that are not documented on this site then consider them incomplete. Feel free to look at them to see what I'm working on at present but I'd encourage you to not attempt to use them. I publish the source and binaries to the download server as often as I can so that any bug fixes I've put in place will be available quickly - but as a result you're likely to see some things that are still works in progress (eventually I'll move this code over to someplace like CodePlex so that others can contribute and we'll have the benefit of source control but for now consider the code extremely fluid).
General Update
I've made numerous changes to most (not all) of the commands. Most of the commands now inherit from SPOperation so they now benefit from the better error handling and command argument processing. As of the time of writing this post the following commands do NOT inherit from SPOperation (still are directly implementing ISPStsadmCommand):
- DisableUserPermissionForWebApp
- EnableUserPermissionForWebApp
- SetSelfServiceSiteCreation
- CreateQuotaTemplate
- EditQuotaTemplate
- ConnectToPortalSite
- SetMasterSiteDirectory
- SetSiteDirectoryScanViewUrls
- EnumTimerJobDefinitions
- GetJobInfo
- GetJobInfos
- RunTimerJob
- SetJobSchedule
- Gen2003To2007ProfilePropertyMap
- Migrate2003ProfilesTo2007
I've also changed all the code that was using site.OpenWeb() to now use site.AllWebs[serverRelativeUrl] wherever I could. The reason for this was that OpenWeb() is extremely misleading - if you pass in an url that you think is correct but actually isn't it will return back the next valid web up in the chain that it can find - this could lead to a whole host of problems so I decided to change the code to use AllWebs which will throw an exception if you attempt to load an invalid url (I think that OpenWeb(url) will do the same).
Update 10/17/2007: I've now updated all of my custom commands to use the SPOperation base class. The only classes that do not inherit from this base class are the original 4 that I did not create: GetJobInfo, GetJobInfos, RunTimerJob, and SetJobSchedule. Note that out of respect for the original author I will not be updating these remaining four commands despite the benefits that would be gained.
Why an STSADM Blog?
So this is my first posting to my first blog. I've been wanting to start blogging for quite some time now but either haven't found the time or the inspiration. Lately I've been doing a lot of SharePoint work for the company I work for (Edfinancial Services). We are preparing to go from SharePoint Portal Server 2003 to MOSS 2007. For our purposes we've decided to do a gradual upgrade. However, our current taxonomy leaves little to be desired and as a result we've decided to use this project as a way to rework the site structure and overall taxonomy. Due to the number of changes we are planning on making and the amount of testing and preparation involved I decided that I need my upgrade to be completely scripted (there's just too many things to miss when making the changes manually). We've been "practicing" the upgrade in a virtual environment and using STSADM to script all of our changes. The problem is that STSADM only lets you do so much and most of the things we need it can't do (particularly SSP customizations such as managing the profile import or My Sites settings).
At first I didn't realize that you could extend STSADM but when I was searching for a way to manage the profile import jobs I came across an article by Joerg Brunke on Code Project (http://www.codeproject.com/useritems/stsadm_commands.asp). I used the project he created as a starting place to create many more new commands. The majority of these commands are not likely to be helpful to many people unless you find yourself in a similiar position of needing to create a repeatable upgrade script. However, I've found that the code itself can be a great way to discover more about the internals of SharePoint and may help others in completing similiar tasks within custom workflows or site definitions or whatever other customization you may need to do within MOSS.
You can download the source files for the project that I've been creating here. I plan on blogging about each of the commands as I create them (which means I've got some back filling to do as I've already created about 25 of them). Note that the namespace reflects the company I work for - feel free to change any part of this project to meet your needs. If you improve any of the commands or add to them please comment here so that I can include them in for others.
For a general overview of how to create STSADM extensions check out Tony Bierman's article "Extending stsadm.exe with Custom Commands using the ISPStsadmCommand Interface". The quick answer to how to do this is to simply create a class which implements the ISPStsadmCommand interface, add an xml file to the config hive (c:\program files\common files\microsoft shared\web server extensions\12\config) using the naming convention of stsadmcommands.[something unique].xml and then register your assembly in the GAC. The xml file you create contains the comand name and the class name (fully qualified). The easy part is extending STSADM - the hard part is figuring out how to manipulate SharePoint using the provided object model (which is loosely documented at best). It's this part that I'll spend most of my effort blogging about as it's a nightmare trying to figure some of this stuff out (you have to get really good with tools like Lutz Roeder's .NET Reflector.
Note that I make no warranties expressed or implied about the code I have written. It has been tested thoroughly in my testing environment and has performed as expected however everyone's environment is different and there may be things about your environment that are different from mine - I strongly encourage you to read and understand the code before attempting to use in a production environment (at a minimum test in your own virtual environment).
