Thursday, October 30, 2008

Grand Rapids SharePoint User Group Meeting Nov 6th

Here is the info:

On November 6, Harold Gravatt of Realign LLC, a MCSE with over 18 years of demonstrated expertise delivering Microsoft based network solutions, will cover implementing the External Collaboration Toolkit for SharePoint using ADAM and FBA. Find out how your company can provide authenticated team site access to clients and partners without adding them to your Active Directory.

 

David Tappan, a MCSE and Senior MOSS Architect at C/D/H, will also lead a ‘How Do I’ presentation on how to configure Kerberos authentication in a multi-server SharePoint farm.


New Horizons

5315 28th St Ct. SE Suite B

Grand Rapids, MI 49546

 

November 6, 2008

6:00pm-8:00pm


Friday, October 24, 2008

SharePoint The EXECUTE permission was denied on the object 'proc_LogChange', database 'SharePoint_AdminContent_, schema dbo

You may receive an error similar to the one below when upgrading or installing a hotfix on SharePoint. I received this and SharePoint didn't tell me anything more than this error message. 

The EXECUTE permission was denied on the object 'proc_LogChange', database SharePoint_AdminContent, schema dbo

To resolve this I logged into the SharePoint web server as the Application Pool account that SharePoint was running under and also granted this user dbo rights on the SharePoint_AdminContent database. I then ran the SharePoint ConfigurationWizard again and the upgrade completed successfully.

Wednesday, October 22, 2008

Gmail Web Slice for Internet Explorer 8

<input type="button" value="Add GMAIL Web Slice" class="addButton"

onclick='window.external.AddToFavoritesBar(

"https://mail.google.com/mail/feed/atom",

"GMAIL", "slice");' />

Creating an IE 8 Web Slice to display your Google Mail Gmail Inbox

This is another very simple example of how to add an authenticated Web Slice that displays the contents of your Gmail inbox in the IE 8 web slice.

Creating a simple Internet Explorer 8 web slice to display RSS Feed

Creating a simple Internet Explorer 8 web slice is pretty easy to do. This example shows how to add a button to your page that will add a web slice to display any valid RSS feed. Again this web slice will display an RSS feed. In this case the web slice displays the RSS feed from this blog.

<input type="button" value="Add Web Slice" class="addButton"

onclick='window.external.AddToFavoritesBar(

"http://feeds.feedburner.com/Officepoint?format=xml",

"OfficePoint RSS Feed", "slice");' />



IE 8 Accelerator Sample Example

This is an example of an IE 8 Accelerator. It doesn't tell you how to create one but it is itself a definition for an accelerator. This is a very simple one that adds an Accelerator that will just redirect the user to OfficePoint when clicked.

<?xml version="1.0" encoding="UTF-8" ?>

    <os:openServiceDescription xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">

        <os:homepageUrl>http://officepoint.blogspot.com</os:homepageUrl>

            <os:display>

                <os:name>Visit OfficePoint</os:name>

                <os:icon>http://blogitems.googlepages.com/office.ico</os:icon>

                <os:description>Visit my site</os:description>

            </os:display>

            <os:activity category="Visit">

                <os:activityAction context="document">

                    <os:execute action="http://officepoint.blogspot.com" method="get" />

                </os:activityAction>

            </os:activity>

    </os:openServiceDescription>


 

In order to add an Accelerator you'll need add a button that adds the service.


 

<html>

<head>

<title>Untitled Page</title>

</head>

<body>

<form id="form1">

<div>

<button id="myButton1" onclick="window.external.AddService('http://localhost/OfficePointAccelerator.xml')">

Add OfficePoint Accelerator

</button>

</div>

</form>

</body>

</html>



Tuesday, October 21, 2008

Generate machineKey web.config

Here is a site that will generate the machineKey for your web.config for you. Useful for the Sitecore AD Module configuration explained below or for any ASP.NET site that needs the machineKey in the web.config.


Unofficial Sitecore 6 Active Directory Module Administrator’s Guide


 

