Saturday 25 February 2012

Migrating Lotus Notes to SharePoint

Problem:  A common scenario is for large organisations to need to migrate from Lotus Notes (LN) to SharePoint 2010.  This post looks at potential issues and provides guidance for planning your migration. 

Initial Hypothesis:  To migrate from Lotus Notes, you will generally have a lot of databases so a migration tool such as Quest Migration Manager is a necessity.  Also consider using a firm that has done migrations they know the tools and have taken a lot of the hard knocks which saves time and produces better results.  Migrations take a long time, most large enterprises want everything migrate in the 12-18 month timeframe until they hear the cost and understand the complexity.  Clients need to be pragmatic but they often simply want Lotus to disappear and SharePoint to replace it.  Yes, it is possible, but as with all IT projects plan and spend you money wisely.

Resolution: Each scenario is unique but it is important to get expertise in Migration and know the migration tools.  And most obviously plan, plan, plan. 

At the highest level I break this into 3 steps: 1) analyse, 2) plan and 3) implement. 

1.> Analysis
During analysis use a tool to provide technical analysis on the Lotus Notes databases.  This is very useful to group the LN applications into how complex the specific migration will be.  The easiest will be direct LN into SharePoint templates, followed by simple list migration.  At the other end of the scale will be customised forms, logic and workflow.  The tools won't migrate the logic or forms (well some claim to) but they can all move your master and historic data to SharePoint.  Also a manual look at the LN database application helps asses the database, speak to the custodian of the LN database.  At the end of the analysis phase, you should have removed duplicate database, unused databases, categorised the difficulty of migration (technical tool and manual inspection as well as discussed with the custodian).  You often find only a part of the database is still being used.  A good example I have seen was a highly customised category 4 LN app (my most complex app type), the technical tool detected the database was being used and had several customised components.  After speaking to the custodian, the LN app was simply being used to create new project codes.  If I had gone into a migration it would of cost a lot take considerable time and added little to no value.  Speak to the owner/custodian and get how important is it to them.   During the face to face review I use metrics to rate the database that can't be detected using technical tools.  For example how important is the tool?  Standard answer is critical.  How many users use the system?  After a few qu's you often find these category 4 applications are not fully used or few users use them or they are not that important so do they really need to be migrated.  As a rough guide after removing duplicates and weeding out unused databases about 30% of the original amount remain, this varies from client to client but as a general rule I mention this to the client.  Next figure out what needs to be migrated out of these remaining databases and which databases are providing the best returns to migration cost.  You will have to prioritise them unless you have a very large budget.

2.> Plan
You now know what databases need to be migrated, ensure that they all go to SharePoint, for instance a lot of companies use Documentum for document management, sure SharePoint can do it but is this the right place for your business/client.  Also a lot of these databases to be migrated are needed for regulatory or archival purposes.  SharePoint is not the cheapest or necessarily the best location.  It may be cheaper and easier to convert archive info into pdf documents and add it to the archive repositories.
Workout the source and the destination with the mapping.  As mention if the LN template is standard most tools can auto detect and add the appropriate target SharePoint template. 
Decide on how the data will be migrated (will you copy the entire live LN database), what about changes to data until LN is replaced.  I'd recommend freezing LN changes, copying some data and the nsf to a separate location.  Perform the mapping.  Try identify custom templates that are used repeatedly to ensure mapping time is reduced.  Define the destination.  Migrate the sample data and ensure the data is thoroughly tested.  Define your migration strategy, all at once?  I prefer piece at a  time.  Do you need training on the new system for the users?  Changes to migrated data after you copy.  Do you have enough time in migration windows to get all the data (terabytes potentially) perform the mapping and do a quick sanity check.  Do you have the SharePoint Infrastructure to handle the additional resource requirement?

3.> Implement
Ensure the new apps have been accepted by stakeholders and tested, users are ready to use the new apps, support is ready to handle requests, it's going to be change and people don't always like change so the servers can't go down, the apps need to be as easy to use as possible.  Implementations will take months and should be batched generally.  Also be ready if there is a disaster, can you get users back to LN, do you want them going back if something goes wrong.

There is more, a lot more but if you analyse and plan the implementation will be smother and succesful. 
For me the 2 most important points are: 1) plan, 2) people - get experiece people (business, project and technical).

References:
Walch, Steve.  2011. 11 Ways to Migrate Lotus Notes Applications to SharePoint and Office 365 - Notes2sharepoint.org

Monday 20 February 2012

Determine SP2010 & SP2013 edition & patching Level

Problem: You go to a client to work o the farm and you need to know what the production farm is running i.e. SP2010 version and patching.  This also applied to moving data and features from QA to production.

Todd Klindt keeps a list of SP & OWA version numbers for SP2013.

Initial Hypothesis:  Use PowerShell to determine which edition of SP2010 is installed and the patching level.

