<?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>Thu, 22 Mar 2012 15:08:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SharePoint 2010 Export Managed Metadata Terms from the Term Store</title>
		<link>http://www.kowalski.ms/2011/03/31/sharepoint-2010-export-managed-metadata-terms-from-the-term-store/</link>
		<comments>http://www.kowalski.ms/2011/03/31/sharepoint-2010-export-managed-metadata-terms-from-the-term-store/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 12:08:03 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=300</guid>
		<description><![CDATA[As part of our SharePoint 2010 deployment here, we make extensive use of the new Managed Metadata Service Application. To ensure we have concise and correct terms we have Term Store Managers that check on a weekly basis the validity of these terms. Some of the tests they check is duplicaiton or terms, correct spelling and [...]]]></description>
			<content:encoded><![CDATA[<p>As part of our SharePoint 2010 deployment here, we make extensive use of the new Managed Metadata Service Application. To ensure we have concise and correct terms we have Term Store Managers that check on a weekly basis the validity of these terms. Some of the tests they check is duplicaiton or terms, correct spelling and just general term lifecycle itself.</p>
<p>I&#8217;ve checked around and there are plenty of scripts around that instruct you to upload and create terms through PowerShell, but we needed a quick way to export our current terms and find out who created the term and when. So here&#8217;s a litte script you can schedule to run each week.</p>
<p>One thing to check for is the name of the Term Store you bind, which shoukd be listed via the Get-SPTaxonomySession cmdlet.</p>
<pre>
# Add SharePoint PowerShell Snapin
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

 # File and Directory Location
$dirLocation = "C:\Temp\Terms\"
$date = get-date -Format yyyyMMdd
New-Item ($dirLocation + $date) -Type Directory | Out-Null
$file = New-Object System.IO.StreamWriter(($dirLocation + $date) + "\Terms.csv")

# Connect to site with MMS service connection
#$taxonomySite = Get-SPSite "http://site"
$taxonomySite = Get-SPSite -Limit 1

# Connect to Term Store in the Managed Metadata Service Application
$taxonomySession = Get-SPTaxonomySession -site $taxonomySite
$taxonomyTermStore =  $taxonomySession.TermStores | Select Name
$termStore = $taxonomySession.TermStores[$taxonomyTermStore.Name]

# Ampersands are stored as full width ampersands within the MMS database.
[Byte[]] $amp = 0xEF,0xBC,0x86

# CSV headers
$file.Writeline("Term Name,Id,Owner,CreatedDate,LastModifiedDate")

# Term counter
$i = 0

foreach ($group in $termStore.Groups) {

	foreach ($termSet in $group.TermSets) {

		foreach ($term in $termSet.GetAllTerms()) {
			[Byte[]] $amp = 0xEF,0xBC,0x86;
			$file.Writeline("""" + $term.Name.Replace([System.Text.Encoding]::UTF8.GetString($amp), "&#038;") + """" + "," + $term.Id + "," + $term.Owner + "," + $term.CreatedDate + "," + $term.LastModifiedDate);
			$i++
			Write-Host -ForegroundColor Cyan  "# Exporting TermSet: " -NoNewline
			Write-Host -ForegroundColor White $termSet.Name -NoNewline
			Write-Host -ForegroundColor Cyan  " Term: " -NoNewline
			Write-Host -ForegroundColor White $term.Name -NoNewline
			Write-Host -ForegroundColor Green " - Done"
			}
		}
	}
$file.Flush()
$file.Close()

Write-Host
Write-Host -ForegroundColor Cyan  "# Exported " -NoNewline
Write-Host -ForegroundColor Green  $i -NoNewline
Write-Host -ForegroundColor Cyan  " terms"
</pre>
<p>With the above script that will export all your Terms with the Term Name, Id, Term Owner, Creation Date and Last Modificaiton Date. Our Term Store Managers like to review the terms on a weekly basis so all that needs to be run later is the following couple of lines per each Term Set;</p>
<pre>
# If you want see what terms have changed since last export, ie 7 days
$dateToCompare = (Get-date).AddDays(-7)
Import-Csv '.\Terms.csv' | Where-Object {$_.LastModifiedDate -gt $dateToCompare} | Sort-Object {$_.LastModifiedDate} -Descending
</pre>
<p>I&#8217;ll alter the above script later to iterate through all the Term Set csv files to then export the changes in a further update. For now, enjoy.</p>
<p>Cheers,</p>
<p>Kristof Kowalski | kristof@kowalski.ms</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kowalski.ms%2F2011%2F03%2F31%2Fsharepoint-2010-export-managed-metadata-terms-from-the-term-store%2F&amp;title=SharePoint%202010%20Export%20Managed%20Metadata%20Terms%20from%20the%20Term%20Store" id="wpa2a_2">Share</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2011/03/31/sharepoint-2010-export-managed-metadata-terms-from-the-term-store/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hyper-V Server 2008 R2 SP1 Beta to SP1 RC Upgrade</title>
		<link>http://www.kowalski.ms/2010/11/19/hyper-v-server-2008-r2-sp1-beta-to-sp1-rc-upgrade/</link>
		<comments>http://www.kowalski.ms/2010/11/19/hyper-v-server-2008-r2-sp1-beta-to-sp1-rc-upgrade/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 15:03:40 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[Hyper-V]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=297</guid>
		<description><![CDATA[I run Microsoft Hyper-V Server 2008 R2 at home on a Dell PowerEdge server to provide all the good stuff like sharing files, remote access, web services and just general infrastructure goodies that come with all the Windows Server family. When I saw the ability to further consolidate my estate at home using new Dynamic Memory [...]]]></description>
			<content:encoded><![CDATA[<p>I run Microsoft Hyper-V Server 2008 R2 at home on a Dell PowerEdge server to provide all the good stuff like sharing files, remote access, web services and just general infrastructure goodies that come with all the Windows Server family.</p>
<p>When I saw the ability to further consolidate my estate at home using new Dynamic Memory feature that came with Service Pack 1 Beta I jumped at the opportunity. Now that the RC build is available it&#8217;s time to perform the upgrade. You&#8217;d think having a home setup would be easy, but it&#8217;s almost a small enterprise in here and I had to ensure it was done first time and correctly.</p>
<p>I was looking around for some details of other people upgrading they Hyper-V servers from SP1 Beta to RC and didnt really come across any information so here are something to keep in mind.</p>
<p>Firstly, if you&#8217;ve enabled Dynamic Memory in the beta build using the beta Integration Services then follow these steps as Virtual PC Guy has outlined;</p>
<p><a href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2010/10/27/tips-for-upgrading-from-sp1-beta-to-sp1-release-candidate.aspx">http://blogs.msdn.com/b/virtual_pc_guy/archive/2010/10/27/tips-for-upgrading-from-sp1-beta-to-sp1-release-candidate.aspx</a></p>
<p>Now that&#8217;s been done you need to remove SP1 Beta from Hyper-V server. Since there is no appwiz.cpl (Programs and Features) like there is in the full version you&#8217;ll need to use commandline. Here&#8217;s a simple command line solution for you;</p>
<p><strong>wusa.exe /uninstall /kb:976932</strong></p>
<p>Takes a while and reboots several times, so dont be alarmed. Once that is done you&#8217;re ready to install SP1. An hour later or so and you are ready to start updating your guests. Now, depending on your flavour of guest there are solutions to enable Dynamic Memory, as follows;</p>
<p><strong>Windows Server 2003 / Windows Server 2003 R2</strong></p>
<div id="_mcePaste">
<ul>
<li>All you need to do for these operating systems is to update the integration services.</li>
</ul>
</div>
<div id="_mcePaste"><strong>Windows Server 2008</strong></div>
<div id="_mcePaste">
<ul>
<li>Here you need to first have service pack 2 installed.  Then you need to install this hotfix: <a title="http://support.microsoft.com/kb/2230887" href="http://support.microsoft.com/kb/2230887" target="_blank">http://support.microsoft.com/kb/2230887</a> inside the virtual machine.  Finally you will need to update the integration services.</li>
</ul>
</div>
<div id="_mcePaste"><strong>Windows Server 2008 R2</strong></div>
<div id="_mcePaste">Instead of updating the integration services – you need to install the release candidate of service pack 1 inside the virtual machine.</div>
<p>Hope this helps some of you poor sods out!</p>
<p><strong>Kristof Kowalski</strong><br />
/ e kristof@kowalski.ms / t @kristofkowalski / w kowalski.ms</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kowalski.ms%2F2010%2F11%2F19%2Fhyper-v-server-2008-r2-sp1-beta-to-sp1-rc-upgrade%2F&amp;title=Hyper-V%20Server%202008%20R2%20SP1%20Beta%20to%20SP1%20RC%20Upgrade" id="wpa2a_4">Share</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2010/11/19/hyper-v-server-2008-r2-sp1-beta-to-sp1-rc-upgrade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trials and Tribulations of the SharePoint Server 2010 User Profile Service Application</title>
		<link>http://www.kowalski.ms/2010/09/24/trials-and-tribulations-of-the-sharepoint-server-2010-user-profile-service-application/</link>
		<comments>http://www.kowalski.ms/2010/09/24/trials-and-tribulations-of-the-sharepoint-server-2010-user-profile-service-application/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 10:01:04 +0000</pubDate>
		<dc:creator>Kristof</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.kowalski.ms/?p=291</guid>
		<description><![CDATA[For us, identity is such a big piece of work so we wanted to centralise the whole import and transform process with a publishing and consuming farm topology. We import users from Active Directory here and also supplement the profiles with additional data from third party databases and LOB systems such as Oracle databases, JD [...]]]></description>
			<content:encoded><![CDATA[<p>For us, identity is such a big piece of work so we wanted to centralise the whole import and transform process with a publishing and consuming farm topology. We import users from Active Directory here and also supplement the profiles with additional data from third party databases and LOB systems such as Oracle databases, JD Edwards and other custom identity solutions.</p>
<p>Sure there are other methods of achieving this, but we didn’t want to litter our other farms with the User Profile Service Application and then use the User Profile Replication Engine (<a href="http://technet.microsoft.com/en-us/library/cc663011.aspx" target="_blank">http://technet.microsoft.com/en-us/library/cc663011.aspx</a>) which comes with the SharePoint 2010 Administration Toolkit (<a href="http://technet.microsoft.com/en-us/library/cc508849.aspx" target="_blank">http://technet.microsoft.com/en-us/library/cc508849.aspx</a>). There’s extra storage to consider based on the service application per user profile and also the extra administrative overhead but you might still want to have a look into it. All I’m saying is, it wasn’t right for us.</p>
<p>I’ve been pulling my hair out for the last several days and thought I would share some of the knowledge to save people out from that same bizarre issues that I’ve come across. So here we go.</p>
<p>Scenario:</p>
<p>You have two SharePoint Server 2010 farms, one Enterprise (Publishing) and one Collaborative (Consuming) farm. On the Enterprise farm you have your User Profile Service Application that you are publishing to any consuming farms. Your end users are accessing sites on the consuming farm for their collaborative sites as well as their My Sites.</p>
<p><strong>Problems:</strong></p>
<div id="_mcePaste">Some of the problems that I encountered along were as follows, each one of these pretty much has an associated fix.</div>
<div id="_mcePaste">•	When the end user searches for any colleagues in the collaborative farm they only see data that has been presented in Active Directory without any supplemented details from the User Profile Application (UPA).</div>
<div id="_mcePaste" style="padding-left: 30px;">•	When you add  a user to your site you don’t received supplemented details such as About Me.</div>
<div id="_mcePaste" style="padding-left: 30px;">•	When you create a My Site on your collaborative farm you receive the following errors;</div>
<div id="_mcePaste" style="padding-left: 60px;">- <span style="color: #ff0000;">Could not load user profile.</span></div>
<div id="_mcePaste" style="padding-left: 60px;">- <span style="color: #ff0000;">There has been an error creating the personal site. Contact your site administrator for more information.</span></div>
<div id="_mcePaste" style="padding-left: 60px;">- <span style="color: #ff0000;">You do not have permissions to have lists and pages within My Site.</span></div>
<p><strong>Problem 1:</strong></p>
<div id="_mcePaste">•	When the end user searches for any colleagues in the collaborative farm they only see data that has been presented in Active Directory without any supplemented details from the User Profile Application (UPA).</div>
<div id="_mcePaste">•	When you add  a user to your site you don’t received supplemented details such as About Me.</div>
<p><strong>Solution:</strong></p>
<div id="_mcePaste">When you publish the UPA you need to ensure the each Web Application Pool ID of the consuming farms Web Apps is present. What that means is, each Web App that will need to access the UPA on the publishing farm, that App Pool ID needs to be present in the Publishing Permissions as Full Control. Now this is where I ran into issues, I also had to add these consuming App Pool IDs to UPA Administrators on the publishing farm.</div>
<div>Here is another gotcha, not sure if it’s just our environment or what but our consuming Pre Production and Production farms still did not fire off the Connection to: &#8230;&#8230;&#8230;.. User Profile to SharePoint Full Synchronization or Connection to: &#8230;&#8230;&#8230;.. User Profile to SharePoint Quick Synchronization timer jobs successfully. If you turn up ULS logging to Verbose look for an event <strong>omvh </strong>which should be the timer job kicking off the sync job and look for any exceptions that might appear. We didn’t see any of these timer jobs running so we had to manually kick them into life and it worked.</div>
<div>Just for the interested, if you don’t have your Application Pool IDs in both the UPA Administrators and Permissions you’ll be able to observe  the following behaviour. Prior to me adding the  IDs I was seeing an Access Denied in the Microsoft Service Trace Viewer (<a href="http://msdn.microsoft.com/en-us/library/ms732023.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/ms732023.aspx</a>) service tracer of the Profile Web Service.</div>
<p><strong>Basic Information</strong></p>
<div id="_mcePaste">Activity Name	Process action &#8216;http://Microsoft.Office.Server.UserProfiles/GetProfileProperties&#8217;.</div>
<div id="_mcePaste">Time	2010-09-23 01:09:36.3123</div>
<div id="_mcePaste">Level	Error</div>
<div id="_mcePaste">Source	System.ServiceModel</div>
<div id="_mcePaste">Process	w3wp</div>
<div id="_mcePaste">Thread	32</div>
<div id="_mcePaste">Computer	XXXXXXXX</div>
<div id="_mcePaste">Trace Identifier/Code	http://msdn.microsoft.com/en-GB/library/System.ServiceModel.Diagnostics.ThrowingException.aspx</div>
<div id="_mcePaste">Exception</div>
<div id="_mcePaste">System.ServiceModel.FaultException, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</div>
<p><strong>Message</strong></p>
<div id="_mcePaste">Access is denied.</div>
<div>To get your trace simply open up the web.config, make sure you back it up first, in C:\Program Files\Microsoft Office Servers\14.0\WebServices\Profile and go to &lt;system.diagnostics&gt;. You’ll notice that it’s commented out with the &lt;!&#8211; and&#8211;&gt; tags. Replace with;</div>
<pre>  &lt;system.diagnostics&gt;</pre>
<pre>      &lt;sources&gt;</pre>
<pre>            &lt;source name="System.ServiceModel"</pre>
<pre>                    switchValue="Information, ActivityTracing"</pre>
<pre>                    propagateActivity="true"&gt;</pre>
<pre>            &lt;listeners&gt;</pre>
<pre>               &lt;add name="traceListener"</pre>
<pre>                   type="System.Diagnostics.XmlWriterTraceListener"</pre>
<pre>                   initializeData= "c:\log\Traces.svclog" /&gt;</pre>
<pre>            &lt;/listeners&gt;</pre>
<pre>         &lt;/source&gt;</pre>
<pre>      &lt;/sources&gt;</pre>
<pre>   &lt;/system.diagnostics&gt;</pre>
<p>And remember to uncomment by removing your comment tags. Now you should be able to try rerunning the Profile Sync jobs or simple wait for them to fire off every 5 minutes for the Quick Sync or an hour for the Full Sync. There seems to be an oddity though, if you look at your Connection to: &#8230;&#8230;&#8230;.. User Profile to SharePoint Full Synchronization, it’s set to hourly with Starting every hour between 0 minutes and no later than 0 minutes! That should read 0 and 59 minutes, so if your Full Sync doesn’t run you know why.</p>
<div>You should be able to see all your content databases being updated in the ULS logs by the Profile Sync now, so if you do a refresh all additional profile properties will be updated.</div>
<p><strong>Problem 2:</strong></p>
<div id="_mcePaste">When creating a My Site on the consuming farm you get the following error;</div>
<div id="_mcePaste" style="padding-left: 30px;">o	<span style="color: #ff0000;">Could not load user profile.</span></div>
<p><strong>Solution:</strong></p>
<div id="_mcePaste">This one still baffles me as to why I received this. Even though I had a Full Import sorted and I could see the profile properties being updated on all my consuming farms Web Apps, I could still not create a My Site. I simply deleted the UPA connection on the consuming farm to the publishing farm, removed the UPA WITHOUT deleting the associated databases, so we could save some time without needing a full 5 hour import again! I created a new UPA, entered the same database names in, specified the server that will run the profile service, added my URL for the dummy mysite in the Enterprise (publishing) farm and away we went. I started the User Profile Synchronization Service on the UP server an waiting till it was started correctly, takes about 5 minutes. I republished and repermissioned the UPA with the above settings and simply connected it to the consuming farm.</div>
<p>To save time I fired off the Connection to: &#8230;&#8230;&#8230;.. User Profile to SharePoint Full Synchronization manually and ensured that it synchronised the profile properties to the consuming farm. Remember to change the time for this timer job as it seems to set it to 0 and 0.</p>
<p>This leads me on to the next problem, as they all seem to be related.</p>
<p><strong>Problem 3:</strong></p>
<div id="_mcePaste">When creating a My Site on the consuming farm you get the following error;</div>
<div id="_mcePaste">o	<span style="color: #ff0000;">You do not have permissions to have lists and pages within My Site.</span></div>
<p><strong>Solution:</strong></p>
<div id="_mcePaste">This takes me back to my days of Microsoft when we supported MOSS 2007 in the UK Premier team. Ahh the fantastic memories and some right mares too&#8230; <img src='http://www.kowalski.ms/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </div>
<div id="_mcePaste">What it simple means is that your AAM (alternate access mappings) are incorrect. What you need to do to is to add the publishing farm’s My Site AAM to the consuming farm’s AAM. So if your Default zone on your publishing My Site Web App has http://mysite.publishing.domain.com then you need to add this URL to say, the Intranet Zone of your consuming farm’s My Site Web app. So your consuming Web App AAMs would be Default http://mysite.consuming.domain.com and Intranet http://mysite.publishing.domain.com.</div>
<p>And&#8230; this takes me on to the next problem.</p>
<p><strong>Problem 4:</strong></p>
<div id="_mcePaste">When creating a My Site on the consuming farm you get the following error;</div>
<div id="_mcePaste"><span style="color: #ff0000;">o	There has been an error creating the personal site. Contact your site administrator for more information.</span></div>
<div><span style="color: #ff0000;"><br />
</span></div>
<div id="_mcePaste">This issue was around in MOSS, by the looks of things it’s still not fixed. If you turn up the ULS and check for the correlation ID of this error you’ll come across this error;</div>
<div id="_mcePaste">Unknown SPRequest error occurred. More information: 0&#215;80070005</div>
<p>It simply means, Access Denied. The workaround, I say workaround as it’s not an ideal solution is to add the consuming farms My Site App Pool ID into the consuming Farm Administrators group. Perform an iisreset and you’re good to go. Now I don’t exactly know why you needed to elevate the privileges for this particular action but it’s still the same problem as it was in MOSS 2007.</p>
<p>One last word of warning if you’re using SQL Aliasing with cliconfg. Make sure you add the publishing farm’s SQL alias to all your consuming farm’s as none of this will work and you’ll receive some most peculiar issues. You’ve been warned.</p>
<p>Hope this helps some of you guys and gals out there and gets that Project Manager of your back!</p>
<div id="_mcePaste">Kristof Kowalski // Kristof@kowalski.ms</div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kowalski.ms%2F2010%2F09%2F24%2Ftrials-and-tribulations-of-the-sharepoint-server-2010-user-profile-service-application%2F&amp;title=Trials%20and%20Tribulations%20of%20the%20SharePoint%20Server%202010%20User%20Profile%20Service%20Application" id="wpa2a_6">Share</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kowalski.ms/2010/09/24/trials-and-tribulations-of-the-sharepoint-server-2010-user-profile-service-application/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kowalski.ms%2F2010%2F07%2F20%2Fsharepoint-server-2010-supplementing-user-profile-imports-using-bcs%2F&amp;title=SharePoint%20Server%202010%20Supplementing%20User%20Profile%20Imports%20Using%20BCS" id="wpa2a_8">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>18</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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kowalski.ms%2F2010%2F07%2F16%2Fsharepoint-server-2010-enterprise-service-application-publishing-and-consuming-farms%2F&amp;title=SharePoint%20Server%202010%20Enterprise%20Service%20Application%20Publishing%20and%20Consuming%20Farms" id="wpa2a_10">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>5</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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kowalski.ms%2F2010%2F07%2F09%2Fsharepoint-server-2010-phonetic-and-nickname-search%2F&amp;title=SharePoint%20Server%202010%20Phonetic%20and%20Nickname%20Search" id="wpa2a_12">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>11</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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kowalski.ms%2F2010%2F05%2F13%2Fthe-local-farm-is-not-accessible-cmdlets-with-featuredependencyid-are-not-registered%2F&amp;title=The%20Local%20Farm%20Is%20Not%20Accessible.%20Cmdlets%20With%20FeatureDependencyId%20Are%20Not%20Registered" id="wpa2a_14">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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kowalski.ms%2F2010%2F05%2F05%2Fblackberry-enterprise-server-express-5-0-plus-verisign-certificates-plus-microsoft-isa-server-2006%2F&amp;title=BlackBerry%20Enterprise%20Server%20Express%205.0%20plus%20VeriSign%20Certificates%20plus%20Microsoft%20ISA%20Server%202006" id="wpa2a_16">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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kowalski.ms%2F2010%2F04%2F26%2Fcannot-sign-in-because-your-computer-clock-is-not-set-correctly-or-your-account-is-invalid-error-code-0-1-492%2F&amp;title=Cannot%20sign%20in%20because%20your%20computer%20clock%20is%20not%20set%20correctly%20or%20your%20account%20is%20invalid.%20%28Error%20code%3A%200-1-492%29" id="wpa2a_18">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>3</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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.kowalski.ms%2F2009%2F12%2F17%2Flooksee-2-6-out-and-final-for-now%2F&amp;title=LookSee%202.6%20Out%26%238230%3B%20and%20final%20for%20now%26%238230%3B" id="wpa2a_20">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>
	</channel>
</rss>