Sitecore has released an Active Directory Module for Sitecore 6 which I believe to be the equivalent of the LDAP Module that was available for version 5.3 and below. This guide will explain how to configure the AD Module in your environment with one AD domain.

  1. Install the AD Module package (you should know how to do this already)

    To verify that it was installed correctly check to see that the following files exist:

  • /bin/LightLDAP.dll
  • /bin/LightLDAPClient.dll
  • /App_Config/Include/ldap.config
  • /sitecore/admin/LDAPLogin.aspx
  • /sitecore/admin/ProviderStatus.aspx


 


 

  1. Open /App_Config/ConnectionStrings.config and add a connection string similar to the one below.

    <add name="LDAPConnection" connectionString="LDAP://{DomainController}/OU={LowestOUName},OU={OUNameAboveLowestOne},DC={DomainName},DC={com or org}"/>

  • DomainController should be the name of one of your company's domain controller server's
  • LowestOUName is the OU you want to get users from
  • OUNameAboveLowestOne is the OU Name above the OU you want to get user's from, you may not have this entry or you may have multiples of this, check out MSDN for LDAP Query specifics.
  • DomainName is the name of your domain
  • Com or org is the .com or .org or .net domain extension


     


     

  1. Open the web.config file and find the <membership provider="sitecore"> tag and add a provider by cutting and pasting from below and filling in your values for the values in brackets.

<add name="{NameOfYourDomain}" type="LightLDAP.SitecoreADMembershipProvider"      connectionStringName="LDAPConnection" applicationName="sitecore"              minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0"             requiresQuestionAndAnswer="false" requiresUniqueEmail="false"             connectionUsername="{Sitecore LDAP User}" connectionPassword="{Sitecore LDAP User Password}" connectionProtection="Secure" attributeMapUsername="sAMAccountName" enableSearchMethods="true" />

  • {NameOfYourDomain} is your domain name
  • {Sitecore LDAP User} is the user that Sitecore will use to connect to your AD
  • {Sitecore LDAP User Password} is the password of the above user/>


     


     

  1. Still within the <membership provider="sitecore"> tag, find the provider:


     

    <add name="sitecore" type="Sitecore.Security.SitecoreMembershipProvider, Sitecore.Kernel" realProviderName="sql" providerWildcard="%" raiseEvents="true" />


     

    and change the realProviderName to switcher so the line now reads


     

    <add name="sitecore" type="Sitecore.Security.SitecoreMembershipProvider, Sitecore.Kernel" realProviderName="switcher" providerWildcard="%" raiseEvents="true" />


     


     

  2. Now find the <roleManager defaultProvider="sitecore" enabled="true"> tag and add a provider by cutting and pasting from below and filling in your values for the values in brackets.

<add name="{NameOfYourDomain}" type="LightLDAP.SitecoreADRoleProvider" ConnectionStringName="LDAPConnection" applicationName="sitecore" username="{Sitecore LDAP User}" password="{Sitecore LDAP User Password}" />

  • {NameOfYourDomain} is your domain name
  • {Sitecore LDAP User} is the user that Sitecore will use to connect to your AD
  • {Sitecore LDAP User Password} is the password of the above user/>


 


 

  1. Still within the <roleManager defaultProvider="sitecore" enabled="true"> tag, find the provider:


     

    <add name="sitecore" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="sql" raiseEvents="true" />


     

    and change the realProviderName to switcher so the line now reads


     

    <add name="sitecore" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="switcher" raiseEvents="true" />


     

  2. Add a machineKey to the <system.web> section. It will look like

<machineKey validationKey="" decryptionKey="" validation="SHA1" /> you can go here http://aspnetresources.com/tools/keycreator.aspx to have one created for you, just generate one using the default values on that page. Example:

<machineKey validationKey="F0893ED36F497B12D0374825033C51F92E85A028C05E65474FB39D41240A6F11F06B531FFC07C3A53239CE8B789C624A7486556E44D8F7165A249605E86375E7"

decryptionKey="7509A38E7B68F1A610D6463B977805F2008D9EDAF2C55E79" validation="SHA1" />


 

  1. Find a section in the web.config similar to <switchingProviders> and add the sections in bold.

