RSS
Twitter
LinkedIn

 

Dealing with Backward-Compatible Event Handlers when moving SP Sites

A problem came up a few days ago when I was moving some SharePoint sites between farms.

Whilst using the SharePoint Content Deployment Wizard from Chris O'Brien, a site failed with a fatal error during an import. (... for anyone who's not aware of this tool, I can't recommend it enough...  it's available to download for free from www.codeplex.com/SPDeploymentWizard)

The log file reported the error was due to an assembly file failing to load for a particular Document Library.

Just to confirm, I attempted to transfer the entire problem site using the usual STSADM -export/-import

(see Moving Sites with STSAdm (my new best mate) and STSADM export, Content Deployment, Content Migration API - deployment options compared - again by Chris)

.. and received exactly the same error:.

 

FatalError: Could not report event for "<######>" in "<######>" because loading event handler assembly
"Nintex.SmartLibrary, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=443f9ec8cb8d697b" failed. Could not load file or assembly 'Nintex.SmartLibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=443f9ec8cb8d697b' or one of its dependencies. The system cannot find the file specified.
   at Microsoft.SharePoint.Library.SPRequest.SetListProps(String bstrUrl, String bstrListName, Boolean bMigrate)
   at Microsoft.SharePoint.SPList.Update(Boolean bFromMigration)
   at Microsoft.SharePoint.Deployment.ListSerializer.SetObjectData(Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
   at Microsoft.SharePoint.Deployment.XmlFormatter.ParseObject(Type objectType, Boolean isChildObject)
   at Microsoft.SharePoint.Deployment.XmlFormatter.DeserializeObject(Type objectType, Boolean isChildObject, DeploymentObject envelope)
   at Microsoft.SharePoint.Deployment.XmlFormatter.Deserialize(Stream serializationStream)
   at Microsoft.SharePoint.Deployment.ObjectSerializer.Deserialize(Stream serializationStream)
   at Microsoft.SharePoint.Deployment.ImportObjectManager.ProcessObject(XmlReader xmlReader)
   at Microsoft.SharePoint.Deployment.SPImport.DeserializeObjects()
   at Microsoft.SharePoint.Deployment.SPImport.Run()

 

Ok.. so what was going on?

The fact only few sites failed to import, whilst most others completed with nothing more than a warning at worst, indicated the problem was likely to be site or document library specific.

Based on this, I checked the library settings of the "document library" referenced in the log file... thinking there was probably a custom workflow assigned to it.

There wasn't...

 

The error in the log was reporting an "event handler" problem...  a quick google search later produced various links on "SP 2007 Event Handlers" including:

Brian Wilson - Post 3: Registering Event Handlers plus Site Settings - Manage Event Handlers
Zlatan - Getting started with Event Handlers in Sharepoint 2007

..which confirmed that there is no user interface provided 'out of the box' for managing 'Event Handlers'.

However, there are a couple of tools out there that can help.

Gaetan Bouveret - SharePoint Events Manager
Ishai Sagi - SharePoint Tips Utility Pack

Unfortunately, none of these tools reported any 'Event Handlers' being registered on any of the document libraries.

...I then came across How to Remove a SharePoint List Event Handler from a List Template WITHOUT server access or development tools from Stacey Bailey, which discusses "Backward-Compatible Event Handlers" and ways of disabling them.

 

So, I enabled 'Backward-Compatible Event Handlers' (under 'Web application general settings' from the 'Central Adminstration >> Web Application Management' )... returned to one of the Doc Libraries in question checked the new section which appears under 'Document Library Settings >> Advanced Settings' and was then able to remove the reference to problem assembly.

 A few minutes (..and a new export + import) later, the site was transferred successfully.

 

On this particular occasion, there were quite a few document libraries which had a ''Backward-Compatible Event Handler' reference to the assembly:

Nintex.SmartLibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=443f9ec8cb8d697b

Luckily, Nintex Connect provides the "Backwards Compatible Event Handler Tool" for exactly this reason.
(see Still got a document library with the SmartLibrary event handler after migration for command details - requires 'Site Registration' )


Published by aobi

Comments

No Comments