2015 will be AWESOME! The eBay and PayPal Split.

I'm pleased to announce that eBay has personally asked me to return to be a pivotal part in their strategic move of splitting PayPal away from eBay.  As many of you know I was the Sr. Architect of eBay's migration from 2007 to 2010.  It was an upgrade of EPIC proportions that made several headlines as it was done on time, and under budget in four months! 

Believe me when I say it was not easy the first time.  We had so many talented and super smart individuals on the project, as our project manager would always say…it was the All-Star team!  For this second round, I'm super excited that I will be joined by a talented team at Slalom Consulting and some new eBay faces to prepare eBay not only in the splitting of the two companies, but also in an upgrade to SharePoint 2013!  What is particularly exciting about this project is that this will be my first project where two companies are splitting rather than merging.  The dynamics will be incredibly different.  There will be a large amount of legal requirements around the split and it will require complex rules around how the data will be broken apart.  Some well known names in the business consulting space with experience in splitting companies will be on hand to help carve out these incredibly complex rule sets and I just can't keep my excitement levels down for what I know is going to be another EPIC project.

Unlike last time, which had a single environment, there will be two.  And thusly, we will have two architects working in concert to drive each of the platform migrations at the same time in the same migration window. This will present challenges that were not present the first time we did this.  Over the next few weeks before the project begins its official kickoff, the talented team will have already identified many of these, and we will be in a position that puts us many weeks ahead of where the last project was when we started (having a project plan from the last project helped a bunch)!

So there you have it, I'll be heads down working this and another major project and hopefully we will be able to deliver our results as best practices/tips and tricks at the MS Ignite conference in May!

See you in mid 2015!
Chris

1 Year Anniversary Tribute – eBay upgrade video

As a tribute to the 1-year anniversary of the start of the eBay upgrade project, I thought I would share the video I created to show at our celebration party in San Jose.  It is a great video, and shows how much fun we had (and you should too) when we did the upgrade.  The team deserves a tremendous amout of credit for the work and effort they put in…so here it is:

http://youtu.be/EnK2c_lntOY