<membership>

<provider providerName="sql" storeFullNames="true" wildcard="%" domains="*" />

     <provider providerName="{NameOfYourDomain}" storeFullNames="false" wildcard="*" domains="{NameOfYourDomain}" />

</membership>

<roleManager>

<provider providerName="sql" storeFullNames="true" wildcard="%" domains="*" />

     <provider providerName="{NameOfYourDomain}" storeFullNames="false" wildcard="*" domains="{NameOfYourDomain}" />

</roleManager>

<profile>

<provider providerName="sql" storeFullNames="true" wildcard="%" domains="*" />

</profile>

</switchingProviders>


 

  1. Open up /App_Config/Security/Domains.config.xml and add a domain.

<domain name="{NameOfYourDomain}" ensureAnonymousUser="false" />


 

If you've done everything correctly you should now be able to open up User Manager in Sitecore and see users from your AD OU listed.

Improving Sitecore 6 Active Directory Module Performance

There is a new module for Sitecore 6 called Active Directory Module which seems to replace the LDAP Module that was available in Sitecore v5.3 and below. This new module uses the ASP.NET Membership provider available with ASP.NET 2.0. The Official Administrator's guide to this new module explains how to configure it for your Sitecore environment. I will release my unofficial guide in the next day or so but in the meantime you should be aware there are significant performance issues with it that were not present in the old LDAP Module. At least for me and one other person there has been. These steps will explain how to work around these performance issues but aren't supported by Sitecore so be sure to backup all the files I tell you to edit. I haven't seen any problems with this workaround but if you do let me know and I'll investigate, as far as I know these changes do not cause any additional issues. So let's get to it.

When trying to use the User Manager and page through the many users from your AD domain you may notice that it is too slow to use. To improve this you'll want to do a few things:

    Open up the web.config file and find the following line which defines the number of rows returned when paging through the grid which is a Component Art Web UI Grid.

<setting name="GridPageSize" value="15" />

Change the value to 24.

Now open up C:\Inetpub\wwwroot\{websitename}\WebSite\sitecore\shell\Applications\Security\UserManager\UserManager.aspx

Change the PageSize="20" property of the grid to PageSize="24"

Within the columns definitions of the grid comment out the columns for the Domain, Profile.Email, Profile.Comment, Profile.ClientLanguage and Profile.State. This is the change that really improves the performance. You probably don't care about all those fields anyway, and if you do, then just uncomment the one you want to see and it will appear in the grid.

As a side note, the Grid has a property called RunningMode which is set to CallBack, if you set it to Server instead it will cause the Grid to do a post back when paging which I have found did not significantly increase the performance of the paging but if commenting out the lines above doesn't help you may want to try that.

Also within your LDAP query in the AD Module try to get it down to one OU or a few OU's with few people in them, the more data it needs to bring back the worse performance will probably be.

With the changes above, open the User Manager and now instead taking a few minutes to get to the next page or not paging at all, it should only take < 1 min to page to the next set of users. Not great but better than what it was before we started.

The other pain point is managing roles with the Role Manager and managing user roles inside the Role Manager. Comment out the same lines as above in the following files and your performance using Role Manager should also increase.

All files in C:\Inetpub\wwwroot\{websitename}\WebSite\sitecore\shell\Applications\Security\RoleManager include similar Grids except for NewRole.xaml.xml.

And C:\Inetpub\wwwroot\SitecoreSix\WebSite\sitecore\shell\Applications\Security\SelectAccount\SelectAccount.xaml.xml contains a similar grid that you can comment out the Email and Profile.Comment columns.

Friday, October 17, 2008

West Michigan SharePoint User Group Meeting November

We invite you to attend the West  Michigan SharePoint User’s Group Meeting on Thursday, November 6, 2008-seating is limited so please Register Today!

 

On November 6, Harold Gravatt, a MCSE with over 18 years of demonstrated expertise delivering Microsoft based network solutions, will cover implementing the External Collaboration Toolkit for SharePoint using ADAM and FBA.

 