Resolution:
PS> (get-spfarm).buildversion
PS> get-spfarm | select Products
OR Central Admin > System Settings > Servers on farm
Update 27 July 2013: Build 15.0.4481.1005 is SP2013 with the PU March 2013 (This PU is required before you install any subsequent CU's).  Build 15.0.4420.1017 is SP2013 without PU or CU's.
 
 
SP2013 with PU march 2013 and CU June 2013 shown below:
 
 
Product GUID Titles:
BEED1F75-C398-4447-AEF1-E66E1F0DF91E: SharePoint Foundation 2010
3FDFBCC8-B3E4-4482-91FA-122C6432805C: SharePoint Server 2010 Standard
D5595F62-449B-4061-B0B2-0CBAD410BB51: SharePoint Server 2010 Enterprise
B2C0B444-3914-4ACB-A0B8-7CF50A8F7AA0: SharePoint Server 2010 Standard Trial
88BED06D-8C6B-4E62-AB01-546D6005FE97: SharePoint Server 2010 Enterprise Trial
BC4C1C97-9013-4033-A0DD-9DC9E6D6C887: Search Server 2010 Trial
08460AA2-A176-442C-BDCA-26928704D80B: Search Server 2010
926E4E17-087B-47D1-8BD7-91A394BC6196: Office Web Companions 2010
Source: http://altamodatech.com/blogs/?p=405

Http header version unrelability post
PS script to check SQL and SharePoint. 
 
Reference List of SP2013 versions

Sunday 12 February 2012

Checking the Sandbox solutions settings using Powershell

Display the sandboxed solutions service configuration settings:


$uc=[Microsoft.SharePoint.Administration.SPUserCodeService]::Local

foreach($tier in $uc.Tiers)
{
Write-Host "Tier Name: $($tier.Name)"
Write-Host "Tier MaximumWorkerProcess: $($tier.MaximumWorkerProcesses)"
Write-Host "Tier MaximumConnectionsPerProcess: $($tier.MaximumConnectionsPerProcess)"
Write-Host "Tier MaximumAppDomainsPerProcess: $($tier.MaximumAppDomainsPerProcess)"
Write-Host "Tier PriorityPerProcess: $($tier.PriorityPerProcess)"
Write-Host "Tier ResourceMaxValue: $($tier.ResourceMaxValue)"
}
 
Reference: http://technet.microsoft.com/en-us/library/hh230317.aspx

Thursday 9 February 2012

Authentication Evaluator

There are articles on building web parts to display claims on a page which can be a useful tool.
http://blogs.pointbridge.com/Blogs/nielsen_travis/Pages/Post.aspx?_ID=32
http://jopx.blogspot.com/2010/09/building-claims-viewer-webpart-for.html

Below I have added my own, nothing new or exciting but part of my discovery on CBA:
The code to display the current users Claim is shown below:
There is a codeplex project that provides a web part that display the Claim token.  As the code is so short I'd rater write it myself.

Saturday 4 February 2012

Presence Indicator not working

Problem: Presence indicator is not working in SP2010.

Initial Hypothesis: We have Office Communication 2007 installed.  I believe the presence indicator will also work if you are running Windows messanger on each client machine but our issue affected all our users in our test environment.

Resolution: A colleague, Greg Williams figured out how to fix the issue and I have posted it here to help others.  Neither the email address or the SIP are populated in the 'User Information' page (User Information List).
Here is the PS that fixed our issue, Brian Cartmel provided the PS:
$web = Get-SPWeb http://demo.dev
## get the user information list
$list = $web.Lists | where { $_.Title -eq "User Information List" }
## get the system account item
$item = $list.Items | where { $_["Account"] -eq "i:0e.t|ADFS20|paul.beck@demo.dev" }
$item["Title"] = "Paul Beck"
$item["SIP Address"] = paul.beck@demo.dev
$item.Update()



Explaination: "If the user does have a profile then the hyperlink will redirect to the user's main profile page under My Site. If the user does not have a profile, the hyperlink will redirect to the SharePoint Foundation 'User Information' page. All users in a site have a 'User Information' page, if they also have a User Profile the settings from the profile are synchronised down to the User Information page on a scheduled basis (by a timer job).
The key piece of information to make the presence work is the user's SIP Address which is basically their IM address (This is not always the same as email address). When a users is either added to a site in SharePoint or has their profile imported, the SIP Address will be drawn from Active Directory which is where OCS stores it and placed into the SIP address field in either the user's profile which will in turn synchronise down to the site's local 'User Information' page."  Martin Kearn

Tip: So as long as email or sip is populate with the email, the status indicator works.

More Info:
http://sharepoint.stackexchange.com/questions/15446/presence-indicators-without-lync
http://erikswenson.blogspot.com/2009/12/sharepoint-presence-not-showing.html
http://kbalertz.com/2448575/SharePoint-presence-information-appear-correctly-People-search-results-intermittently.aspx
http://blogs.msdn.com/b/uksharepoint/archive/2010/05/07/office-communicator-integration-presence-in-a-custom-webpart-for-sharepoint-2010.aspx (Read this)
http://blog.falchionconsulting.com/index.php/2011/12/updating-sharepoint-2010-user-information/
http://sharepintblog.com/2011/06/17/update-system-account-user-information-on-a-local-sharepoint-install/  Great blog and source of the Poweshell.

Wednesday 1 February 2012

Overview:  CKSDev provides mutiple SPI for SharePoint, the Event Receiver SPI is very useful in saving me tome writing all the plumbing code.

Problem: While updating a custom list using my event receicer I am re-firing the event receiver for the item.

Initial HypothesisDisable the event firing as shown in this post.  This post applies to MOSS and the methods have been depreciated in SP2010.

Resolution: Disable the EventFiring
this.EventFiringEnabled = false;
// Perform update
this.EventFiringEnabled = true;

SharePoint 2010 enable the scope immediately

Problem:  After creating a new scope, you need to wait 15 minutes for it to update the new scope (default SP2010 setting is: Automatically scheduled).


Initial Hypothesis: Gary Lapointe use to have a stsadm cmd to push thru the scope but I wanted to do it using PowerShell.  You can also use the Central Admin UI:


Resolution:
PS> $ssa = Get-SPenterpriseSearchServiceApplication
PS> write $ssa.name
PS> $ssa.StartScopesCompilation()
 

Technet has a post on forcing the scopes to update.

More Info:
http://gallery.technet.microsoft.com/scriptcenter/Force-to-update-Search-cf101b62
http://sharepointfieldnotes.blogspot.com/2011/07/sharepoint-2010-search-scopes-explained.html
http://blog.falchionconsulting.com/