SharePoint User Profile Import / Synchronization

SharePoint User Profile Import/Synchronization has gone through an evolution and has been the number one support issue for SharePoint 2010 at Microsoft. Needless to say, it caused us major issues with clients while Microsoft was figuring it out. So far with SharePoint 2013, it looks like they finally got it right, but time will tell.

 

Below is both a history of User Profile implementations and their issues, as well as links to instructions for properly configuring those various implementations.

 

HISTORY

SharePoint 2003 & 2007:

  • User Profile Import only
  • No issues with any release (that I am aware of, please update me if you are aware of any issues)

SharePoint 2010:

  • User Profile Synchronization (read or write, but not both on the same property)
  • Prior to the April 2012 CU (including SP1); Synchronization would do one of the following behaviors based on which CU you had installed:
    • Profile Synchronization service will not start
    • Profile Synchronization service starts, but synchronization fails
    • Synchronization succeeds once and only once (the full sync)
    • Synchronization succeeds on first full sync and further incremental sync, but fails further full syncs
    • other Sync DB issues, see here
  • As of the April 2012 CU; Synchronization just works with the following notes:
    • There is still a bug where a UPA created with a Windows PowerShell session not running as the Farm Account prevents provisioning of the UPS service instance, has NOT been fixed. We still need to use the workaround here
    • There is also no change to the support of only a single OU per tenant for Synchronization

SharePoint 2013:

  • User Profile Import or Synchronization
  • It appears as if Import does not understand Subscription IDs and therefore cannot be used with a Partition Mode UPA. This may prevent My Sites from working…
  • I have not tried synchronization yet, please provide your experiences…

 

CONFIGURATION

  1. For all versions of SharePoint, you will need to use a domain account for import/synchronization and provide that account the “Replicate Directory Changes” permission.  The following article is directed for SharePoint 2010, but has the same necessary steps for all the other SharePoint versions.
  2. Configure import or synchronization in SharePoint
    1. User Profile Import
    2.  User Profile Synchronization

Why choose a BCS solution?

Surfacing external data in SharePoint enables users to build composite applications that give access to critical information and make their interactions with that information more convenient.  Business Connectivity Services (BCS) is the SharePoint service which allows surfacing of external data from SQL Server, Web Services, or.NET Assembly Connector.  SharePoint even provides no-code BCS solutions to surface the external data via SharePoint Designer to allow for rapid development and provides External Lists to quickly interacting with that data.  You can also secure the data by setting permissions on who can create, read, update, and delete (CRUD) the data.  You can even crawl that data using SharePoint Enterprise Search and set a profile page for rendering the search results in a meaningful way.  You can rapidly developing a feature rich front end for your external data.

Search enabling your BCS solution will however require more than SharePoint Designer to develop.  This is also true if you want to deploy your solution to multiple environments.  This does not mean that you have to write code, but it does mean that you will find yourself in Visual Studio modifying declarative markup that SharePoint Designer can produce and packaging that markup into WSP solution packages.  This approach will allow you to develop external data solutions that you can quickly develop and deploy to multiple environments consistently and will provide your users the ability to immediately search and render meaningful results.

Now if you do determine that you need to integrate external data with SharePoint, but want to still have custom forms or any kind of richer user experience to interact with that data, you could write code using the SharePoint API against external lists.  This approach is often touted as one of the great things about external lists in that you can treat them as any other SharePoint lists.  This approach will work for small datasets, but for large datasets and anytime you are concerned about performance of your forms, you will really want to write your code to go against the BCS Runtime or Client Object Models.  This is a very powerful approach as you can now develop a very rich custom user interface to interact with your external data within the SharePoint context.  You can even access your external data from other applications via the BCS Client Object Model.

As I have discussed, SharePoint provides for rapid development of external data and allows you to apply security and search on your external data.  It also provides the capability to build very powerful and very rich custom user experiences for your external data.  Implementing these solutions to different environments and making your application production ready presents some challenges that are not well documented.  In my next few blog posts, I will go through the process of making an external data solution from beginning to end and show you techniques that will make your solution more stable and production ready.