David Tappan, a MCSE and Senior MOSS Architect at C/D/H, will also lead a ‘How Do I’ presentation on how to configure Kerberos authentication in a multi-server SharePoint farm.

  New Horizons

5315 28th St Ct. SE Suite B

Grand Rapids, MI 49546

 

November 6, 2008

6:00pm-8:00pm

Please join us and share your ideas and best practices while networking with your peers.  Food and drink will be served.

Tuesday, October 14, 2008

Unofficial Sitecore Migration Guide Upgrading from Sitecore 5.3 rev 071114 to Sitecore 6

I've posted the guide as a post but the images didn't show up, so here is the downloadable copy of the guide. Just follow it exactly and you should be able to get your Sitecore 6 site running and upgraded from Sitecore 5.3. The upgrade of Sitecore 5.3 was relatively easy and I like how the Sitecore 6 update packages include all previous updates, it makes it a lot easier to get to the current version.

Upgrading from Sitecore 5.3 rev 071114 to Sitecore 6

Unofficial Sitecore Migration Guide Upgrading from Sitecore 5.3 rev 071114 to Sitecore 6

Unofficial Sitecore Migration Guide

Upgrading from Sitecore 5.3 rev 071114 to Sitecore 6


 

Step One: Install Sitecore 6

    Screen shots of installation below.


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 

Must be SQL 2005 or 2005 Express Database


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 

Attempt to launch http://sitecore6/sitecore if you receive the error below then do the following: remove and then add the sitecore sql user to the Sitecore 6 databases as dbowner.

Databases:

    {web site name}Sitecore_Core

    {web site name}Sitecore_Master

    {web site name}Sitecore_Web


 


 


 


 

Switch to the Advanced view, select Desktop, click the Hide Warning button. The username is Admin and the password is b.


 


 

Attempt to launch http://sitecore6, if you've done everything right you will see the screen below.


 


 

Ok if you've made it this far you now have a clean installation of Sitecore v6.


 


 

Step Two: Grant Access


 

    Grant "Network Service" and "Internet Guest Account" Full Control rights to the Sitecore 6 web root within C:\inetpub\wwwroot if that's where you choose to install Sitecore 6.


 

Step Three: Make a backup copy of the original Sitecore 6 root folder

    

    Just in case you need to revert back to an original file, make a copy of the Sitecore 6 web site root folder.


 

Step Four: Install updates to Sitecore 6


 

    Download Sitecore 6.0.0 Update rev. 080912.zip which fixes Sitecore's problem with .NET 3.0 SP1. (Or download the lastest update which contains the fixes for all previous updates)


 

Install the update package and overwrite all when prompted.


 

To verify that is was install successfully check the version of Sitecore.Client.dll in the bin directory of the web site. It should say 6.0.0 rev. 080912 if it doesn't then the update wasn't installed.


 


 

Step Five: Install upgrade prerequisite packages


 

    Download the Database Conversion tool and extract the contents which should give you two zip files: Sitecore Update Installation Wizard-2.0.0 rev. 080730.zip and V6DBConversionTool-1.0.0rev080923.zip


 

    Install Sitecore Update Installation Wizard-2.0.0 rev. 080730.zip first and overwrite all when prompted. To verify that this update was successful verify that a Sitecore.Update.dll file exists in the bin directory of the web site.


 


 

    Now install V6DBConversionTool-1.0.0rev080923.zip and overwrite all when prompted. To verify that this update was successful look in the sitecore/admin/ folder within the website root there should be a folder called upgrade with three folders in it and then additional files within those folders.


 

Step Six: Copy security template files


 

    Copy the "security templates.xml" in the old Sitecore installation from /sitecore/shell and copy it to the new Sitecore 6 installation into /sitecore/shell.


 

Step Seven: Modify connectionstrings.config file


 

    Open up App_Config/ConnectionStrings.config and rename the master connection string to v6_master. Then add connection strings to the Sitecore 5.3 databases except for the web database. Oh and the core database string for the 5.3 connections should be named v53_core. Example of a fully modified file is below.


 

<add
name="core"
connectionString="user id=sitecore;password=***;Data Source=bc-sitecore\SQLEXPRESS;Database=SitecoreSixSitecore_Core" />

    <add