As a run down, here is what occurs in the video:

  • The SharePoint odessey – the 2001 to 2010 evolution.  When the monkey discovers the monolith and evolves.  Simiarly, eBay's discovery of SharePoint 2010 starts with a monolithic-white board (its only appropriate that we use Richard Struass's Also sprach Zarathustra to show this)
  • You see that it really is a love of "SharePoint" that progresses the joining of all parties
  • As we drive through the initial requirements (found and un-found), you will realize that this project was done in 3.5 months (when similar quotes were at 14 months at 4x the cost).  This drives the selection of Queen's…"Under Pressure"
  • At one point you will see Ramin and I on the ground with our hands in the air…it was a fun moment as we were not really knowing what was going to happen…
  • You will see photos of our countdown timer of the night we went live (we had an upgrade window of the weekend to finish the upgrade successfully).  It slowly winds down until the "GO-NOGO Moment"
  • As the pictures are displayed, you will see various moments over the 3.5 months of us working intent-ly getting the job done
  • Not everything went as planned and hence you see the "GO-NOGO" which occured at least 4-5 times (some elements include NDR64 discoveries and the infamous Search ResultsProvider that has claimed countless develpers…
  • Katy Perry's song of "Firework" is perfect for our dispay of the team members that worked so very hard to make the upgrade happen and thusly are amazingly bright and wonderful people that randomly came together to accomplish something amazing (NOTE: there are moments in the song lyrics that relate to hidden moments)
  • Let me be the first to say that eBay has an amazing NetOps team that just kicks butt (Kenny Cheng and Ken MacIntosh), they saved our a$$ a few times…
  • You will see a snapshot of a fortune cookie that "I" got…it was the week of the upgrade and it said "Your hard work is about to pay off", it was the best fortune EVER!
  • There were some times when we had some pretty "interesting" dinners…hence the snapshot of the menu…
  • The video ends with 00:00:00 and pictures of the eBay intranet running SharePoint 2010 and our SharePoint Conference 2011 session – "How eBay successfully upgrade their intranet to 2010"

Enjoy!
Chris

Case Study: How to Use Managed Metadata in Site Creation to drive Searchability

As part of our eBay presentation at the SharePoint Conference 2011, we showed how we performed the upgrade in 3 months and utilized Managed Metadata (MMS) in site creation to drive searchability across the SharePoint Farm.  The biggest question I have received so far from the presentation is about the MMS subject.  So I'm going to outline it in detail here. For those of you that are not familiar with MMS, I like to describe it using the 3rd rule in my three rules of development.  The first rule is "Don't code the same line of code twice", if you see the same line of code twice, you did something wrong (no polymorphism, missing base method calls, inheritance, etc).  The second is don't put the same thing in memory more than once (this really needs no clarification).  The third rule says don't put the same thing on disk twice.  By doing this, you now must implement synchronization between the multiple instances.  The only product I worked with over the years that ever implemented this pattern perfectly was Lotus Notes.  It is for this reason, we have MMS in 2010.

In SharePoint 2007, imagine you have created a list in SharePoint that uses a choice column. You would have 50 states, plus the other various items the US owns (Examples: Guam, Virgin Islands…can you name them all?).  If you use the state column in other places in the Farm, you pretty much have to copy and paste all the items over and over again.  This is somewhat of a problem.  For instance, if Texas ever successfully succeeds from the union, you gotta remove them from all the choice columns!  What about Iraq and Afghanistan?  Maybe those should be added to the list?   Who knows what might happen in the future, but you'd have to update each and every source in order for the data to be meaningful.  Therefore, rule #3 is a good one…don't put data on disk more than twice.  MMS helps us do this by centrally stored our list data in one place. 

So how did we use MMS at eBay?  The summary of the process is that when users create their own site, the content inside the site should be pre-tagged with MMS data so as to allow for simple searching of their content via FAST Search.  Here's a breakout of the parts:

Site Creation:

The first step is to create a site creation form.  This can be anything you are comfortable with (an aspx page, an infopath form, web parts, etc).  In the case of eBay we used two web parts.  One is the site creation landing page web part.  Previously the values used to "tag" the sites was hardcoded in the code.  As part of the upgrade I changed this to pull dynamically from MMS.  This web part allows the entry of the following information:

  • Business Unit (MMS)
  • Organization (MMS)
  • Office Location (MMS)

  • Site Name
  • Description
  • Keywords (terms that will allow users to find the site later)
  • Template (teamsite, blog, etc)
  • Security (allow inheritance/everyone to view the site)

When clicking submit, several things happen:

  • Create a new list item with all the details of the site creation request
  • Submit to the site creation processing webpart with the site creation request id
  • Start a long running transaction
  • Impersonate the user that made the request
  • Get a site number from a database for the site URL (example: 12345)
  • Determine what site collection to add the site to (allows for load balancing the sites across content databases)
  • Create the new web
  • Add to the custom site directory list (this list is used for later look up on a site lookup web part)
  • Setup navigation for the site
  • Set the web property bag with the Organization, BusinessUnit and Location properties
  • Create the metadata columns (outlined below)
  • Add the site keywords to FAST Search

All throughout this process if any errors occur another list is setup to keep track of the errors and steps of the long running process.  This allows OPS to debug the process and work with development in case something needs to be tweaked.

Site Directory:

You will need to ensure you have a list setup to keep track of your sites.  In the case of a pre-existing site directory it is likely that you have already created a choice column with your values.  This doesn't move very easily to MMS.  You will have to migrate the values to new MMS columns (create new column with different name, move value over, deleted old column, create column with old name, copy values again) .  If you already have this site directory, it is simple to run back through all the sites and add the web properties and then add the MMS columns to all the existing lists in the already existing sites (so not only new sites have MMS, but old ones too)!

MMS Setup:

We used the following PowerShell script to pre-populate the MMS:

$session = get-sptaxonomysession -site http://contoso.com
$termstore = $session.termstores["Contoso Corporate MMS"]

$termGroup = $termstore.groups["Contoso"]

if (-not $termGroup)
{
$termGroup = $termstore.creategroup("Contoso")
}

$termSet = $termGroup.TermSets["Organization"]

if (-not $termSet)
{
$termSet = $termGroup.CreateTermSet("Organization")
}

foreach($t in $termset.terms)
{
$t.delete()
}

$termSet.createterm("Finance",1033)
$termSet.createterm("Human Resources",1033)
$termSet.createterm("Information Technology",1033)
$termSet.createterm("Legal",1033)
$termSet.createterm("Marketing and Sales",1033)

$termSet = $termGroup.termsets["BusinessUnit"]

if (-not $termSet)
{
$termSet = $termGroup.CreateTermSet("BusinessUnit")
}

foreach($t in $termset.terms)
{
$t.delete()
}

$termSet.createterm("Corporate",1033)
$termSet.createterm("PayPal",1033)
$termSet.createterm("StubHub",1033)
$termSet.createterm("Bill Me Later",1033)

$termSet = $termGroup.termsets["Location"]

if (-not $termSet)
{
$termSet = $termGroup.CreateTermSet("Location")
}

foreach($t in $termset.terms)
{
$t.delete()
}

$termSet.createterm("APAC – Australia",1033)
$termSet.createterm("APAC – China",1033)
$termSet.createterm("APAC – Hong Kong",1033)
$termSet.createterm("APAC – India",1033)
$termSet.createterm("APAC – Israel",1033)
$termSet.createterm("APAC – Korea",1033)
$termSet.createterm("APAC – Taiwan",1033)
$termSet.createterm("EU – Austria",1033)
$termSet.createterm("EU – Belgium",1033)
$termSet.createterm("EU – Czech Replubic",1033)
$termSet.createterm("EU – Estonia",1033)
$termSet.createterm("EU – France",1033)
$termSet.createterm("EU – Germany",1033)
$termSet.createterm("EU – Ireland",1033)
$termSet.createterm("EU – Italy",1033)
$termSet.createterm("EU – Luxembourg",1033)
$termSet.createterm("EU – Netherlands",1033)
$termSet.createterm("EU – Poland",1033)
$termSet.createterm("EU – Spain",1033)
$termSet.createterm("EU – Sweden",1033)
$termSet.createterm("EU – Switzerland",1033)
$termSet.createterm("EU – UK",1033)
$termSet.createterm("NA – Canada",1033)
$termSet.createterm("NA – U.S.",1033)
$termSet.createterm("Global",1033)
$termStore.CommitAll()

Note that once it is created, you should not delete the values.  This will cause the linkage between any previously created columns to be eliminated.  Not fun to look at and fix later.  So be sure to tell the ops team not to run the create more than once…EVER…

MMS Columns:

The hardest part of the entire process is the MMS column creation.  It works like this:

  • Check to see if the web prop bag has been set, if not then set the web props to the values in the intranet site directory list, otherwise set to some default values
  • For each list, add the metadata columns
    • You should not add metatdata to lists that are "hidden" or that are type "Survey".  It will break those list types
    • Great example is the HiddenTaxonomyList, kinda weird adding a MMS column to that one as it keeps track of MMS usage across the site, creates a bit of a loop…not good!
  • You should also avoid everything but the following site types, if you don't you will get some VERY ugly messages from SharePoint 2010 (try adding MMS to an Access Services site, it doesn't work!):
    • STS
    • MPS
    • BLANKINTERNET
    • CMSPUBLISHING
    • PUBLISHING
    • WIKI
    • BLOG
    • SPS
  • Adding the metadata column involves the following process:
    • Detemine if the column already exists (choose your column name wisely), in this case, we preappended with "Geo" to avoid any clashes with already existing column names and internal SP names
    • Provision a note field to support your MMS field (yup, each MMS column is actually two columns)
    • Create a new taxonomy field using the Guid of the note field in the TextField property
    • Set the default value of the field using the "WSSID;#VALUE|TERMID", hint: use -1 if WSSID has not been defined yet

