<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kristof Kowalski</title>
	<atom:link href="http://www.kowalski.ms/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kowalski.ms</link>
	<description></description>
	<lastBuildDate>Tue, 31 Aug 2010 13:11:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>SharePoint Server 2010 Supplementing User Profile Imports Using BCS</title>
		<link>http://www.kowalski.ms/2010/07/20/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs/</link>
		<comments>http://www.kowalski.ms/2010/07/20/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 12:47:55 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=240</guid>
		<description><![CDATA[The User Profile Service Application is used to synchronise data from Active Directory to the profile database maintained by SharePoint. The profile database contains rich information about end users that can be displayed in sites. The User Profile service application maps Active Directory fields to fields in the user ’s profile. On a scheduled basis, this information is [...]]]></description>
			<content:encoded><![CDATA[<p>The User Profile Service Application is used to synchronise data from Active Directory to the profile database maintained by SharePoint. The profile database contains rich information about end users that can be displayed in sites. The User Profile service application maps Active Directory fields to fields in the user ’s profile. On a scheduled basis, this information is imported from Active Directory.</p>
<p>But, what happens when you want to add additional information from external systems to supplement the richness of you Active Directory data? Well, you need to use BCS (Business Connectivity Services). BCS is an evolution to the functionality of MOSS’s (Microsoft Office SharePoint Server) 2007 BDC (Business Data Catalog).</p>
<p>What started out as a simple lab to get a proof of concept up and running really turned into a bit of a hair pulling ordeal. I’ll go through it here so that someone else doesn’t have to go through the same stress as I had to. From what I gather there’s quite a few people out there who are trying to get this running but are faced with the dreaded error;</p>
<p><strong>&#8220;Microsoft.MetadirectoryServices.NoSuchObjectTypeException: No such object type &#8220;user&#8221;.<br />
at Microsoft.MetadirectoryServices.Impl.TypeDescriptionCollectionImpl.get_Item(String Name)</strong></p>
<p><strong><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-error" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-error.png"><img class="aligncenter size-medium wp-image-246" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-error" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-error-300x225.png" alt="" width="300" height="225" /></a><br />
</strong></p>
<p>So. Onto the Step by Step guide to enlightenment, so I hope. Just as a note, I’ll be importing some Customer details into my profile from the Northwinds sample database. This database can be downloaded from;</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?familyid=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?familyid=06616212-0356-46a0-8da2-eebc53a68034&amp;displaylang=en</a></p>
<p>Firstly go ahead and download the database. You can either run the .sql file to create the DB or simple to an attach. Once you have the DB attached to your SQL back-end you should be able to query the sample data as follows;</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-northwind" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-northwind.png"><img class="aligncenter size-medium wp-image-247" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-northwind" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-northwind-300x225.png" alt="" width="300" height="225" /></a></p>
<p>This is the sample data we’ll be using. In our simple test I’ll be adding an Alternate Company to my Active Directory profiles, this data will be pulled from the Customers table using the CompanyName table.</p>
<p>The first thing we need to do is create and ECT (External Content Type). With BCS the focul point is, it’s all about External Content Types definitions. The simplest method of generating these ECTs is using SPD (SharePoint Designer) 2010. Once we’ve created our ECT it’ll be stored in the ECT Catalog, also known as the metadata catalog.</p>
<p>So lets fire up SPD and create an External Content Type. Open up a Team Site where you want to test out your ECT. To ensure our ECTs are working we’ll create a list afterwards and display the Northwinds customers using the SharePoint native interface.</p>
<p>In SPD go to External Content Types in Site Objects.  Click External Content Type. You’ll be presented with a new ECT page;</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd01" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd01.png"><img class="aligncenter size-medium wp-image-248" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd01" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd01-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Enter a Name such as NorthwindCustomers. Enter a Display Name as Northwind Customers. In my example I’ve changed the Office Item Type to Contact as I want to take the list offline for later use. It’s up to you, the only extra step you need to do is map the properties in the Northwinds database to Office properties.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd02" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd02.png"><img class="aligncenter size-medium wp-image-249" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd02" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd02-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Click the Click here to discover external data sources an…  Click Add Connection and select SQL Server. Fill in  your Database Server, Database Name and optional name. Leave Connect with User’s Identity as the default. Once you have done this, you’ll notice that your Northwinds database has been added to your Data Source Explorer as follows;</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd04" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd04.png"><img class="aligncenter size-medium wp-image-250" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd04" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd04-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Expand your Northwindows database and right click Customers. Select Create All Operations.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd05" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd05.png"><img class="aligncenter size-medium wp-image-251" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd05" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd05-300x225.png" alt="" width="300" height="225" /></a></p>
<p>You should be presented with Operations Properties wizard now. For the ease of this guide I&#8217;ve selected All Operations but in your day to day BCS solutions you might want to limit what you want you users to perform using CRUD (create, replace, update, delete) for security sake.</p>
<p>Select Next on the Operations Properties wizard. Since I&#8217;ve chosen the Office Item Type as Contact I will now need to map the Data Source Elements such as CompanyName to an Office Property like Company Name (CompanyName). I will also check the Show In Picker box as I want to be able to view the results from any searches. Perform these steps for as many elements as you see fit. A word of warning too, leave the CustomerID Data Source Element as Read-Only in the Properties. You dont want your users overwriting your identifier for the field that we&#8217;ll use later for our 1 to 1 profile relationship.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd06" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd06.png"><img class="aligncenter size-medium wp-image-253" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd06" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd06-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Click Finish. Then select Summary View in SPD to view your settings and save your changes. They should look something like this.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd07" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd07.png"><img class="aligncenter size-medium wp-image-254" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd07" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd07-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Congratulations. You&#8217;ve just created your first ADO.NET ECT and now we&#8217;re ready to expose the contents of our Customers table from the Northwinds database. The simplest method to create your External List and InfoPath form is to use the Create Lists &amp; Form button on the SPD ribbon. Select the newly created ECT and then select Create Lists &amp; Form from the ribbon to bring up the. Fill in the List Name details and also check the Create InfoPath Form checkbox. Your entry should look something like this;</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd08" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd08.png"><img class="aligncenter size-medium wp-image-255" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd08" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd08-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Once you click OK this will go ahead and create the External List and InfoPath form in the Team Site that you used when creating the ECT. If you refresh your Team Site home page you should see a new list in the Quicklaunch bar. Before you can use the your new ECT you need to set the permissions for your ECT else you will receive the following message;</p>
<p>Access Denied by Business Data Connectivity.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd09" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd09.png"><img class="aligncenter size-medium wp-image-256" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd09" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd09-300x225.png" alt="" width="300" height="225" /></a></p>
<p>To apply the permissions for your ECT you need to go to your Central Administration &gt; Manage Service Applications &gt; Business Data Connectivity Service &gt; Select the Set Permissions action on your ECT. Open your People Picker up and search for All. Select your All Authenticated Users and check each Permissions that you would apply to this user/group. For our guide we&#8217;re allowing all permissions on this ECT for the All Authenticated Users group.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd10" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd10.png"><img class="aligncenter size-medium wp-image-257" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd10" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-spd10-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Once you set your permissions on the ECT you will be able retrieve the Customers table from the Northwind database as follows. A word of caution, you will need to close down your browser session and open your Team Site up again as you need to re-authenticate against the site again for the External List to work work.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-externallist" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-externallist.png"><img class="aligncenter size-medium wp-image-259" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-externallist" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-externallist-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Congratulations, you&#8217;ve now you&#8217;ve created your first External List based on a ADO.NET External Content Type. Imagine the possibilities in connecting out disparate LOB (Line of Buiness) systems out there in your organisation and having them surfaced by using native SharePoint External Lists, this is only the tip of the ice berg on what is possible.</p>
<p>Now I&#8217;m going to assume that your profile imports are working correctly when importing from Active Directory (AD). If you&#8217;re AD imports aren&#8217;t working then please get that up and running and move on to the next steps. A word of notice is that the BCS profile import cannot be the primary data source for profile imports, we can only supplement information from LOB systems and add them to our AD Profiles.</p>
<p>In this example as I mentioned initially, I’ll be adding an Alternate Company to my Active Directory profiles, this data will be pulled from the Customers table using the CompanyName table. The first step we need to perform is by adding a new User Property. In my example I will add to each user a Alternate Customer ID field that will have this fields data correlate back to the CustomerID column of the Customers table, this is how we establish our 1 to 1 relationship between our AD profiles and our BCS profiles. This Alternate Customer ID propoerty will only be a SharePoint local property, but in a real world example this can be brought in from Active Directory via one of the other attributes.</p>
<p>To create the new User Property go to Central Administration &gt; Manage Service Applications &gt; User Profile Service Applications &gt; Manage User Properties. Select New Property and fill in the contents as follows.</p>
<p>Name: CustomCustomerID<br />
Display Name: Alternate Customer ID<br />
Type: String<br />
Length: 5 (Since our column CustomerID is on 5 nchar in the Customers table)</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof01" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof01.png"><img class="aligncenter size-medium wp-image-260" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof01" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof01-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Under Policy Settings change the Required Policy Setting to Optional. The rest of the property settings can be set however you like. Click OK and we&#8217;re ready to start setting up our BCS User Profile Synchonrization Connetion. Go to your User Profile Service Application &gt; Configure Synchronization Connections &gt; Create New Connection.</p>
<p>Enter a Connection Name as Northwinds, Type as Business Data Connectivity. In the Business Data Connectivity Entity select your Northwind Customers External Content Type. Now this is the import part, we need to map our CustomCustomerID to our Extrernal Content Type to create the 1 to 1 relationship. Select our CustomCustomerID property as the identifier.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof02" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof02.png"><img class="aligncenter size-medium wp-image-262" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof02" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof02-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Click OK and save your now synchronization connection settings. Now, we need to quickly jump back in the Manage User Profiles page and add the Alternate Customer ID data in. This will then be used to import the Alternate Company Name via BCS. Like I mentioned previously, instead of an Alternate Customer ID property that we have here, you can use an AD attribute to perform the same function, usually a mail or employeeid attribute is the way to go, anything which correlates your HR systems and AD will work.</p>
<p>Before we can start the profile import we need to add another User Property that will surface the Alternate Company Name data from the CompanyName column. Create a New Property with the follow values;</p>
<p>Name: CustomCompanyName<br />
Display Name: Alternate Company Name<br />
Type: String<br />
Length: 40 (Since our column CustomerID is on 40 nvarchar in the Customers table)</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof04" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof04.png"><img class="aligncenter size-medium wp-image-264" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof04" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof04-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Under Policy Settings change the Required Policy Setting to Optional. The rest of the property settings can be set however you like util you scroll to Property Mapping for Synchonization. Select Northwinds as the Source Data Connection, select CompanyName as the Attribute. Click Add to the add the Property Mapping to the new User Property.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof05" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof05.png"><img class="aligncenter size-medium wp-image-265" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof05" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof05-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Click OK and you are done with User Properties.</p>
<p>Lets go ahead and populate our Alternate Customer ID properties in some test profiles. I&#8217;ve got several properties imported here from my dev box so I&#8217;ll go ahead and add the CustomerID data from the Customers table in the Northwind database. As a simple test, you can add 1 or 2 Alternate Customer ID entries initially and the profile import will only import those 1 or 2 BCS profiles. So I&#8217;ll add 2 for now and we&#8217;ll check the Forefront Identity Manager 2010 client that those 2 profile are only imported.</p>
<p>Lets add ALFKI as the Alternate Customer ID to one of our profiles, which is the first record in the Customers table. Lets find another profile and add ANATR to the Alternate Customer ID. Once we perform a Full Import will expect to have the Alternate Company Name supplemented by our BCS import.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof061" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof061.png"><img class="aligncenter size-medium wp-image-268" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof061" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof061-300x225.png" alt="" width="300" height="225" /></a></p>
<p>We&#8217;ve pretty much set up all the plumbing, lets kick off our Full Import. Go to Central Administration &gt; Manage Service Applications &gt; User Profile Service Application &gt; Start Profile Synchonization &gt; Start Full Synchronization.</p>
<p>With Microsoft SharePoint Sever (MSS) 2010, Microsoft has opted to use Forefront Identity Manager (FIM) 2010 instead of the SharePoint Search engine to perform the profile imports. With the install of MSS we also have the miisclient.exe that allow us to view and check certain preoprties during and after the import. You can find the tool in the following directory;</p>
<p>C:\Program Files\Microsoft Office Servers\14.0\Sychonization Service\UIShell</p>
<p>Open up miisclient.exe and view the impending profile import.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-fim01" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-fim01.png"><img class="aligncenter size-medium wp-image-267" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-fim01" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-fim01-300x225.png" alt="" width="300" height="225" /></a></p>
<p>If all the steps were carried our correctly you will have success as the resultant message in the Status column all the way through. Success! All done.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-success" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-success.png"><img class="aligncenter size-medium wp-image-270" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-success" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-success-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Now if you check any of you modified user profiles that you added your Alternate Customer ID, you will notice that the Alternate Company Name has been supplemented. Phew! That was a long guide.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-success2" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-success2.png"><img class="aligncenter size-medium wp-image-273" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-success2" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-success2-300x225.png" alt="" width="300" height="225" /></a></p>
<p>When I initually ran across the No such object type &#8220;user&#8221; error message what finally allowed to me fix the problem was drilling further into the workings of the miisclient.  Open the miisclient, go to Management Agents &gt; Select MOSSBDC-Northwinds &gt; Select Proprties in the Actions Menu &gt; Configure Additional Parameters.</p>
<p>Notice on the righthand side the MossJoinAttribute and BDCJoinAttribute.</p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof07" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof07.png"><img class="aligncenter size-medium wp-image-269" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof07" src="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof07-300x225.png" alt="" width="300" height="225" /></a></p>
<p><a class="lightbox" title="sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof07" href="http://www.kowalski.ms/wp-content/uploads/2010/07/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs-userprof07.png"></a>Ensure that these attributes are the correct entries for the 1 to 1 relationship between your LOB system and your MOSS profile. BCS needs to know how to correlate these two fields together to supplement each user&#8217;s profile, hence the error.</p>
<p>Hope this helps quite a few of you out there as I know this was a major feature we had to get up and running for our global rollout.</p>
<p>Kristof Kowalski / kristof@kowalski.ms</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2010/07/20/sharepoint-server-2010-supplementing-user-profile-imports-using-bcs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SharePoint Server 2010 Enterprise Service Application Publishing and Consuming Farms</title>
		<link>http://www.kowalski.ms/2010/07/16/sharepoint-server-2010-enterprise-service-application-publishing-and-consuming-farms/</link>
		<comments>http://www.kowalski.ms/2010/07/16/sharepoint-server-2010-enterprise-service-application-publishing-and-consuming-farms/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 12:13:43 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=224</guid>
		<description><![CDATA[As I&#8217;ve been getting to grips with SharePoint Server 2010 I’m really starting to appreciate how modular and how WAN friendly the product is. Our organisation is a large multinational with major regional sites around the world, unfortunately not every regional site has SharePoint Administrators available for their disposal. With that in mind we wanted [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;ve been getting to grips with SharePoint Server 2010 I’m really starting to appreciate how modular and how WAN friendly the product is.</p>
<p>Our organisation is a large multinational with major regional sites around the world, unfortunately not every regional site has SharePoint Administrators available for their disposal.</p>
<p>With that in mind we wanted to cut down on the administrative overhead around the regions and also centralise most of the common Service Applications. In SharePoint server you can publish certain Service Applications across farms as outlined in the following TechNet article;</p>
<p>Share service applications across farms (SharePoint Server 2010)<br />
<a href="http://technet.microsoft.com/en-us/library/ff621100.aspx">http://technet.microsoft.com/en-us/library/ff621100.aspx</a></p>
<p>For now we are very much interested in publishing the User Profile and Search Service Applications. I’ll delve further into the others in later posts. Since we’re embarking on a worldwide My Sites launch, we wanted to centralise the User Profile Service Application on our Enterprise Service Applications Farm and have it consumed by our regional Collaborative farms. We wanted a simple way of allowing the primacy of user profile data without the need of replicating this data by using tools such as the User Profile Replication Engine (UPRE).</p>
<p>On top of this we wanted to centralise our Search Service Application to allow a greater level of relevancy from our search results. One caveat is that the Crawl Components would have to reside on our Enterprise Farm and then crawl all the regional farms, we took this decisions as relevancy takes place this central farm. If we opted for the whole Federation scenario we’d have a disjoined solution where each farm calculates its own relevancy and returns the results back to the end user without taking into effect the results of all the other farms. After all in the search world, relevancy is king.</p>
<p>I’ve been battling away at the steps that Microsoft provided and from what I can see it partially gets you there, so I’ll try and fill in the blanks for everyone. There are several steps you need to take, so grab yourself a strong caffeinated drink and let’s crack on.</p>
<p>Firstly we need to establish a trust between our Publishing (Enterprise) Farm and Consuming (Collaboration) farm. Lets go ahead and exchange trusts certificates between the farms;</p>
<p>- To export the root certificate from the consuming farm<br />
- $rootCert = (Get-SPCertificateAuthority).RootCertificate<br />
- $rootCert.Export(&#8220;Cert&#8221;) | Set-Content C:\ConsumingFarmRoot.cer -Encoding byte</p>
<p>- To export the STS certificate from the consuming farm<br />
- $stsCert = (Get-SPSecurityTokenServiceConfig).LocalLoginProvider.SigningCertificate<br />
- $stsCert.Export(&#8220;Cert&#8221;) | Set-Content C:\ConsumingFarmSTS.cer -Encoding byte</p>
<p>- To export the root certificate from the publishing farm<br />
- $rootCert = (Get-SPCertificateAuthority).RootCertificate<br />
- $rootCert.Export(&#8220;Cert&#8221;) | Set-Content C:\PublishingFarmRoot.cer -Encoding byte</p>
<p>- Copy all certificates to publishing and consuming farm</p>
<p>- To import the root certificate and create a trusted root authority on the consuming farm<br />
- $trustCert = Get-PfxCertificate C:\PublishingFarmRoot.cer<br />
- New-SPTrustedRootAuthority EnterprisePublishingFarm -Certificate $trustCert</p>
<p>- To import the root certificate and create a trusted root authority on the publishing farm<br />
- $trustCert = Get-PfxCertificate C:\ConsumingFarmRoot.cer<br />
- New-SPTrustedRootAuthority EUConsumingFarm -Certificate $trustCert</p>
<p>- To import the STS certificate and create a trusted service token issuer on the publishing farm<br />
- $stsCert = Get-PfxCertificate c:\ConsumingFarmSTS.cer<br />
- New-SPTrustedServiceTokenIssuer EUConsumingFarm -Certificate $stsCert</p>
<p>On the Publishing farm go the Central Administration &gt; Manage Service Applications</p>
<p>-          For each Service Application you want to publish, select the service application and click Publish</p>
<p>-          In our case we select the User Profile Service Application and Search Service Application</p>
<p>-          Select your connection type. Since I want to user encsyrpted communication I select https.</p>
<p>-         Select Publish this Service Application to other farms check box</p>
<p>-          Now the important part, write down the Service Application Published URL. Not down the urn:&#8230;.</p>
<p>-          You can place a Description or Information URL. We stick in details of who published it, when and who to contact in case of issues.</p>
<p>On the consuming farm, set the permission to the appropriate service applications.</p>
<p>- To set permission to the Application Discovery and Load Balancing Service Application for a consuming farm<br />
- Get-SPFarm | Select Id<br />
- Write down the Farm Id for later use, in my example the Consuming Farm Id is 66cc8542-a854-4155-8557-27e47ef363e4.</p>
<p>- To set permission to the Application Discovery and Load Balancing Service Application for a publishing farm</p>
<p>- $security=Get-SPTopologyServiceApplication | Get-SPServiceApplicationSecurity<br />
- $claimprovider=(Get-SPClaimProvider System).ClaimProvider<br />
- $principal=New-SPClaimsPrincipal -ClaimType &#8220;http://schemas.microsoft.com/sharepoint/2009/08/claims/farmid&#8221; -ClaimProvider $claimprovider -ClaimValue 66cc8542-a854-4155-8557-27e47ef363e4<br />
- Grant-SPObjectSecurity -Identity $security -Principal $principal -Rights &#8220;Full Control&#8221;<br />
- Get-SPTopologyServiceApplication | Set-SPServiceApplicationSecurity -ObjectSecurity $security<br />
- Go to Permissions of Published Search SAs and search for 66cc8542-a854-4155-8557-27e47ef363e4, add Full Control<br />
- Check Permissions of Publishing Farm Application Discovery Load Balancer Service Application to ensure the claim provider of the Remote Farm is set</p>
<p>On the consuming farm, connect to the remote service application, go to Central Administration &gt; Manage Service Applications</p>
<p>-          For each Service Application you want to connect, select the service application and click Connect</p>
<p>-          In our case we select the User Profile Service Application Proxy and Search Service Proxy</p>
<p>-          Paste in the Published URL of the Service Application you want consume</p>
<p>-          Select the Service Application and Click OK.</p>
<p>-          Double check in Service Applications that you have each of the Connected to:&#8230;  entries listed.</p>
<p>All that is left to do now is test. Create a simple Enterprise Search Centre site and perform a search. Assuming all the steps have been followed correctly we should receive our search results and you will also have a richly populated People Picker with the Enterprise Farms profile properties.</p>
<p>Cheers,</p>
<p>Kristof Kowalski // kristof@kowalski.ms</p>
<p><strong>UPDATE 1:</strong> If you get any of the following errors in the ULS logs make sure you re-connect your Service Applications to the Publishing farm again and ensure that you have the correct Claim added to the Application Discovery and Load Balancing Service Application as well as the Search Service Application.</p>
<p>SearchServiceApplicationProxy::GetLocationConfigurations&#8211;Error occured: System.ServiceModel.Security.SecurityAccessDeniedException: Access is denied.    Server stack trace:      at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)     at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc&amp; rpc)     at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)     at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)     at System.ServiceModel.Channel&#8230;</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2010/07/16/sharepoint-server-2010-enterprise-service-application-publishing-and-consuming-farms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint Server 2010 Phonetic and Nickname Search</title>
		<link>http://www.kowalski.ms/2010/07/09/sharepoint-server-2010-phonetic-and-nickname-search/</link>
		<comments>http://www.kowalski.ms/2010/07/09/sharepoint-server-2010-phonetic-and-nickname-search/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 13:48:00 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=220</guid>
		<description><![CDATA[We&#8217;ve been working with Microsoft SharePoint Server (MSS) 2010 for a little while now and trying to plan our strategy going forward. One feature we&#8217;re interested in is utilising People Search as a corporate global address-book. One compelling reason for a multinational company like ours is to use the new phonetic search. An example a [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been working with Microsoft SharePoint Server (MSS) 2010 for a  little while now and trying to plan our strategy going forward. One  feature we&#8217;re interested in is utilising People Search as a corporate  global address-book.</p>
<p>One compelling reason for a multinational  company like ours is to use the new phonetic search. An example a  phonetical search is someone looking for Geoff Bridges.  A user can type  in either Geoff or Jeff Bridges and be presented with the correct user  details. Another example search is if you plug in Mike Jones, you will  return back either Mike Jones or a Michael Jones.</p>
<p>We&#8217;ve  noticed that the phonetic search hasn&#8217;t been working on our instances at  all so a bit of digging around and I&#8217;ve come with some interesting  facts.</p>
<p>All the phonetics and synonyms of each word are held in a text file, about 25MB in size in the following location;</p>
<p><strong>C:\Program Files\Microsoft Office Servers\14.0\Bin\languageresources.txt</strong></p>
<p>Upon  further investigation since all our clients have the English (United  Kingdom &#8211; LCID 2057) set in the regional settings and the the phonetics  dictionary has mostly English (United States &#8211; LCID 1033), we got no  phonetical search at all. A simple case of changing the browser&#8217;s  user agent language settings to en-US (1033) gives you a workaround but not  necessarily a total solution.</p>
<p>Hope this helps someone out as we  were scratching our head for a little while. I&#8217;ll update the site again  once I have a solution.</p>
<p>Kristof Kowalski // kristof@kowalski.ms</p>
<p><strong>UPDATE 1:</strong> I&#8217;ve managed to find some more details about the Phonetic and Nickname Search issue. Here is what I have thus far.</p>
<ul>
<li>Phonetic      / fuzzy matching on names, i.e. searching for  “Peat” and getting      results for Pete  are done via  Speech Server in 2010 People      Search.</li>
<li>Different results for each different LCID      (locale/language ID ) at query time – this is to be expected for both the      above new features in People Search. Given that this behaviour is by      design.</li>
<li>Nickname      matches are done via  the MSSLanguageResources table of the Search      Service application database. This table is partitioned on LCID for      different languages. indicates nickname matches and it is a      separate  to phonetic matching.</li>
<li>If      you look into MSSLanguageResources table of Search Service application      database, you can see mappings for the nick-names.</li>
<li>What      happens in the scenario of searching with the locale as en-US is: we are      matching nickname results in en-US  - which mean with search term      Mike we return:</li>
</ul>
<p>Mike Scott (exact match )<br />
Michael Scott (nickname match) – As per the above said table, Pete is  a valid nickname match for peter in the EN US LCID [i.e. 1033]</p>
<ul>
<li>For      non English language LCIDs, the above said table <strong><span style="text-decoration: underline;">does not have      nickname entries</span></strong> by design for English names. In other words,      there is no nick-name assigned for the LCID 2057 [which is EN-GB].</li>
</ul>
<p>From all intensive purposes we should be able to add/remove nicknames via the New-spenterprisesearchlanguageresourcephrase cmdlet. In a simple test case we would be able to perform the following commands, my Search Application Id is df4fdf37-0fc3-45ab-b42f-64650e42d1a5;</p>
<pre class="c-sharp">New-spenterprisesearchlanguageresourcephrase –Name Michael -Language "en-GB" –Type "Nickname" –Mapping Mike -SearchApplication df4fdf37-0fc3-45ab-b42f-64650e42d1a5

New-spenterprisesearchlanguageresourcephrase –Name Mike -Language "en-GB" –Type "Nickname" –Mapping Michael -SearchApplication df4fdf37-0fc3-45ab-b42f-64650e42d1a5</pre>
<p>That’s using Mike and Michael as the test users. When I added them to the Search Service Application and then need invoke the “Prepare query suggestions” job, as it only runs once every 24 hours;</p>
<p>Start-SPTimerJob -Identity &#8220;Prepare query suggestions&#8221;</p>
<p>I still don’t get the nickname matching at all. I can see that the job runs successfully but we don’t get back any results. Strange. To ensure that the new nicknames are added to Search Service Applicaiton DB, I ran the following query;</p>
<p>SELECT * FROM dbo.MSSLanguageResources WHERE Locale like &#8217;2057&#8242;</p>
<p>Hmmm&#8230; All there. More investigation needed.</p>
<p><strong>UPDATE 2</strong>: Have logged a call with Microsoft UK Premier support and this is reproducible, so it looks like it could be a bug. More to come, stay tuned.</p>
<p><strong>UPDATE 3</strong>: With the help of Microsoft I&#8217;ve now been able to fix the issue. The crux of the problem is, when you install the pre-reuisites it installes the Microsoft Speech Platform Server Runtimes for en-US only. Since nicknames and phonetic search are done by the Speech server we were missing the language files for the localised searches to take place. So the fix is as follows;</p>
<ul>
<li>To install the desired runtimes, apart from en-US go to the following link;<br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E16641DB-B20C-4BB5-AB22-F382EB4F22F3&amp;amp;displaylang=en&amp;displaylang=en#filelist">http://www.microsoft.com/downloads/details.aspx?FamilyID=E16641DB-B20C-4BB5-AB22-F382EB4F22F3&amp;amp;displaylang=en&amp;displaylang=en#filelist</a></li>
<li>Download only the SR (Server Runtime) languages and not the TTS (Text to Speech) files.</li>
<li>Run the msi, it&#8217;ll finish the install without giving you a confirmation dialogue.</li>
<li>Run &#8220;net stop osearch14&#8243;</li>
<li>Run &#8220;net start osearch14&#8243;</li>
</ul>
<p>You&#8217;ll be ready to rock n&#8217; roll after this. From my above example, Mike and Micheal should work now based on the en-GB (2057 LCID). By adding the new language you will still manually have to manually add the nicknames using New-spenterprisesearchlanguageresourcephras, so rather then making up the nicknames on the fly I&#8217;ve gone ahead and converted the languageresources.txt to a CSV file and only kept the en-US (1033) nicknames. With this CSV file I can simply read the contents using the Import-CSV command. Here is the csv file as well as the PowerShell commands to import your nicknames for your particular language, remember to get your Search Application Id in my above example prior to running this command;</p>
<p>Download <a href="http://www.kowalski.ms/wp-content/uploads/2010/07/languageresources.zip">languageresources.zip</a>.<br />
<code>$names = Import-Csv d:\temp\languageresources.csv<br />
foreach ($line in $names) {<br />
New-spenterprisesearchlanguageresourcephrase –Name $($line.name) -Language "en-GB" –Type "Nickname" –Mapping $($line.nickname) -SearchApplication df4fdf37-0fc3-45ab-b42f-64650e42d1a5<br />
}</code></p>
<div>Then run;</div>
<p><code>Start-SPTimerJob -Identity "Prepare query suggestions"</code></p>
<div>Finally, check that the timer job has run successfully;</div>
<p><code>(Get-SPTimerJob -Identity "Prepare query suggestions").HistoryEntries | Format-Table -Property Status,StartTime,EndTime,ErrorMessage</code></p>
<div>Enjoy peeps, it&#8217;s been emoitional!</div>
<div>Kristof Kowalski / kristof@kowalski.ms</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2010/07/09/sharepoint-server-2010-phonetic-and-nickname-search/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Local Farm Is Not Accessible. Cmdlets With FeatureDependencyId Are Not Registered</title>
		<link>http://www.kowalski.ms/2010/05/13/the-local-farm-is-not-accessible-cmdlets-with-featuredependencyid-are-not-registered/</link>
		<comments>http://www.kowalski.ms/2010/05/13/the-local-farm-is-not-accessible-cmdlets-with-featuredependencyid-are-not-registered/#comments</comments>
		<pubDate>Thu, 13 May 2010 09:39:00 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=213</guid>
		<description><![CDATA[I&#8217;m in the process of finalising my unattended install script for SharePoint Server 2010 and during some of my initial playing around I came across this vague error; The Local Farm Is Not Accessible. Cmdlets With FeatureDependencyId Are Not Registered Being early in the morning and all, I was kind of spooked as the error [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m in the process of finalising my unattended install script for SharePoint Server 2010 and during some of my initial playing around I came across this vague error;</p>
<blockquote><p><strong>The Local Farm Is Not Accessible. Cmdlets With FeatureDependencyId Are Not Registered</strong></p></blockquote>
<p>Being early in the morning and all, I was kind of spooked as the error is not really that descriptive. Essentially what the error means is that you don&#8217;t have the necessary permissions to access the SharePoint configuration database.</p>
<p>In my case it was a stupid move on my part where <strong>UAC </strong>(User Account Control) was on and I didn&#8217;t run the SharePoint 2010 Management Shell as Administrator. Remember to elevate your privileges before running the shell!</p>
<p>For the people out there with genuine permisions issues on this error, <strong>Add-SPShellAdmin</strong> is your friend. Check out more information here;</p>
<blockquote><p><strong>Add-SPShellAdmin</strong><a href="http://technet.microsoft.com/en-us/library/ff607596(office.14).aspx"><strong></p>
<p>http://technet.microsoft.com/en-us/library/ff607596(office.14).aspx</strong></a></p></blockquote>
<p>Kushdie!</p>
<p>&#8211; Kristof Kowalski // kristof@kowalski.ms</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2010/05/13/the-local-farm-is-not-accessible-cmdlets-with-featuredependencyid-are-not-registered/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BlackBerry Enterprise Server Express 5.0 plus VeriSign Certificates plus Microsoft ISA Server 2006</title>
		<link>http://www.kowalski.ms/2010/05/05/blackberry-enterprise-server-express-5-0-plus-verisign-certificates-plus-microsoft-isa-server-2006/</link>
		<comments>http://www.kowalski.ms/2010/05/05/blackberry-enterprise-server-express-5-0-plus-verisign-certificates-plus-microsoft-isa-server-2006/#comments</comments>
		<pubDate>Wed, 05 May 2010 12:59:19 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[BlackBerry]]></category>
		<category><![CDATA[ISA]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=201</guid>
		<description><![CDATA[So I&#8217;ve been tasked to get the above baby up and running. We&#8217;re running a quick pilot to our users to see if the BlackBerry devices and services will be something of use to us. Currently on our internal Marketplace we already have Apple iPhones and Microsoft WinMo (Windows Mobile) devices available, so you might [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been tasked to get the above baby up and running. We&#8217;re running a quick pilot to our users to see if the BlackBerry devices and services will be something of use to us. Currently on our internal Marketplace we already have Apple iPhones and Microsoft WinMo (Windows Mobile) devices available, so you might as well go for the BlackBerry.</p>
<p>Now before I started on this journey I didn&#8217;t realise what a pullava it would be to install trusted public certificates on BlackBerry Enterprise Server (BES) Express 5.0. If anyone from Research in Motion (RIM) or O2 is reading, wake up to yourselves! It&#8217;s ridiculous that we have to go through these steps I&#8217;m about to outline. Also, if someone from a large Enterprise calls up the support line and states that you would like to replace the self signed certificate with a publicly trusted one and publish the BES WebDesktop via ISA, don&#8217;t reply back, what would you want to do that? Fail.</p>
<p>I&#8217;m writing this little blurb to save someone out the mental anguish and therapy bills I had to go through! <img src='http://www.kowalski.ms/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>So once you have your BES server up and running with the self signed certificate and ensured that your WebConsole and WebDesktop sites are working you&#8217;re good to go. A lot of these steps are a gathering of scattered resources, so I&#8217;ll provide links but everything should work step by step on this page. There are two directories you need to be aware of first of all, I&#8217;m running this on a x64 machine;</p>
<blockquote><p># Jave Runtime Environment Keytool Path<br />
<strong>&#8220;C:\Program Files (x86)\Java\jre1.6.0_15\bin\keytool.exe&#8221;</strong></p></blockquote>
<blockquote><p># BlackBerry Administration Service Keystore path<br />
<strong>&#8220;C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\bin\web.keystore&#8221;</strong></p></blockquote>
<p>Lets go ahead and check what is in the web.keystore first of all, this will check which certificates are in a Java keystore. Notice one alias called httpssl, this is the certificate we&#8217;ll need to change. The password of the keystore was generated when you first installed the product, so note it down as you will be asked to enter over and over again. There&#8217;s heaps of links on how to change this if you&#8217;ve forgotten it;</p>
<blockquote><p><strong>&#8220;C:\Program Files (x86)\Java\jre1.6.0_15\bin\keytool.exe&#8221; -list -v -keystore &#8220;C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\bin\web.keystore&#8221;</strong></p></blockquote>
<p>So lets go ahead and look at our httpssl certifcate to ensure it&#8217;s there. If it&#8217;s there, all good, else we&#8217;ll need to create another one later on;</p>
<blockquote><p><strong>&#8220;C:\Program Files (x86)\Java\jre1.6.0_15\bin\keytool.exe&#8221; -list -v -alias httpssl -keystore &#8220;C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\bin\web.keystore&#8221;</strong></p></blockquote>
<p>Now this is where it all starts to get a little &#8216;exciting&#8217;. You can delete the httpssl alias from the keystore and still have the WebDesktop and WebConsole sites accessible, just DON&#8217;T restart your server or the BlackBerry Administration Service (BAS) services! Word of warning, if you do, then your users won&#8217;t be able to access those sites. So let’s delete the httpssl alias as we&#8217;ll be creating a new one. If you perform a generate a new key and generate a new certificate request with the current certificate VeriSign will moan that you do not have all the Owner details entered correctly.</p>
<blockquote><p><strong>&#8220;C:\Program Files (x86)\Java\jre1.6.0_15\bin\keytool.exe&#8221; -delete -alias httpssl -keystore &#8220;C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\bin\web.keystore&#8221;</strong></p></blockquote>
<p>Let’s go ahead and generate the new key and certificate request for the httpssl alias. When generating your certificate request the Full Name is your intended URL you will be publishing to your users, which intern should be the same as the Administration Service &#8211; High Availability &#8211; Poll Name setting in the BlackBerry Server Configuration application;</p>
<blockquote><p><strong>&#8220;C:\Program Files (x86)\Java\jre1.6.0_15\bin\keytool.exe&#8221; -genkey -keyalg RSA -alias httpssl -keystore &#8220;C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\bin\web.keystore&#8221;</strong></p></blockquote>
<blockquote><p><strong>&#8220;C:\Program Files (x86)\Java\jre1.6.0_15\bin\keytool.exe&#8221; -certreq -alias httpssl -file certreq.csr -keystore &#8220;C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\bin\web.keystore&#8221;</strong></p></blockquote>
<p>This will not generate your certreq.csr file which you can upload to VeriSign. It might take a couple of days for your certificate to come through so you can go ahead and install the VeriSign Intermediate certificates to complete the certificate chain. Get your VeriSign Intermediate CA Certificates;</p>
<blockquote><p><a href="https://knowledge.verisign.co.uk/support/ssl-certificates-support/index?page=content&amp;id=AR657&amp;actp=LIST&amp;viewlocale=en_US"><strong>https://knowledge.verisign.co.uk/support/ssl-certificates-support/index?page=content&amp;id=AR657&amp;actp=LIST&amp;viewlocale=en_US</strong></a></p></blockquote>
<p>Once you have your certificates, import the public root or intermediate CA certificate into your Java keystore;</p>
<blockquote><p><strong>&#8220;C:\Program Files (x86)\Java\jre1.6.0_15\bin\keytool.exe&#8221; -import -trustcacerts -alias evprimary -file primary_EV_inter.cer -keystore &#8220;C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\bin\web.keystore&#8221;</strong></p></blockquote>
<blockquote><p><strong>&#8220;C:\Program Files (x86)\Java\jre1.6.0_15\bin\keytool.exe&#8221; -import -trustcacerts -alias evsecondary -file secondary_EV_inter.cer -keystore &#8220;C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\bin\web.keystore&#8221;</strong></p></blockquote>
<p>Hopefully by this time you will have received your signed certificate from VeriSign and you&#8217;re good to go for the last import. Import your signed certificate to your Java keystore;</p>
<blockquote><p><strong>&#8220;C:\Program Files (x86)\Java\jre1.6.0_15\bin\keytool.exe&#8221; -import -trustcacerts -alias httpssl -file blackberry.cer -keystore &#8220;C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\bin\web.keystore&#8221;</strong></p></blockquote>
<p>You are done. All that remains now is the big test of restarting the BAS services and ensuring it works. After speaking to RIM at great length, you will know if your certificates were successfully imported as when you restart your BAS services. An easy way of checking this is bring up Task Manager, watch the BAS-AS.exe*32 service, if it sites at 19MB then you have issues. Wait till the service consumes about 190MB as the RIM engineer put it and then try logging into your WebDesktop or WebConsole site.</p>
<p>With any luck you are done and you&#8217;ve removed any certificate warnings from your BES WebDesktop and WebConsole sites.</p>
<p>If you work for a large enterprise then you no doubt will want to publish the WebDesktop site to your users, so they can configure their BlackBerrys on the go. For this to work you need to export the certificate we imported, with its associated private key and install it on each ISA Array member. I&#8217;m not going to go through the publishing of the WebDesktop site as that is the easy bit, what&#8217;s annoying about this whole procedure is exporting the certificate again with its private key! Ahhhh! Hair pulling time again.</p>
<p>So without further ado here is the procedure to create your certificate&#8217;s pfx file so you can then go ahead install it on your Windows machine private certificate store. For this to work you need to install OpenSSL for Windows which can be downloaded from;</p>
<blockquote><p><a href="http://www.openssl.org"><strong>http://www.openssl.org</strong></a></p></blockquote>
<p>Once you have OpenSSL up and running you need to go ahead and download jks2pfx.zip from;</p>
<blockquote><p><a href="http://www.myssl.cn/download/jks2pfx.zip"><strong>http://www.myssl.cn/download/jks2pfx.zip</strong></a></p></blockquote>
<p>Extract the contents to a folder and then run the JKS2PFX.bat file with your particular details. If all goes well, it will ask your enter a password and this will be the password you need to enter importing the pfx file into your ISA Array member&#8217;s certificate store.</p>
<p>Hopefully this little guide will save your sanity as it was driving me around the bend.</p>
<p>PS. If you copy and paste the commands you&#8217;ll need to change the &#8220;quote&#8221; marks to the generic command line ones. You&#8217;ve been warned. <img src='http://www.kowalski.ms/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Kristof Kowalski &#8211; <a href="mailto:kristof@kowalski.ms">kristof@kowalski.ms</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2010/05/05/blackberry-enterprise-server-express-5-0-plus-verisign-certificates-plus-microsoft-isa-server-2006/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cannot sign in because your computer clock is not set correctly or your account is invalid. (Error code: 0-1-492)</title>
		<link>http://www.kowalski.ms/2010/04/26/cannot-sign-in-because-your-computer-clock-is-not-set-correctly-or-your-account-is-invalid-error-code-0-1-492/</link>
		<comments>http://www.kowalski.ms/2010/04/26/cannot-sign-in-because-your-computer-clock-is-not-set-correctly-or-your-account-is-invalid-error-code-0-1-492/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 14:30:35 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[OCS]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=196</guid>
		<description><![CDATA[Back again after bit of a long hiatus. We&#8217;re in the midst of finally upgrading our LCS 2005 SP1 infrastructure to Office Communications Server 2007 R2. Yeppp&#8230; tell me about it. All good things come to those who wait right? Anyway, in my test lab I&#8217;ve been getting the following error when access Communicator Web [...]]]></description>
			<content:encoded><![CDATA[<p>Back again after bit of a long hiatus. We&#8217;re in the midst of finally upgrading our LCS 2005 SP1 infrastructure to Office Communications Server 2007 R2. Yeppp&#8230; tell me about it. All good things come to those who wait right?</p>
<p>Anyway, in my test lab I&#8217;ve been getting the following error when access Communicator Web Access (CWA) from a remote machine;</p>
<blockquote><p><strong>Cannot sign in because your computer clock is not set correctly or your account is invalid. (Error code: 0-1-492)</strong></p></blockquote>
<p>Now Microsoft has a KB article about this error;</p>
<blockquote><p><a href="http://support.microsoft.com/kb/968978">http://support.microsoft.com/kb/968978</a></p></blockquote>
<p>.. but from what I notice a lot people out there don&#8217;t know how to apply Service Principal Names (SPNs) correctly. So to resolve this issue, add a Kerberos SPN to the CWAService account that matches the CWA Web site alias, such as https://im.contoso.com.</p>
<p>To perform the task you must have membership in Domain Admins, Enterprise Admins, or you must have been delegated the appropriate authority;</p>
<blockquote><p><strong>setspn -A HOST/im.contoso.com CONTOSO\CWAService</strong></p></blockquote>
<p>Enjoy.</p>
<p>Kristof Kowalski</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2010/04/26/cannot-sign-in-because-your-computer-clock-is-not-set-correctly-or-your-account-is-invalid-error-code-0-1-492/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LookSee 2.6 Out&#8230; and final for now&#8230;</title>
		<link>http://www.kowalski.ms/2009/12/17/looksee-2-6-out-and-final-for-now/</link>
		<comments>http://www.kowalski.ms/2009/12/17/looksee-2-6-out-and-final-for-now/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 13:25:50 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[LookSee]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=194</guid>
		<description><![CDATA[Hi All, LookSee 2.6 came out at the end of November and for the foreseeable future this will be final release. The project will be on hold indefinitely, a bit like Tiger Woods&#8217; golf career!    .. I need to focus all my time and energy on the new Microsoft SharePoint Portal Server 2010 release [...]]]></description>
			<content:encoded><![CDATA[<p>Hi All,</p>
<p>LookSee 2.6 came out at the end of November and for the foreseeable future this will be final release.</p>
<p>The project will be on hold indefinitely, a bit like Tiger Woods&#8217; golf career! <img src='http://www.kowalski.ms/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />    .. I need to focus all my time and energy on the new Microsoft SharePoint Portal Server 2010 release and get to grips with this. Along with the major feature upgrades one would expect, I&#8217;ll be expanding my horizons into the .NET world a little bit more and getting to grips with the new SDK.</p>
<p>So for now, it&#8217;s been fun, but not necessarily the end of the iPhone development life.</p>
<p>Kristof Kowalski | kristof@kowalski.ms</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2009/12/17/looksee-2-6-out-and-final-for-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LookSee 2.1 is out in the App Store</title>
		<link>http://www.kowalski.ms/2009/10/19/looksee-2-1-is-out-in-the-app-store/</link>
		<comments>http://www.kowalski.ms/2009/10/19/looksee-2-1-is-out-in-the-app-store/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 23:11:31 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[LookSee]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=191</guid>
		<description><![CDATA[Yay! This update was relatively quick, for Apple&#8217;s standards. Just under two weeks from upload to approval, so looks like things are improving. It&#8217;s no where near the one week approval it used to be back in the day, but at least it&#8217;s not the three months I waited before. This 2.1 release addresses the [...]]]></description>
			<content:encoded><![CDATA[<p>Yay!</p>
<p>This update was relatively quick, for Apple&#8217;s standards. Just under two weeks from upload to approval, so looks like things are improving. It&#8217;s no where near the one week approval it used to be back in the day, but at least it&#8217;s not the three months I waited before.</p>
<p>This 2.1 release addresses the page jumping issue when zooming in/out of a PDF file and also a small crash when you cancelled the Feedback email.</p>
<p>There will b a 2.5 release out shortly and then it&#8217;s onto the big mumma, version 3.0.</p>
<p>Enjoy.</p>
<p>Kristof Kowalski | kristof@kowalski.ms</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2009/10/19/looksee-2-1-is-out-in-the-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LookSee 2.5 Is Done&#8230; Almost</title>
		<link>http://www.kowalski.ms/2009/10/13/looksee-2-5-is-done-almost/</link>
		<comments>http://www.kowalski.ms/2009/10/13/looksee-2-5-is-done-almost/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 19:03:14 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[LookSee]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=189</guid>
		<description><![CDATA[Hi All, It&#8217;s been a busy several days, especially so since version 2.0 was released. This was a massive step forward in functionality but with that there is sometimes the odd defect gets through. Once 2.0 was released and some feedback was received, I had the 2.1 update on there a couple of days afterwards. [...]]]></description>
			<content:encoded><![CDATA[<p>Hi All,</p>
<p>It&#8217;s been a busy several days, especially so since version 2.0 was released. This was a massive step forward in functionality but with that there is sometimes the odd defect gets through. Once 2.0 was released and some feedback was received, I had the 2.1 update on there a couple of days afterwards.</p>
<p>In that time version 2.5 has been coming along quite nicely. This is to tie up some lose ends and features that did not make it into the 2.0 time frame. Some more quality testing needs to be done on this release and it&#8217;s pretty much done, which I&#8217;m thinking the update will be up in a couple of days.</p>
<p>Version 3.0 has already started and I have to say this is the grand daddy of updates. This is finally where I want LookSee to be as a complete product. It&#8217;s quite an ambitions step as to the features that will come in but I&#8217;m sure it can be done. Can&#8217;t really mention anything yet but rest assured that it will firmly place the App up the top in terms of features.</p>
<p>Kristof Kowaklski | kristof@kowalski.ms</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2009/10/13/looksee-2-5-is-done-almost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LookSee 2.0 FUBAR Release</title>
		<link>http://www.kowalski.ms/2009/10/11/looksee-2-0-fubar-release/</link>
		<comments>http://www.kowalski.ms/2009/10/11/looksee-2-0-fubar-release/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 15:37:31 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=187</guid>
		<description><![CDATA[Hi All, Just wanted to say there was a slight quality control issue with the release of the 2.0 version. When you Zoom In and Out the page numbers will jump when viewing PDF files. How this escaped this eagle eye is beyond me, but there is a 2.1 release sitting in the App Store [...]]]></description>
			<content:encoded><![CDATA[<p>Hi All,</p>
<p>Just wanted to say there was a slight quality control issue with the release of the 2.0 version.</p>
<p>When you Zoom In and Out the page numbers will jump when viewing PDF files. How this escaped this eagle eye is beyond me, but there is a 2.1 release sitting in the App Store approval process already.</p>
<p>Apologies and rest assured the the offending party has been reprimanded! &#8230; Ah yeah that, would be me!?! &lt;spank&gt;</p>
<p>Kristof Kowalski | kristof@kowalski.ms</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2009/10/11/looksee-2-0-fubar-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