name="v6_master"
connectionString="user id=sitecore;password=***;Data Source=bc-sitecore\SQLEXPRESS;Database=SitecoreSixSitecore_Master" />

    <add
name="web"
connectionString="user id=sitecore;password=***;Data Source=bc-sitecore\SQLEXPRESS;Database=SitecoreSixSitecore_Web" />

    <add
name="master"
connectionString="user id=sitecore;password=***;Data Source=bc-sitecore;Database=sc531071114Master" />

    <add
name="security"
connectionString="user id=sitecore;password=***;Data Source=bc-sitecore;Database=sc531071114Security" />

    <add
name="extranet"
connectionString="user id=sitecore;password=***;Data Source=bc-sitecore;Database=sc531071114Extranet" />

    <add
name="v53_core"
connectionString="user id=sitecore;password=***;Data Source=bc-sitecore;Database=sc531071114Core" />

    <add
name="recyclebin"
connectionString="user id=sitecore;password=***;Data Source=bc-sitecore;Database=sc531071114RecycleBin" />

    <add
name="archive"
connectionString="user id=sitecore;password=***;Data Source=bc-sitecore;Database=sc531071114Archive" />


 


 

Step Eight: Copy some include files


 

    Copy the .include files in /sitecore/admin/upgrade/IncludeFiles to /App_Config/Include and rename the name.config.disabled files to name.config. Each include with the .config extension will be upgraded those with the .disabled extension will not be upgraded. So only rename those databases that you want to upgrade. To verify that Sitecore picked up all the databases, log into Sitecore and click on the database button in the lower right hand corner of the console, you should see all of them you add appear.


 

Step Nine: Pray that the conversion wizard works


 

    First you'll need to go into IIS and grant anonymous access rights to the /sitecore/admin folder/


 


 


 

Then browse to http://{sitecoreurl}/sitecore/admin/upgrade/main.aspx. Go through the wizard and choose to automatically do the conversion process. And eventually you'll hit the "Start Conversion" button. If you were successful, depending on the size of your databases (my core and master were around 4GB), 1 hour later you will see:


 


 


 

If you were unsuccessful you may see the error below. This was a fairly easy fix for me. I was trying to convert a SQL 2000 database but since sys.objects doesn't exist in SQL 2000 I had to upgrade them to SQL 2005 and then run the conversion again. After doing that it was successful.


 

2652 14:15:52 ERROR Failed to upgrade the database

Exception: System.Data.SqlClient.SqlException

Message: Invalid object name 'sys.objects'.

Source: .Net SqlClient Data Provider

at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)

at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)

at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)

at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()

at System.Data.SqlClient.SqlDataReader.get_MetaData()

at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)

at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)

at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)

at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)

at System.Data.SqlClient.SqlCommand.ExecuteScalar()

at Sitecore.V6DBConversion.SqlServerDatabaseConverter.ExecuteScalar(String cs, String sql)

at Sitecore.V6DBConversion.SqlServerDatabaseConverter.Convert(SqlServerDataProvider provider, IOutput output)


 


 

Great, you've made it this far, now only a few more hours of waiting.


 

Step Ten: Rebuild some Sitecore databases


 

    First let's clean up the databases by rebuilding the link database for the Core and Master databases. Then rebuild the search indexes on the Core and Quick Search options.


 

Step Eleven: Republish entire site


 

    Go to the Home section and then the Publish option and Publish site. This is where you wait for a few hours while Sitecore copies data out of the master database to the new Web database. Don't screw with anything else just let it run and depending on the size a few hours later it will say successful. If not, start it again and do an incremental publish so you don't have to republish everything.


 