The result is every viable list has MMS columns added:

Each MMS column has a default value set:

When a new item is created, the user doesn't have to do anything!  The values are pre-populated with the values they selected at site creation time!

Search:

As part of the site creation there is a keyword text box.  Users can type keywords delimited by semicolon.  Their keywords are then added to FAST Search.  Initially we thought adding to both SharePoint Search and FAST Search was the answer, but that didn't work as it actually would show two keywords in the results and not just one.  You can also have the keywords added as search suggestions.  What this means is that when they start typing in the search box, you will see the keyword displayed as a suggestion:

Then when the search is executed, you will see the site as a keyword and the results for that keyword displayed as business as usual:

 

Once the columns have been added to all the list items in all the sites, you have setup FAST Content SSA and indexed the content you will get some pretty cool results.  Because of the TaxonomyFilter refiners that is preconfigured in the FAST Search Center, you will see the pre-defined MMS column values on the left side of the screen:

Users can now find content specific to their geography, organization and functional group.  Results are now more meaningful and can be found much faster than with SharePoint 2007!

Enjoy!
Chris

SharePoint Conference 2011 Session – How eBay Successfully Upgraded their Intranet to SharePoint 2010

Dear SharePoint Colleagues, 

Join the eBay team and myself as we discuss the eBay upgrade to SharePoint 2010 and how we did it in 3.5 months.  The Conference session link is here:

How eBay Successfully Upgraded their Intranet to SharePoint 2010  

Here is an outline of what we plan on speaking about:

  • Why eBay moved to SharePoint 2010
  • The environments (2007 and 2010)
  • eBay Governance
  • eBay Project Plan – how we managed the project and the methodologies we used
  • How we documented the farm
  • How we approached the technical side of the upgrade
  • How we increased performane by 30%
  • How eBay implemented disaster recovery
  • And alot more!

We will answer questions after the session, but to have a one on one with the eBay team, join us Wednesday night at our SoCal SharePint.  We will have a limited number of drink tickets and details on how to get the tickets are here:

http://blogs.architectingconnectedsystems.com/blogs/cjg/archive/2011/08/24/SharePoint-Conference-2011-_2D00_-SoCal-SharePint.aspx 

Hope to see you there!
Chris

 

How I Successfully Upgraded eBay to SharePoint 2010

And so it begins!  This is my first blog post in a few months…where have I been?  As some of you know, I have been the Sr. Architect of the eBay SharePoint 2010 Upgrade Project.  One of 3 *major* upgrades that are occuring in the United States in 2011.  I will be presenting a series of blog posts on how we did what we did and what challenges we ran into over the project.  This is the first of about 15-20 blog posts of material you have not seen before on any MVP, MCM or anyone else's blog post because I know for 100% fact, we were the first to do many of these things!  Which makes me think we were the first to really do a major upgrade with all the pieces (DR, DMZ, data center move, firewalls, etc).

First, a little background. The project started in early March and we were given a target completion date of mid July.  Several vendors bid on the process, but none had a response as deep and technical as ours, with several other carrots and goodies built in.  Also, all of them but ours said it was impossible to do in 3.5 months.  Many quoted 3x as long and 4x as much in price..WOW.  I was also well known by the eBay team for my work at other companies and the ACS SharePoint Courseware.  So my reputation preceeded me, which is good and bad depending on who you are (wink wink to Microsoft).

I started off the project in a very Avanade like manner (I worked at Avanade for about 1.5 years) using the ACM methodology, which is very similar to Microsoft's MOF.  The phases include:

  • Envisioning
  • Planning
  • Executing
  • Stabalizing
  • Deploying

As part of the Envisioning phase, I utilized a series of tools that I had built over the past few months that would do a DIFF of their SharePoint servers.  I will have a whole blog post on this tool in the next couple of weeks, and I can tell you right now, MCS was drooling to get their hands on it.  This tool determined EVERYTHING they had done to the environment.  Using this data, I was able to map it to the code and solutions and determine what items we didn't have code for.  This was a great process step as we learned where the code was, what it mapped too and where it was used.  All very vital elements to making sure the upgrade would be a success.