Step Twelve: Remove some old upgrade files


 

    Remove and I do mean remove all the .config files within the /App_Config/Include folder. If you just copy them to another folder within that folder you'll get errors, so just get rid of them completely.


 

    In the /App_Config/ConnectionString.config file get rid of all entries except the Core, Web and Master strings.


 

    Delete the /sitecore/admin/upgrade folder

    

    If a /sitecore/admin/packages/tool folder exists, delete that too, I didn't have one so I didn't need to delete it.


 

    Delete the following files if you have them


 

  • /sitecore/admin/upgrade.aspx, mine was named update.aspx
  • /sitecore/admin/web.config
  • /bin/sitecore.diffinstaller.dll, I didn't have this file
  • /bin/DiffLib.dll, I didn't have this one either
  • /bin/Sitecore.Upgrade.dll, mine was named Sitecore.Update.dll
  • /bin/Sitecore.V6DBConversion.dll


 

    Take offline and a few weeks later get rid of the security, extranet, archive and recyclebin and possibly the v6 master database from SQL.


 

Step Thirteen: Restore the clean web.config


 

    You should have a copy of the clean v6 web.config file, copy that file to the new v6 web site root and replace the one that's already in there.


 

Step Fourteen: Copy custom files to the new v6 root


 

    Copy your custom files from the v5.3 root to the v6 root

    

  • Layouts
  • Images
  • Xsl
  • Media
  • Css
  • Any other folders that are in your site that don't exist in the v6 site that are needed

    

Compile your solution against the new Sitecore dlls and copy the dll to the bin folder of the v6 site


 

Merge any web.config customizations from the v5.3 config file to the v6 config file, possibly app settings or ajax stuff.


 

Step Fifteen: Test, Test and Test


 

    Test the site.

Friday, October 10, 2008

SharePoint Date Picker Control

This explains how to use the date picker control that SharePoint provides. This example uses it in a web part.

RenderContents...

DateTimeControl dtcBegin;
DateTimeControl dtcEnd;
dtcBegin = new DateTimeControl();
dtcEnd = new DateTimeControl();
this.Controls.Add(dtcBegin);
this.Controls.Add(dtcEnd);

And to reference the selected date do this:

System.DateTime start = dtcBegin.SelectedDate;
System.DateTime end = dtcEnd.SelectedDate;

Thursday, October 9, 2008

Wednesday, October 8, 2008

FBHW Free Beer and Hot Wings Podcast Url Information removed and added

I'm removing the direct links to their podcast from this blog. I will no longer post their url.

With that said, the podcast is still freely available on mediafly, signup and search for "the freebeer and hotwings morning show" on their site. It's now mediafly's problem.

Friday, October 3, 2008

Current configuration settings prohibit embedding username and password in the database connection string SharePoint InfoPath

You may get this error using an InfoPath form within SharePoint

Current configuration settings prohibit embedding username and password in the database connection string.)

SharePoint Central Admin -> Application Management -> Configure InfoPath Forms Services.

Check the box next to Allow embedded SQL authentication and click the OK button.

Thursday, October 2, 2008

Grand Rapids Tech Lunch #5

Date -- October 6th, 2008

Time -- 12:00 to 1:30 PM

Place -- Grand Rapids Brewing Co. @ NE corner of 28th Street and East Beltline by Centerpointe Mall

Great bunch of guys and gals getting together to discuss technical stuff once a month. Check out http://grtechlunch.com/grafitti/meetings/5-grtechlunch-event-october-6th-2008-grand-rapids-brewing-company/ for more information.

Two InfoPath Contact Selector Controls On One Form

This information comes from the comments section of the InfoPath Team Blog.

Say you want to add two InfoPath Contact Selector controls to one InfoPath form. This sounds simple enough, create your group and then add the Person repeating node with the DisplayName, AccountName and AccountId fields like you normally would to the Person group. Trying to duplicate this same group again for the second contact selector control will throw an error because you can't have fields or groups with the same names. But knowing that the names have to be exact to have the contact selector control work, the question arises how do we duplicate the data source for the InfoPath contact selector control.

Well assuming you have a group named grpPersonSelector bound to the first InfoPath contact selector control. Create another group named really anything we'll use grpPersonSelectorTwo. Now right click on the Person repeating group under grpPersonSelector and click Reference and choose grpPersonSelectorTwo.

That's it, now the grpPersonSelectorTwo group can be bound to your second InfoPath contact selector control. Thanks Scott for this information.