As part of the Planning phase, we needed to start to get an idea of the reasons behind moving to SharePoint 2010 and what changes MUST be made to the environment moving forward.  This evolved into building out a massive Governance document FROM SCRATCH, utilizing elements from our ACS Governance course.  It is much more details than anything out there today (sorry Nuedesic, Slalom et all).  This doucment really got the converstations going between the management and us to figure out what really had to happen and what the final Farm needed to look like.  We also had to identify what code needed to be refactored (and let me tell you, don't ever hire an accounting company to do SharePoint code – some of the worst code I have ever seen).

The executing phase, my favorite phase!  Once we knew what needed to happen, we started to do trial upgrades on the envrionments.  As part of this, we needed a moc development 2007 environment and a 2010 environment.  This was not an easy task.  There were several elements such as custom code, 3rd party applications and just a lot of random changes to the SharePoint root that weren't really documented.  Once we installed everything we thought we needed, it became impractial for us to click on every page in the farm to determine if there were any issues/errors.  Utilizing another tool I had built from other projects, I modified it to hit every page in the farm and record if any errors were occuring.  It gave us back nearly perfect data.  We were able to find several components that needed to have extra settings or code installed.  As part of this entire process, I started to create the most amazing document of the project…THE PRODUCTION BUILD GUIDE.   This document has every single step for a network/server admin to perform to get the farm installed and up and running with no interaction from us.  This document is pure GOLD.  We utilized this document to build out two more environments, QA and STAGING.  By this time, I and my friend Satya had built out and upgraded the environment 4 times (you should expect at a minimum to do the same).

Stabalizing.  This was probably the most important step of the project.  As a consultant, I can make anything work and fix any error, but when it comes to the functionality of the sites and components, I can't possibly know that.  This means that business owners must step in and look at the QA and Staging environments to determine if their components are working correctly.  In the end, everything worked out fine due to the stellar team we had, but honestly, we could have given alot more time to this vital piece.

Deployment:  Getting the hardware installed was somewhat of an easy part of the process, one of the hard parts was specing out the hardware that would be needed to support 10s of thousands of users.  I did the first configuration of the hardware and then eBay decided to bring in some MCS folks just to validate.  They unneedingly added in double the memory to the WFEs and APP servers, but hey…memory is cheap so blah (By the way, utilization of the servers shows my config was spot on).  Another thing we had to deal with was the movement of data centers.  We needed to move alot of large content databases to a new data center.  Our upgrade window was 60 hours.  I'll tell you, trying to ensure that a massive farm environment is only down for 60 hours is a REAL challenge.  We had to get really creative to make that happen.  I brought a lot to the table in terms of getting things into that window.  As part of the deployment phase, we needed to build a project timeline with all the steps of the build guide in it.  Each step was a taks with its respective timing (thank god MS Project can do hourly).  After I had built out this AWESOME document, I realized that tasks had to be started the next monday (this was Thrusday evening of the week).  We had to have a mandatory meeting to make sure everyone knew what needed to happen.  Everything went through perfectly, the build guide was the document that really drove the project timelines.  I'l tell you, every step we did out of order or did not do….bit us in the ASS.  I'll never not follow my build guide again!

In summary, the upgrade is complete.  The system is running great, but now we have hit the training aspect for the business users.  It has been quite a shock (even to me, the writer of the first SP2010 courses for End Users) to learn about all the things that the SharePoint team changed between 2007 and 2010.  Some are really great, some are *really* bad.  We have had numerous tickets coming in asking how to do this, how to do that and what the heck is this "ribbon" thing.  Next phase is to build out custom courseware for the users using the great tools we have built at ACS and have utilized for other customers like Exxon Mobil, Abbott Labs and very large government organizations. 

It has been/was a GREAT project.  And although the title of the blog is "How I Successfully Upgraded eBay to SharePoint 2010", you can't do something like that alone (you need at least 4-5 superstars).  The team at eBay was OUTSTANDING to work with and I have to say, the stars aligned for this project to be succesful.  I am confident, no one else on the planet could have executed like we did, I am truely grateful to eBay and the 3rd parties (Corasworks, AvePoint, etc) that we had to engage with on the project.  Only one person on the team actually has another public blog and that is Maarten Sundman.  He was pivotal in a lot of our code review, code modification and branding aspects of the project.  He was also a "get it done" type of person, which is great to have on a project like this.

Watch for the next blog post in this KILLER series,
Chris

Also, come find me at the SP Conference, we will have a session on our eBay upgrade project, feel free to ask some deep and technical questions at the session!

And lastly, if you need help with your SharePoint Upgrade, there isn't anything I don't know about the process, drop me a line and I'll be happy to help!

Continue to next blog post in this series – Upgrading UserProfiles – the non-database attach method

 

Upgrading UserProfiles to SharePoint 2010 Non Database Attach

Blog Post #2 of How I Successfully Upgraded eBay to SharePoint 2010 – Previous Blog in this series

One of the decisions I made as the Sr Architect of the eBay upgrade project, was to NOT do a database attach upgrade of the SSP.  I viewed the whole process as not very reliable and we didn't want a bunch of junk moving foward to 2010.  So, we went down the path of build it all from scratch.  This presents some interesting problems and this blog post will focus on the UserProfile Service Application component of the SSP.  In summary it entails:

  • Custom properties added in 2007 must be moved to 2010 (definition and data)
  • Custom profile privacy settings
  • All connections must be redone (BDC, Active Directory)
  • Migrate old custom user data

As part of the process, the first thing you have to do is to identify all the custom properties that were added in 2007.  This is actually an easy part as you can simply run a query against the SSP database and the PropertyList table.  Anything over a certain ID value is a custom property.  This definitely gets you the list, but what do you do with the list?  You COULD manually add each one to the UPS service application, or, you could write a lovely PowerShell Script to do the work for you.  How do the scripts work?

  1. We built a custom tab delimited file of their names, values, descriptions, privacy settings and connection information.
  2. We create a script that reads the data and will setup the properties – this was HUGE time saving as the property editing page in UPS is one of the worst designed pages in all of Central Administration
  3. Setup all BDC connections using SharePoint Designer (this includes assigning the proper permissions to the UPS service application accounts to be able to execute the BDC and retrieve data)
  4. We create another script that will setup the property connections (after BDC has been created)
  5. Custom profile privacy settings

That gets the basics done, but what about the data of the users in the 2007 farm?  Just so happens the SharePoint team though very hard about this one.  As part of the SharePoint Admin ToolKit, you have a User Profile replication tool.  This tool will grab the data in a target SharePoint farm (2007 or 2010) and move the data based on the account name of the user (not the recordid as that would change in each farm).

The only problem with this tool is that is doesn't like special characters very much.  These would include the main culprit the 'appersand' (ie '&').  We had to edit all the properties in the production farm that had this in the PropertyVal (of the UserPropertyValue table) to remove it and put 'and' in its place.  Once this was done, the tool was able to use it's error log to rerun for just those users.  You could slowly find all the special characters and remove them to have the users data get moved over successfully.

The last step, and this really is the most important one, is that you ensure that all the privacy settings came over.  We were told the Admin Toolkit would do this, but we found out that wasn't the case.  It is very simple to get these values from the older 2007 farm by joing the UserProfile_Full and the UserProfileValue tables on recordid and getting the "privacy" column.  Then all you have to do is to update the same values in the 2010 farm and BAM…you are DONE!

Enjoy, 
Chris

Check out the next blog in this series – Changing your Host headers

Upgrading SharePoint 2010 – Changing Your Host Headers – What It Means To Your Consultant

Part 3 of How I Successfully Upgraded eBay – Previous Blog Post

So what does it mean for you to "retire" an older web application for branding purposes?  It is a simple change in Central Administration, but a nasty proposition when it comes to content in the site and most consultants will take the easy way out and say, no you can't do that (because they know how much work it is and don't really know what will break).  What am I talking about?  Let me give you an example:

  • In 2007, the web application host header was http://abc.contoso.com
  • In 2010, you want it to be http://xyz.contoso.com
  • Moving a content database from one web applicaiton to another with a different name (for service delivery reasons)
  • Moving a site collection from one content database to another content database in a different web application

Again, it is easy to do via Central Administration.  It is easy to do the DNS and add an AAM, but did you think about content?  Huh, what about the content…here's what you didn't think about:

  • Non relative links used in 3rd Party applications (Corasworks) 
  • ASPX pages with non-relative links
  • Content Editor web parts with non-relative links
  • Update custom web part properties with non-relative links
  • Navigation nodes with existing non-relative links
  • Excel and InfoPath with Data Connections

The problem is non-relative links.  It was a big problem in 2007 and in most vendors products that they didn't check the URL of where the code was running and convert the saved content into relative links!  This is a major pain in the ass!  Now you will see in 2010 and in most vendor products, they have learned a VERY valuable lesson.  ALWAYS USE RELATIVE LINKS!

How does one upgrade 10s of 1000s of pages, 1000s of content editor web parts and navigation nodes with the new URLs?  You build a tool of course!  The tool is simple in its requirements:

  • Take an input file of old url to new url 
  • Update all aspx pages with the new links – CHECK
  • Update Content Editor web parts with the new links – CHECK
  • Update custom web parts with links – CHECK
  • Update Navigation nodes with new links – CHECK
  • Update….wait…how to you update Excel and InfoPath? – OH MY…(the topic of the next blog post)

The tool is easy to build, but add in 1000s of sites, 1000s of pages and web parts…you have some problems:

  1. It will take too long for it to update all your resources before the upgrade is finished.  So what do you do to meet your upgrade window?
  2. You have external links that still point to these older urls

The problem has a simple solution.  HttpModules.  All you have to do is intercept the HTTP request and redirect to the proper place.  How do you know where to redirect them?  Same as the tool, use the input file for the tool.  Create a SharePoint list that the HttpModule pulls from that will redirect the request to the proper place.  Here is a coule of examples:

There is an issue here.  You would have two entries in the configuration list:

In this case, the order of replacement matters. If the first entry is applied, they will incorrectly get redirected to http://xyz/HelloWorld.  This is not the desired outcome.  You must redirect in order of most specific first, then to the most generic.  You must also be careful with generic entries.  Suppose you have two web applications:

If you have the following in your configuration list:

You can expect that the requests to http://abc will be redirected properly, but the http://abcdef, will also get redirected and not the way you want.  Also in the case of http://abc->http://abcdef, you would be in a continuous loop of adding http://abc to the redirect and of course, you will eventually overrun the address line in the browser!

Enjoy,
Chris

See next blog post in this series