<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.obilogic.co.uk/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Obilogic - SharePoint Community Area </title><link>http://community.obilogic.co.uk/blogs/</link><description>SharePoint related Blogs, Links and Free Downloads from Obilogic</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP3 (Build: 31118.962)</generator><item><title>Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search - Part 3</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2015/10/16/search-active-directory-objects-with-powershell-sql-bcs-and-sharepoint-search-part-3.aspx</link><pubDate>Fri, 16 Oct 2015 13:41:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:395</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;SharePoint provides import and search capabilities for User
Accounts and Security Groups stored in Active Directory (AD) via the use of
FIM, the User Profile Service, My-Sites and the SharePoint Search Service.&lt;/p&gt;

&lt;p&gt;The following article(s) detail how other Objects stored in
Active Directory (AD) can be made available in SharePoint Search Results via
the use of PowerShell, SQL, BCS and SharePoint Search Display Templates.&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;b&gt;Part 3:&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;



&lt;p&gt;Finally, we&amp;#39;re going to create a Content Source (pointing at
the BCS External Data Source created in &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2015/10/13/search-active-directory-objects-with-powershell-sql-bcs-and-sharepoint-search-part-2.aspx" title="Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search - Part 2"&gt;Step 2&lt;/a&gt;) and a Custom Result Page using
SharePoint Search.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Using the PowerShell below, a Content Source can be created
by executing the following command:&lt;/p&gt;

&lt;code&gt;.\CreateBCSSearchContentSource.ps1 -SearchApplicationName
&amp;quot;Search Service Application&amp;quot; -contentSourceName
&amp;quot;AD2SPDataADComputersViaBCS&amp;quot; -LOBSystemName &amp;quot;SQLSvrName-AD2SPData-Read&amp;quot;&lt;/code&gt;&lt;code&gt; -LOBInstanceName &amp;quot;SQLSvrName-AD2SPData-Read&amp;quot;&lt;/code&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchCreateBCSContentSource.PNG"&gt;&lt;/a&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchCreateBCSContentSource.PNG"&gt;&lt;/a&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchCreateBCSContentSource.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchCreateBCSContentSource.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(CreateBCSSearchContentSource.ps1)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchBCSContentSource.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchBCSContentSource.PNG" height="170" border="0" width="330" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;In addition to creating the Content Source the ‘CreateBCSSearchContentSource.ps1‘
script also runs a &amp;quot;Full Crawl&amp;quot;. &lt;br /&gt;
Assuming the &amp;quot;Full Crawl&amp;quot; completes successfully (which confirms &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2015/10/13/search-active-directory-objects-with-powershell-sql-bcs-and-sharepoint-search-part-1.aspx" title="Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search - Part 1"&gt;Step 1&lt;/a&gt; and
&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2015/10/13/search-active-directory-objects-with-powershell-sql-bcs-and-sharepoint-search-part-2.aspx" title="Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search - Part 1"&gt;Step 2&lt;/a&gt; were configured correctly), SharePoint automatically creates the relevant
&amp;quot;Crawled Properties&amp;quot; within the SharePoint Search Schema.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchCrawledProps.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchCrawledProps.PNG" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;However, before we can create the Custom Search Results Page
we also need to create the relevant &amp;quot;Managed Properties&amp;quot; and &amp;quot;Map them to the relevant
Crawled Property&amp;quot;.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Again, using the PowerShell below (along with the ‘ManagedSearchProperties.csv&amp;#39;
file provided), this can be achieved by executing the following command:&lt;/p&gt;

&lt;p&gt;.\CreateManagedSearchProps.ps1 -ManagedPropertiesCSVFileName
&amp;quot;ManagedSearchProperties.csv&amp;quot;&lt;/p&gt;
&lt;p&gt;
 
&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchCreateManagedProps.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchCreateManagedProps.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
(CreateManagedSearchProps.ps1)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchManagedProps.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchManagedProps.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;After the &amp;quot;Managed Properties&amp;quot; have been created successfully
&lt;b&gt;run another &amp;quot;Full Crawl&amp;quot;&lt;/b&gt; of the
Content Source (this ensures the new &amp;quot;Managed Properties&amp;quot; are added to/included
in the SharePoint Search results)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now we can move on to setting up the Search Results page.&lt;/p&gt;

&lt;p&gt;Open your &amp;quot;Enterprise Search Centre&amp;quot; site (or create one if
you haven&amp;#39;t already), navigate to the &amp;quot;Pages&amp;quot; document library and created a new
Search Results Page (for this example I have create a page called &amp;quot;ADComputers.aspx&amp;quot;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/ADComputers_SearchResultPage.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/ADComputers_SearchResultPage.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Then navigate to your &amp;quot;Search Settings&amp;quot; page (via &amp;quot;Site
Settings &amp;gt; Search Settings&amp;quot;)...&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchSettings1.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchSettings1.PNG" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;... and ‘Add a Link&amp;#39; to the newly created ‘AD Computers&amp;#39; Search
Results page.&lt;br /&gt; &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchSettings2.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchSettings2.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Next we&amp;#39;re going to upload (and publish) the ‘Custom Search Display
Templates&amp;#39; that we&amp;#39;re going to use on the ‘AD Computers&amp;#39; Search Results page.&lt;/p&gt;

&lt;p&gt;To do this, open the &amp;quot;Root Site&amp;quot; and navigate to:&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;u&gt;http://&amp;lt;youspwebapplicationurl&amp;gt;/_catalogs/masterpage/Forms/Display
Templates.aspx?RootFolder=/_catalogs/masterpage/Display Templates/Search&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;From the Ribbon click &amp;quot;Files &amp;gt; Upload Document&amp;quot; and
upload the &amp;quot;Item_ADComputer.html&amp;quot; and &amp;quot;Item_ADComputer_HoverPanel.html&amp;quot; files
provided and &amp;quot;Publish a Major Version&amp;quot; for each.&lt;/p&gt;

&lt;p&gt;(this process should automatically create &amp;quot;Item_ADComputer.js&amp;quot;
and &amp;quot;Item_ADComputer_HoverPanel.js&amp;quot; files)&lt;/p&gt;



&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/UploadDispTemplates.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/UploadDispTemplates.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Next return to the &amp;quot;ADComputers.aspx&amp;quot; Custom Search Results
page we created previously and select &amp;quot;Edit Page&amp;quot;...&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/EditPage.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/EditPage.png" border="0" width="120" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;... and edit the &amp;quot;Search Results Web Part&amp;quot; to display the &amp;quot;Web
Part Properties&amp;quot;.&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchResultsWPQuery-Props1.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchResultsWPQuery-Props1.PNG" border="0" width="200" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Click &amp;quot;Change Query&amp;quot; and set the &amp;quot;Query text&amp;quot; field to:&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;b&gt;{searchboxquery}*
ContentSource:&amp;lt;yourSearchContentSourceName&amp;gt;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchResultsWPQuery.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchResultsWPQuery.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;... and click &amp;quot;OK&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then expand the &amp;quot;&lt;i&gt;&lt;b&gt;Display Templates&lt;/b&gt;&lt;/i&gt;&amp;quot; section, click &amp;quot;&lt;i&gt;&lt;b&gt;Use a
single template to display items&lt;/b&gt;&lt;/i&gt;&amp;quot; and finally select &amp;quot;&lt;i&gt;&lt;b&gt;AD Computer Item&lt;/b&gt;&lt;/i&gt;&amp;quot; from
the drop down.&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchResultsWPQuery-Props2.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SearchResultsWPQuery-Props2.PNG" border="0" width="200" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Click to &amp;quot;Apply&amp;quot; and/or &amp;quot;OK&amp;quot; to save these changes to &amp;quot;Search
Results Web Part Properties&amp;quot;.&lt;/p&gt;

&lt;p&gt;Save and Publish the updated &amp;quot;ADComputers.aspx&amp;quot; Custom Search
Results page.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;When a search is then performed via the &amp;quot;ADComputers.aspx&amp;quot; Custom
Search Results page a list of matching Search Results are displayed with the
relevant the object metadata information retrieved from Active Directory.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/ADComputers_SearchResults.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/ADComputers_SearchResults.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Happy Coding…&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Please download attached zip for &amp;quot;full/complete .ps1&amp;quot; 
files - Examples provided 
above are simplified &lt;span style="font-size:11.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-GB;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;abbreviation&lt;/span&gt;&lt;/p&gt;
    

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/files/folders/sp2013/entry393.aspx" title="Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search"&gt;&lt;b&gt;&lt;img src="http://community.obilogic.co.uk/utility/filethumbnails/zip-Small.gif" style="width:16px;height:16px;" title="download" alt="download" height="16" width="16" /&gt;&amp;nbsp; SearchADPowerShellSQLSharePoint.zip&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=395" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Search/default.aspx">Search</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2013/default.aspx">SharePoint-2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2013/default.aspx">SP2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Display-Templates/default.aspx">Display-Templates</category></item><item><title>Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search - Part 2</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2015/10/13/search-active-directory-objects-with-powershell-sql-bcs-and-sharepoint-search-part-2.aspx</link><pubDate>Tue, 13 Oct 2015 15:57:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:392</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;SharePoint provides import and search capabilities for User
Accounts and Security Groups stored in Active Directory (AD) via the use of
FIM, the User Profile Service, My-Sites and the SharePoint Search Service.&lt;/p&gt;

&lt;p&gt;The following article(s) detail how other Objects stored in
Active Directory (AD) can be made available in SharePoint Search Results via
the use of PowerShell, SQL, BCS and SharePoint Search Display Templates.
&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;b&gt;Part 2:&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Next we’re going to create an External Content Type (ECT) using the Business Connectivity Service (BCS) available in SharePoint.&lt;br /&gt;&lt;br /&gt;Before we can do this, we first need to store some ‘Windows Credentials” in the SharePoint ‘Secure Store’, which will be used by the Business Connectivity Service to connect to the SQL Database previously created in ‘&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2015/10/13/search-active-directory-objects-with-powershell-sql-bcs-and-sharepoint-search-part-1.aspx" title="Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search - Part 1"&gt;&lt;b&gt;Part 1&lt;/b&gt;&lt;/a&gt;’.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Using the PowerShell below, this can be achieved by executing the following command:&lt;br /&gt;&lt;/p&gt;

&lt;code&gt;.\CreateSecureStoreTargetApp.ps1 -SiteUrl &amp;quot;http://&amp;lt;yourspwebappurl&amp;gt;&amp;quot; -SecureStoreTargetAppName &amp;quot;AD2SPDataCreds&amp;quot; -SecureStoreTargetAppDispName &amp;quot;AD2SPDataCreds&amp;quot; -SecureStoreTargetAppEmail &amp;quot;&amp;lt;youremail@domain.com&amp;gt;&amp;quot; -SecureStoreTargetAppAdmin &amp;quot;&amp;lt;yourdomain&amp;gt;\SP_Admin&amp;quot; -SecureStoreTargetAppGroup &amp;quot;&amp;lt;yourdomain&amp;gt;\Domain Users&amp;quot; -SecureStoreTargetApp_CredUserAccount &amp;quot;&amp;lt;yourdomain&amp;gt;\&lt;/code&gt;&lt;code&gt;&lt;code&gt;your&lt;/code&gt;SQL_Access_Account&amp;quot; -SecureStoreTargetApp_CredPassword &amp;quot;&amp;lt;yourSQL_Access_Account_Password&amp;gt;&amp;quot;&lt;/code&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/Create_SPSecureStore_TargetApp.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/Create_SPSecureStore_TargetApp.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;(CreateSecureStoreTargetApp.ps1) &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now we have credentials stored, we can create the External Content Type for the ‘ADComputers’ SQL table.&lt;/p&gt;

&lt;p&gt;External Content Types can be created using SharePoint Designer…&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SPD_Create_ECT.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SPD_Create_ECT.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SPD_Create_ECT2.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SPD_Create_ECT2.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;However, for this particular example (and in true Blue Peter style) we’re going to ‘Import’ a BCS Model  file (.bdcm) which I created earlier and exported from SharePoint Designer...&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SPD_Export_BDCModel.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SPD_Export_BDCModel.PNG" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;To do this we’re going to first use PowerShell to ‘Update the BCS Model’ with the relevant SQL Server, SQL Database, SQL Table and Secure Store Target App information.&lt;/p&gt;&lt;p&gt;Before finally Importing the ‘BCS Model’ into the Business Connectivity Service and setting the permissions accordingly&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Using the PowerShell below (along with the ‘ADComputer-template.bdcm’ file provided), this can be achieved by executing the following command:&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;.\UpdateImport_BCSModel.ps1 -SiteUrl &amp;quot;http://&amp;lt;yourspwebappurl&amp;gt;&amp;quot; -BCSModelTemplateFileName &amp;quot;ADComputer-template.bdcm&amp;quot; -BCSModelOutputFileName &amp;quot;ADComputers.bdcm&amp;quot; -DbServerName &amp;quot;&amp;lt;yourSQLServerName&amp;gt;&amp;quot; -DbName &amp;quot;&amp;lt;yourAD2SPDatabaseName&amp;gt;&amp;quot; -TableName &amp;quot;ADComputers&amp;quot; -SecureStoreAppID &amp;quot;&amp;lt;yourAD2SPDataSecureStoreTargetAppName&amp;gt;&amp;quot; -BCSEntityAdmin &amp;quot;&amp;lt;yourDomain&amp;gt;\SP_Admin&amp;quot; -BCSEntityUsers &amp;quot;&amp;lt;yourDomain&amp;gt;\SP_Crawl_Account&amp;quot;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/BCS_UpdateImport.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/BCS_UpdateImport.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt; &lt;br /&gt;(UpdateImport-BCSModel.ps1)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Read &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2015/10/16/search-active-directory-objects-with-powershell-sql-bcs-and-sharepoint-search-part-3.aspx" title="Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search - Part 3"&gt;&lt;b&gt;Part 3&lt;/b&gt;&lt;/a&gt; ...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Please download attached zip for &amp;quot;full/complete .ps1&amp;quot; 
files - Examples provided 
above are simplified &lt;span style="font-size:11.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-GB;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;abbreviation&lt;/span&gt;&lt;/p&gt;
    

&lt;a href="http://community.obilogic.co.uk/files/folders/sp2013/entry393.aspx" title="Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search"&gt;&lt;b&gt;&lt;img src="http://community.obilogic.co.uk/utility/filethumbnails/zip-Small.gif" style="width:16px;height:16px;" title="download" alt="download" height="16" width="16" /&gt;SearchADPowerShellSQLSharePoint.zip&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=392" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2013/default.aspx">SharePoint-2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2013/default.aspx">SP2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search - Part 1</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2015/10/13/search-active-directory-objects-with-powershell-sql-bcs-and-sharepoint-search-part-1.aspx</link><pubDate>Tue, 13 Oct 2015 15:46:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:391</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;SharePoint provides import and search capabilities for User
Accounts and Security Groups stored in Active Directory (AD) via the use of
FIM, the User Profile Service, My-Sites and the SharePoint Search Service.&lt;/p&gt;

&lt;p&gt;The following article(s) detail how other Objects stored in
Active Directory (AD) can be made available in SharePoint Search Results via
the use of PowerShell, SQL, BCS and SharePoint Search Display Templates.&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Part 1:&lt;/b&gt;&lt;/u&gt; &lt;/p&gt;

&lt;p&gt;To begin with we&amp;#39;re going to create a SQL database using
PowerShell.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/CreateSQLDB_POSH.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/CreateSQLDB_POSH.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Next we’re going to create a simple SQL Table that will hold the object metadata retrieved from AD.&lt;/p&gt;&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/CreateSQLDBTable_POSH.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/CreateSQLDBTable_POSH.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Finally, we’re going to populate the SQL Table with information retrieved from AD using the ‘Get-ADComputer’ PowerShell CmdLet&lt;br /&gt;&lt;br /&gt;(For this example we’re getting a list of Computers and their OS details)&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/PopulateSQLDBTable_POSH.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/PopulateSQLDBTable_POSH.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/PopulateSQLDBTable2_POSH.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/PopulateSQLDBTable2_POSH.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/PopulateSQLDBTable2_POSH.PNG"&gt;&lt;/a&gt;Resulting in a populated SQL Table.&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SQLDBTableData_POSH.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SearchADObjects/SQLDBTableData_POSH.PNG" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Read &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2015/10/13/search-active-directory-objects-with-powershell-sql-bcs-and-sharepoint-search-part-2.aspx" title="Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search - Part 2"&gt;&lt;b&gt;Part 2&lt;/b&gt;&lt;/a&gt; ...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Please download attached zip for &amp;quot;full/complete .ps1&amp;quot; 
files - Examples provided 
above are simplified &lt;span style="font-size:11.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-GB;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;abbreviation&lt;/span&gt;&lt;/p&gt;
    

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/files/folders/sp2013/entry393.aspx" title="Search Active Directory Objects with PowerShell, SQL, BCS and SharePoint Search"&gt;&lt;b&gt;&lt;img src="http://community.obilogic.co.uk/utility/filethumbnails/zip-Small.gif" style="width:16px;height:16px;" title="download" alt="download" height="16" width="16" /&gt;&amp;nbsp; SearchADPowerShellSQLSharePoint.zip&lt;/b&gt;&lt;/a&gt;&lt;a href="http://community.obilogic.co.uk/files/folders/sp2013/entry380.aspx" title="UserProfileServiceApp_PowerShell_ExportImportADProperties.zip" target="_blank"&gt;&lt;b&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=391" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2013/default.aspx">SharePoint-2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2013/default.aspx">SP2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SQL/default.aspx">SQL</category></item><item><title>SharePoint 2013 - Migrate/Replicate User Profile Service Application Configuration between Farms using PowerShell - Part 3</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2015/05/13/sharepoint-2013-migrate-replicate-user-profile-service-application-configuration-between-farms-using-powershell-part-3.aspx</link><pubDate>Wed, 13 May 2015 22:40:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:381</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Following my previous &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/UPS/default.aspx"&gt;posts&lt;/a&gt;
on this subject, I thought I should add the following ‘Part 3&amp;#39; as a brief wrap
up.&lt;/p&gt;

&lt;p&gt;Assuming you (now) have a working User Profile Service
Application on the existing farm and on the alternative/target farm, with matching
&amp;quot;AD Sync Connections&amp;quot; and &amp;quot;User Profile Properties&amp;quot;, there are a few other steps that you may need to take into consideration.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;1. Permissions&lt;/h4&gt;
&lt;a href="http://blog.mastykarz.nl/about/" title="Waldek Mastykarz" target="_blank"&gt;Waldek Mastykarz&lt;/a&gt; has some great posts on this subject:&lt;br /&gt;
&lt;a href="http://blog.mastykarz.nl/granting-permissions-user-profile-service-application-powershell/" target="_blank"&gt;Granting
permissions to the User Profile Service Application using PowerShell&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blog.mastykarz.nl/granting-retrieve-people-data-search-crawlers-administration-permission-user-profile-service-application-powershell/" target="_blank"&gt;Granting
the &amp;quot;Retrieve People Data for Search Crawlers&amp;quot; administration permission on the
User Profile Service Application using PowerShell&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;2. Connection Filters&lt;/h4&gt;
There are a variety of links available on this subject&lt;br /&gt;
&lt;a href="https://technet.microsoft.com/en-gb/library/ff182925.aspx#connections" target="_blank"&gt;https://technet.microsoft.com/en-gb/library/ff182925.aspx#connections&lt;/a&gt;
&lt;a href="https://technet.microsoft.com/en-gb/library/hh227258.aspx" target="_blank"&gt;&lt;br /&gt;https://technet.microsoft.com/en-gb/library/hh227258.aspx&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://sharepointcherie.blogspot.co.uk/2013/06/sharepoint-2013-setting-up-user-profile.html" target="_blank"&gt;http://sharepointcherie.blogspot.co.uk/2013/06/sharepoint-2013-setting-up-user-profile.html&lt;/a&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
However, none appear to provide any details on if/how they can be created via
PowerShell, so as of this time of writing any &amp;#39;Connection Filter Creation&amp;#39; steps will have to remain a manual UI task.
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;3. Re-Order User Profile Properties&lt;/h4&gt;
Again, there a variety of good posts on this subject:&lt;br /&gt;
&lt;a href="https://radutut.wordpress.com/2013/05/12/change-order-of-user-profile-properties-in-sharepoint-with-powershell" title="Change order of user profile properties in SharePoint 2013 with Powershell" target="_blank"&gt;Change order of user profile properties in SharePoint 2013 with Powershell&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blogs.technet.com/b/sheyia/archive/2013/10/09/sharepoint-2013-another-way-to-change-order-for-user-profile-properties-via-powershell.aspx" title="SharePoint 2013: Another way to change order of user profile properties via powershell" target="_blank"&gt;SharePoint 2013: Another way to change order of user profile properties via powershell&lt;/a&gt;&lt;br /&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once these have been completed (and assuming the previous PowerShell &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2015/04/20/sharepoint-2013-migrate-replicate-user-profile-service-application-configuration-between-farms-using-powershell-part-1.aspx" title="SharePoint 2013 - Migrate/Replicate User Profile Service Application Configuration between Farms using PowerShell - Part 1"&gt;Steps 1&lt;/a&gt; &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2015/04/26/sharepoint-2013-migrate-replicate-user-profile-service-application-configuration-between-farms-using-powershell-part-2.aspx" title="SharePoint 2013 – Migrate/Replicate User Profile Service Application Configuration between Farms using PowerShell – Part 2"&gt;and 2&lt;/a&gt; were successful), you should now have a working duplicate of the User Profile Service Application on the alternative/target farm.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Happy Coding…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=381" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2013/default.aspx">SharePoint-2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2013/default.aspx">SP2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/User-Profile-Service/default.aspx">User-Profile-Service</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/UPS/default.aspx">UPS</category></item><item><title>SharePoint 2013 - Migrate/Replicate User Profile Service Application Configuration between Farms using PowerShell - Part 2</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2015/04/26/sharepoint-2013-migrate-replicate-user-profile-service-application-configuration-between-farms-using-powershell-part-2.aspx</link><pubDate>Sun, 26 Apr 2015 01:16:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:379</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Following my previous &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2015/04/20/sharepoint-2013-migrate-replicate-user-profile-service-application-configuration-between-farms-using-powershell-part-1.aspx" title="SharePoint 2013 - Migrate/Replicate User Profile Service Application Configuration between Farms using PowerShell - Part 1" target="_blank"&gt;Part
1&lt;/a&gt; post on this subject, the following ‘Part 2&amp;#39; shows how you can take the &amp;quot;User
Profile Property&amp;quot; settings of the existing UPSA and use them to create a matching/duplicate
set of &amp;quot;User Profile Properties&amp;quot; on a new UPSA on a different/alternative
SharePoint 2013 farm.&lt;/p&gt;

&lt;p&gt;Assuming you (still) have a working User Profile Service
Application (or UPSA) on an existing farm, with multiple Active Directory
(AD) Sync Connections, and have &amp;quot;successfully completed Part 1&amp;quot; so also have
&amp;quot;new matching Sync Connections&amp;quot; on the alternative/target farm.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The first step is export the User Profile Properties from
the existing farm.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;This can be achieved by establishing a connection to the &lt;a href="https://msdn.microsoft.com/en-us/library/Microsoft.Office.Server.UserProfiles.UserProfileConfigManager.aspx" target="_blank"&gt;UserProfileConfigManager&lt;/a&gt;.&lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.profilepropertymanager_members.aspx" target="_blank"&gt;ProfilePropertyManager&lt;/a&gt;
and use the &lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.profilepropertymanager.getcoreproperties.aspx" target="_blank"&gt;GetCoreProperties&lt;/a&gt;
method to retrieve all &amp;quot;CoreProperty objects&amp;quot; and the &lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.profilepropertymanager.getprofiletypeproperties.aspx" target="_blank"&gt;GetProfileTypeProperties&lt;/a&gt;
method to retrieve &amp;quot;all ProfileTypeProperty objects&amp;quot; and finally establishing a
connection to the &lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.profilesubtypemanager_members.aspx" target="_blank"&gt;ProfileSubtypeManager&lt;/a&gt;
and use the &lt;a href="https://msdn.microsoft.com/en-us/library/ee579918.aspx" target="_blank"&gt;GetProfileSubtype&lt;/a&gt;.&lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.profilesubtype.properties.aspx" target="_blank"&gt;Properties&lt;/a&gt;
to retrieve &amp;quot;all profile subtype properties&amp;quot;, before finally exporting them to
a set of CSV (yes... I know I need/want to update this to XML) files using the &lt;a href="https://technet.microsoft.com/en-us/library/hh849932.aspx" target="_blank"&gt;Export-CSV&lt;/a&gt;
cmdlet.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;For Example:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAProperties_1.PNG" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;"&gt;This should
create an individual “ProfilePropertyManagerCoreProperties.csv”, “UserProfilePropertyManagerUserProfileTypeProperties.csv”
and “UserProfileSubTypeManagerUserProfileProperties.csv” file. &lt;br /&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;"&gt;However, using the following cmd (from the zip below)..&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;"&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAProperties_3.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAProperties_3.PNG" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;"&gt;..also creates an additional file called “CustomUPSProps.csv”.&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;"&gt;The next
step is to import the “User Profile Properties” to the alternative/target farm using
the “CustomUPSProps.csv” file.&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;"&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAProperties_2.PNG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAProperties_2.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Some of the advantages of using this Export / Import
approach is the ability to easily create the New/Additional “User Profile
Properties” by simply updating the “CustomUPSProps.csv” file with additional rows
of data.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;*Note: Current scripts will only ever “overwrite existing
settings” (excluding internal names), but could theoretically be updated to
remove/delete existing properties if NOT found in the CSV file.&lt;/p&gt;
&amp;nbsp;
&lt;br /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Please download attached zip for &amp;quot;full/complete .ps1&amp;quot; 
files - Example provided 
above is a simplified &lt;span style="font-size:11.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-GB;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;abbreviation&lt;/span&gt;&lt;/p&gt;
    

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/utility/filethumbnails/zip-Small.gif" style="width:16px;height:16px;" title="download" alt="download" height="16" width="16" /&gt;&amp;nbsp; &lt;a href="http://community.obilogic.co.uk/files/folders/sp2013/entry380.aspx" title="UserProfileServiceApp_PowerShell_ExportImportADProperties.zip" target="_blank"&gt;&lt;b&gt;UserProfileServiceApp_PowerShell_ExportImportADProperties.zip&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Usage:&lt;/p&gt;
&lt;code&gt;
&lt;ul&gt;&lt;li&gt;Export Example&lt;br /&gt;.\ExportImport_UPSProfileProps.ps1 -MySiteURL http/https://&amp;lt;MySiteURL&amp;gt; -DoExport&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Import Example&lt;br /&gt;.\ExportImport_UPSProfileProps.ps1 -MySiteURL http/https://&amp;lt;MySiteURL&amp;gt; -DoImport -ImportCSVPropFilePath &amp;lt;FullPathToCSVPropertyFile&amp;gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/code&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=379" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2013/default.aspx">SharePoint-2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2013/default.aspx">SP2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/User-Profile-Service/default.aspx">User-Profile-Service</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/UPS/default.aspx">UPS</category></item><item><title>SharePoint 2013 - Migrate/Replicate User Profile Service Application Configuration between Farms using PowerShell - Part 1</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2015/04/20/sharepoint-2013-migrate-replicate-user-profile-service-application-configuration-between-farms-using-powershell-part-1.aspx</link><pubDate>Mon, 20 Apr 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:375</guid><dc:creator>aobi</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;I came across a requirement to quickly and easily create
duplicate/matching ‘User Profile Service Application Configurations&amp;#39; between
SharePoint Farms, when recently setting up SharePoint 2013 Dev, Staging and Production environments.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Assuming you have a working User Profile Service Application
(or UPSA), with multiple Active Directory (AD) Sync Connections, on an existing
farm. The following shows how you can take the settings of the existing UPSA and
use them to create a new UPSA on a different/alternative SharePoint 2013 farm. &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The first step is export the Active Directory Sync Connection
configuration.&lt;/p&gt;

&lt;p&gt;This can be achieved by establishing a connection to the &lt;a href="https://msdn.microsoft.com/en-us/library/Microsoft.Office.Server.UserProfiles.UserProfileConfigManager.aspx" target="_blank"&gt;UserProfileConfigManager&lt;/a&gt;.&lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.connectionmanager.aspx" target="_blank"&gt;ConnectionManager&lt;/a&gt;
and using the &lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.connectionmanager.getenumerator.aspx" target="_blank"&gt;GetEnumerator&lt;/a&gt;
method to retrieve and iterate through each data source connection in the
current service context, before exporting them to an XML file using the &lt;a href="https://technet.microsoft.com/en-us/library/hh849916.aspx" target="_blank"&gt;Export-Clixml&lt;/a&gt;
cmdlet.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAConnections_1.PNG" border="0" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;This should create
an individual &amp;quot;UPSConnection_&amp;lt;AD_Sync_Connnection_Name&amp;gt;.xml&amp;quot; file for
each Sync Connection found.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The second
step (...if you haven&amp;#39;t done so already) is to create a new ‘blank&amp;#39; User
Profile Service Application on the target Farm.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;This can be
done via &lt;a href="https://technet.microsoft.com/en-us/library/ee721052.aspx" target="_blank"&gt;Central
Administration&lt;/a&gt; or (preferably) via PowerShell... &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAConnections_2.PNG" border="0" alt="" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;(...or if you happen
to use &lt;a href="http://autospinstaller.codeplex.com/" target="_blank"&gt;AutoSPInstaller&lt;/a&gt; for
your Farm Builds then you can also use it to &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2012/10/26/five-other-things-you-can-do-with-autospinstaller.aspx#ReProvisionServiceApps" target="_blank"&gt;Provision
Service Applications&lt;/a&gt;)&lt;/p&gt;



&lt;p&gt;Whichever approach
you choose, I would advise using the same across on each of the farms.&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &lt;br /&gt;

&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The next
step is to import the Sync Connection configurations into the new/blank USPA.&lt;/p&gt;



&lt;p&gt;Now there seems
to two possible approaches available for creating new User Profile Sync
Connections via PowerShell...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The &lt;strike&gt;&lt;a href="https://technet.microsoft.com/en-us/library/jj219677.aspx" target="_blank"&gt;Add-SPProfileSyncConnection&lt;/a&gt;&lt;/strike&gt; Cmdlet (Removed from TechNet - Not Supported see &lt;a href="http://www.harbar.net/archive/2011/07/12/332.aspx" title="Managing Sync Connections with *-SPProfileSyncConnection cmdlets" target="_blank"&gt;Harbar.net&lt;/a&gt; )&lt;/p&gt;&lt;p&gt;vs.&lt;/p&gt;



&lt;p&gt;The &lt;a href="https://msdn.microsoft.com/en-us/library/ff410157%28v=office.15%29.aspx" target="_blank"&gt;AddActiveDirectoryConnection&lt;/a&gt;
method of the &lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.connectionmanager.aspx" target="_blank"&gt;ConnectionManager&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now due to
the various (&lt;a href="http://www.harbar.net/archive/2011/07/12/332.aspx" target="_blank"&gt;well
documented&lt;/a&gt;) limitations of the &lt;a href="https://technet.microsoft.com/en-us/library/jj219677.aspx" target="_blank"&gt;Add-SPProfileSyncConnection&lt;/a&gt;
cmdlet (such as ‘not being able to set the DisplayName&amp;#39;, ‘one connection per
forest&amp;#39; and it ‘overwrites the ConnectionSynchronizationOU&amp;#39;), along with the
fact we&amp;#39;re already exporting the settings via the &lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.connectionmanager.aspx" target="_blank"&gt;ConnectionManager&lt;/a&gt;,
we need to opt for the &lt;a href="http://sharepointinterface.com/2013/06/28/overcoming-frustrations-with-the-sharepoint-2013-user-profile-service-and-that-annoying-add-spprofilesyncconnection-cmdlet/" target="_blank"&gt;AddActiveDirectoryConnection&lt;/a&gt;
method.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAConnections_5.png" border="0" alt="" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Some of the advantages
of using this &amp;#39;Export / Import&amp;#39; approach is the ability to easily create the &lt;a href="https://msdn.microsoft.com/EN-US/library/office/microsoft.office.server.userprofiles.directoryservicenamingcontext.aspx" target="_blank"&gt;DirectoryServiceNamingContext&lt;/a&gt;
from the XML file with a single line of PowerShell ...&lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAConnections_6.png" border="0" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;...which can
then be passed to the &lt;a href="https://msdn.microsoft.com/en-us/library/ff410157%28v=office.15%29.aspx" target="_blank"&gt;AddActiveDirectoryConnection&lt;/a&gt;
method of the &lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.connectionmanager.aspx" target="_blank"&gt;ConnectionManager&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAConnections_7.png" border="0" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can also
easily change/verify the DisplayName of the Sync Connection via PowerShell...&lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAConnections_8.png" border="0" alt="" /&gt;&amp;nbsp;

&lt;/p&gt;&lt;p&gt;...or via the
exported XML configuration file property&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAConnections_9.png" border="0" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;As well as
being able to select which OU Containers are ‘included&amp;#39; or ‘excluded&amp;#39; by the
Sync Connection via the ‘ContainersIncluded&amp;#39; and ‘ContainersExcluded&amp;#39; properties
in the exported XML configuration file &lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAConnections_10.PNG" border="0" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/UPSA_Replicate/Export_UPSAConnections_11.PNG" border="0" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I&amp;#39;ve also put together the following scripts to
achieve this via some easy to use PowerShell :&lt;/p&gt;&lt;p&gt;&lt;b&gt;NOTE:&lt;/b&gt; Please download attached zip for &amp;quot;full/complete .ps1&amp;quot; files (plus additional Create UPS examples) - All examples provided above are simplified &lt;span style="font-size:11.0pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-GB;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;abbreviations&lt;/span&gt;&lt;/p&gt;
    

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/utility/filethumbnails/zip-Small.gif" style="width:16px;height:16px;" title="download" alt="download" height="16" width="16" /&gt;&amp;nbsp; &lt;a href="http://community.obilogic.co.uk/files/folders/sp2013/entry376.aspx" title="UserProfileServiceApp_PowerShell_ExportImportADConnections.zip" target="_blank"&gt;&lt;b&gt;UserProfileServiceApp_PowerShell_ExportImportADConnections.zip&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Usage:&lt;/p&gt;
&lt;code&gt;
&lt;ul&gt;&lt;li&gt;.\ExportImport_UPSConnections.ps1 -MySiteURL http/https://&amp;lt;MySiteURL&amp;gt; -DoExport&amp;nbsp; ## Export All Connections ##&lt;/li&gt;&lt;li&gt;.\ExportImport_UPSConnections.ps1
 -MySiteURL http/https://&amp;lt;MySiteURL&amp;gt; -DoExport 
-ExportConnectionName &amp;lt;SP_ADConnectionName&amp;gt; ## Export Specific 
Connection ##&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.\ExportImport_UPSConnections.ps1 
-MySiteURL http/https://&amp;lt;MySiteURL&amp;gt; -DoImport -ImportXMLFilePath 
&amp;lt;FullPathToXMLConnectionFile&amp;gt; -ConnectionPassword 
&amp;lt;ADConnectionPassword&amp;gt; ## Import Specific Connection ##&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/code&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=375" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2013/default.aspx">SharePoint-2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2013/default.aspx">SP2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/User-Profile-Service/default.aspx">User-Profile-Service</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/UPS/default.aspx">UPS</category></item><item><title>Creating IFTTT Email Triggers from Office365 SharePoint Alerts</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2015/04/12/creating-ifttt-email-triggers-from-office365-sharepoint-alerts.aspx</link><pubDate>Sun, 12 Apr 2015 23:31:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:373</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;For those who may not know &lt;a href="https://ifttt.com/wtf" title="IFTTT" target="_blank"&gt;IFTTT&lt;/a&gt;
(If This Then That) is a free cloud-based service that enables you to create
simple connections, called ‘&lt;a href="https://ifttt.com/recipes" title="ifttt.com - recipes" target="_blank"&gt;Recipes&amp;#39;&lt;/a&gt;, between
internet-connected services or ‘&lt;a href="https://ifttt.com/channels" title="ifttt.com - channels" target="_blank"&gt;Channels&lt;/a&gt;&amp;#39;
which are triggered by conditional events.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Although Microsoft has blogged about the upcoming release of
Office 365 Channels in the future&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.office.com/2014/10/28/new-office-365-extensibility-windows-ios-android-web-developers/" target="_blank"&gt;http://blogs.office.com/2014/10/28/new-office-365-extensibility-windows-ios-android-web-developers/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;..at this point in time, there are only &lt;a href="https://ifttt.com/yammer" title="Yammer" target="_blank"&gt;Yammer&lt;/a&gt;, &lt;a href="https://ifttt.com/onedrive" title="ifttt.com - onedrive" target="_blank"&gt;One
Drive&lt;/a&gt; and &lt;a href="https://ifttt.com/onenote" title="ifttt.com - onenote" target="_blank"&gt;OneNote&lt;/a&gt; channels
available. None of which currently provide the ability ‘Trigger&amp;#39; the start of a
Recipe.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;However, one of the useful features of IFTTT is that it provides
the ability to ‘Trigger&amp;#39; the start of a ‘Recipe&amp;#39; via its native ‘&lt;a href="https://ifttt.com/email" title="ifttt.com - email" target="_blank"&gt;Email Channel&lt;/a&gt;&amp;#39;.&lt;/p&gt;

&lt;p&gt;The following shows how you can setup SharePoint Alerts to
act as ‘Trigger Events&amp;#39; for IFTTT Recipes&lt;br /&gt;
(I&amp;#39;m going to be using Office 365 for this example, but theoretically the same approach
could also be taken to implement for On-Prem)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;First off, sign up for IFTTT account&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ifttt.com/join" title="ifttt.com - join" target="_blank"&gt;https://ifttt.com/join&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(although it&amp;#39;s probably easier if you sign-up using the email
address that is going to receive the SharePoint Alerts, it&amp;#39;s not a necessity as
the ‘&lt;a href="https://ifttt.com/email" title="ifttt.com - email" target="_blank"&gt;Email Channel&lt;/a&gt;&amp;#39; provides option to
change/update this independently from the signup/registration address)&lt;/p&gt;

&lt;p&gt;..and activate the Email Channel for your account&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ifttt.com/email" title="ifttt.com - email" target="_blank"&gt;https://ifttt.com/email&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(this process involves a PIN being sent to your email
address for verification - again, you can change/update this email address independently
from the signup/registration address. It&amp;#39;s also worth making sure the address
is entered in ‘lowercase&amp;#39; if using an ‘@&amp;lt;###&amp;gt;.onmicrosoft.com&amp;#39; address)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Next, head over to your Office 365 Mail and select ‘Options&amp;#39;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT/IFTTT_SPAlertTriggers1.png" border="0" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;..and select ‘Inbox Rules&amp;#39; and click Add &lt;b&gt;+&lt;/b&gt; and enter a Name for your new Trigger Rule&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT/IFTTT_SPAlertTriggers2.png" border="0" width="600" alt="" /&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Select a condition for ‘When the message arrives&amp;#39;...&lt;br /&gt;
(for my example I&amp;#39;ve selected ‘&lt;i&gt;Includes
the words&lt;/i&gt;&amp;#39; &amp;quot;Dept 1&amp;quot; or &amp;quot;Announcement&amp;quot; in the Subject) &lt;/p&gt;&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT/IFTTT_SPAlertTriggers4.png" border="0" alt="" /&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;For the ‘Do the following&amp;#39; action, select ‘&lt;i&gt;Forward the message as an attachment&lt;/i&gt;&amp;#39;
and enter the IFTTT trigger email address &lt;a href="mailto:trigger@recipe.ifttt.com"&gt;trigger@recipe.ifttt.com&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT_SPAlertTriggers5.png" border="0" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Next, you need to create your actual SharePoint Alerts. &lt;br /&gt;
Obviously you&amp;#39;re going to need to give some thought on how you setup your ‘Inbox
rules&amp;#39; (above) in relation to which Alert(s) you want to actually trigger the
rule (..and the eventual IFTTT Recipe).&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;For my example, I&amp;#39;m going to create a ‘SharePoint Alert&amp;#39; on
an ‘Announcements&amp;#39; list in a site named ‘Dept 1&amp;#39;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT/IFTTT_SPAlertTriggers6.png" border="0" width="600" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Finally, you need to create your ‘IFTTT Recipe&amp;#39;.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;For my example, I&amp;#39;m going to create an IF Recipe &lt;/p&gt;&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT_SPAlertTriggers7.png" border="0" alt="" /&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;..that is Triggered whenever an email is received&lt;br /&gt;
(sent from the address previously associated with my ‘&lt;a href="https://ifttt.com/email" title="ifttt.com - email" target="_blank"&gt;Email Channel&lt;/a&gt;&amp;#39;)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT_SPAlertTriggers8.png" border="0" width="600" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;..and then sends a &amp;quot;push notification&amp;quot; to my Windows phone
using the &lt;a href="https://ifttt.com/pushalot" title="ifttt.com - pushalot" target="_blank"&gt;Pushalot Channel&lt;/a&gt;&lt;br /&gt;
(admittedly this is probably a very convoluted way of getting notifications to
your Windows device ,but it proves the Recipe(s) work and is good for testing.)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT/IFTTT_SPAlertTriggers9.png" border="0" width="600" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT/IFTTT_SPAlertTriggers10b.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now whenever a new item is added to the &amp;quot;Dept 1 Announcements&amp;quot;
list...&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT/IFTTT_SPAlertTriggers12.png" border="0" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;..the SharePoint Alert is received by my inbox and if the subject line
meets the condition of the inbox rule (which in my example it always does as ‘Includes
the words &amp;quot;Dept 1&amp;quot; or &amp;quot;Announcement&amp;quot; in the Subject line)... it forwards the
email to the IFTTT Email Channel, which in turn ‘Triggers&amp;#39; my Recipe.. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/IFTTT/IFTTT_SPAlertTriggers11.png" border="0" alt="" /&gt;&lt;/p&gt;&lt;p&gt;...which sends
a ‘Push Notification&amp;#39; to my Windows device... which is pretty neat! &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;When you combine this with the fact the IFTTT Email Channel
also provides the option to only fire ‘Trigger Events&amp;#39; based on #hashtags in
the Subject line, along with the huge amount of well-known social and media
service Channels available (such as &lt;a href="https://ifttt.com/facebook" title="ifttt.com - facebook" target="_blank"&gt;Facebook&lt;/a&gt;,
&lt;a href="https://ifttt.com/flickr" title="ifttt.com - flickr" target="_blank"&gt;Flickr&lt;/a&gt;, &lt;a href="https://ifttt.com/github" title="ifttt.com - github" target="_blank"&gt;GitHub&lt;/a&gt;, &lt;a href="https://ifttt.com/instagram" title="ifttt.com - instagram" target="_blank"&gt;Instagram&lt;/a&gt;, &lt;a href="https://ifttt.com/twitter" title="ifttt.com - twitter" target="_blank"&gt;Twitter&lt;/a&gt;, &lt;a href="https://ifttt.com/wordpress" title="ifttt.com - wordpress" target="_blank"&gt;WordPress&lt;/a&gt; and &lt;a href="https://ifttt.com/android_notifications" title="ifttt.com - android_notifications" target="_blank"&gt;Android&lt;/a&gt; and &lt;a href="https://ifttt.com/ios_reminders" title="ifttt.com - ios_reminders" target="_blank"&gt;iOS&lt;/a&gt; to name a few). It soon becomes
apparent that you could quickly and easily create multiple Recipes to target a
variety of service Channels based pure only the #hashtags of the Subject line...
which in my example could be achieved simply by including the relevant #hashtags
of the &amp;quot;Title&amp;quot; field of Announcement item.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=373" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/next-gen/default.aspx">next-gen</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Workflows/default.aspx">Workflows</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2013/default.aspx">SP2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/O365/default.aspx">O365</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/IFTTT/default.aspx">IFTTT</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-Alerts/default.aspx">SharePoint-Alerts</category></item><item><title>SharePoint Saturday UK 2014 Rundown…</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2014/12/03/sharepoint-saturday-uk-2014-rundown.aspx</link><pubDate>Wed, 03 Dec 2014 23:01:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:363</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The fifth &lt;a href="http://www.spsevents.org/city/UK/" title="SharePoint Saturday UK" target="_blank"&gt;SharePoint
Saturday&lt;/a&gt; in the UK took place a couple of days ago, marking ‘half a decade&amp;#39;
of FREE one day conferences. The event is open to the public and provides
focused content covering SharePoint and the Office 365 platform.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.spsevents.org/city/UK/about" title="What is SharePoint Saturday UK?" target="_blank"&gt;&lt;i&gt;What is SharePoint Saturday UK?&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;SharePoint Saturday UK is dedicated to educating and engaging members
of the local SharePoint and Office 365 community. SharePoint Saturday UK draws
upon the expertise of local and international SharePoint IT professionals,
developers, architects, and users who come together to share real world
experiences, lessons learned, best practices and general knowledge with other
individuals.&lt;/i&gt;&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.redplane.co.uk/Blog/Post/11" title="SharePoint Saturday 2014 Review" target="_blank"&gt;&lt;b&gt;These events are the closest you will get to free training.&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The event kicked off with an thought-provoking Keynote
Presentation by Agnes Molnar (&lt;a href="http://twitter.com/molnaragnes" title="@molnaragnes" target="_blank"&gt;@molaragnes&lt;/a&gt;)
explaining Search, &lt;a href="http://products.office.com/en-us/business/explore-office-delve" title="Office Delve" target="_blank"&gt;Delve&lt;/a&gt;,
&lt;a href="http://blogs.office.com/2014/11/11/de-clutter-inbox-office-365/" title="Office 365 Clutter" target="_blank"&gt;Clutter&lt;/a&gt;,
&lt;a href="http://msdn.microsoft.com/en-us/office/office365/howto/query-Office-graph-using-gql-with-search-rest-api" title="OfficeGraph" target="_blank"&gt;OfficeGraph&lt;/a&gt;
and the Key Components of implementing successful ‘Findiability&amp;#39;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Nov2014/SPSUK_0014.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Nov2014/SPSUK_0014.jpg" align="middle" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;My first official session of the day was &amp;quot;&lt;a href="http://twitter.com/MartinHatch/status/538665321872494592" title="Advanced List rendering using JSLink and Display Templates" target="_blank"&gt;Advanced List
rendering using JSLink and Display Templates&lt;/a&gt;&amp;quot; presented by Martin
Hatch (&lt;a href="http://twitter.com/search?f=realtime&amp;amp;q=%23spsuk%20%40martinhatch&amp;amp;src=typd" title="@martinhatch" target="_blank"&gt;@martinhatch&lt;/a&gt;),
in which Martin covered ‘Display Templates - 101&amp;#39; (loading JS, targeting Lists
Templates, Page Life Cycle and custom validation ..including potential ‘gotchas&amp;#39;),
‘Multi Language Support&amp;#39; and ‘JSLink - The Magic Plumbing&amp;#39;. Each with plenty of
cool demos thrown in for good measure...&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Next up was ‘SharePoint Apps for the IT Pro - What you need
to know&amp;#39; by Thomas Vochten (&lt;a href="http://twitter.com/search?f=realtime&amp;amp;q=%23spsuk%20%40ThomasVochten&amp;amp;src=typd" title="@ThomasVochten" target="_blank"&gt;@ThomasVochten&lt;/a&gt;).
Thomas showed how to go about setting up on-premises infrastructure to successfully
run SharePoint hosted apps. Describing and demonstrating different
configuration options and their associated constraints and/or hazards... He also threw
in a couple of handy little tips along the way, which you may (or may not) have
come across ...such as ‘certlm.msc&amp;#39; for quick access to the certifications
manager snap-in.. and ‘&lt;a href="http://twitter.com/ThomasVochten/status/538677938674479106" title="Wildcard SAN Certificates" target="_blank"&gt;Wildcard SAN
Certificates&lt;/a&gt;&amp;#39; (.. which was definitely a new one for me!)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Third session was ‘Apps for Office - the hidden gem that&amp;#39;s
easier than you think&amp;#39; by Chris O&amp;#39;Brien (&lt;a href="http://twitter.com/search?f=realtime&amp;amp;q=%23spsuk%20%40ChrisO_Brien&amp;amp;src=typd" title="@ChrisO_Brien" target="_blank"&gt;@ChrisO_Brien&lt;/a&gt;).
Chris explained that developing ‘Apps for Office&amp;#39; should be ‘fairly straight
forward&amp;#39; for existing SharePoint Developers, especially as they are based on
core web technologies (HTML, CSS, JS) and are combined with the &amp;quot;Write Once... Run
anywhere...&amp;quot; approach (Desktops, Phones, Tablets.. Office for Mac etc). Chris
went on to illustrate the different &lt;a href="http://msdn.microsoft.com/en-us/library/office/dn358357%28v=office.15%29.aspx" target="_blank"&gt;types
of the Apps&lt;/a&gt; before giving an in-depth demonstration of a full working ‘App
for Office&amp;#39; and the various potential gotchas to look out for.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;After a great FREE lunch, thanks to the awesome event
sponsors (...who said ‘there&amp;#39;s no such thing as a free lunch&amp;#39;?), I sat in on ‘Set
Your Code Free - SharePoint Apps for Mobile World&amp;#39; presented by Bill Ayers (&lt;a href="http://twitter.com/search?f=realtime&amp;amp;q=%23spsuk%20%40SPDoctor&amp;amp;src=typd" title="@SPDoctor" target="_blank"&gt;@SPDoctor&lt;/a&gt;).
Bill explained how the field of ‘Mobile Device Technology&amp;#39; is rapidly and
constantly changing (almost daily), whilst also providing some interesting ‘%
of Market Share&amp;#39; data. He then went on to share numerous tips, comparisons and demonstrations
around developing ‘Cross Platform Mobile Apps&amp;#39; using C#/XAML, JS/Html5 and a
variety of mobile libraries &amp;nbsp;+frameworks&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;My final session of the day was ‘&lt;a href="http://twitter.com/HughAJWood/status/539209021472133121" title="Writing a JavaScript framework for SharePoint 2013" target="_blank"&gt;Writing a
JavaScript framework for SharePoint 2013&lt;/a&gt;&amp;#39; presented by Hugh Wood (&lt;a href="http://twitter.com/search?f=realtime&amp;amp;q=%23spsuk%20%40HughAJWood&amp;amp;src=typd" title="@HughAJWood" target="_blank"&gt;@HughAJWood&lt;/a&gt;).
To be honest this session was definitely the ‘surprise session of the day&amp;#39;, as
the title and description really didn&amp;#39;t give an indication to the level of content
provided. Basically, if (like me) you think you know a little bit about JS
because you&amp;#39;ve done a bit of jQuery or a bit of SharePoint 2013 development using
JSOM/CSOM/REST etc... then think again! (and check out this session if/whenever
you get a chance). Hugh started off showing us where many of us are going wrong
with simple JS (irrespective of SharePoint). He then moved onto to popular JS Design
Patterns and the potential additional burden of sealing and unsealing scopes,
before revealing some impressive SharePoint specific examples ...including the apparently
‘undocumented&amp;#39; &lt;a href="http://twitter.com/obilogic/status/538727211487223808" title="Obilogic" target="_blank"&gt;SP.SOD.loadMultiple&lt;/a&gt;
JS function. I&amp;#39;m think Hugh may have broken ‘official &lt;a href="http://twitter.com/spsuk" title="@SPSUK" target="_blank"&gt;@SPSUK&lt;/a&gt; protocol&amp;#39; when he ended the session
by asking the audience to pick the winner of the free &lt;a href="http://twitter.com/spcaf" title="@SPCaf" target="_blank"&gt;@SPCaf&lt;/a&gt; Professsional License ... but I&amp;#39;m
sure that can be overlooked given the quality of the session ;) &amp;nbsp;(... and no, I&amp;#39;m not jealous of &lt;a href="http://twitter.com/al_eardley" target="_blank"&gt;@al_eardley&lt;/a&gt; for winning... Ok perhaps just a little)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The day was rounded off with the annual &amp;quot;prize gift giving&amp;quot;
(again, each kindly donated by the awesome event sponsors) and a &lt;a href="http://twitter.com/sharepint" target="_blank"&gt;SharePint&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;As usual a &lt;b&gt;HUGE THANKS&lt;/b&gt; goes to the event organisers
Brett Lonsdale (&lt;a href="http://twitter.com/brettlonsdale" target="_blank"&gt;@brettlonsdale&lt;/a&gt;)
, Tony Pounder(&lt;a href="http://twitter.com/WorTony" target="_blank"&gt;@WorTony&lt;/a&gt;)
and Mark Macrae(&lt;a href="http://twitter.com/m_macrae" target="_blank"&gt;@m_macrae&lt;/a&gt;)
as well as all of the &lt;a href="http://www.spsevents.org/city/UK/UK2014/sponsors" target="_blank"&gt;event sponsors&lt;/a&gt; who made the whole day possible (... did I
mention it was &lt;b&gt;FREE&lt;/b&gt;).&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/KinetalMedia" class="twitter-atreply pretty-link"&gt;&lt;b&gt;@KinetalMedia&lt;/b&gt;&lt;/a&gt;: Showreel for &lt;a href="https://twitter.com/spsuk" class="twitter-atreply pretty-link"&gt;&lt;b&gt;@spsuk&lt;/b&gt;&lt;/a&gt; is now live!&amp;nbsp;&lt;a href="http://t.co/d7lCFzX4Rf" rel="nofollow" class="twitter-timeline-link" target="_blank" title="http://kinetal.co.uk/2014/12/sharepoint-saturday-uk-2014/"&gt;&lt;span class="tco-ellipsis"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://kinetal.co.uk/2014/12/sharepoint-saturday-uk-2014/" target="_blank"&gt;&lt;b&gt;http://kinetal.co.uk/2014/12/sharepoint-saturday-uk-2014/&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=363" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Conference/default.aspx">Conference</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SPSUK/default.aspx">SPSUK</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-Saturday/default.aspx">SharePoint-Saturday</category></item><item><title>SharePoint Online - Checking Build Versions and JS File Versions</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2014/02/28/sharepoint-online-checking-build-versions-and-js-file-versions.aspx</link><pubDate>Fri, 28 Feb 2014 18:39:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:338</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;After experiencing an issue on my O365 Tenancy recently (...namely
&amp;#39;&lt;i&gt;&lt;b&gt;There is no trusted urls configured for the app deployment&lt;/b&gt;&lt;/i&gt;&amp;#39; errors when attempting
to perform ‘Cross Domain REST calls&amp;#39; from SharePoint Hosted Apps - see &amp;nbsp;&lt;a href="http://social.msdn.microsoft.com/Forums/sharepoint/en-US/2b76988e-277c-4507-8828-216c8545ee6e/sharepoint-hosted-app-gives-there-is-no-trusted-urls-configured-for-the-app-deployment-error?forum=appsforsharepoint" title="Sharepoint Hosted App Gives &amp;quot;There is no trusted URLs configured for the app deployment&amp;quot; error" target="_blank"&gt;Thread
1&lt;/a&gt;, &lt;a href="http://social.msdn.microsoft.com/Forums/sharepoint/en-US/8c9a9b06-e187-4174-8905-903d6b02b98c/there-is-no-trusted-urls-configured-for-the-app-deployment-in-sharepoint-hosted-apps?forum=appsforsharepoint" title="There is no trusted urls configured for the app deployment in SharePoint hosted apps" target="_blank"&gt;Thread
2&lt;/a&gt;), I wanted to find a way of checking the version and build number of the SharePoint
instance...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;A quick google search located &amp;quot;&lt;a href="http://corypeters.net/2013/07/getting-the-product-version-for-sharepoint-online/" title="Getting the Product Version for SharePoint Online" target="_blank"&gt;Getting
the Product Version for SharePoint Online&lt;/a&gt;&amp;quot; from Cory Peters which shows how
to obtain the current build version via &amp;quot;/_vti_pvt/buildversion.cnf&amp;quot;.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Although this allowed me to confirm there were differences
in the versions between tenants, there didn&amp;#39;t seem to be any correlation between
the affected build numbers and the errors being returned.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;So, I wanted to check if there were any differences in the ‘SP.js&amp;#39;
and/or ‘SP.RequestExecutor.js&amp;#39; files themselves...&lt;br /&gt;
(SharePoint 2013 SP1 has/had just been released, so I assumed it was possible
that ‘SP.RequestExecutor.js&amp;#39; may have been updated... especially as the &amp;quot;new
SP.RequestExecutor()&amp;quot; call seemed to be being affected &amp;nbsp;- again see &amp;nbsp;&lt;a href="http://social.msdn.microsoft.com/Forums/sharepoint/en-US/2b76988e-277c-4507-8828-216c8545ee6e/sharepoint-hosted-app-gives-there-is-no-trusted-urls-configured-for-the-app-deployment-error?forum=appsforsharepoint" title="Sharepoint Hosted App Gives &amp;quot;There is no trusted URLs configured for the app deployment&amp;quot; error" target="_blank"&gt;Thread
1&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Although ‘/_layouts/15/SP.RequestExecutor.js&amp;#39; was reporting
the exact same file size (60.3Kb / 61,787 bytes) from both affected and
unaffected tenants, a quick &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/ExamDiff_Pro" title="ExamDiff" target="_blank"&gt;ExamDiff&lt;/a&gt;&amp;quot; showed that there were in fact
differences ... namely ‘rpr&amp;#39; values.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;I then downloaded the ‘SP.RequestExecutor.debug.js&amp;#39; (aka readable
version) and found that the ‘rpr&amp;#39; value was regarding the &amp;quot;version&amp;quot; info for
the &amp;quot;g_all_modules&amp;quot; array.&lt;/p&gt;

&lt;p&gt;My &amp;#39;problem/affected&amp;#39; tenant reporting:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;g_all_modules[&amp;quot;sp.requestexecutor.js&amp;quot;] = {&lt;br /&gt;
&amp;quot;version&amp;quot;: {&lt;br /&gt;
&amp;quot;rmj&amp;quot;: 16,&lt;br /&gt;
&amp;quot;rmm&amp;quot;: 0,&lt;br /&gt;
&amp;quot;rup&amp;quot;: 2607,&lt;br /&gt;
&amp;quot;rpr&amp;quot;: 1216&lt;br /&gt;
}};&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;My &amp;quot;unaffected&amp;quot; tenant reporting:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;g_all_modules[&amp;quot;sp.requestexecutor.js&amp;quot;] = {&lt;br /&gt;
&amp;quot;version&amp;quot;: {&lt;br /&gt;
&amp;quot;rmj&amp;quot;: 16,&lt;br /&gt;
&amp;quot;rmm&amp;quot;: 0,&lt;br /&gt;
&amp;quot;rup&amp;quot;: 2607,&lt;br /&gt;
&amp;quot;rpr&amp;quot;: 1214&lt;br /&gt;
}};&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Interestingly enough, neither of which match the build version
reported via &amp;quot;/_vti_pvt/buildversion.cnf&amp;quot; &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&amp;#39;Problem/Affected&amp;#39; Tenant:&lt;br /&gt;
vti_buildversion:SR|16.0.2607.1205&lt;/p&gt;

&lt;p&gt;‘Working/Unaffected&amp;#39; Tenant:&lt;br /&gt;vti_buildversion:SR|16.0.2607.1208&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The same process can also be repeated for checking the version of the ‘SP.js&amp;#39; file (and/or
‘SP.debug.js&amp;#39;), by simply downloading (‘/_layouts/15/SP.js&amp;#39;) and searching for &amp;quot;rup&amp;quot;
and/or &amp;quot;rpr&amp;quot; values.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Not sure whether this information will actually turn out to be useful in relation to my particular problem, but thought might be useful/interesting to some.&lt;br /&gt;(&amp;#39;every Cloud has a silver lining&amp;#39; and all that)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;------------- UPDATE ------------- &lt;/b&gt;&lt;/p&gt;&lt;p&gt;For anyone interested in 
the &amp;#39;&lt;i&gt;&lt;b&gt;There is no trusted urls configured for the app deployment&lt;/b&gt;&lt;/i&gt;&amp;#39; errors when
 attempting to make Cross Domain REST calls from a SharePoint Hosted 
App, the lastest advice from MS is&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;#39;This is currently a
 known issue in the SPO environment and is being investigated and looked
 into. The work around you have to change the URL to lower case is 
mentioned and you can continue using it till a fix is applied.&amp;#39; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;... the work around being:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;exec = new SP.RequestExecutor(appWebUrl&lt;i&gt;&lt;b&gt;.toLowerCase()&lt;/b&gt;&lt;/i&gt;);&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Happy Coding....&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=338" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2013/default.aspx">SharePoint-2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/O365/default.aspx">O365</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Versions/default.aspx">Versions</category></item><item><title>SharePoint 2013 - Custom CallOut with File Preview</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2014/01/23/sharepoint-2013-custom-callout-with-file-preview.aspx</link><pubDate>Thu, 23 Jan 2014 16:25:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:334</guid><dc:creator>aobi</dc:creator><slash:comments>8</slash:comments><description>&lt;p&gt;In addition to the standard &amp;#39;Modal Dialog&amp;#39; windows in SharePoint 2010, SharePoint 2013 introduced new &amp;#39;Call Out&amp;#39; windows.&lt;/p&gt;

&lt;p&gt;There are plenty of good posts out there detailing how to implement and utilise the new &amp;#39;Call Out Framework&amp;#39; (&amp;#39;callout.js&amp;#39;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dn135236.aspx" title="http://msdn.microsoft.com/en-us/library/dn135236.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/dn135236.aspx&lt;/a&gt;&amp;nbsp;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://blog.alexboev.com/2012/07/custom-callouts-in-sharepoint-2013.html" title="http://blog.alexboev.com/2012/07/custom-callouts-in-sharepoint-2013.html" target="_blank"&gt;http://blog.alexboev.com/2012/07/custom-callouts-in-sharepoint-2013.html&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.learningsharepoint.com/2013/05/09/sharepoint-2013-callout-popup-tutorial/" title="http://www.learningsharepoint.com/2013/05/09/sharepoint-2013-callout-popup-tutorial/" target="_blank"&gt;http://www.learningsharepoint.com/2013/05/09/sharepoint-2013-callout-popup-tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;..to name just a few.&lt;/p&gt;

&lt;p&gt;However, I was surprised to find that none provided a working example of the &amp;#39;File Preview&amp;#39; layout which is used in the &amp;#39;Call Outs&amp;#39; of standard Document Libraries. &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/StandardCallOut_Example1.png"&gt;&lt;/a&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/StandardCallOut_Example1.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/StandardCallOut_Example1.png" border="0" width="500" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So here&amp;#39;s a working example of how it can be implemented....&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;code&gt;

&lt;p&gt;function getCallOutFilePreviewBodyContent(urlWOPIFrameSrc,
pxWidth, pxHeight) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var callOutContenBodySection = &amp;#39;&amp;lt;div
class=&amp;quot;js-callout-bodySection&amp;quot;&amp;gt;&amp;#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; callOutContenBodySection += &amp;#39;&amp;lt;div
class=&amp;quot;js-filePreview-containingElement&amp;quot;&amp;gt;&amp;#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; callOutContenBodySection += &amp;#39;&amp;lt;div class=&amp;quot;js-frame-wrapper&amp;quot;
style=&amp;quot;line-height: 0&amp;quot;&amp;gt;&amp;#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; callOutContenBodySection += &amp;#39;&amp;lt;iframe style=&amp;quot;width: &amp;#39; + pxWidth + &amp;#39;px;
height: &amp;#39; + pxHeight + &amp;#39;px;&amp;quot; src=&amp;quot;&amp;#39; +
urlWOPIFrameSrc + &amp;#39;&amp;amp;amp;action=interactivepreview&amp;amp;amp;wdSmallView=1&amp;quot;
frameborder=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;#39;;&lt;br /&gt;&amp;nbsp;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp; callOutContenBodySection += &amp;#39;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return callOutContenBodySection;&lt;br /&gt;}&lt;/p&gt;

&lt;/code&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;code&gt;
&lt;p&gt;function OpenItemFilePreviewCallOut(sender, strTitle, urlWopiFileUrl) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;code&gt;RemoveAllItemCallouts&lt;/code&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var openNewWindow = true; //set this to false to open in
current window&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var callOutContenBodySection =
getCallOutFilePreviewBodyContent(urlWopiFileUrl, 379, 252);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var c = CalloutManager.getFromLaunchPointIfExists(sender);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c == null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c = CalloutManager.createNewIfNecessary({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID: &amp;#39;CalloutId_&amp;#39; + sender.id,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; launchPoint: sender,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beakOrientation: &amp;#39;leftRight&amp;#39;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title: strTitle,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; content: callOutContenBodySection,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contentWidth: 420&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; });&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var customAction = new CalloutActionOptions();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; customAction.text = &amp;#39;Open&amp;#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; customAction.onClickCallback = function (event, action) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (openNewWindow) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.open(urlItemUrl);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RemoveItemCallout(sender);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.location.href =
urlItemUrl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var _newCustomAction = new CalloutAction(customAction);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c.addAction(_newCustomAction);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;c.open();&lt;br /&gt;}&lt;/p&gt;
&lt;/code&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The above function &amp;quot;OpenItemFilePreviewCallOut&amp;quot; could then be used as follows:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;code&gt;
&lt;p&gt;&amp;lt;a
id=&amp;quot;CallOutExample&amp;quot; onclick=&amp;quot;OpenItemFilePreviewCallOut(this, &amp;#39;My
Title&amp;#39;,&amp;#39;&amp;lt;WopiFileUrl&amp;gt;&amp;#39;)&amp;quot; title=&amp;quot;CallOut With File
Preview&amp;quot; h ref=&amp;quot;#&amp;quot;&amp;gt;&lt;br /&gt;Call Out with File Preview&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;/code&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Where the &amp;quot;&lt;b&gt;&lt;i&gt;&amp;lt;WopiFileUrl&amp;gt;&lt;/i&gt;&lt;/b&gt;&amp;quot;
parameter is provided in the format:&lt;/p&gt;

&lt;p&gt;&amp;quot;&lt;i&gt;&lt;b&gt;https://yoursite.sharepoint.com/_layouts/15/WopiFrame2.aspx?sourcedoc=&amp;lt;SPFile Relative Url&amp;gt;&lt;/b&gt;&lt;/i&gt;&amp;quot;
&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/CustomCallOutWithFilePreview_Example1.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/CustomCallOutWithFilePreview_Example1.png" border="0" width="500" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Probably also worth mentioning that both the &amp;#39;_layouts/15/WopiFrame2.aspx&amp;#39; and the &amp;#39;&amp;lt;SPFile Relative URL&amp;gt;&amp;#39; need to refer to the same SPWeb &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;b&gt;Correct Example&lt;/b&gt;&lt;/i&gt;: &lt;br /&gt;
https://yoursite.sharepoint.com/&lt;span style="color:red;"&gt;TeamSite1&lt;/span&gt;/_layouts/15/WopiFrame2.aspx?sourcedoc=/&lt;span style="color:red;"&gt;TeamSite1&lt;/span&gt;/Shared Documents/test1.docx&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;b&gt;Incorrect Example&lt;/b&gt;&lt;/i&gt;: &lt;br /&gt;
https://yoursite.sharepoint.com/_layouts/15/WopiFrame2.aspx?sourcedoc=/&lt;span style="color:red;"&gt;TeamSite1&lt;/span&gt;/Shared Documents/test1.docx&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;...and if you&amp;#39;re wondering why I&amp;#39;ve referred to &amp;#39;WopiFrame2.aspx&amp;#39; (instead of &amp;#39;WopiFrame.aspx&amp;#39;) above - see the following explanation from Wictor Wilén:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.wictorwilen.se/an-explanation-to-to-start-seeing-previews-please-log-on-by-opening-the-document-in-sharepoint-2013" title="http://www.wictorwilen.se/an-explanation-to-to-start-seeing-previews-please-log-on-by-opening-the-document-in-sharepoint-2013" target="_blank"&gt;http://www.wictorwilen.se/an-explanation-to-to-start-seeing-previews-please-log-on-by-opening-the-document-in-sharepoint-2013&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Finally, here are a few helper functions which can be used to Close and/or Remove existing Call Outs:&lt;br /&gt;&lt;i&gt;(fyi - the &amp;#39;RemoveAllItemCallouts&amp;#39; and &amp;#39;RemoveItemCallout&amp;#39; functions are called/used in the &amp;#39;OpenItemFilePreviewCallOut&amp;#39; &lt;/i&gt;&lt;i&gt;&lt;i&gt;example &lt;/i&gt;above)&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;

&lt;code&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;function RemoveAllItemCallouts() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CalloutManager.forEach(function(callout) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //
remove the current callout&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CalloutManager.remove(callout);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;function RemoveItemCallout(sender) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var callout =
CalloutManager.getFromLaunchPointIfExists(sender);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (callout != null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //
remove&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CalloutManager.remove(callout);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/code&gt; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;function CloseItemCallout(sender) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var callout =
CalloutManager.getFromLaunchPointIfExists(sender);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (callout != null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // close&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; callout.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/code&gt;
&lt;p&gt;Happy Coding.... &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=334" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2013/default.aspx">SharePoint-2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/CallOuts/default.aspx">CallOuts</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Custom-CallOut/default.aspx">Custom-CallOut</category></item><item><title>SQLSaturday #228 Cambridge</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2013/10/12/sqlsaturday-228-cambridge.aspx</link><pubDate>Sat, 12 Oct 2013 00:10:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:320</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;A couple of weeks ago I managed to perform my second ever &amp;quot;SharePoint speaker session&amp;quot;, this time at &lt;a href="http://www.sqlsaturday.com/228/" title="SQLSaturday Cambridge" target="_blank"&gt;SQLSaturday Cambridge&lt;/a&gt;&amp;nbsp; (...have been meaning to blog
about this sooner, but simple haven&amp;#39;t had time).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SQLSaturday228/SQLSaturday%20228%20Im%20Speaking%20Badge%20Knight%20Square%20300px%20by%20300px.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SQLSaturday228/SQLSaturday%20228%20Im%20Speaking%20Badge%20Knight%20Square%20300px%20by%20300px.jpg" align="right" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;This was the first SQL Saturday event I&amp;#39;d ever attended, and I have to say it
was a very (very) pleasant and well organised event (...with an obvious huge
thanks going to Mark Broadbent &lt;a href="https://twitter.com/retracement" title="Twitter @retracement " target="_blank"&gt;@retracement&lt;/a&gt;, John Martin &lt;a href="https://twitter.com/SQLServerMonkey" title="Twitter SQLServerMonkey" target="_blank"&gt;@SQLServerMonkey&lt;/a&gt;, Kevin Chant &lt;a href="https://twitter.com/kevchant" title="Twitter kevchant"&gt;@kevchant&lt;/a&gt;, Peter Baddeley &lt;a href="https://twitter.com/baddaz" title="Twitter baddaz" target="_blank"&gt;@baddaz&lt;/a&gt;
and all other event organisers)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now some of you might be asking, &amp;quot;what&amp;#39;s a SharePoint guy doing speaking at
SQL Saturday event?&amp;quot;... well the simple answer is this year they had decided to
introduce a ‘dedicated SharePoint track&amp;#39; to focus on the &lt;a href="http://www.baddaz.com/?p=522" title="SharePoint at SQL Saturday Cambridge" target="_blank"&gt;relationship between SQL Server and
SharePoint&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;After submitting my session (again, covering BCS... although this time using
SharePoint 2013), I was pleasantly surprised when I received the email informing
me I had been selected from the large number of ‘&lt;a href="http://www.sqlsaturday.com/228/schedule.aspx#ContentPlaceHolder1_GridView1" title="SQL Saturday 228 Submitted Sessions" target="_blank"&gt;Submitted
Sessions&lt;/a&gt;&amp;#39;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Full details, session slides and scripts from my presentation  can be found via:&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.sqlsaturday.com/viewsession.aspx?sat=228&amp;amp;sessionid=16076" title="Rapid Data Integration using SharePoint Business Connectivity Services" target="_blank"&gt;Rapid Data Integration using SharePoint
Business Connectivity Services&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Full details of the days schedule (along with session downloads) can be
found via:&lt;br /&gt;
&lt;a href="http://www.sqlsaturday.com/228/schedule.aspx#schedulewrap" title="SQLSaturday 228 Cambridge Schedule" target="_blank"&gt;http://www.sqlsaturday.com/228/schedule.aspx#schedulewrap&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;....again, huge thanks to all involved&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=320" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/BCS/default.aspx">BCS</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SQL/default.aspx">SQL</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SQLSaturday/default.aspx">SQLSaturday</category></item><item><title>2013… a New Year, a New SharePoint Version and a New Set of Challenges - Part 2: App Parts, iFrames and PostMessage Resizing </title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2013/01/11/2013-A-New-Year-A-New-SharePoint-Version-A-New-Set-of-Challenges-Part-2-App-Parts-iFrames-PostMessage-Resizing.aspx</link><pubDate>Fri, 11 Jan 2013 14:46:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:287</guid><dc:creator>aobi</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Once an &lt;a href="http://msdn.microsoft.com/library/office/apps/fp179930%28v=office.15%29" target="_blank"&gt;App&lt;/a&gt;
is deployed to SharePoint site, it is listed on the &amp;#39;Site Contents&amp;#39; page of the
host web (is also listed under &amp;#39;Apps in Testing&amp;#39; on &lt;a href="http://msdn.microsoft.com/en-us/library/fp179924.aspx" target="_blank"&gt;O365 Developer
Sites&lt;/a&gt;). Users can access (or &amp;#39;Start&amp;#39;) a chosen App by simply selecting it
from the list. When opened in this way, the &lt;a href="http://msdn.microsoft.com/en-US/office/apps/fp123579" target="_blank"&gt;App&lt;/a&gt; runs in
full-screen mode (via the App Web).&lt;/p&gt;

&lt;p&gt;Alternatively, an App can be added to any SharePoint Wiki
page or Web Part page in the form of an &amp;#39;&lt;a href="http://www.learningsharepoint.com/2012/09/16/sharepoint-2013-whats-app-part/" target="_blank"&gt;App
Part&lt;/a&gt;&amp;#39; (a new type of Web Part that is represented by the &lt;a href="http://msdn.microsoft.com/en-us/library/jj175590.aspx" target="_blank"&gt;ClientWebPart
class&lt;/a&gt;). Like any other Web Part, it appears in the SharePoint 2013 UI from
which users add Web Parts.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts10_AddAppPartToPage.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts10_AddAppPartToPage.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(In my &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2013/01/10/2013-A-New-Year-A-New-SharePoint-Version-A-New-Set-of-Challenges-Developing-Apps-and-App-Parts.aspx" target="_blank"&gt;previous
post&lt;/a&gt; I covered how to easily create some very simple &amp;#39;Apps&amp;#39; and &amp;#39;App Parts&amp;#39;
in SharePoint 2013, using Napa Office 365 Development Tools, and some
fundamental differences required for each to work correctly)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;#39;App Parts&amp;#39; are essentially wrappers for an &lt;a href="http://msdn.microsoft.com/en-gb/library/ie/ms535258%28v=vs.85%29.aspx" target="_blank"&gt;iframe
element&lt;/a&gt; that surface a particular page of the App. (in our case &amp;#39;ClientWebPart.aspx&amp;#39;)&lt;/p&gt;

&lt;p&gt;The use of &amp;#39;iframes&amp;#39; is a significant difference compared to
the average SharePoint &amp;#39;Web Part&amp;#39;, as any html output from a normal &amp;#39;Web Part&amp;#39; is
rendered &amp;#39;directly within&amp;#39; the html of a SharePoint Wiki page or &amp;#39;&lt;a href="http://msdn.microsoft.com/en-us/library/cc295604.aspx" target="_blank"&gt;Web Part Zone&lt;/a&gt;&amp;#39;
of a Web Part page.&lt;/p&gt;

&lt;p&gt;Now I&amp;#39;m not saying it isn&amp;#39;t possible to code an iframe into
an average &amp;#39;Web Part&amp;#39;, but to my knowledge this wasn&amp;#39;t generally/previously
regarded as a &amp;#39;best practice approach&amp;#39; ...and developers (as well as content
managers, power users etc) may have to consider the possibility of network
overheads arising from &amp;#39;page loads&amp;#39; if/when large numbers of &amp;#39;App Parts&amp;#39; are
added to a single Wiki or Web Part page, due to each of the &amp;#39;iframe elements&amp;#39; resulting
in an additional &amp;#39;http get request&amp;#39; (especially when dealing with the Cloud and
o365).&lt;/p&gt;

&lt;p&gt;&amp;nbsp;(I&amp;#39;m sure some would
argue that a retrieving the entire html of the &amp;#39;Page&amp;#39; and &amp;#39;Web Parts&amp;#39; in a &amp;#39;single
http get request&amp;#39; isn&amp;#39;t preferable compared to the &amp;#39;multiple get requests&amp;#39;
involved with &amp;#39;App Parts&amp;#39; and their iframes ...but until I can locate or produce
some performance info to prove this either way, I&amp;#39;ll leave that discussion for
another day ...so I digress).&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;So what does all mean for developers moving to SharePoint
2013?&lt;/p&gt;

&lt;p&gt;According to Eric Shupps &amp;#39;&lt;a href="http://www.binarywave.com/blogs/eshupps/Lists/Posts/Post.aspx?ID=266" target="_blank"&gt;Introducing
the SharePoint 2013 Application Model&lt;/a&gt;&amp;#39;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;For starters, it means a lot more thought will need to be put into how
an application is constructed and deployed. The app model is best suited to
HTML + Javascript solutions - traditional code-behind ASP.NET and SharePoint
developers will have to enhance their skill set in order to adapt&lt;/i&gt;.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Well, one of the first examples of this &amp;#39;required adaption&amp;#39;
that I came across when dealing with &amp;#39;App Part&amp;#39; development, was dealing with
&amp;#39;dynamically loaded html content&amp;#39;.&lt;/p&gt;

&lt;p&gt;To demonstrate what I mean I&amp;#39;ll begin with another simple
&amp;#39;App Part&amp;#39;, which I&amp;#39;ll call &amp;#39;DynamicDivSharePoint2013App&amp;#39;.&lt;/p&gt;

&lt;p&gt;Created using &amp;#39;&lt;a href="http://blogs.msdn.com/b/jasonz/archive/2012/07/17/introducing-napa-office-365-development-tools.aspx" target="_blank"&gt;Napa
Office 365 Development Tools&lt;/a&gt;&amp;#39;, I get the standard x5 file starting point
and make the necessary changes required to the &amp;#39;ClientWebPart.aspx&amp;#39; and
&amp;#39;App.js&amp;#39; files (see &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2013/01/10/2013-A-New-Year-A-New-SharePoint-Version-A-New-Set-of-Challenges-Developing-Apps-and-App-Parts.aspx" target="_blank"&gt;previous
post&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts1_5FileStart.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts1_5FileStart.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;... add a new &amp;#39;Div&amp;#39; element &lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts2_AddDivElementClientWebPartFile.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts2_AddDivElementClientWebPartFile.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;..and a couple of JavaScript hyperlinks (which will be used
to resize the &amp;#39;DynamicDiv&amp;#39; element).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts3_AddResizeLinksClientWebPartFile.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts3_AddResizeLinksClientWebPartFile.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;br /&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;...and finally create the associated &amp;#39;resize div&amp;#39; function (in
this case &amp;#39;ResizeDynamicDiv&amp;#39;) in the App.js file.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts4_AddResizeDivFuncAppJsFile.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts4_AddResizeDivFuncAppJsFile.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;When the App is then published&lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts8_PublishApp.png" border="0" width="600" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;...and the &amp;#39;App Part&amp;#39; added to a SharePoint Wiki page&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts5_AddAppPartWikiPage.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts5_AddAppPartWikiPage.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;We get the html output as expected &lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts6_AppPartOnWikiPage.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts6_AppPartOnWikiPage.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;br /&gt;



&lt;p&gt;...however, when the &amp;#39;Large Div&amp;#39;
link is then selected, the larger output results in &amp;#39;horizontal&amp;#39; and &amp;#39;vertical&amp;#39;
scroll bars within the &amp;#39;App Part&amp;#39;, which appear due to the size of the iframe used
by the &amp;#39;App Part&amp;#39; remaining &amp;#39;static&amp;#39; whilst the height and width of dynamic html
output (from the underlying &amp;#39;ClientWebPart.aspx&amp;#39;) increases&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts7_AppPartOnWikiPage_LargeDiv.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts7_AppPartOnWikiPage_LargeDiv.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now compared to &amp;#39;normal Web Parts&amp;#39; this is a new problem that
developers might not have previously come across, but may now have to deal with
when working with &amp;#39;App Parts&amp;#39;, as &amp;#39;normal Web Parts&amp;#39; don&amp;#39;t (usually) use iframes to display their content.&lt;/p&gt;

&lt;p&gt;(oh and if you&amp;#39;re thinking of just setting the &amp;#39;height&amp;#39; and/or
&amp;#39;width&amp;#39; in the &amp;#39;Web Part Properties&amp;#39;... think again, as they relate to the parent
&amp;#39;wrapper&amp;#39; of the Web Part and not the iframe element within it)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts8_AppPart_WebPartHeightWidthProps.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts8_AppPart_WebPartHeightWidthProps.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;It is possible to set the initial &amp;#39;Width and Height&amp;#39;
properties via the &amp;#39;App Properties&amp;#39; of the App itself...&lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts9_DevAppProperties.png" border="0" width="600" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts10_DevAppProperties2.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts10_DevAppProperties2.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(example via Napa) .. but again, these aren&amp;#39;t dynamic, so still
won&amp;#39;t actually resolve the issue for dynamic content.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Luckily I came across the following post from &lt;a href="http://social.msdn.microsoft.com/profile/richard%20dizerega/" target="_blank"&gt;Richard
diZerega&lt;/a&gt; (... I really was surprised on how little SharePoint 2013 related information
I could actually find on this subject), &lt;a href="http://blogs.msdn.com/b/richard_dizeregas_blog/archive/2012/08/02/optimizing-user-experience-for-sharepoint-2013-apps.aspx" target="_blank"&gt;Optimizing
User Experience of Apps for SharePoint 2013&lt;/a&gt;, which clearly states:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;Resizing is controlled by the app part&amp;#39;s height and width web part
properties, which are ultimately applied to the height and width of the iframe
that gets rendered. These properties can be configured to a default size by the
developer in the Elements.xml, but can be changed by a site designer when
placed on a page. Unfortunately, app parts do not auto-size as the content
contained in them grows. Additionally, an app page cannot walk the DOM
hierarchy outside the page to adjust itself (this is blocked across domains).&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;To achieve this Microsoft has implemented the HTML5/javascript &lt;b&gt;postMessage framework&lt;/b&gt; to achieve
resizing from an &amp;#39;App Part&amp;#39; on Wiki/Web Part page. &lt;br /&gt;
window.postMessage enables safe cross-domain communication between a parent
page and iframe page, provided they are listening for messages.&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;So my second challenge for 2013... dynamic resizing of a
SharePoint 2013 App Part using the &lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh781494%28v=vs.85%29.aspx" target="_blank"&gt;postMessage
framework&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;To achieve this I created the following &amp;#39;PostResizeMessage&amp;#39; JS
function to the &amp;#39;App.js&amp;#39; file...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;code&gt;

function PostResizeMessage() {&lt;br /&gt;
&amp;nbsp;var target = parent.postMessage ? parent : (parent.document.postMessage ?
parent.document : undefined);&lt;br /&gt;
&amp;nbsp;var regex = new RegExp(/[Ss]ender[Ii]d=([\daAbBcCdDeEfF]+)/);&lt;br /&gt;
&amp;nbsp;results = regex.exec(this.location.search);&lt;br /&gt;
&amp;nbsp;if (null !== results &amp;amp;&amp;amp; null !== results[1]) {&lt;br /&gt;

&amp;nbsp;&amp;nbsp;target.postMessage(&amp;#39;&amp;lt;message
senderId=&amp;#39; + results[1] + &amp;#39;&amp;gt;resize(&amp;#39; + ($(document).width() )&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + &amp;#39;,&amp;#39; + ($(document).height())
+&amp;#39;)&amp;lt;/message&amp;gt;&amp;#39;, &amp;#39;*&amp;#39;);&lt;br /&gt;

&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;

&lt;/code&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;...and added the call to the end of the relative function (in
this case &amp;#39;ResizeDynamicDiv&amp;#39;)&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts11_AddPostResizeMsgAppJsFile.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts11_AddPostResizeMsgAppJsFile.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;You can also add a call within the &amp;#39;$(document).ready(function
()&amp;#39; or &amp;#39;sharePointReady()&amp;#39; function, to resize the iframe of the &amp;#39;App Part&amp;#39; on
the initial page load.&lt;/p&gt;

&lt;p&gt;(... like I said, I was really was surprised on how little information
I could actually find on this subject relating to SharePoint 2013, so apologies
if it&amp;#39;s not 100% &amp;#39;best practice&amp;#39;)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;One final step that I also make, mainly for testing/demo
purposes, is to add a border to &amp;#39;DynamicDiv&amp;#39; element via the App.css file (this
makes the resizing of the DynamicDiv more visible)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts12_AddDynDivBorderAppCssFile.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts12_AddDynDivBorderAppCssFile.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now when the &amp;#39;App Part&amp;#39; is re-published ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts13_AddDynDivAppPart.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts13_AddDynDivAppPart.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;..and the &amp;#39;Large Div&amp;#39; link is selected, the larger output no
longer results in any &amp;#39;horizontal&amp;#39; or &amp;#39;vertical&amp;#39; scroll bars within the &amp;#39;App
Part&amp;#39; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts14_DynDivAppPart_Expanded.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013ResizeAppParts14_DynDivAppPart_Expanded.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Happy coding... &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=287" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2013/default.aspx">SharePoint-2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Apps/default.aspx">Apps</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/App-Parts/default.aspx">App-Parts</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2013/default.aspx">SP2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PostMessage/default.aspx">PostMessage</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Resizing/default.aspx">Resizing</category></item><item><title>2013… a New Year, a New SharePoint Version and a New Set of Challenges - Developing Apps and App Parts</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2013/01/10/2013-A-New-Year-A-New-SharePoint-Version-A-New-Set-of-Challenges-Developing-Apps-and-App-Parts.aspx</link><pubDate>Thu, 10 Jan 2013 14:38:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:286</guid><dc:creator>aobi</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;One of the new &amp;#39;big things&amp;#39; that come with SharePoint 2013
are &amp;#39;Apps&amp;#39;.&lt;br /&gt; They&amp;#39;re everywhere and everything within SharePoint is now regarded
as an &amp;#39;App&amp;#39; (... even Lists and Libraries are now referred to as &amp;#39;Apps&amp;#39;)&lt;/p&gt;

&lt;p&gt;So my first challenge of the year... developing a SharePoint
2013 App!&lt;/p&gt;

&lt;p&gt;There are several good resources already available on the
subject, from background info (Ted Pattison&amp;#39;s &amp;#39;&lt;a href="http://blog.tedpattison.net/Lists/Posts/Post.aspx?List=9d54806e-14ca-456d-a62a-b903c9dda841&amp;amp;ID=14" target="_blank" title="Introducing SharePoint Apps"&gt;Introducing
SharePoint Apps&lt;/a&gt;&amp;#39; for example) to detailed, in-depth guides ( &amp;#39;&lt;a href="http://www.sharepointnutsandbolts.com/2012/08/sharepoint-2013-appsarchitecture.html" title="SharePoint 2013 apps - architecture, capability and UX considerations" target="_blank"&gt;SharePoint
2013 apps - architecture, capability and UX considerations&lt;/a&gt;&amp;#39; from Chris
O&amp;#39;Brien) as well as the usual tutorials, guides&amp;nbsp;
and videos available from MSDN (&lt;a href="http://msdn.microsoft.com/library/office/apps/fp179930%28v=office.15%29" title="Apps for SharePoint overview" target="_blank"&gt;Apps
for SharePoint overview&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/jj163091.aspx" title="What&amp;#39;s new for developers in SharePoint 2013" target="_blank"&gt;What&amp;#39;s new for
developers in SharePoint 2013&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/jj163230.aspx" title="Build apps for SharePoint" target="_blank"&gt;Build
apps for SharePoint&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Armed with this vast amount of information (along with
google/bing) ... how hard can it be? &lt;/p&gt;

&lt;p&gt;Well to be honest I&amp;#39;ve got to hand it to Microsoft, getting
my first working &amp;#39;app&amp;#39; up and running was a relatively quick and painless
matter (.. in fact I was able to create two).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;After setting up my Office 365 Developer site (if you
already have an o365 SharePoint site, but can&amp;#39;t seem to find the &amp;#39;Get Tools to
Build Apps&amp;#39; link, see &amp;#39;&lt;a href="http://www.brainlitter.com/2012/08/10/how-to-add-a-site-collection-for-enabling-napa-office-365-development-tools-in-sharepoint-office-365-preview/" title="How to Add a site collection for Office 365 Development Tools" target="_blank"&gt;How
to Add a site collection for Office 365 Development Tools&lt;/a&gt;&amp;#39; or alternatively
you can &amp;#39;&lt;a href="http://msdn.microsoft.com/en-us/library/fp179924.aspx" title="Sign up for a new Office 365 Developer Site" target="_blank"&gt;Sign
up for a new Office 365 Developer Site&lt;/a&gt;&amp;#39;), I simply followed a couple of
&amp;#39;Basic Tutorials&amp;#39; (&lt;a href="http://blogs.msdn.com/b/jasonz/archive/2012/07/17/introducing-napa-office-365-development-tools.aspx" title="Introducing Napa - Office 365 Development Tools" target="_blank"&gt;Introducing
Napa - Office 365 Development Tools&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/jj220041.aspx" title="How to: Create a basic app for SharePoint by using &amp;#39;Napa&amp;#39; Office 365 Development Tools" target="_blank"&gt;How to: Create a
basic app for SharePoint by using &amp;#39;Napa&amp;#39; Office 365 Development Tools&lt;/a&gt;) and
was pleased to have a couple of working (although limited) SharePoint 2013 Apps
to show for my time...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts1.png" title="SharePoint App 1"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts1.png" border="0" height="150" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts2.png" title="SharePoint App 2"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts2.png" border="0" height="290" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First challenge of the year completed? ... well as it turns
out, not quite.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;After publishing the completed Apps to my Developer site...&lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts8_PublishApp.png" border="0" height="78" width="600" alt="" /&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;...they became available as anticipated&amp;nbsp;
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts9_AppsInTestingHomePage.png" title="Apps In Testing"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts9_AppsInTestingHomePage.png" border="0" height="444" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;... and functioned as expected when clicked and accessed (via
the App Web)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts1.png" title="SharePoint App 1"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts1.png" border="0" height="150" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;However, when I then attempted to add them as &amp;#39;Web Parts&amp;#39; or
rather &amp;#39;App Parts&amp;#39; onto a Wiki page&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts10_AddAppPartToPage.png" title="Add App Part To Page"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts10_AddAppPartToPage.png" border="0" height="338" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;br /&gt;
(... see what I mean, Apps are everywhere!)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;I was rather disappointed when I was not presented with
&amp;#39;Hello&amp;#39;, but the default &amp;#39;your content goes here&amp;#39; ...&lt;/p&gt;


&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts11_AppPartAddedPage2.png" title="App Part Added to Page"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts11_AppPartAddedPage2.png" border="0" height="328" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;(along with a rather nasty looking blue background)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Returning to &amp;#39;Napa Office 365 Development Tool&amp;#39;, it becomes
apparent that x5 files are automatically generated at creation, as a starting
point for each new SharePoint App:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;i&gt;App.css&lt;/i&gt;&lt;br /&gt; &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts3_AppCssFile.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts3_AppCssFile.png" border="0" width="130" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;

&lt;li&gt;&lt;i&gt;AppIcon.png&lt;/i&gt;&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts4_AppIconFile.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts4_AppIconFile.png" border="0" width="130" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;

&lt;li&gt;&lt;i&gt;ClientWebPart.aspx&lt;/i&gt;&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts5_ClientWebPartFile.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts5_ClientWebPartFile.png" border="0" width="130" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;

&lt;li&gt;&lt;i&gt;Default.aspx&lt;/i&gt;&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts6_DefaultAspxFile.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts6_DefaultAspxFile.png" border="0" width="130" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;

&lt;li&gt;&lt;i&gt;App.js&lt;/i&gt;&lt;br /&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts7_AppJsFile.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts7_AppJsFile.png" border="0" width="130" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;App.css and AppIcon.png are both fairly self-explanatory,
whilst at first glance the others may not be. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;i&gt;ClientWebPart.aspx&lt;/i&gt; -&lt;br /&gt;Contains the html code used whenever the App is rendered via an &amp;#39;App Part&amp;#39;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;

&lt;li&gt;&lt;i&gt;Default.aspx&lt;/i&gt; - &lt;br /&gt;Contains the html code used whenever the App is rendered via the &amp;#39;Hosted version&amp;#39; of the App&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;

&lt;li&gt;&lt;i&gt;App.js&lt;/i&gt; -&lt;br /&gt;Contains the js code used by the App (and needs to be specifically referenced in both the Default.aspx and/or ClientWebPart.aspx files&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;So, in this particular instance, it&amp;#39;s clearly the
ClientWebPart.aspx file that needed updating...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts12_ClientWebPartFile_Updated.png" title="ClientWebPart.aspx (Updated)"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts12_ClientWebPartFile_Updated.png" border="0" height="405" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;adding a reference to the &amp;#39;App.js&amp;#39; file &lt;/p&gt;

&lt;code&gt;&amp;lt;!-- Add your JavaScript to the
following file --&amp;gt;&lt;br /&gt;
&amp;lt;script
type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;../Scripts/App.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/code&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;and adding a new &amp;#39;&amp;lt;p id=&amp;quot;message&amp;quot;&amp;gt;&amp;#39; tag (used
in the code of the &amp;#39;App.js&amp;#39; file to output the &amp;#39;Hello&amp;#39; message)&lt;/p&gt;

&lt;code&gt;
// This function is executed if the above call is successful&lt;br /&gt;
// It replaces the contents of the &amp;#39;helloString&amp;#39; element with the user name&lt;br /&gt;
&lt;br /&gt;
function onGetUserNameSuccess() {&lt;br /&gt;
$(&amp;#39;#message&amp;#39;).text(&amp;#39;Hello &amp;#39; + user.get_title());&lt;br /&gt;
}
&lt;/code&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now you might be thinking &amp;#39;great... everything&amp;#39;s ready to
go&amp;#39;, but if you try re-publishing the App again at this point, the default
&amp;#39;your content goes here&amp;#39; is still displayed.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts11_AppPartAddedPage1.png" title="AppPart Added to Page"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts11_AppPartAddedPage1.png" border="0" height="332" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The problem is due to the fact that that code in the
&amp;#39;App.js&amp;#39; file attempts to make calls to the &amp;#39;SharePoint Client Object Model&amp;#39;..&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts13_AppJsFile2.png" title="App.js File"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts13_AppJsFile2.png" border="0" height="195" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;To get this working there is one more critical step that&amp;#39;s
required... you need to add a reference to &amp;#39;&lt;b&gt;SP.js&lt;/b&gt;&amp;#39; (&lt;a href="http://msdn.microsoft.com/en-us/library/jj246996.aspx" title="SP Namespace (SP.js)" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/jj246996.aspx&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Unfortunately referencing &amp;quot;SP.js&amp;quot; is not as simple as you might
think, because before you can get SP.js, you have to get SP.Runtime.js...&lt;/p&gt;

&lt;p&gt;Luckily &lt;a href="http://twitter.com/coreyroth" title="Corey Roth" target="_blank"&gt;Corey Roth&lt;/a&gt;
has provided a step-by-step on how to get this done:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/10/19/how-to-use-the-sharepoint-2013-client-object-model-sp-js-from-a-client-web-part.aspx" title="How to: Use the SharePoint 2013 Client Object Model (SP.js) from a Client Web Part" target="_blank"&gt;How
to: Use the SharePoint 2013 Client Object Model (SP.js) from a Client Web Part&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;With this additional JS code added to the &amp;#39;App.js&amp;#39; file...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts13_AppJsFile_Updated.png" title="App.js File (Updated)" target="_blank"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts13_AppJsFile_Updated.png" border="0" height="399" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p&gt;and the reference to &amp;quot;jquery-1.6.2.min.js&amp;quot; file added
to the ClientWebPart.aspx file..&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts14_ClientWebPartFile_Updated2.png" title="ClientWebPart.aspx (Updated 2)"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts14_ClientWebPartFile_Updated2.png" border="0" height="388" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;The much awaited &amp;quot;Hello&amp;quot; message is displayed within the
&amp;#39;App Part&amp;#39;!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts15_WorkingAppPart.png" title="Working AppPart"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts15_WorkingAppPart.png" border="0" height="329" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;(...and in case you want to get rid of that &amp;#39;rather nasty
looking blue background&amp;#39;... update the App.css file accordingly)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts16_AppCssFileUpdated.png" title="App.css File (Updated)"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts16_AppCssFileUpdated.png" border="0" height="342" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts17_WorkingAppPartComplete.png" title="Working AppPart (Completed)"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePoint2013_NewChallenges_Apps/SP2013DevAppParts17_WorkingAppPartComplete.png" border="0" height="357" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=286" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2013/default.aspx">SharePoint-2013</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Apps/default.aspx">Apps</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/App-Parts/default.aspx">App-Parts</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2013/default.aspx">SP2013</category></item><item><title>SharePoint Saturday UK 2012 Rundown…</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2012/12/21/sharepoint-saturday-uk-2012-rundown.aspx</link><pubDate>Fri, 21 Dec 2012 17:39:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:281</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;    &lt;a href="http://www.sharepointsaturday.org/uk/" title="sharepoint saturday uk" target="_blank"&gt;
        SharePoint Saturday UK 2012&lt;/a&gt;, the third of the &lt;a href="http://www.sharepointsaturday.org/" target="_blank"&gt;SharePoint Saturday events&lt;/a&gt;
    held in the UK, took place a couple of weeks ago and I was lucky enough to grab
    one of the free tickets again for the third year in a row.
&lt;/p&gt;
    
&lt;p&gt;
        This year&amp;#39;s event was professionally organised (as always) by the &lt;a href="http://id-live.com/" target="_blank"&gt;Id-Live&lt;/a&gt; &amp;amp; &lt;a href="http://lightningtools.com/" target="_blank"&gt;Lightning Tools&lt;/a&gt; team (along with
        their sponsors who are &lt;b&gt;vital&lt;/b&gt;, as they keep the event &lt;b&gt;FREE&lt;/b&gt;) and was
        held at the East Midlands Conference Centre in Nottingham for a second year.&lt;/p&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        &lt;a href="https://twitter.com/eshupps" target="_blank"&gt;Eric Shupps&lt;/a&gt;
        kicked things off with an inspiring Keynote, not only taking a look back over previous
        SharePoint versions, but also reflecting on the history of the SharePoint Community
        itself (presenting some very interesting community statistics and acknowledging
        some of SUGUK Community legends in the process).&amp;nbsp;&lt;/p&gt;
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000158.jpg"&gt;
            &lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000158.jpg" title="SP Community: Success of SharePoint is due to your work" alt="SP Community: Success of SharePoint is due to your work" border="0" hspace="10" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;
    
&lt;p&gt;
        He then turned his focus to SharePoint 2013 and some of many new features and architecture
        changes that come with it&amp;nbsp; (such as ‘shredded storage&amp;#39;, ‘distributed cache&amp;#39;,
        ‘workflow management&amp;#39;, ‘office web apps&amp;#39;, ‘claims&amp;#39;, ‘search&amp;#39;, ‘social features -
        reputation points, newsfeeds, bi-directional tasks&amp;#39;, ‘device channels&amp;#39;, ‘design
        manager&amp;#39;... and of course not forgetting ‘SharePoint Apps&amp;#39;!!)&lt;/p&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        The first session of the day was &amp;quot;SP2013 - What&amp;#39;s New for IT Pro&amp;#39;s&amp;quot; presented by
        &lt;a href="http://www.johntimney.com/" target="_blank"&gt;John Timney&lt;/a&gt; (&lt;a href="http://twitter.com/jtimney" target="_blank"&gt;@jtimney&lt;/a&gt;),
        in which he covered:&lt;/p&gt;
    
&lt;ul class="unIndentedList"&gt;
        
&lt;li&gt;Visio Process Repository (is currently still in RTM, but all doco says is/will be
            removed)&lt;/li&gt;
        
&lt;li&gt;Design Manager (unfortunately probably only really going to useful with Publishing
            Sites)&lt;/li&gt;
        
&lt;li&gt;Office web apps (Big Changes as now runs on own server.. single office web app sever
            can service multiple SharePoint Servers)&lt;/li&gt;
        
&lt;li&gt;Analytics Server (see above - theoretically very similar)&lt;/li&gt;
        &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000168.jpg"&gt;
            &lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000168.jpg" align="right" border="0" hspace="20" width="300" alt="" /&gt;&lt;/a&gt;
        
&lt;li&gt;Can run 10,000 users off single office web app server (.. has become v. efficient
            compared to SP2010) &lt;/li&gt;
        
&lt;li&gt;Work Management Service: Task Aggregation (bi-direction tasks with Exchange - although
            requires Exchange 2013)&lt;/li&gt;
        
&lt;li&gt;Translation Service: Attaches to &amp;#39;external translation services&amp;#39; (Potential security
            issues - what goes on behind the scenes when translation happens? ...what info does
            Bing keep/store after translation???)&lt;/li&gt;
        
&lt;li&gt;App Management Service: Catalogue is on-premise&lt;/li&gt;
        
&lt;li&gt;No more Social DB (Info stored in Personal Site DB)&lt;/li&gt;
        
&lt;li&gt;&amp;#39;MySites is required from day 1 in SP2013 for Social Features&amp;#39;!! (No more rolling
            out My Sites in Phase 2 / Phase 3 of a deployment)&lt;/li&gt;
        
&lt;li&gt;Search: Only 1 single Search Engine in SP2013 ... across all versions!!! (and apparently
            the underlying code ISN&amp;#39;T JUST FAST from SP2010!! ... instead has been rebuilt from
            ground up)&lt;/li&gt;
        
&lt;li&gt;Upgrades: DB Attach - Only options (yeah!!!)&lt;/li&gt;
        
&lt;li&gt;All content DBs can be upgraded&lt;/li&gt;
        
&lt;li&gt;Not all Service Apps can be upgraded (Due to architecture changes some need to be
            recreated)&lt;/li&gt;
        
&lt;li&gt;Deferred Site Collections: Run in SP2010 compatibility mode...&lt;/li&gt;
        
&lt;li&gt;Cannot upgrade PowerPoint Broadcast sites (not supported)&lt;/li&gt;
        
&lt;li&gt;Cannot upgrade analytics as have to remove the Analytics DB before an upgrade (cannot
            just remove Service app)&lt;/li&gt;
        
&lt;li&gt;Skydrive Pro: Works with SP2010 and SP2013 (theoretically &amp;#39;any version of SP&amp;#39; -
            SYNCS doc libraries)&lt;/li&gt;
        
&lt;li&gt;Shredded Storage: SQL 2012 required&lt;/li&gt;
        
&lt;li&gt;Always On DB Availability&lt;/li&gt;
        
&lt;li&gt;SQL Mirroring - deprecated in SQL 2012 &lt;/li&gt;
        
&lt;li&gt;Distributing Caching&lt;/li&gt;
        
&lt;li&gt;Caching Tokens&lt;/li&gt;
        
&lt;li&gt;Request Management: Route traffic based on &amp;#39;custom rules&amp;#39; (Rules written in PowerShell)&lt;/li&gt;
        
&lt;li&gt;Browser/ Device Support: ARM Device - IE 9-10 and on Win RT, Windows Phone 7.5 ie9
            or later (renders HTML 5)&lt;/li&gt;
        
&lt;li&gt;Companion Device License required for any NON Windows Device (this is in addition
            to standard SP Cal licensing requirements!!!)&lt;/li&gt;
    &lt;/ul&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        Second session was &amp;quot;&lt;a href="http://www.sharepointnutsandbolts.com/2012/12/slide-decks-for-my-getting-to-grips.html" target="_blank"&gt;Getting
            Grips with SP2013 Apps&lt;/a&gt;&amp;quot; presented by &lt;a href="http://www.sharepointnutsandbolts.com/" target="_blank"&gt;
                Chris O&amp;#39;brien&lt;/a&gt; (&lt;a href="http://twitter.com/ChrisO_Brien" target="_blank"&gt;@ChrisO_Brien&lt;/a&gt;),
        in which Chris covered the following:&lt;/p&gt;
    
&lt;ul class="unIndentedList"&gt;
        
&lt;li&gt;MS potentially trying to shift problematic areas (ie. &amp;#39;custom code&amp;#39;) outside of
            SharePoint itself&lt;/li&gt;
        
&lt;li&gt;SharePoint Apps require SSL on both SP and APP host for data transfer (Chris recommends
            SSL on both Prod and Dev environments)&lt;/li&gt;
        
&lt;li&gt;Need wildcard SSL cert AND wildcard CNAME in DNs (APPs require used dynamic URLs)&lt;/li&gt;
        
&lt;li&gt;Considerations: Do want to allow any &amp;#39;app&amp;#39; or restrict to &amp;#39;approved apps&amp;#39; (app store
            vs internal catalogue)&lt;/li&gt;
        
&lt;li&gt;App Hosting Options:&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000217.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000217.jpg" align="right" border="0" hspace="20" width="300" alt="" /&gt;&lt;/a&gt;&lt;/li&gt;
        

            
&lt;li style="margin-left:20px;"&gt;SharePoint-Hosted - runs on same SP server (still isolated) no serverside code,
                javascript only (client api massively expanded)&lt;/li&gt;


        

            
&lt;li style="margin-left:20px;"&gt;Cloud App / Provider Hosted: a) Auto-hosted (o365 + azure etc) - additional azure
                bundle (for hosting SQL for example) comes free with O365 hosting .. b) provider
                hosted - you deal with app backend (can code in any language)&lt;/li&gt;

        

            
&lt;li style="margin-left:20px;"&gt;Hybrid App (combination of both)&lt;br /&gt;
            &lt;/li&gt;
        
        
&lt;li&gt;Tenant Install Apps - Single instance of an app shared across multiple sites (instead
            of instance per site) (see &lt;a href="http://msdn.microsoft.com/en-us/library/fp179896.aspx" target="_blank"&gt;
                http://msdn.microsoft.com/en-us/library/fp179896.aspx&lt;/a&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/fp179922.aspx" target="_blank"&gt;
                    http://msdn.microsoft.com/en-us/library/fp179922.aspx&lt;/a&gt;)&lt;/li&gt;
        
&lt;li&gt;&amp;quot;APP ID&amp;quot; section of APP URL auto-generated and is unique for each APP install/upgrade&lt;/li&gt;
        
&lt;li&gt;REST JSON queries apparently easier to work with in jQuery rather than the default
            XML&lt;/li&gt;
        
&lt;li&gt;Auto-Hosted Apps (auto hookup handles oAuth configuration) vs. Provided Hosted Apps
            (requires manual oAuth conf)&lt;/li&gt;
    &lt;/ul&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        My third session was &amp;quot;&lt;a href="http://www.paulgrimley.com/2012/12/sharepoint-saturday-2012-slides.html" target="_blank"&gt;Considerations
            for Upgrading from 2010 - SP2013&lt;/a&gt;&amp;quot; presented by &lt;a href="http://www.paulgrimley.com/" target="_blank"&gt;
                Paul Grimely&lt;/a&gt; (&lt;a href="http://twitter.com/PaulGrimley" target="_blank"&gt;@PaulGrimley&lt;/a&gt;),
        in which Paul discussed:&lt;/p&gt;
    
&lt;ul class="unIndentedList"&gt;
        
&lt;li&gt;Why upgrade&lt;/li&gt;
        
&lt;li&gt;Managing Demand &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000236.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000236.jpg" align="right" border="0" hspace="20" width="300" alt="" /&gt;&lt;/a&gt;&lt;/li&gt;
        
&lt;li&gt;Authentication - (claims recommended - create classic WebApp in SP2013 - attach
            dbs - PowerShell change to claims ...detach dbs.. attach to claims WebApp)&lt;/li&gt;
        
&lt;li&gt;Review unwanted feature set before migrating&lt;/li&gt;
        
&lt;li&gt;Remove unwanted legacy solutions from DB prior to upgrade&lt;/li&gt;
        
&lt;li&gt;Unknown 2010 pre-reqs SP level for upgrade (Paul recommended a minimum of SP1..
            currently unconfirmed TechNet)&lt;/li&gt;
        
&lt;li&gt;Ensure all SP2010 are using v4 UI (not v3) prior to upgrade&lt;/li&gt;
        
&lt;li&gt;Service Apps: Office Web Apps, Excel Services (check for user defined functions)&lt;/li&gt;
        
&lt;li&gt;Resource Farms - Upgrade these first!!&lt;/li&gt;
        
&lt;li&gt;Content DBs: before attaching use Health Analyser to check for issues (ensure this
            IS NOT DONE on live)&lt;/li&gt;
        
&lt;li&gt;Site collection upgrade&lt;/li&gt;
        
&lt;li&gt;Upgrade content db process is way faster compared SP2010&lt;/li&gt;
        
&lt;li&gt;Both &amp;quot;individual&amp;quot; and &amp;quot;bulk&amp;quot; upgrades possible&lt;/li&gt;
        
&lt;li&gt;My Sites - Upgraded first time user hits his/her My Site&lt;/li&gt;
    &lt;/ul&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        Fourth session of the day was &amp;quot;SharePoint 2013 Business Connectivity Services&amp;quot; presented
        by &lt;a href="http://www.sharepointdesignerstepbystep.com/" target="_blank"&gt;Penny Coventry&lt;/a&gt; (&lt;a href="http://twitter.com/pjcov" target="_blank"&gt;@pjcov&lt;/a&gt;) and &lt;a href="http://brettlonsdale.wordpress.com/" target="_blank"&gt;
                Brett Lonsdale&lt;/a&gt; (&lt;a href="http://twitter.com/brettlonsdale" target="_blank"&gt;@brettlonsdale&lt;/a&gt;)&lt;/p&gt;
    
&lt;ul class="unIndentedList"&gt;
        
&lt;li&gt;Everything&amp;#39;s an APP in SP2013 (just in case you hadn&amp;#39;t already noticed... even SPLists,
            SP Libraries etc. are now referred to as ‘Apps&amp;#39;)&lt;/li&gt;
        
&lt;li&gt;BCS External Content Types (ECTs) deployed as ‘Apps&amp;#39; &lt;/li&gt;
        
&lt;li&gt;Authentication Options (pretty much the same as SP2010)&lt;/li&gt;
        
&lt;li&gt;New Data Provider protocol (oData)&lt;/li&gt;
        
&lt;li&gt;oData External Content Type (ECT) only creatable from VS (not available in SPDesigner)&lt;/li&gt;
        
&lt;li&gt;BCS DB naming confusing (Manage Metadata store menu option available from within
            CA... Nothing to do with Manage Metadata Service)&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000247.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000247.jpg" align="right" border="0" hspace="20" width="300" alt="" /&gt;&lt;/a&gt;&lt;/li&gt;
        
&lt;li&gt;&amp;#39;Export To Excel&amp;#39; and &amp;#39;Event Listeners&amp;#39; now available for External Lists (for example,
            could create &amp;#39;event listeners&amp;#39; for External Lists, to kick off a workflow based
            on change to external data)&lt;/li&gt;
        
&lt;li&gt;External Lists and Business Data Column has not really changed much from SP2010&lt;/li&gt;
        
&lt;li&gt;External List - &amp;quot;Item Picker&amp;quot; Still limited to 200 items by default (can be updated
            from PowerShell)&lt;/li&gt;
        
&lt;li&gt;Word Quick Parts - Create Lookup columns (against external list column) - Lookup
            column then available as &amp;#39;quick part&amp;#39; within Word&lt;/li&gt;
        
&lt;li&gt;Client Object Model (CSOM) - contains support for querying BCS content source(s)&lt;/li&gt;
        
&lt;li&gt;Creating oData ECT from Visual Studio 2012 (oData contains &amp;quot;schema info&amp;quot; so VS can
            create ECT automatically)&lt;/li&gt;
        
&lt;li&gt;‘Related External List&amp;#39; Web Part (Requires &amp;#39;Create Association&amp;#39; operation at the
            ECT level)&lt;/li&gt;
        
&lt;li&gt;oData data source available directly as &amp;quot;Add Item&amp;quot; in VS2012 (Simply enter the URL
            of oData data source - see oData.org for sample data site/services)&lt;/li&gt;
    &lt;/ul&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        Fifth session was &amp;quot;&lt;a href="http://www.edutechnow.com/?p=1915" target="_blank"&gt;How Workflows have evolved
            in SharePoint 2013&lt;/a&gt;&amp;quot; by &lt;a href="http://www.edutechnow.com/?page_id=1537" target="_blank"&gt;Alan Richards&lt;/a&gt;
        (&lt;a href="http://twitter.com/arichards_Saruk" target="_blank"&gt;@arichards_Saruk&lt;/a&gt;), which he reviewed
        the new &amp;quot;workflow landscape&amp;quot; in SharePoint 2013:&lt;/p&gt;
    
&lt;ul class="unIndentedList"&gt;
        
&lt;li&gt;Stages &amp;amp; Transitions (Stages - carry out specific task/function vs. Transitions
            -&amp;quot;mark&amp;quot; or &amp;quot;go to&amp;quot; specific &amp;#39;Stage&amp;#39; of workflow depending on condition(s))&lt;/li&gt;
        
&lt;li&gt;Looping (Loop n times or loop with/based on condition)&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000263.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000263.jpg" align="right" border="0" hspace="20" width="300" alt="" /&gt;&lt;/a&gt;&lt;/li&gt;
        
&lt;li&gt;Visual Workflow Designer (Requires Visio Professional)&lt;/li&gt;
        
&lt;li&gt;Workflows are Apps ...surprise surprise (they have an identity, so no revert to
            self, which uses a combination of App/User permissions by default - least permissions
            wins)&lt;/li&gt;
        
&lt;li&gt;Can use an &amp;quot;App Step&amp;quot; (... effectively re-introducing &amp;quot;revert to self/app&amp;quot; type
            functionality???)&lt;/li&gt;
        
&lt;li&gt;Standard SP2013 install only gives SP2010 workflows OOB (Need to install Workflow
            Manager, on separate webserver instance, for SP2013 workflow capabilities&lt;/li&gt;
        
&lt;li&gt;Workflow Client (if Workflow Manager is on Remote Server then must be installed
            on all SP WFE Server(s), otherwise Workflow Client installed automatically if/when
            Workflow Manager installed locally on SP Server)&lt;/li&gt;
        
&lt;li&gt;Uses oAuth for all communication between servers&lt;/li&gt;
        
&lt;li&gt;Register-SPWorkflowService (use port 12290 for https and 12291 for http)&lt;/li&gt;
        
&lt;li&gt;SPDesigner (once Workflow Manager is installed + setup, everything works as normal
            - to edit Workflows open/connect to the SPSite as normal.. not to the Workflow Manager
            Server)&lt;/li&gt;
        
&lt;li&gt;SSL Certs (Specify https during Workflow Manager config/setup, then install Cert
            on IIS - thats it!!)&lt;/li&gt;
    &lt;/ul&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        My final session of the day was &amp;quot;&lt;a href="https://t.co/MaQoVVdL" target="_blank"&gt;What&amp;#39;s New in SP2013&lt;/a&gt;&amp;quot;
        presented by &lt;a href="http://blog.njpenterprises.com/" target="_blank"&gt;Nigel Price&lt;/a&gt; (&lt;a href="http://twitter.com/Nigel_Price" target="_blank"&gt;@Nigel_Price&lt;/a&gt;),
        in which Nigel presented a high level overview of a variety new features of SharePoint
        2013, including&lt;/p&gt;
    
&lt;ul class="unIndentedList"&gt;
        
&lt;li&gt;Looking up CorrelationIDs on O365 (submitted via PowerShell)&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000273.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Dec2012/WP_000273.jpg" align="right" border="0" hspace="20" width="300" alt="" /&gt;&lt;/a&gt;&lt;/li&gt;
        
&lt;li&gt;Mark Up Improvements (No more tables in Web Parts and Web Part Zones, Client site
            rendering for Content Search WebPart, CSS completely re-written + simplified)&lt;/li&gt;
        
&lt;li&gt;Display Templates (define visual layout of a Result Type)&lt;/li&gt;
        
&lt;li&gt;Contoso Electronics Demo site &lt;/li&gt;
        
&lt;li&gt;Secondary (Shadow) accounts&lt;/li&gt;
        
&lt;li&gt;PDF Support OOB (no iFilter required)&lt;/li&gt;
        
&lt;li&gt;UPS Sync Performance Changes &amp;amp; Improvements&lt;/li&gt;
        
&lt;li&gt;User Licence Enforcement (can now grant/restrict users from accessing SharePoint
            Enterprise Features based on Security Group membership)&lt;/li&gt;
    &lt;/ul&gt;
    
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;All in all another great SharePoint Saturday!&lt;/p&gt;

&lt;p&gt;As usual a &lt;b&gt;HUGE THANKS&lt;/b&gt; goes to the event organisers Brett Lonsdale (&lt;a href="http://twitter.com/brettlonsdale" target="_blank"&gt;@brettlonsdale&lt;/a&gt;) ,
Tony Pounder(&lt;a href="http://twitter.com/WorTony" target="_blank"&gt;@WorTony&lt;/a&gt;)
and Mark Macrae(&lt;a href="http://twitter.com/m_macrae" target="_blank"&gt;@m_macrae&lt;/a&gt;)
as well as all of the &lt;a href="http://www.sharepointsaturday.org/uk/Pages/sponsors.aspx" target="_blank"&gt;event
sponsors&lt;/a&gt; who made the day possible.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=281" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Conference/default.aspx">Conference</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SPSUK/default.aspx">SPSUK</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-Saturday/default.aspx">SharePoint-Saturday</category></item><item><title>Five other things you can do with AutoSPInstaller</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2012/10/26/five-other-things-you-can-do-with-autospinstaller.aspx</link><pubDate>Fri, 26 Oct 2012 20:04:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:269</guid><dc:creator>aobi</dc:creator><slash:comments>1</slash:comments><description>&lt;h4 class="BlogPostHeader"&gt;(and the PowerShell REM Command)&lt;/h4&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;As you&amp;#39;re probably already aware &lt;a href="http://autospinstaller.codeplex.com/" title="autospinstaller.codeplex.com" target="_blank"&gt;AutoSPInstaller&lt;/a&gt; is a PowerShell script,
by &lt;a href="http://twitter.com/brianlala" target="_blank"&gt;Brian Lalancette&lt;/a&gt;, for automating
SharePoint 2010 (and now SharePoint 2013) installations.&lt;/p&gt;

&lt;p&gt;It really is a superb utility that any respectable
SharePointer should definitely have in their &amp;quot;toolkit&amp;quot;.&lt;br /&gt;
(I would even go as far to say &amp;quot;if &lt;a href="http://blogs.msdn.com/b/ronalus/archive/2007/01/04/stsadmwin-has-an-2007-version.aspx" target="_blank"&gt;STSAdmWin&lt;/a&gt;
was the must have utility for SharePoint 2007, then AutoSPInstaller is the must
have utility for SharePoint 2010&amp;quot;)&lt;/p&gt;

&lt;p&gt;Now I&amp;#39;m not going to cover how to setup and run
AutoSPInstaller for new SharePoint installations, there are plenty of great
posts already available detailing how this can be done (see &lt;a href="http://twitter.com/tobiaslekman" target="_blank"&gt;Tobias Lekman&lt;/a&gt;&amp;#39;s &amp;quot;&lt;a href="http://blog.lekman.com/2010/11/automated-sharepoint-2010-installations.html" target="_blank"&gt;Automated
SharePoint Installations: Step-by-step&lt;/a&gt;&amp;quot; for example)&lt;/p&gt;

&lt;p&gt;Instead, I&amp;#39;m going to demonstrate how AutoSPInstaller can be
used to perform other SharePoint related tasks against &lt;b&gt;existing&lt;/b&gt; SharePoint environments...&lt;/p&gt;

&lt;p&gt;.... using nothing more than the &lt;a href="http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/16/add-excellent-comments-to-your-powershell-script.aspx" target="_blank"&gt;PowerShell
REM Command&lt;/a&gt; &amp;quot;#&amp;quot;&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;If you haven&amp;#39;t already taken a look, AutoSPInstaller is
comprised of x4 PowerShell Scripts ...&lt;/p&gt;

&lt;ul class="unIndentedList"&gt;
&lt;li&gt;
AutoSPInstallerMain.ps1&lt;/li&gt;

&lt;li&gt;
AutoSPInstallerFunctions.ps1&lt;/li&gt;

&lt;li&gt;
AutoSPInstallerFunctionsCustom.ps1&lt;/li&gt;

&lt;li&gt;
AutoSPInstallerConfigureRemoteTarget.ps1 ( this
file was introduced in v3, so if it&amp;#39;s missing it means you&amp;#39;re running a pre v3
version)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_1.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;The vast majority of code is located within &amp;quot;AutoSPInstallerMain&amp;quot;
(the script file that serves as the ‘controller&amp;#39; for the scripted process) and
&amp;quot;AutoSPInstallerFunctions&amp;quot; (which contains the majority of functions and actual code).&lt;/p&gt;

&lt;p&gt;If we take a look inside the &amp;quot;AutoSPInstallerMain&amp;quot; (or &amp;quot;controller&amp;quot;)
script...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_2.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;.. we can see there are x9 defined Regions:&lt;/p&gt;

&lt;p&gt;
1. Setup Paths &amp;amp; Environment&lt;br /&gt;
2. External Functions&lt;br /&gt;
3. Remote Install&lt;br /&gt;
4. Prepare For Install&lt;br /&gt;
5. Install SharePoint binaries&lt;br /&gt;
6. Setup Farm&lt;br /&gt;
7. Setup Services&lt;br /&gt;
8. Finalize Install&lt;br /&gt;
9. MAIN 
&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Again,
I&amp;#39;m not going to provide a detailed description of each region (...perhaps I&amp;#39;ll
cover that another time), but instead focus on &amp;quot;Prepare For Install&amp;quot;, &amp;quot;Install
SharePoint binaries&amp;quot;, &amp;quot;Setup Farm&amp;quot;, &amp;quot;Setup Services&amp;quot;, &amp;quot;Finalize Install&amp;quot; and &amp;quot;MAIN&amp;quot;.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;If we expand &amp;quot;MAIN&amp;quot; and locate the first &amp;quot;Try
{ }&amp;quot; block, we can see that the functions from the x5 other regions are being
called...&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_3.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_3.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;...
and this will be our starting point for creating all &amp;quot;other uses&amp;quot; for
AutoSPInstaller.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;PrepForInstall&lt;/h2&gt;

&lt;p&gt;This
is used to perform a series of &amp;quot;prerequisite configuration checks&amp;quot;...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_4.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_4.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Run-Install&lt;/h2&gt;

&lt;p&gt;This
is used by AutoSPInstaller to perform the actual installation of
&amp;quot;Prerequisites&amp;quot;, &amp;quot;SharePoint&amp;quot;, &amp;quot;Office Web Apps&amp;quot; and &amp;quot;Language Pack&amp;quot; binaries. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_10a.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_10a.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Setup-Farm&lt;/h2&gt;

&lt;p&gt;This is used by AutoSPInstaller to add the FarmAdmin account to the ‘local
Administrators&amp;#39; group, load the SharePoint PowerShell cmdlets, create (or join)
and configure the SharePoint Farm itself, configure Diagnostic Logging, configure
Office Web Apps, configure Language Packs, add Managed Accounts and finally create
any Web Applications that are defined in the &amp;quot;AutoSPInstallerInput.xml&amp;quot; config
file&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_11b.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_11b.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Setup-Services &lt;/h2&gt;

&lt;p&gt;This is where
the majority of AutoSPInstaller magic occurs. &lt;/p&gt;

&lt;p&gt;All &amp;quot;Service Apps&amp;quot; defined in the &amp;quot;AutoSPInstallerInput.xml&amp;quot;
config file are created... &amp;quot;Usage Logging&amp;quot;, &amp;quot;Tracing&amp;quot;, &amp;quot;Outgoing Email&amp;quot; &amp;nbsp;&amp;quot;Foundation Search&amp;quot; and &amp;quot;PDF Search&amp;quot; are all configured...
as well as performing the installation of &amp;quot;ForeFront&amp;quot;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_14.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_14.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Finalize-Install&lt;/h2&gt;

&lt;p&gt;This performs some clean-up operations - removing the Farm
Account from the local Administrators group and adding Network Service to local
WSS_WPG group.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_15.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_15.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The
first of the functions to get called is &amp;quot;PrepForInstall&amp;quot; and also happens to
provide the first example of &amp;quot;other potential uses&amp;quot; for AutoSPInstaller...&lt;/p&gt;


&lt;p id="ValidateUser"&gt;&lt;b&gt;1. Validate User Credentials &amp;amp; Passphrase&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;By
commenting out the other x4 function calls (along with the conditional ‘Install-Remote&amp;#39;
call) ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_5.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_5.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;..
. and then commenting out the &amp;quot;CheckSQLAccess&amp;quot; call located in the &amp;quot;PrepForInstall&amp;quot;
function, &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_6.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_6.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;..
when &amp;quot;AutoSPInstallerLaunch.bat&amp;quot; &amp;nbsp;is run (after
saving these changes to the &amp;quot;AutoSPInstallerMain.ps1&amp;quot; file) the only actions
that are executed are&lt;/p&gt;

&lt;ul class="unIndentedList"&gt;
&lt;li&gt;
ValidateCredentials&lt;/li&gt;

&lt;li&gt;
ValidatePassphrase&lt;/li&gt;

&lt;li&gt;
CheckConfig&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Affectively turning the script into a way of checking that the
&amp;quot;User Credentials&amp;quot; specified in the &amp;quot;AutoSPInstallerInput.xml&amp;quot; config file are
valid and can authenticate successfully (which can be useful if passwords have
been changed at a later date after an install), as well as confirming whether the &amp;quot;Passphrase&amp;quot;
meets the necessary complexity requirements.&lt;/p&gt;

&lt;p&gt;You
can also comment out the &amp;quot;CheckConfig&amp;quot; function if you wish, but as it only
checks for the existence of the &amp;quot;configuration file&amp;quot;...
 
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_7.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_7.png" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;..
I tend to leave it in place.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p id="ValidateSQL"&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Validate SQL Access and SQL Permissions &lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This
is achieved by commenting out the x4 function calls (along with the conditional
‘Install-Remote&amp;#39; call) located in MAIN ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_5.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_5.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;..
and commenting out the &amp;quot;ValidateCredentials&amp;quot; and &amp;quot;ValidatePassphrase&amp;quot; calls
located in the &amp;quot;PrepForInstall&amp;quot; function (and re-instating the &amp;quot;CheckSQLAccess&amp;quot;
call if commented out earlier).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_8.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_8.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now
when the &amp;quot;AutoSPInstallerMain.ps1&amp;quot; file is saved and &amp;quot;AutoSPInstallerLaunch.bat&amp;quot;
is run, the only actions that are executed are&lt;/p&gt;

&lt;ul class="unIndentedList"&gt;
&lt;li&gt;
CheckConfig&lt;/li&gt;

&lt;li&gt;
CheckSQLAccess&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Affectively turning the script into a useful way of
verifying &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;a)&lt;/b&gt; all &amp;quot;SQL Database Servers&amp;quot; specified in the &amp;quot;AutoSPInstallerInput.xml&amp;quot;
config file are valid and accessible from the SharePoint server .&lt;br /&gt;
(it will attempt to open and close a connection to each SQL Server
specified and also check that the version of SQL meets the minimum compatibility
requirements for SharePoint)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;b)&lt;/b&gt; that the &amp;quot;SQL Alias&amp;quot; specified in the &amp;quot;AutoSPInstallerInput.xml&amp;quot;
config file, is still present and valid.&lt;br /&gt;
(it will actually attempt to re-create the &amp;quot;SQL Alias&amp;quot; if it has been
deleted)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;c)&lt;/b&gt; that the current user (executing the script) has
&amp;quot;dbcreator&amp;quot; and &amp;quot;securityadmin&amp;quot; permissions on each of the SQL
Servers specified.&lt;br /&gt;
(this can be useful if SQL permissions have been altered after an install)&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;The script can be run repeatedly in this state quite safely (even
under different credentials) and can even be used to check for &amp;quot;sysadmin&amp;quot;
SQL permissions, by setting the &amp;quot;PerformancePointService Provision=&amp;#39;true&amp;#39;&amp;quot; in
the &amp;quot;AutoSPInstallerInput.xml&amp;quot; config file.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The second of the functions to get called from within MAIN is
&amp;quot;Run-Install&amp;quot;. As mentioned previously its primary function is to perform the
actual installation of binaries. However, it also performs a few other useful
&amp;quot;server configuration tasks&amp;quot;...&lt;/p&gt;

&lt;p id="ServerConfig"&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;Server Configuration:
RemoveIEEnhancedSecurity, AddSourcePathToLocalIntranetZone and
ConfigureIISLogging&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This is achieved by commenting out the &amp;quot;PrepForInstall&amp;quot;,
&amp;quot;Setup-Farm&amp;quot;, &amp;quot;Setup-Services&amp;quot; and &amp;quot;Finalize-Install&amp;quot; function calls
(along with the conditional ‘Install-Remote&amp;#39; call) located in MAIN ...&lt;/p&gt;

&lt;p&gt;&lt;b&gt;
 
&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_9.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_9.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;.. . and then commenting out the &amp;quot;DisableLoopbackCheck&amp;quot;, &amp;quot;DisableServices&amp;quot;,
&amp;quot;DisableCRLCheck&amp;quot;, &amp;quot;InstallPrerequisites&amp;quot;,&amp;nbsp;
&amp;quot;InstallSharePoint&amp;quot;, &amp;quot;InstallOfficeWebApps&amp;quot;, &amp;quot;InstallLanguagePacks&amp;quot; and
&amp;quot;FixTaxonomyPickerBug&amp;quot; calls located in the &amp;quot;Run-Install&amp;quot; function&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_10.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_10.png" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;
 
&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now
when the &amp;quot;AutoSPInstallerMain.ps1&amp;quot; file is saved and &amp;quot;AutoSPInstallerLaunch.bat&amp;quot;
is run, the only actions that are executed are&lt;/p&gt;

&lt;ul class="unIndentedList"&gt;
&lt;li&gt;
RemoveIEEnhancedSecurity&lt;/li&gt;

&lt;li&gt;
AddSourcePathToLocalIntranetZone &lt;/li&gt;

&lt;li&gt;
ConfigureIISLoggingCheckSQLAccess&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Affectively turning the script into a useful way of &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;a)&lt;/b&gt; Internet Explorer Enhanced Security
Configuration &lt;br /&gt;
(prevents those annoying security pop-ups in IE)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;b) &lt;/b&gt;adding the hostname to the Local Intranet zone &lt;br /&gt;
(prevents annoying &amp;quot;Open File - Security Warnings&amp;quot;)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;c)&lt;/b&gt; setting the &amp;quot;IIS Log File Directory&amp;quot; to the
location specified in the AutoSPInstallerInput.xml&amp;quot; config file and enabling
NTFS compression to save disk space&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;You
can also leave any/all of the &amp;quot;Disable&amp;quot; functions (&amp;quot;DisableLoopbackCheck&amp;quot;, &amp;quot;DisableServices&amp;quot;,
&amp;quot;DisableCRLCheck&amp;quot;) uncommented if you wish, as this will cause the script also
&amp;quot;disable the loopback check&amp;quot; (for stand-alone demo servers), disable &amp;quot;unused services&amp;quot;
(&amp;quot;Spooler&amp;quot;,&amp;quot;AudioSrv&amp;quot; and &amp;quot;TabletInputService&amp;quot;) &amp;nbsp;and disable the &amp;quot;Certificate Revocation List&amp;quot;.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;
&lt;/p&gt;

&lt;p&gt;The
third of the functions to get called from MAIN is &amp;quot;Setup-Farm&amp;quot;.&lt;br /&gt;
Most of these tasks contained within this function have the ability to update the
actual SharePoint Farm Configuration itself. Running them against an &amp;quot;existing/live&amp;quot;
SharePoint environment could potentially create problems.&lt;/p&gt;

&lt;p&gt;If
configuration changes have been made manually on &amp;quot;existing/live&amp;quot; SharePoint environment,
but NOT updated in the &amp;quot;AutoSPInstallerInput.xml&amp;quot; config file, then the &amp;quot;Setup-Farm&amp;quot;
function can potentially &amp;quot;update&amp;quot; configuration settings back to their original
install values.&lt;/p&gt;


&lt;p&gt;Due
to this potential y risk, I&amp;#39;m going to comment out the majority of the calls,
leaving just &amp;quot;Load-SharePoint-Powershell&amp;quot;, &amp;quot;CreateOrJoinFarm&amp;quot; and &amp;quot;CheckFarmTopology&amp;quot;
as these can be run safely ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_12b.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_12b.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;;...&amp;quot;AddManagedAccounts&amp;quot; could also be left
uncommented as is reasonably safe to run (and can be used to update ‘SharePoint
Managed Accounts&amp;#39;)...&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_13b.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_13b.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;It
is possible to use the other function calls using the same  &amp;quot;REM&amp;quot; approach (just ensure the &amp;quot;AutoSPInstallerInput.xml&amp;quot; config file matches your existing SharePoint configuration 100%).&lt;br /&gt;But due to the potential risk I&amp;#39;m not going to cover using any of them here (... in
other words&amp;quot;&lt;b&gt;use
with caution&lt;/b&gt;!&amp;quot;)&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;The
fourth of the functions to get called from MAIN is &amp;quot;Setup-Services&amp;quot; and provides
the next set of &amp;quot;other potential uses&amp;quot; for AutoSPInstaller&lt;/p&gt;


&lt;p id="StartServices"&gt;&lt;b&gt;4. Start SharePoint Services: Sandboxed Code Service and Claims to
Windows Token Service&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This is achieved by commenting out the &amp;quot;PrepForInstall&amp;quot;, &amp;quot;Run-Install&amp;quot;
and &amp;quot;Finalize-Install&amp;quot; function calls (along with the conditional ‘Install-Remote&amp;#39;
call) located in MAIN&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_16.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_16.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;..commenting out the &amp;quot;Setup-Farm&amp;quot; function calls (as
detailed below)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_12.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_12b.png" border="0" height="292" width="577" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;..and then commenting out all functions calls located in &amp;quot;Setup-Services&amp;quot;,
except &amp;quot;StartSandboxedCodeService&amp;quot; &amp;nbsp;and &amp;quot;StartClaimsToWindowsTokenService&amp;quot; &lt;/p&gt;

&lt;p&gt;&lt;b&gt;
 
&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_17.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_17.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;

&lt;p id="ReProvisionServiceApps"&gt;&lt;b&gt;5. &lt;/b&gt;&lt;b&gt;Re-Provision/Re-Create Service Applications
&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This is achieved by first deleting the particular ServiceApp that is to be re-created (via &amp;quot;Manage Service Applications&amp;quot; in Central Admin for example)&lt;/p&gt;

&lt;p&gt;Then comment out the &amp;quot;PrepForInstall&amp;quot;, &amp;quot;Run-Install&amp;quot; and
&amp;quot;Finalize-Install&amp;quot; function calls (along with the conditional ‘Install-Remote&amp;#39;
call) located in MAIN&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_16.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_16.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;..commenting out the &amp;quot;Setup-Farm&amp;quot; function calls (as
detailed above)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_12b.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_12b.png" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;..and then commenting out all functions calls located in &amp;quot;Setup-Services&amp;quot;,
except for the &amp;quot;Create&amp;quot; function call for the particular ServiceApp to be re-created &lt;br /&gt;For example &amp;quot;CreateEnterpriseSearchServiceApp&amp;quot;.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_18.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_18.png" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;(If you&amp;#39;re using a pre-v3 version of&amp;nbsp; AutoSPInstaller, there is an additional
function call that will need to be made &amp;quot;StartSearchQueryAndSiteSettingsService&amp;quot;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_19.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/AutoSPInstaller_19.png" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;... which appears to have been dropped in v3 and later)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;So there you have it.. Five other things you can do with AutoSPInstaller and the PowerShell REM Command.&lt;/p&gt;

&lt;p&gt;Clearly there
are a variety of the other combinations that could be used to achieve a variety
of other tasks (post SharePoint installation), but hopefully these examples can be used to provide a
good starting point.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=269" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2010/default.aspx">SP2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/AutoSPInstaller/default.aspx">AutoSPInstaller</category></item><item><title>Detecting Duplicate List Items Using XSLT</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2012/10/22/detecting-duplicate-list-items-using-xslt.aspx</link><pubDate>Mon, 22 Oct 2012 15:16:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:266</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;A requirement came up the other day, for a quick and easy way of detecting and displaying duplicate items in a SharePoint List.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;SharePoint 2010 has a ‘&lt;a href="http://www.sharepointkings.com/2011/04/unique-column-in-sharepoint-2010.html" title="sharepoint kings - unique columns" target="_blank"&gt;unique
            column&lt;/a&gt;&amp;#39; or ‘&lt;a href="http://msdn.microsoft.com/en-us/library/ee536168.aspx" title="msdn - unique column constraints" target="_blank"&gt;unique
                column constraints&lt;/a&gt;&amp;#39; feature which can enforce uniqueness on values stored
        in a list or library column, effectively creating additional keys on the List.&lt;/p&gt;
    
&lt;p&gt;
        Although this can be a very useful feature (especially when creating/implementing
        new SPLists), there are still occasions when ‘unique column constraints&amp;#39; cannot
        be (or in this case, hadn&amp;#39;t been) implemented on a given SharePoint List due to
        the data being stored, but you still need a way of returning a set of ‘unique values&amp;#39;
        from the given set of data.&lt;/p&gt;
    
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;For example:&lt;br /&gt;
If you needed to store the following data in a SharePoint List ...&lt;br /&gt;
&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data1.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data1.png" border="0" width="600" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;..you would be able to do so and implement a ‘unique column constraints&amp;#39; on the
        Title (or Name) column without a problem.&lt;/p&gt;
    
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;
        However, if you needed to store the following data in a SharePoint List ...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data2.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data2.png" border="0" width="600" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;you wouldn&amp;#39;t be able to implement a ‘unique column constraints&amp;#39; on the Title (or
        Name) column.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        But might still want to display a unique list of Names...&lt;br /&gt;
    
&lt;/p&gt;
&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data3.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
    
&lt;p&gt;
        Luckily &lt;a href="http://sympmarc.com/about/" title="Marc D Anderson" target="_blank"&gt;Marc D Anderson&lt;/a&gt; posted ways of achieving this (along with subtotals) with
        the use of some XSLT
    &lt;/p&gt;

&lt;p&gt;
                        &lt;a href="http://sympmarc.com/2009/05/20/showing-subtotals-in-a-dvwp-sorted-by-the-subtotals/" target="_blank"&gt;
                            Showing Subtotals in a DVWP, Sorted by the Subtotals - Part 1&lt;/a&gt;&lt;/p&gt;
                    
&lt;p&gt;
                        &lt;a href="http://sympmarc.com/2009/05/22/showing-subtotals-in-a-dvwp-sorted-by-the-subtotals-part-2/" target="_blank"&gt;
                            Showing Subtotals in a DVWP, Sorted by the Subtotals - Part 2&lt;/a&gt;&lt;/p&gt;
                    
&lt;p&gt;
                        &lt;a href="http://sympmarc.com/2009/05/26/showing-subtotals-in-a-dvwp-sorted-by-the-subtotals-part-3/" target="_blank"&gt;
                            Showing Subtotals in a DVWP, Sorted by the Subtotals - Part 3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data4.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data4.png" border="0" alt="" /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;This is achieved by &amp;quot;sorting&amp;quot; the results by the column in question (in this
        case &amp;quot;@Title&amp;quot; aka &amp;#39;Name&amp;#39;) and then using the ‘&lt;a href="http://msdn.microsoft.com/en-us/library/aa505323.aspx#officesharepointddwrt_namechanged" title="ddwrt:NameChanged" target="_blank"&gt;ddwrt:NameChanged&lt;/a&gt;&amp;#39;
        function to check if/when the value changes.&lt;/p&gt;
    
&lt;p&gt;
        Now this approached works well, assuming that you only want to display/check for
        duplicate values that are stored in a single column. &lt;/p&gt;

&lt;p&gt;If we add the other columns to the output, its limitations quickly become apparent.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data4b.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data4b.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        In addition, this particular requirement needed to check for duplicate items based on values stored across
        two (or more) columns ..&lt;br /&gt;&lt;/p&gt;
 &lt;a href="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data4c.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data4c.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;..and simply flag them as &amp;quot;duplicates&amp;quot; without making any
        other visual changes (such as ‘sorting&amp;#39;)&lt;br /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;
        Luckily this can be achieved with the use of the some additional XSLT&lt;/p&gt;
    
&lt;p&gt;
        First declare the following variables within the &amp;quot;dvt_1.rowview&amp;quot; xsl template&amp;nbsp; &lt;/p&gt;

&lt;pre class="brush: xslt;"&gt;&amp;lt;xsl:variable name=&amp;quot;currTitle&amp;quot; select=&amp;quot;@Title&amp;quot; /&amp;gt;
&amp;lt;xsl:variable name=&amp;quot;currDateValue&amp;quot; select=&amp;quot;@DateValue&amp;quot; /&amp;gt;
&amp;lt;xsl:variable name=&amp;quot;hasMatchingrows&amp;quot; select=&amp;quot;$Rows[@Title=$currTitle and @DateValue=$currDateValue]&amp;quot;/&amp;gt;
&lt;/pre&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        The &amp;quot;hasMatchingrows&amp;quot; variable can then be used to perform the check for &amp;quot;duplicate
        items&amp;quot;&lt;/p&gt;

&lt;pre class="brush: xslt;"&gt;&amp;lt;xsl:if test=&amp;quot;count($matchingrows) &amp;gt; 1&amp;quot;&amp;gt;
(&amp;lt;img src=&amp;quot;_layouts/images/warn16.gif&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt; Duplicate!)
&amp;lt;/xsl:if&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data5.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data5.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        Furthermore, if we declare an additional XSLT variable, this can also be used in
        conjunction with the ‘&lt;a href="http://msdn.microsoft.com/en-us/library/aa505323.aspx#officesharepointddwrt_namechanged"&gt;ddwrt:NameChanged&lt;/a&gt;&amp;#39;
        function&lt;/p&gt;
      
&lt;pre class="brush: xslt;"&gt;&amp;lt;xsl:variable name=&amp;quot;newCurrDateValue&amp;quot; select=&amp;quot;ddwrt:NameChanged(string(@DateValue), 0)&amp;quot;/&amp;gt;
    
&amp;lt;xsl:if test=&amp;quot;string-length($newCurrDateValue) &amp;gt; 0&amp;quot;&amp;gt;
        
&amp;lt;xsl:value-of select=&amp;quot;$currTitle &amp;quot;/&amp;gt; -&amp;nbsp;
&amp;lt;xsl:value-of select=&amp;quot;$currDateValue&amp;quot;/&amp;gt; - Total:
    
&amp;lt;xsl:value-of select=&amp;quot;sum($hasMatchingrows[current()]/@NumberValue.)&amp;quot;/&amp;gt;
&amp;lt;/xsl:if&amp;gt;
&lt;/pre&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;
        &amp;nbsp;&lt;/p&gt;
    
&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data5c.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/DuplicateXSLT_Data5c.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;
        One last thing to mention, remember that all XSLT transformations occur on the client.
    &lt;br /&gt;
    
        It does NOT affect the SPQuery being submitted or the XML data set that is returned.
    &lt;/p&gt;
    
    
&lt;p&gt;
        Therefore, each of the XSLT &amp;nbsp;approaches mentioned above will only process&lt;br /&gt;
    
&lt;/p&gt;

&lt;ol&gt;
        
&lt;li&gt;the data retuned by the underlying &amp;quot;List View&amp;quot;
        or SPQuery&lt;/li&gt;

&lt;li&gt;the current ‘page set&amp;#39; of data&lt;br /&gt;
&lt;/li&gt;

    
&lt;/ol&gt;
    
    
&lt;p&gt;
        So if your &amp;quot;paging&amp;quot; is set to &amp;quot;Display in sets of 5 or 10&amp;quot;, you will probably need
        to increase it (or alternatively perform some appropriate sorting/filtering) to
        ensure duplicates records DO NOT cross multiple ‘paged&amp;#39; results - otherwise some
        duplicates may not get flagged accordingly.&lt;/p&gt;
    
    
&lt;p&gt;
        (You may want to set paging to &amp;quot;Display All Items&amp;quot; wherever possible, as this will
        ensure all XML records returned from the SPQuery are made available to the XSLT)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=266" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2010/default.aspx">SP2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/XSLT/default.aspx">XSLT</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Duplicates/default.aspx">Duplicates</category></item><item><title>SUGUK Session - Accessing BCS Data: SharePoint Query vs. SharePoint Search</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2012/06/14/suguk-session-accessing-bcs-data-sharepoint-query-vs-sharepoint-search.aspx</link><pubDate>Thu, 14 Jun 2012 00:34:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:247</guid><dc:creator>aobi</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&lt;a href="http://www.eventbrite.com/org/1371778701?s=9534088" target="_blank"&gt;&lt;img border="0" src="http://community.obilogic.co.uk/blogs/teamblog/sugukea.png" alt="" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;I managed to perform my first ever &amp;quot;SharePoint speaker session&amp;quot; at SUGUKEA yesterday (after hearing &lt;a title="@ToddKlindt" href="http://twitter.com/ToddKlindt" target="_blank"&gt;@ToddKlindt&lt;/a&gt; ‘step out&amp;nbsp; of your comfort zone&amp;#39; talk at last year&amp;#39;s SharePoint Saturday, it was something&amp;nbsp; I&amp;#39;d been meaning to do).&lt;/p&gt;
&lt;p&gt;I was lucky enough to get paired with the legendary SharePoint Speaker and Author &lt;a title="Penny Coventry - SharePoint Designer Step by Step" href="http://www.sharepointdesignerstepbystep.com/" target="_blank"&gt;Penny Coventry&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;We had (somehow) both decided to cover BCS related subjects in our sessions and after a very brief discussion at the &lt;a title="http://www.internationalsharepointconference.com/Pages/default.aspx" href="http://www.internationalsharepointconference.com/Pages/default.aspx" target="_blank"&gt;International SharePoint Conference&lt;/a&gt; things were all set to go.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sugukea010.eventbrite.com/" target="_blank"&gt;http://sugukea010.eventbrite.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Agenda&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6.30pm - Registration&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6:45pm - Penny Coventry - BCS: How to get started&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7:45pm - Break&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8:15pm - Anthony Obi - Accessing BCS Data: Query vs. Search&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9:15pm - SharePint&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Speakers and Abstracts&lt;/p&gt;
&lt;p&gt;Penny Coventry - BCS: How to get started&lt;br /&gt;Many organizations see Microsoft SharePoint as yet another silo of information that can only exploit data stored in lists and libraries. In this session, Penny will review the different methods of using external data within SharePoint. The rest of the session will concentrate on Business Connectivity Services (BCS). She will show you what you need to do within the SharePoint 2010 Central Administration web site, how to use SharePoint Designer to create external conten types - the components that enable you to connect to external sources. Lastly Penny, will look at external lists.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Anthony Obi - Accessing BCS Data: SharePoint Query vs. SharePoint Search&lt;br /&gt;In this session, Anthony will be looking at two different approaches for retrieving and displaying external data in SharePoint 2010. He will be covering the basic fundamentals required by each for it to work, before attempting to explore and compare a variety of features available within each approach through a series of demonstrations. Finally Anthony will attempt to highlight key points/comparisons to look out for when attempting to identify which approach to use in real world scenarios.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Slides&lt;br /&gt;&lt;/p&gt;
&lt;div&gt;&lt;b style="MARGIN:12px 0px 4px;DISPLAY:block;"&gt;&lt;a title="Obilogic - Accessing BCS Data: Query vs Search (sugukea)" href="https://www.slideshare.net/obilogic/sugukea-accessing-bcs-data-query-vs-search" target="_blank"&gt;Obilogic - Accessing BCS Data: Query vs Search (sugukea)&lt;/a&gt;&lt;/b&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Would just like to give a huge thanks to Penny (&lt;a title="http://twitter.com/pjcov" href="http://twitter.com/pjcov" target="_blank"&gt;@pjcov&lt;/a&gt;) and the &lt;a title="#sugukea" href="https://twitter.com/#!/search/%23sugukea" target="_blank"&gt;#sugukea&lt;/a&gt; (&lt;a title="@sugukea" href="http://twitter.com/sugukea" target="_blank"&gt;@sugukea&lt;/a&gt;) organisers Peter Baddeley (&lt;a title="@baddaz" href="http://twitter.com/baddaz" target="_blank"&gt;@baddaz&lt;/a&gt;) and Randy Perkins (&lt;a title="@SharePointRandy" href="http://twitter.com/SharePointRandy" target="_blank"&gt;@SharePointRandy&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=247" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Search/default.aspx">Search</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2010/default.aspx">SharePoint-2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SUGUK/default.aspx">SUGUK</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/sugukea/default.aspx">sugukea</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SPQuery/default.aspx">SPQuery</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/BCS/default.aspx">BCS</category></item><item><title>The International SharePoint Conference 2012 - Blogs, Slides, Downloads &amp; Photos</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2012/04/30/the-international-sharepoint-conference-2012-blogs-slides-downloads-amp-photos.aspx</link><pubDate>Mon, 30 Apr 2012 00:20:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:239</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Unfortunately I haven&amp;#39;t had time to write my usual rundown for this year&amp;#39;s &lt;a href="http://www.internationalsharepointconference.com/" target="_blank"&gt;International SharePoint Conference&lt;/a&gt;, which took place last week...&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;So this year&amp;#39;s rundown will basically consist of the
following, in an attempt to ‘syndicate content&amp;#39; on the subject&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Live Blogging :&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://engageinsharepoint.co.uk/2012/03/international-sharepoint-conference-live-bloggers-wanted-isclondon/" target="_blank"&gt;http://engageinsharepoint.co.uk/2012/03/international-sharepoint-conference-live-bloggers-wanted-isclondon/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thomasvochten.com/categories/live/" target="_blank"&gt;http://thomasvochten.com/categories/live/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sharepointfrancois.posterous.com/live-blogging-from-the-international-sharepoi" target="_blank"&gt;http://sharepointfrancois.posterous.com/live-blogging-from-the-international-sharepoi&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://engageinsharepoint.co.uk/author/baddaz/" target="_blank"&gt;http://engageinsharepoint.co.uk/author/baddaz/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://engageinsharepoint.co.uk/author/spdoctor/" target="_blank"&gt;http://engageinsharepoint.co.uk/author/spdoctor/&lt;/a&gt;&lt;/p&gt;

&lt;/blockquote&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Slides :&lt;br /&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.21apps.com/sharepoint/isclondonbus301/" target="_blank"&gt;http://www.21apps.com/sharepoint/isclondonbus301/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.criticalpathtraining.com/Members/Pages/Presentations.aspx" target="_blank"&gt;http://www.criticalpathtraining.com/Members/Pages/Presentations.aspx &lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.joiningdots.com/blog/2012/04/when-technical-projects-fail/" target="_blank"&gt;http://www.joiningdots.com/blog/2012/04/when-technical-projects-fail/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://skydrive.live.com/view.aspx?resid=6AF8677B7DC0B21D%212285&amp;amp;cid=6af8677b7dc0b21d" target="_blank"&gt;https://skydrive.live.com/view.aspx?resid=6AF8677B7DC0B21D!2285&amp;amp;cid=6af8677b7dc0b21d&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.paulgrimley.com/2012/04/supporting-sharepoint-internally-slides.html" target="_blank"&gt;http://www.paulgrimley.com/2012/04/supporting-sharepoint-internally-slides.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://techblurt.com/2012/04/28/international-sharepoint-conference-slides/" target="_blank"&gt;http://techblurt.com/2012/04/28/international-sharepoint-conference-slides/ &lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Downloads :&lt;/b&gt; &lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/166d71d6-0fb8-433d-bf08-72d5a3efe800" target="_blank"&gt;http://visualstudiogallery.msdn.microsoft.com/166d71d6-0fb8-433d-bf08-72d5a3efe800&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/668d3881-b641-4f30-a513-0f9609892ac5" target="_blank"&gt;http://visualstudiogallery.msdn.microsoft.com/668d3881-b641-4f30-a513-0f9609892ac5&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/51a85e45-4a45-42cd-b21f-ff0c4cf729c1" target="_blank"&gt;http://visualstudiogallery.msdn.microsoft.com/51a85e45-4a45-42cd-b21f-ff0c4cf729c1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://spkbase.codeplex.com/" target="_blank"&gt;http://spkbase.codeplex.com/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Subsequent Blog Posts :&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://blog.falchionconsulting.com/index.php/2012/05/international-sharepoint-conference-2012-follow-up/" target="_blank"&gt;http://blog.falchionconsulting.com/index.php/2012/05/international-sharepoint-conference-2012-follow-up/&lt;/a&gt; (&lt;i&gt;Note: &lt;/i&gt;Gary Lapointe is a Legend!)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.21apps.com/sharepoint/isclondon-a-personal-review/%20" target="_blank"&gt;http://www.21apps.com/sharepoint/isclondon-a-personal-review/ &lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sharepoint911.com/blogs/laura/Lists/Posts/Post.aspx?ID=174%20" target="_blank"&gt;http://www.sharepoint911.com/blogs/laura/Lists/Posts/Post.aspx?ID=174 &lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/ukmsdn/archive/2012/05/08/event-international-sharepoint-conference-a-review.aspx" target="_blank"&gt;http://blogs.msdn.com/b/ukmsdn/archive/2012/05/08/event-international-sharepoint-conference-a-review.aspx&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sharepointstudio.com/Blog/Lists/Posts/Post.aspx?ID=46" target="_blank"&gt;http://www.sharepointstudio.com/Blog/Lists/Posts/Post.aspx?ID=46&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.sharepointpromag.com/blog/dan-holmes-viewpoint-on-sharepoint-blog-24/sharepoint/sharepoint-presented-international-sharepoint-conference-142929" target="_blank"&gt;http://www.sharepointpromag.com/blog/dan-holmes-viewpoint-on-sharepoint-blog-24/sharepoint/sharepoint-presented-international-sharepoint-conference-142929&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.mastykarz.nl/international-sharepoint-conference-london-2012-recap/" target="_blank"&gt;http://blog.mastykarz.nl/international-sharepoint-conference-london-2012-recap/&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://ghamson.wordpress.com/2012/04/25/last-day-at-the-international-conference-in-london/" target="_blank"&gt;http://ghamson.wordpress.com/2012/04/25/last-day-at-the-international-conference-in-london/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.andrewconnell.com/blog/archive/2012/04/30/wrapup-ndash-international-sharepoint-conference-2012-london.aspx" target="_blank"&gt;http://www.andrewconnell.com/blog/archive/2012/04/30/wrapup-ndash-international-sharepoint-conference-2012-london.aspx&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.thesharepointbaker.co.uk/2012/04/internation-sharepoint-conference-2012/" target="_blank"&gt;http://www.thesharepointbaker.co.uk/2012/04/internation-sharepoint-conference-2012/&lt;/a&gt;&lt;/p&gt;





&lt;p&gt;&lt;a href="http://sharepointsarcasm.sharepoint.com/Pages/default.aspx" target="_blank"&gt;http://sharepointsarcasm.sharepoint.com/Pages/default.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.sharepointblog.co.uk/2012/04/the-international-sharepoint-conference/" target="_blank"&gt;http://www.sharepointblog.co.uk/2012/04/the-international-sharepoint-conference/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Photos :&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.mattgrovesblog.com/search/label/ISC" target="_blank"&gt;www.mattgrovesblog.com/search/label/ISC&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2012/04/27/photos-from-the-international-sharepoint-conference-2012-Day-1.aspx" target="_blank"&gt;photos-from-the-international-sharepoint-conference-2012-Day-1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2012/04/27/photos-from-the-international-sharepoint-conference-2012-Day-2.aspx" target="_blank"&gt;photos-from-the-international-sharepoint-conference-2012-Day-2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2012/04/27/photos-from-the-international-sharepoint-conference-2012-Day-3.aspx" target="_blank"&gt;photos-from-the-international-sharepoint-conference-2012-Day-3&lt;/a&gt;&lt;/p&gt;


&lt;/blockquote&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Again, huge thanks to &lt;a href="http://twitter.com/SteveSmithCK" target="_blank" title="@SteveSmithCK"&gt;@SteveSmithCK&lt;/a&gt;, &lt;a href="http://twitter.com/zoewatsonCK" target="_blank" title="@ZoeWatsonCK"&gt;@ZoeWatsonCK&lt;/a&gt; and everyone
at &lt;a href="http://twitter.com/ckukltd" target="_blank" title="@CKUKLtd"&gt;@CKUKLtd&lt;/a&gt; &amp;nbsp;for another great conference.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/ISCConf2012/isclondon2012.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/ISCConf2012/isclondon2012.png" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=239" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Conference/default.aspx">Conference</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-Conference/default.aspx">SharePoint-Conference</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/isclondon/default.aspx">isclondon</category></item><item><title>SharePoint 2010 – Export SPList Data into SQL using PowerShell</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2012/04/22/sharepoint-2010-export-splist-data-into-sql-using-powershell.aspx</link><pubDate>Sun, 22 Apr 2012 00:02:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:232</guid><dc:creator>aobi</dc:creator><slash:comments>1</slash:comments><description>
&lt;p&gt;Following my previous post &amp;#39;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/archive/2012/04/21/sharepoint-2010-import-sql-query-data-into-a-splist-with-powershell.aspx" title="SharePoint 2010 – Import SQL Query Data into a SPList using PowerShell"&gt;Import SQL Query Data into a SPList using PowerShell&lt;/a&gt;&amp;#39; I thought I should also post on how to achieve the reverse and export data from an SPList into a SQL Table &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;(if only for completeness, if nothing else...)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;First task is to make the SQL Connection and prepare the SQL Command .. &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;br /&gt;######connect to SQL database windows authentication ###########&lt;br /&gt;
#Set new object to connect to sql database&lt;br /&gt;$connection = new-object system.data.sqlclient.sqlconnection&lt;br /&gt;&lt;br /&gt;#ConnectionString setting for &amp;lt;ServerName&amp;gt; &amp;lt;databasename&amp;gt; with window authentication&lt;br /&gt;$Connection.ConnectionString =&amp;quot;server=&amp;lt;ServerName&amp;gt;;database=&amp;lt;databasename&amp;gt;;trusted_connection=true&amp;quot;&lt;br /&gt;&lt;br /&gt;
#ConnectionString setting for &amp;lt;ServerName&amp;gt; &amp;lt;databasename&amp;gt; with SQL authentication &amp;lt;username&amp;gt;&amp;lt;password&amp;gt;&lt;br /&gt;#$Connection.ConnectionString =&amp;quot;server=&amp;lt;ServerName&amp;gt;;database=&amp;lt;databasename&amp;gt;;User Id=&amp;lt;username&amp;gt;;Password=&amp;lt;password&amp;gt;;trusted_connection=False;&lt;br /&gt;&lt;br /&gt;Write-host &amp;quot;connection information:&amp;quot;&lt;br /&gt;&lt;br /&gt;$connection #List connection information &lt;br /&gt;&lt;br /&gt;Write-host &amp;quot;&lt;/code&gt;&lt;code&gt;Connecting &lt;/code&gt;&lt;code&gt;to database..&amp;quot; &lt;br /&gt;&lt;br /&gt;$connection.open() #Open Connection&lt;br /&gt;&lt;br /&gt;#setting object to use sql commands&lt;br /&gt;$SqlCmd = New-Object System.Data.SqlClient.SqlCommand&lt;br /&gt;&lt;br /&gt;$SqlCmd.Connection = $connection&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then retrieve the data from SPList...&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;######### Get SPList ########&lt;br /&gt;$spWeb = Get-SPWeb -identity &amp;quot;http://sp2010server/TeamSite/&amp;quot;&amp;nbsp; #&amp;nbsp; Get SPWeb &lt;br /&gt;&lt;br /&gt;$list = $spWeb.Lists[&amp;quot;&amp;lt;My List Name&amp;gt;&amp;quot;] # Get SPList&lt;br /&gt;&lt;br /&gt;

&lt;strike&gt;foreach ($item in $list.items)&lt;br /&gt;{ &lt;br /&gt;ExecuteSQLInsert $item[&amp;quot;Title&amp;quot;].replace(&amp;quot;&amp;#39;&amp;quot;,&amp;quot;&amp;#39;&amp;#39;&amp;quot;) $item[&amp;quot;splistColumn2&amp;quot;].replace(&amp;quot;&amp;#39;&amp;quot;,&amp;quot;&amp;#39;&amp;#39;&amp;quot;) $item[&amp;quot;splistColumn3&amp;quot;].replace(&amp;quot;&amp;#39;&amp;quot;,&amp;quot;&amp;#39;&amp;#39;&amp;quot;) $item[&amp;quot;splistColumn4&amp;quot;].replace(&amp;quot;&amp;#39;&amp;quot;,&amp;quot;&amp;#39;&amp;#39;&amp;quot;) $item[&amp;quot;splistColumn5&amp;quot;].replace(&amp;quot;&amp;#39;&amp;quot;,&amp;quot;&amp;#39;&amp;#39;&amp;quot;)&lt;br /&gt;}&lt;/strike&gt;

&lt;br /&gt;$spQuery = New-Object Microsoft.SharePoint.SPQuery&lt;br /&gt;$spQuery.ViewAttributes = &amp;quot;Scope=&amp;#39;Recursive&amp;#39;&amp;quot;;&lt;br /&gt;$spQuery.RowLimit = 2000&lt;br /&gt;$caml = &amp;#39;&amp;lt;OrderBy Override=&amp;quot;TRUE&amp;quot;&amp;gt;&amp;lt;FieldRef Name=&amp;quot;ID&amp;quot;/&amp;gt;&amp;lt;/OrderBy&amp;gt;&amp;#39; &lt;br /&gt;$spQuery.Query = $caml &lt;br /&gt;&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;    $listItems = $list.GetItems($spQuery)&lt;br /&gt;    $spQuery.ListItemCollectionPosition = $listItems.ListItemCollectionPosition&lt;br /&gt;    foreach($item in $listItems)&lt;br /&gt;    {&lt;br /&gt;&lt;code&gt;    &lt;/code&gt;&lt;code&gt;    ExecuteSQLInsert $item[&amp;quot;Title&amp;quot;].replace(&amp;quot;&amp;#39;&amp;quot;,&amp;quot;&amp;#39;&amp;#39;&amp;quot;) $item[&amp;quot;splistColumn2&amp;quot;].replace(&amp;quot;&amp;#39;&amp;quot;,&amp;quot;&amp;#39;&amp;#39;&amp;quot;) $item[&amp;quot;splistColumn3&amp;quot;].replace(&amp;quot;&amp;#39;&amp;quot;,&amp;quot;&amp;#39;&amp;#39;&amp;quot;) $item[&amp;quot;splistColumn4&amp;quot;].replace(&amp;quot;&amp;#39;&amp;quot;,&amp;quot;&amp;#39;&amp;#39;&amp;quot;) $item[&amp;quot;splistColumn5&amp;quot;].replace(&amp;quot;&amp;#39;&amp;quot;,&amp;quot;&amp;#39;&amp;#39;&amp;quot;)&lt;/code&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;while ($spQuery.ListItemCollectionPosition -ne $null) &lt;br /&gt;$connection.Close() &lt;br /&gt;&lt;br /&gt;$spWeb.Dispose()
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;...and finally populate the target SQL Table using the data from the SPListItem&lt;br /&gt;
(Obviously, you will need to give some consideration in relation to 
matching the &amp;#39;DataTypes&amp;#39; of the SQL Columns, with those of the source SPList)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;######### ExecuteSQLInsert function #############&lt;br /&gt;function ExecuteSQLInsert($sqlVAL1, $sqlVAL2, $sqlVAL3, $sqlVAL4, $sqlVAL5)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;$ErrorActionPreference = &amp;#39;stop&amp;#39; # Prepare script for stopping&lt;br /&gt;$SqlCmd.CommandText =&amp;quot;INSERT INTO [sqlTABLE] ([sqlCOLUMN1], [sqlCOLUMN2], [sqlCOLUMN3], [sqlCOLUMN4], [sqlCOLUMN5]) VALUES (&amp;#39;$sqlVAL1&amp;#39;, &amp;#39;$sqlVAL2&amp;#39;, &amp;#39;$sqlVAL3&amp;#39;, &amp;#39;$sqlVAL4&amp;#39;, &amp;#39;$sqlVAL5&amp;#39;)&amp;quot; # Configure TSQL&lt;br /&gt;&lt;br /&gt;Try&lt;br /&gt;{&lt;br /&gt;$SqlCmd.ExecuteNonQuery() #&lt;br /&gt;}&lt;br /&gt;Catch&lt;br /&gt;{&lt;br /&gt;Write-Warning &amp;quot;$_&amp;quot; # Report Errors&lt;br /&gt;Write-Warning $SqlCmd.CommandText&lt;br /&gt;Write-host &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;}
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/utility/filethumbnails/zip-Small.gif" alt="download" title="download" style="width:16px;height:16px;" height="16" width="16" /&gt;&amp;nbsp; &lt;b&gt;&lt;a href="http://community.obilogic.co.uk/files/folders/233/download.aspx" title="download"&gt;SP2010ImportExportSPListToSQL - Examples.zip&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=232" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2010/default.aspx">SharePoint-2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2010/default.aspx">SP2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>SharePoint 2010 – Import SQL Query Data into a SPList using PowerShell</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2012/04/21/sharepoint-2010-import-sql-query-data-into-a-splist-with-powershell.aspx</link><pubDate>Sat, 21 Apr 2012 00:20:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:231</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Ever needed to quickly transfer SQL data into a SharePoint list?...&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;A recent task required exactly this, when i needed to migrate some SQL data held in a legacy application into SharePoint.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
After a bit of messing around exporting multiple CSV files from SQL and importing them into SharePoint, I was confident that I could speed up the process with the use of a little &amp;#39;Powershell&amp;#39;...&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;First task is to make the SQL Connection ..&lt;br /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;br /&gt;######connect to SQL database windows authentication ###########&lt;br /&gt;
#Set new object to connect to sql database&lt;br /&gt;$connection = new-object system.data.sqlclient.sqlconnection&lt;br /&gt;&lt;br /&gt;#ConnectionString setting for &amp;lt;ServerName&amp;gt; &amp;lt;databasename&amp;gt; with window authentication&lt;br /&gt;$Connection.ConnectionString =&amp;quot;server=&amp;lt;ServerName&amp;gt;;database=&amp;lt;databasename&amp;gt;;trusted_connection=true;&amp;quot;&lt;br /&gt;&lt;br /&gt;
#ConnectionString setting for &amp;lt;ServerName&amp;gt; &amp;lt;databasename&amp;gt; with SQL authentication &amp;lt;username&amp;gt;&amp;lt;password&amp;gt;&lt;br /&gt;#$Connection.ConnectionString =&amp;quot;server=&amp;lt;ServerName&amp;gt;;database=&amp;lt;databasename&amp;gt;;User Id=&amp;lt;username&amp;gt;;Password=&amp;lt;password&amp;gt;;trusted_connection=False;&amp;quot;&lt;br /&gt;&lt;br /&gt;Write-host &amp;quot;connection information:&amp;quot;&lt;br /&gt;&lt;br /&gt;$connection #List connection information &lt;br /&gt;&lt;br /&gt;Write-host &amp;quot;&lt;/code&gt;&lt;code&gt;Connecting &lt;/code&gt;&lt;code&gt;to database..&amp;quot; &lt;br /&gt;&lt;br /&gt;$connection.open() #Open Connection&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then retrieve the data from SQL Table.. (or theoretically from a &amp;#39;SQL View&amp;#39;, &amp;#39;SQL Query&amp;#39; or even &amp;#39;Stored Procedure&amp;#39;)&lt;br /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;br /&gt;######### SQL query #############&lt;br /&gt;&lt;br /&gt;$SqlCmd = New-Object System.Data.SqlClient.SqlCommand #setting object to use sql commands &lt;br /&gt;&lt;br /&gt;$SqlQuery = &amp;quot;SELECT [sqlCOLUMN1], [sqlCOLUMN2], [sqlCOLUMN3], [sqlCOLUMN4], [sqlCOLUMN5] FROM [sqlTABLEorView] &amp;quot; #set SQL query &lt;br /&gt;&lt;br /&gt;$SqlCmd.CommandText = $SqlQuery # get query &lt;br /&gt;&lt;br /&gt;$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter # &lt;br /&gt;&lt;br /&gt;$SqlAdapter.SelectCommand = $SqlCmd # &lt;br /&gt;&lt;br /&gt;$SqlCmd.Connection = $connection &lt;br /&gt;&lt;br /&gt;$DataSet = New-Object System.Data.DataSet &lt;br /&gt;&lt;br /&gt;$SqlAdapter.Fill($DataSet) &lt;br /&gt;&lt;br /&gt;$SqlAdapter.Dispose()&lt;br /&gt;&lt;br /&gt;$connection.Close() &lt;br /&gt;&lt;br /&gt;$DataSet.Tables[0]&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;...and finally populate the SharePoint List using the retrieved data. &lt;br /&gt;
(Obviously, you will need to give some consideration in relation to matching the &amp;#39;DataTypes&amp;#39; of the SQL Columns, with those of the target SPList)&lt;br /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;br /&gt;######### Add to SPList ########&lt;br /&gt;&lt;br /&gt;$spWeb = Get-SPWeb -identity &amp;quot;http://sp2010server/TeamSite/&amp;quot;&amp;nbsp; #&amp;nbsp; Get SPWeb &lt;br /&gt;&lt;br /&gt;$list = $spWeb.Lists[&amp;quot;&amp;lt;My List Name&amp;gt;&amp;quot;] # Get SPList&lt;br /&gt;&lt;br /&gt;foreach ($Row in $DataSet.Tables[0].Rows)&lt;br /&gt;{ &lt;br /&gt;&lt;br /&gt;$item = $list.Items.Add();&lt;br /&gt;&lt;br /&gt;$item[&amp;quot;Title&amp;quot;] = $Row[&amp;quot;sqlCOLUMN1&amp;quot;]&lt;br /&gt;$item[&amp;quot;splistColumn2&amp;quot;] = $Row[&amp;quot;sqlCOLUMN2&amp;quot;]&lt;br /&gt;$item[&amp;quot;splistColumn3&amp;quot;] = $Row[&amp;quot;sqlCOLUMN3&amp;quot;]&lt;br /&gt;$item[&amp;quot;splistColumn45&amp;quot;] = $Row[&amp;quot;sqlCOLUMN4&amp;quot;] + $Row[&amp;quot;sqlCOLUMN5&amp;quot;]&lt;br /&gt;&lt;br /&gt;$item.Update()&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$spWeb.Dispose()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;This can greatly speed up the process and also enables to you import data from multiple SQL Tables/Views/Queries and even target multiple SPLists.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/utility/filethumbnails/zip-Small.gif" alt="download" title="download" style="width:16px;height:16px;" height="16" width="16" /&gt;&amp;nbsp; &lt;b&gt;&lt;a href="http://community.obilogic.co.uk/files/folders/233/download.aspx" title="download"&gt;SP2010ImportExportSPListToSQL - Examples.zip&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=231" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2010/default.aspx">SharePoint-2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2010/default.aspx">SP2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>The International SharePoint Conference 2012</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2012/03/23/the-international-sharepoint-conference-2012.aspx</link><pubDate>Fri, 23 Mar 2012 09:00:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:227</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;With only a month to go until the start of &amp;quot;&lt;a href="http://www.internationalsharepointconference.com/" title="International SharePoint Conference 2012"&gt;The International SharePoint Conference 2012&lt;/a&gt;&amp;quot; (formerly known as the &amp;#39;&lt;a href="http://sharepointbestpractices.co.uk/" title="European SharePoint Best Practice Conference"&gt;European SharePoint Best Practice Conference&lt;/a&gt;&amp;#39;), I thought it was about time I added a post on the subject.&lt;/p&gt;
&lt;p&gt;Well, the guys and gals over at &lt;a href="http://www.combined-knowledge.com/" title="Combined Knowledge" target="_blank"&gt;CK&lt;/a&gt; are planning to do things a little differently at this years conference.&lt;/p&gt;
&lt;p&gt;Quote:&lt;br /&gt;&lt;/p&gt;
&lt;p style="margin-left:40px;"&gt;&lt;span style="font-style:italic;"&gt;In 2012 we are going to be doing something very special and unique which is to have the IT Pro and Developer tracks follow a 3 day solution process and instead of doing standard 1 hour sessions we will be using as much time as necessary to cover a complete topic. How many times have you heard a speaker say ‘you can also do this and that’ but the speaker just runs out of time to show you exactly how. And wouldn’t it be nice to see some of these demos being done in a real world model say over 8 SharePoint Servers in a large farm design! Well this is exactly what our 2012 conference is going to be doing, with speakers from around the world who have the knowledge and real world skills to deliver such a track and over the course of the 3 days build the solution all the way through to the final design, everyone using the exact same servers over the 3 day duration.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left:40px;"&gt;&lt;a href="http://www.internationalsharepointconference.com/blog/" title="International SharePoint Conference Blog" target="_blank"&gt;http://www.internationalsharepointconference.com/blog/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Full details on the different &amp;#39;Tracks&amp;#39; (IT Pro, Developer, Information Worker (IW) / End User and Business) as well as &amp;#39;Full Agenda&amp;#39;, with details of the different &amp;#39;Track Solution Teams&amp;#39;, is also now available.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.internationalsharepointconference.com/Pages/Track-Overviews.aspx" title="Track Overviews"&gt;http://www.internationalsharepointconference.com/Pages/Track-Overviews.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.internationalsharepointconference.com/Pages/Agenda.aspx" title="Full Agenda"&gt;http://www.internationalsharepointconference.com/Pages/Agenda.aspx &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.internationalsharepointconference.com" title="www.internationalsharepointconference.com  long web banner"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/i%27m%20attending%20long%20web%20banner.png" border="0" width="600" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;All in all, it looks like things are shaping up to be another great SharePoint conference!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=227" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Best-Practices/default.aspx">Best-Practices</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Conference/default.aspx">Conference</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-Conference/default.aspx">SharePoint-Conference</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/isclondon/default.aspx">isclondon</category></item><item><title>SharePoint 2010 – Migrate/Replicate Three-state List Workflows between Site Collections with PowerShell</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2012/03/16/sharepoint-2010-migrate-replicate-three-state-list-workflows-between-site-collections-with-powershell.aspx</link><pubDate>Fri, 16 Mar 2012 18:59:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:224</guid><dc:creator>aobi</dc:creator><slash:comments>1</slash:comments><description>


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;I had an interesting request come in the other day, which on
the face it, sounded a fairly simple thing to resolve. But, as is often the
case, it turned out to be a little trickier than I first anticipated.
&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Basically the requirement was to move one or more SharePoint
Lists from one site (or SPWeb) to an alternative site, located in an
alternative site collection. The issue being, each list that needed to be moved
had a SharePoint Workflow associated with it, which also needed to be moved
along with the list.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now moving a SharePoint list can be achieved fairly easily using
the Export-SPWeb/Import-SPWeb cmdlets and just a couple of lines of PowerShell.&lt;/p&gt;


&lt;p&gt;For example, to move a standard &amp;quot;issues&amp;quot; list between site
collections:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p style="font-style:italic;"&gt;Export-SPWeb http://sp2010dev/ sites/SiteCollection001/Team/
-ItemUrl Lists/Issues -Path C:\Temp\IssuesList.cmp&lt;/p&gt;

&lt;p style="font-style:italic;"&gt;Import-SPWeb http://sp2010dev/sites/SiteCollection002/Team/
-Path C:\Temp\IssuesList.cmp&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;For further information on the Export/Import-SPWeb cmdlets see&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Export-SPWeb -Identity&amp;nbsp;&amp;lt;Site URL&amp;gt;&amp;nbsp;-Path&amp;nbsp;&amp;lt;Path
and file name&amp;gt;&amp;nbsp;[-ItemUrl&amp;nbsp;&amp;lt;URL of site, list, or
library&amp;gt;]&amp;nbsp;[-IncludeUserSecurity]&amp;nbsp;[-IncludeVersions]&amp;nbsp;[-NoFileCompression]&amp;nbsp;[-GradualDelete]&amp;nbsp;[-Verbose]&lt;/code&gt;&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ee428301.aspx#section1"&gt; http://technet.microsoft.com/en-us/library/ee428301.aspx#section1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Import-SPWeb
-Identity &amp;lt;Site URL&amp;gt; -Path &amp;lt;Export file name&amp;gt; [-Force]
[-NoFileCompression] [-Verbose]&lt;/code&gt;&lt;br /&gt;
&lt;a href="http://technet.microsoft.com/en-us/library/ee428322.aspx"&gt;http://technet.microsoft.com/en-us/library/ee428322.aspx&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;However, as you may (or may not) be aware, the Import-SPWeb cmdlet
does not successfully rebind any Workflows which may be associated
with the source List or Site being exported.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;For further information on what doesn&amp;#39;t get included with the
Built in SharePoint Import/Export see: &lt;a href="http://www.sharepointjoel.com/Lists/Posts/ViewPost.aspx?ID=405"&gt;http://www.sharepointjoel.com/Lists/Posts/ViewPost.aspx?ID=405&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;So, what to do?&lt;/p&gt;

&lt;p&gt;Well, there are various posts and how-to&amp;#39;s on how this can
be achieved using SharePoint Designer, which essentially boils to down to creating
a &amp;quot;blank/empty&amp;quot; workflow on the new/migrated list, then updating the &amp;quot;.xoml,
.xoml.rules, .xoml.wfconfig.xml and .xsn&amp;quot; files based on the original workflow (replacing
the list GUIDs with those of the new).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://decodesharepoint.blogspot.com/2010/01/migrate-spd-workflows.html"&gt;http://decodesharepoint.blogspot.com/2010/01/migrate-spd-workflows.html&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://gavinmckay.wordpress.com/2011/08/29/howto-move-or-migrate-sharepoint-2010-list-based-workflows-between-sites-and-site-collections/"&gt;http://gavinmckay.wordpress.com/2011/08/29/howto-move-or-migrate-sharepoint-2010-list-based-workflows-between-sites-and-site-collections/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;However, there are a couple of caveats to this approach. The
key one being that this is only possible when dealing with Declarative No-Code
Workflows available in SharePoint Designer, the other caveat being one of practicality
(having to manually update large numbers of xml and rule files, if dealing with
a large number of lists, may simply not be a practical option)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;This particular support request was in relation to the OOTB &amp;quot;Three-state&amp;quot; 
    SharePoint workflow (&lt;a href="http://office.microsoft.com/en-us/windows-sharepoint-services-help/use-a-three-state-workflow-HA010154431.aspx"&gt;http://office.microsoft.com/en-us/windows-sharepoint-services-help/use-a-three-state-workflow-HA010154431.aspx&lt;/a&gt;)
which is NOT a Declarative Workflow.&lt;/p&gt;

&lt;p&gt;(you can confirm this by creating/assigning a new &amp;quot;Three-state&amp;quot;
Workflow on a list and attempting to open the &amp;quot;.xoml, .xoml.rules,
.xoml.wfconfig.xml and .xsn&amp;quot; files - they &amp;nbsp;won&amp;#39;t be visible / accessible via the &amp;quot;workflows&amp;quot;
used by Declarative Workflows)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img1.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img1.png" border="0" height="188" width="370" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img2b.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img2b.png" border="0" height="190" width="381" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;So, PowerShell to the rescue...&lt;/p&gt;

&lt;p&gt;Again, there are various posts and how-to&amp;#39;s detailing how to
associate a SharePoint Workflow to a SharePoint List using PowerShell.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://addictedtosharepoint.com/2011/07/23/adding-a-sharepoint-workflow-association-to-a-list-with-powershell/"&gt;http://addictedtosharepoint.com/2011/07/23/adding-a-sharepoint-workflow-association-to-a-list-with-powershell/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://workflowassociation.codeplex.com/releases/view/56843"&gt;http://workflowassociation.codeplex.com/releases/view/56843&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.sharemuch.com/2011/06/13/automatically-provisioning-your-sharepoint-2010-custom-workflows/"&gt;http://www.sharemuch.com/2011/06/13/automatically-provisioning-your-sharepoint-2010-custom-workflows/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;However, simply &amp;quot;associating&amp;quot; the Three-State Workflow to a list
simply creates a new &amp;quot;blank/un-configured&amp;quot; instance of the Workflow on the target list. &lt;br /&gt;
It does not set any of the options available for the Workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img3.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img3.png" border="0" height="99" width="500" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img4.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img4.png" border="0" height="110" width="500" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img5.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img5.png" border="0" height="243" width="500" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img6.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/MigrateWorkflows-Img6.png" border="0" height="239" width="500" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;To fully migrate (or rather &amp;quot;replicate&amp;quot;) a Three-State Workflow, it is necessary 
    to get and set the information stored in the 
    &amp;quot;SPWorkflowAssociation.AssociationData&amp;quot; property of the Workflow Association (&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation.associationdata.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation.associationdata.aspx)&lt;/a&gt;. Using this approach, not only do you get a new Workflow
associated with the migrated List, but also a replica of the Workflow options
that were set on the Source Workflow.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;I came up with the following &amp;quot;PowerShell&amp;quot; to
achieve this:&lt;/p&gt;
    

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/utility/filethumbnails/zip-Small.gif" style="width:16px;height:16px;" title="download" alt="download" height="16" width="16" /&gt;&amp;nbsp; &lt;b&gt;&lt;a href="http://community.obilogic.co.uk/files/folders/225/download.aspx" title="download"&gt;MigrateWorkflowAssociation_ps1.zip&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Usage:&lt;/p&gt;
&lt;code&gt;
&lt;ul&gt;
&lt;li&gt;Migrate / Move SharePoint List or SharePoint Site using Export-SPWeb and Import-SPWeb cmdlets&lt;/li&gt;

&lt;li&gt;MigrateWorkflowAssociation.ps1 -SrcUrl -SrcList -TargetUrl 
-TargetList -workflowName -workflowAssociationName 
-workflowAssociationTasksList -workflowAssociationHistoryList &lt;code&gt;-replaceExistingMatchingWorkflows &lt;/code&gt;&lt;i&gt; &lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/code&gt;
&lt;p&gt;&amp;nbsp;Example:&lt;/p&gt;
&lt;code&gt;
&lt;ul&gt;
&lt;li&gt;Export-SPWeb http://&lt;code&gt;sourceweb&lt;/code&gt;/Team/ -Path C:\Temp\TeamSite.cmp&lt;/li&gt;

&lt;li&gt;New-SPWeb http://&lt;code&gt;targetweb&lt;/code&gt;/sites/SiteColl/Team/&amp;nbsp;&lt;/li&gt;

&lt;li&gt;Import-SPWeb http://&lt;code&gt;targetweb&lt;/code&gt;/sites/SiteColl/Team/ -Path C:\Temp\TeamSite.cmp&lt;br /&gt;&lt;/li&gt;

&lt;li&gt;
MigrateWorkflowAssociation.ps1 -SrcUrl &amp;#39;http://sourceweb/&lt;code&gt;&lt;code&gt;Team/&lt;/code&gt;&lt;/code&gt;&amp;#39; -SrcList &amp;#39;Issues&amp;#39; -TargetUrl &amp;#39;http://targetweb/&lt;code&gt;&lt;code&gt;sites/SiteColl/Team/&lt;/code&gt;&lt;/code&gt;&amp;#39;
 -TargetList &amp;#39;Issues&amp;#39; -workflowName &amp;#39;Three-state&amp;#39; 
-workflowAssociationName &amp;#39;My Existing Workflow Display Name&amp;#39; 
-workflowAssociationTasksList &amp;#39;Tasks&amp;#39; -workflowAssociationHistoryList 
&amp;#39;Workflow History&amp;#39; -replaceExistingMatchingWorkflows $true&lt;/li&gt;
&lt;/ul&gt;
&lt;/code&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;PowerShell Script:
&lt;/p&gt;

&lt;p style="margin-left:20px;"&gt;
&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
Param ([string]$SrcUrl, [string]$TargetUrl, [string]$SrcList, [string]$TargetList, [string]$workflowName, [string]$workflowAssociationName, [string]$workflowAssociationTasksList, [string]$workflowAssociationHistoryList, [bool]$replaceExistingMatchingWorkflows)
# Check for the site url input parameter
if(!$SrcUrl -or !$TargetUrl -or !$SrcList -or !$workflowName  -or !$workflowAssociationTasksList -or !$workflowAssociationHistoryList)
{
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Red &amp;quot;Please specify the following parameters:&amp;quot;;
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Yellow &amp;quot;Parameters:&amp;quot;
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Yellow &amp;quot;-SrcUrl [&amp;#39;Url of source web containg existing list workflow&amp;#39;]&amp;quot;
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Yellow &amp;quot;-TargetUrl [&amp;#39;Url of target web for new/migrated list workflow&amp;#39;]&amp;quot;
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Yellow &amp;quot;-SrcList [&amp;#39;Name of the list to associated with existing workflow&amp;#39;]&amp;quot;
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Yellow &amp;quot;-TargetList (optional) [&amp;#39;Name of  list the new/migrated workflow is to be to associated with - SrcList Name assumed if omitted&amp;#39;]&amp;quot;
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Yellow &amp;quot;-workflowName [&amp;#39;Name of the workflow (template)&amp;#39;]&amp;quot;
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Yellow &amp;quot;-workflowAssociationName (optional) [&amp;#39;Display Name of the workflow association - if omitted ALL workflows with matching -workflowName (workflow template) will be processed&amp;#39;]&amp;quot;
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Yellow &amp;quot;-workflowAssociationTasksList [&amp;#39;Name of the Workflow Tasks list&amp;#39;]&amp;quot;
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Yellow &amp;quot;-workflowAssociationHistoryList [&amp;#39;Name of the Workflow History list&amp;#39;]&amp;quot;
	Write-Host &amp;quot;&amp;quot;
	Write-Host -ForegroundColor Yellow &amp;quot;-replaceExistingMatchingWorkflows (optional) [&amp;#39;Remove &amp;amp; Replace Existing Workflows on Target (Default: False)&amp;#39;]&amp;quot;
	Write-Host &amp;quot;&amp;quot;
	
	Write-Host -ForegroundColor Yellow &amp;quot;Example:
	MigrateWorkflowAssociation.ps1 -SrcUrl &amp;#39;http://sourceweb/&amp;#39; -SrcList &amp;#39;Issues&amp;#39; -TargetUrl &amp;#39;http://targetweb/&amp;#39; -TargetList &amp;#39;Issues&amp;#39; -workflowName &amp;#39;Three-state&amp;#39; -workflowAssociationName &amp;#39;My Existing Workflow to be Transferred&amp;#39; -workflowAssociationTasksList &amp;#39;Tasks&amp;#39; -workflowAssociationHistoryList &amp;#39;Workflow History&amp;#39; -replaceExistingMatchingWorkflows $true
	&amp;quot;	
	Break
}
Write-Host &amp;quot;&amp;quot;
write-host &amp;quot;Parameters Received:&amp;quot;
write-host &amp;quot;-SrcUrl: &amp;quot;  -nonewline; write-host $SrcUrl
write-host &amp;quot;-SrcList: &amp;quot;  -nonewline; write-host $SrcList	
write-host &amp;quot;-TargetUrl: &amp;quot;  -nonewline; write-host $TargetUrl
write-host &amp;quot;-TargetList: &amp;quot;  -nonewline; write-host $TargetList
write-host &amp;quot;-workflowName: &amp;quot;  -nonewline; write-host $workflowName
write-host &amp;quot;-workflowAssociationName: &amp;quot;  -nonewline; write-host $workflowAssociationName
write-host &amp;quot;-workflowAssociationTasksList: &amp;quot;  -nonewline; write-host $workflowAssociationTasksList
write-host &amp;quot;-workflowAssociationHistoryList: &amp;quot;  -nonewline; write-host $workflowAssociationHistoryList
if(!$workflowAssociationName)
{
	write-host -ForegroundColor Yellow &amp;quot;No -workflowAssociationName Parameter Provided&amp;quot;
	write-host -ForegroundColor Yellow &amp;quot;All Workflows with matching -workflowName ($workflowName) will be processed&amp;quot;
}
write-host &amp;quot;&amp;quot;
write-host &amp;quot;Checking Source Web and Lists.&amp;quot;
$srcSiteUrl = $SrcUrl
$targetSiteUrl = $TargetUrl
$site = Get-SPWeb $srcSiteUrl
$targetsite = Get-SPWeb $targetSiteUrl
[Guid]$crTemplateId = New-Object Guid
$srcListName = $SrcList
$targetListName = $TargetList
$wfTemplateName = $workflowName
$wfTaskListName = $workflowAssociationTasksList
$wfHistListName = $workflowAssociationHistoryList
$list = $site.Lists[$srcListName]
$wfTaskList = $site.Lists[$wfTaskListName]
$wfHistList = $site.Lists[$wfHistListName]
if (!$TargetList )
{
	$listTarget = $targetsite.Lists[$srcListName]
} 
else 
{
	$listTarget = $targetsite.Lists[$targetListName]
}
function Add-WorkflowAssociation($listTargetParam, $srcworkflowAssociationParam, $newworkflowAssociationParam ) {
	# Add the workflow association to the list
	$listTargetParam.WorkflowAssociations.Add($newworkflowAssociationParam);
	# Enable workflow  
	$newworkflowAssociationParam.Enabled = $srcworkflowAssociationParam.Enabled
	write-host -ForegroundColor Green &amp;quot;&amp;quot;
	write-host -ForegroundColor Green &amp;quot;WorkflowAssociation: &amp;#39;&amp;quot;$newworkflowAssociationParam.Name&amp;quot;&amp;#39; Added Successfully&amp;quot;
	write-host -ForegroundColor Green &amp;quot;To the list: &amp;quot; $listTargetParam.Title
	write-host -ForegroundColor Green &amp;quot;On the web: &amp;quot; $listTargetParam.ParentWeb.Title
	Write-Host -ForegroundColor Green &amp;quot;Url: &amp;quot; $listTargetParam.ParentWeb.Url
	write-host -ForegroundColor Green &amp;quot;&amp;quot;
}
function Get-WorkflowAssociation($workflowassociation) { 
	write-host &amp;quot;&amp;quot;
	write-host &amp;quot;Get-WorkflowAssociation &amp;quot;
	write-host &amp;quot;Web: &amp;quot;  -nonewline; write-host $_.ParentWeb.Url
	write-host &amp;quot;List: &amp;quot;  -nonewline; write-host $_.ParentList.Title;
	write-host &amp;quot;WorkflowTemplate: &amp;quot;  -nonewline; write-host $_.BaseTemplate.Name
	write-host &amp;quot;WorkflowName: &amp;quot;  -nonewline; write-host $_.Name
	#write-host &amp;quot;Soap Xml:&amp;quot;; write-host $_.SoapXml
	write-host &amp;quot;&amp;quot;
	if(!$workflowAssociationName)
	{
		CreateWorkflowAssociation $targetsite $listTarget $_.BaseTemplate.Name $_.Name $_
	}
	elseif($workflowAssociationName -eq $_.Name)
	{
		CreateWorkflowAssociation $targetsite $listTarget $_.BaseTemplate.Name $_.Name $_
	}
}
function CreateWorkflowAssociation($web, $listTarget, $workflowName, $srcworkflowAssociationName, $srcworkflowAssociation)
{
	write-host &amp;quot;CreateWorkflowAssociation Parameters&amp;quot;
	write-host &amp;quot;web :&amp;quot; $web
	write-host &amp;quot;listTarget :&amp;quot; $listTarget
	write-host &amp;quot;workflowName :&amp;quot; $workflowName
	write-host &amp;quot;srcworkflowAssociationName :&amp;quot; $srcworkflowAssociationName
	#write-host &amp;quot;srcworkflowAssociation :&amp;quot; $srcworkflowAssociation
	write-host &amp;quot;&amp;quot;
	write-host &amp;quot;&amp;quot;
	write-host &amp;quot;Creating Workflow Association&amp;quot; 
	$workflowTemplate=$web.workflowtemplates.gettemplatebyname($workflowName, [System.Globalization.CultureInfo]::CurrentCulture);
    
	if(!$workflowTemplate)
	{
	Write-Host -ForegroundColor Red &amp;quot;No workflow installed or activated with this workflowname : &amp;quot; $workflowName &amp;quot;on the web: &amp;quot;
	Write-Host -ForegroundColor Red &amp;quot;Name : &amp;quot; $web
	   Write-Host -ForegroundColor Red &amp;quot;Url  : &amp;quot; $web.Url
	}
	else
	{
            # Check if the site already has a workflow history list - if not, create it
            if(!$web.Lists[$wfHistListName])
            {
                $web.Lists.Add($wfHistListName, &amp;quot;A system library used to store workflow history information.&amp;quot;, [Microsoft.SharePoint.SPListTemplateType]::WorkflowHistory);                
                $wfHistory = $web.Lists[$wfHistListName]
                $wfHistory.Hidden = $true
                $wfHistory.Update()
            }            
            
            #Check if the site already has a workflow tasks list - if not, create it
            if(!$web.Lists[$wfTaskListName])
            {
                $web.Lists.Add($wfTaskListName, &amp;quot;This system library used to store workflow tasks information.&amp;quot;, [Microsoft.SharePoint.SPListTemplateType]::Tasks);                
                $wfTasks = $web.Lists[$wfTaskListName]
                $wfTasks.Hidden = $true
                $wfTasks.Update()
            }
            
            $wfHistory = $web.Lists[$wfHistListName]
            $wfTasks = $web.Lists[$wfTaskListName]
            
            #Create new workflow association
            $newworkflowAssociation = [Microsoft.SharePoint.Workflow.SPWorkflowAssociation]::CreateListAssociation($workflowTemplate, $srcworkflowAssociationName, $wfTasks, $wfhistory)
			
            #Set workflow AssociationData and config from source workflow association
            $newworkflowAssociation.AssociationData = $srcworkflowAssociation.AssociationData
            $newworkflowAssociation.AllowManual = $srcworkflowAssociation.AllowManual
            $newworkflowAssociation.AutoStartChange = $srcworkflowAssociation.AutoStartChange
            $newworkflowAssociation.AutoStartCreate = $srcworkflowAssociation.AutoStartCreate
            
            # Optional debug info
            #write-host &amp;quot;ParentWeb: &amp;quot;  -nonewline; write-host $newworkflowAssociation.ParentWeb.Url
            #write-host &amp;quot;HistoryList: &amp;quot; -nonewline;  write-host $newworkflowAssociation.HistoryListTitle
            #write-host &amp;quot;HistoryListID: &amp;quot; -nonewline;  write-host $newworkflowAssociation.HistoryListId
            #write-host &amp;quot;TaskList: &amp;quot; -nonewline;  write-host $newworkflowAssociation.TaskListTitle
            #write-host &amp;quot;TaskListID: &amp;quot; -nonewline;  write-host $newworkflowAssociation.TaskListId
			
            write-host &amp;quot;New Workflow Association Created Succesfully with Following Attributes:&amp;quot;
            write-host &amp;quot;&amp;quot;
            $newworkflowAssociation
            write-host &amp;quot;&amp;quot;
            write-host &amp;quot;Associating New Workflow Association With Target List&amp;quot;
            write-host &amp;quot;&amp;quot;
            [guid]$wfId = New-Object Guid
            [bool]$wfFound = $false
            # Optional step if you want to remove the default Page Approval work association from your list
            #foreach ($wf in $listTarget.WorkflowAssociations) {
            #    if($wf.Name -eq &amp;quot;Page Approval&amp;quot;){
            #        Write-Host -Foreground Yellow &amp;quot;Removing Page Approval work flow association from the target list&amp;quot;;
            #        $listTarget.WorkflowAssociations.Remove($wf.Id);
            #    }             
            #}
            
            if(!$workflowAssociationName)
            {
		write-host &amp;quot;-workflowAssociationName not provided&amp;quot;
		write-host &amp;quot;Checking for matches using -workflowName: $workflowName (Workflow Template Name)&amp;quot;
	        write-host &amp;quot;&amp;quot;
		foreach ($wf in $listTarget.WorkflowAssociations) {
	        	if ($wf.Name -eq $newworkflowAssociation.Name) {
				$wfId = $wf.Id
	                	write-host -ForegroundColor Yellow &amp;quot;Workflow &amp;quot; $wf.Name &amp;quot; already exists on the target list:&amp;quot; $listTarget.Title
				write-host -ForegroundColor Yellow &amp;quot;&amp;quot;
	                	$wfFound = $true
	                }
            	}
					            
            	if ($wfFound -eq $true) {
			if($replaceExistingMatchingWorkflows)
			{
	               		write-host -ForegroundColor Yellow &amp;quot;-replaceExistingMatchingWorkflows true&amp;quot;
				# Remove exisiting workflow association
				$listTarget.WorkflowAssociations.Remove($wfId)
	        	        write-host -ForegroundColor Yellow &amp;quot;Removed workflow&amp;quot; $newworkflowAssociation.Name &amp;quot;from the list: &amp;quot; $listTarget.Title
	                	write-host -ForegroundColor Yellow &amp;quot;on the web:&amp;quot;$web
			        Write-Host -ForegroundColor Yellow &amp;quot;Url: &amp;quot; $web.Url
		       		Write-Host -ForegroundColor Yellow &amp;quot;&amp;quot;
	        	  	Add-WorkflowAssociation $listTarget $srcworkflowAssociation $newworkflowAssociation
			}
			else
			{
				write-host -ForegroundColor Yellow &amp;quot;Rerun MigrateWorkflowAssociation.ps1 using &amp;#39;-replaceExistingMatchingWorkflows true&amp;#39;&amp;quot; 
				write-host -ForegroundColor Yellow &amp;quot;or remove Workflow&amp;quot; $wf.Name &amp;quot;from target list:&amp;quot; $listTarget.Title  &amp;quot;manually&amp;quot; 
			}
            	}
            	else
            	{
			Add-WorkflowAssociation $listTarget $srcworkflowAssociation $newworkflowAssociation
            	}
            }
            else
            {
		write-host &amp;quot;-workflowAssociationName provided&amp;quot;
		write-host &amp;quot;Checking for matches using -workflowAssociationName: $workflowAssociationName&amp;quot;
	        write-host &amp;quot;&amp;quot;
		foreach ($wf in $listTarget.WorkflowAssociations) {
	                if ($wf.Name -eq $workflowAssociationName) {
	                    	$wfId = $wf.Id
	                    	write-host -ForegroundColor Yellow &amp;quot;Workflow &amp;quot; $wf.Name &amp;quot; already exists on the target list:&amp;quot; $listTarget.Title
	                    	$wfFound = $true
	                }
	        }
		
		if ($wfFound -eq $true) 
		{
			if($replaceExistingMatchingWorkflows)
			{
		        	#Remove exisiting workflow association
				$listTarget.WorkflowAssociations.Remove($wfId)
				write-host -ForegroundColor Yellow &amp;quot;Removed workflow&amp;quot; $newworkflowAssociation.Name &amp;quot;from the list: &amp;quot; $listTarget.Title 
				write-host -ForegroundColor Yellow &amp;quot;on the web:&amp;quot;
				Write-Host -ForegroundColor Yellow &amp;quot;Name : &amp;quot;$web
			        Write-Host -ForegroundColor Yellow &amp;quot;Url :  &amp;quot; $web.Url
		          	Add-WorkflowAssociation $listTarget $srcworkflowAssociation $newworkflowAssociation
						}
			else
			{
				write-host -ForegroundColor Yellow &amp;quot;Rerun MigrateWorkflowAssociation.ps1 using &amp;#39;-replaceExistingMatchingWorkflows true&amp;#39;&amp;quot;
				write-host -ForegroundColor Yellow &amp;quot;or remove Workflow&amp;quot; $wf.Name &amp;quot;from target list:&amp;quot; $listTarget.Title  &amp;quot;manually&amp;quot;
			}
		}
		else
		{
			Add-WorkflowAssociation $listTarget $srcworkflowAssociation $newworkflowAssociation
		}
            }
    }
}
write-host &amp;quot;Preparing to associate workflow with list.&amp;quot;
#
if ($list -ne $null)
{
	write-host &amp;quot;List: &amp;quot;  -nonewline;  $list.Title
	$wfTemplate=$site.workflowtemplates.gettemplatebyname($wfTemplateName, [System.Globalization.CultureInfo]::CurrentCulture);
    
	if(!$wfTemplate)
	{
		Write-Host -ForegroundColor Red &amp;quot;No workflow installed or activated with this workflowname : &amp;quot; $workflowName &amp;quot;on the web: &amp;quot;
		Write-Host -ForegroundColor Red &amp;quot;Name : &amp;quot; $site
		Write-Host -ForegroundColor Red &amp;quot;Url  : &amp;quot; $site.Url
	}
	else
	{
		if ($wfTemplate.Name -eq $wfTemplateName) 
		{
			write-host &amp;quot;Template Name: &amp;quot;  -nonewline;  $wfTemplate.Name
			$wfTemplateId = $wfTemplate.Id
			write-host &amp;quot;Template ID: &amp;quot;  -nonewline; write-host $wfTemplateId
			
		}
		write-host &amp;quot;WorkflowAssociations: &amp;quot;  -nonewline;  $list.WorkflowAssociations.Count
		$list.WorkflowAssociations | foreach { Get-WorkflowAssociation($_) }
	}
	
}
else
{
	write-host &amp;quot;ERROR: Could not find source list, association will have to be made manually.&amp;quot; -ForegroundColor red
}
#
$site.Dispose()
$targetsite.Dispose()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=224" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2010/default.aspx">SharePoint-2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2010/default.aspx">SP2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Workflows/default.aspx">Workflows</category></item><item><title>SharePoint Saturday UK 2011 Rundown...</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2011/11/13/sharepoint-saturday-uk-2011-rundown.aspx</link><pubDate>Sun, 13 Nov 2011 18:15:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:194</guid><dc:creator>aobi</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Well &lt;a href="http://www.sharepointsaturday.org/uk/" target="_blank"&gt;SharePoint
Saturday UK&lt;/a&gt; (&lt;a href="http://search.twitter.com/search?q=%23spsuk" target="_blank"&gt;#spsuk&lt;/a&gt;) has been and gone for another year...&lt;/p&gt;

&lt;p&gt;For anyone who&amp;#39;s not aware, it&amp;#39;s&lt;/p&gt;

&lt;p&gt;&amp;quot;&lt;i&gt;an educational,
informative &amp;amp; lively day filled with sessions from respected SharePoint
professionals &amp;amp; MVPs, covering a wide variety of SharePoint-orientated
topics.&amp;nbsp; SharePoint Saturday is FREE,
open to the public and is your local chance to immerse yourself in SharePoint!&amp;quot;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;This year&amp;#39;s event was held at &lt;a href="http://www.nottinghamconferences.co.uk/emcc/" target="_blank"&gt;Nottingham Conferences
University Park&lt;/a&gt; and was attended by 500+ avid SharePointers.&lt;/p&gt;


&lt;p&gt;The day kicked off with a great Keynote from Todd Klindt
(&lt;a href="http://twitter.com/ToddKlindt" target="_blank"&gt;@ToddKlindt&lt;/a&gt;) entitled &amp;quot;Making
Nerds Better People&amp;quot; in which Todd attempted to encourage people to &amp;quot;step out
of their comfort zone and/or their area of personal expertise&amp;quot;. Touching on his
own personal experiences of taking the SharePoint Dev exams, whilst primarily being
an SP Admin/IT Pro (he did also admit that the x2 main reasons for even attempting
the exams were ‘Knowledge&amp;#39; and ‘Spite&amp;#39;). When asked how many people in the room had currently
taken (and passed) all x4 SP exams, very few hands went up. Which probably only
goes to prove he&amp;#39;s got a valid point... we can all learn a bit more about
the areas we already focus on, simply by learning about the areas that we don&amp;#39;t.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://toddklindt.com/Slides/spsuk2011/Keynote%20-%20Making%20Nerds%20better%20People.pdf" target="_blank"&gt;http://toddklindt.com/Slides/spsuk2011/Keynote
- Making Nerds better People.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Nov2011/sessions.png"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Nov2011/sessions.png" title="SharePoint Saturday UK 2011 - Session Agenda" alt="SharePoint Saturday UK 2011 - Session Agenda" style="margin:10px;" width="250" align="right" border="0" hspace="10" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My first session of the day was &amp;quot;Putting you at the
centre of the Social Intranet&amp;quot; presented by Wes Hackett (&lt;a href="http://twitter.com/weshackett" target="_blank"&gt;@weshackett&lt;/a&gt;), in which he covered the
various challenges and approaches of successfully implementing a truly &amp;quot;Social
Intranet&amp;quot; using SharePoint. A few of the highlights were ‘making a big social
change - centre on collaboration not publishing&amp;#39;, ‘attempt to make social spaces
primary places of work&amp;#39; and a particular favourite &amp;quot;Location Based
Subscriptions&amp;quot; - a custom extension to the in-built SP alerts.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weshackett.com/2011/11/sharepoint-saturday-2011/" target="_blank"&gt;http://weshackett.com/2011/11/sharepoint-saturday-2011/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;twitter: &lt;a href="http://search.twitter.com/search?q=%23spsuk16" target="_blank"&gt;#spsuk16&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;Next session was &amp;quot;Deploying SharePoint 2010 Globally - The
options&amp;quot; by Paul Grimely (&lt;a href="http://twitter.com/paulgrimley" target="_blank"&gt;@paulgrimley&lt;/a&gt;),
in which he covered the various supported architecture options for deploying SharePoint
2010 across geographically dispersed locations (single farm, multi-farm or 3&lt;sup&gt;rd&lt;/sup&gt;
party replication). As well has the vast amount of considerations that need to
be painstakingly thought-out, planned and tested (from Business Requirements
and Budgets to careful planning of ‘SP Variations&amp;#39; for Multilanguage deployments)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.paulgrimley.com/2011/11/deploying-sharepoint-globally-slides.html" target="_blank"&gt;http://www.paulgrimley.com/2011/11/deploying-sharepoint-globally-slides.html&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;twitter: &lt;a href="http://search.twitter.com/search?q=%23spsuk07" target="_blank"&gt;#spsuk07&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;Next up was &amp;quot;How we did it - Combined Knowledge
SharePoint Design&amp;quot; presented by Matt Hughes (&lt;a href="http://twitter.com/mattmoo2" target="_blank"&gt;@mattmoo2&lt;/a&gt;), in which Matt not only
showed us an &amp;quot;under the hood demo&amp;quot; of the new &amp;nbsp;&lt;a href="http://www.internationalsharepointconference.com/" target="_blank"&gt;www.internationalsharepointconference.com&lt;/a&gt;
website (previously known as the &amp;quot;European SharePoint Best Practices Conference&amp;quot;),&amp;nbsp; but also presented the entire session
sporting &amp;quot;full face paint&amp;quot;. He also made the recommendation (amongst others) of
avoiding the use of &amp;quot;!important&amp;quot; (or bang important) in CSS, whenever attempting
to brand SharePoint ...although personally I think the practical do&amp;#39;s and don&amp;#39;ts of
this in real world scenarios is yet another thing the SP camp could discuss at
length (and could even add to the &amp;quot;SharePoint &amp;gt; To Brand or Not to Brand ?&amp;quot; discussion)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sp365.co.uk/2011/11/sharepoint-saturday-how-we-did-it-the-combined-knowledge-sharepoint-design-spsuk13/" target="_blank"&gt;http://sp365.co.uk/2011/11/sharepoint-saturday-how-we-did-it-the-combined-knowledge-sharepoint-design-spsuk13/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;twitter: &lt;a href="http://search.twitter.com/search?q=%23spsuk13" target="_blank"&gt;#spsuk13&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;I followed this up with Mark Miller&amp;#39;s (&lt;a href="http://twitter.com/EUSP" target="_blank"&gt;@EUSP&lt;/a&gt;) &amp;quot;Something Awesome&amp;quot; (aka ‘To Host or
Not to Host - the Good, the Bad and the Ugly Decisions&amp;#39;) session, which turned
out to be one of the most informative sessions of the day. Mark initially covered
the pros and cons of ‘On-Premise&amp;#39; vs. ‘Cloud&amp;#39;. Highlighting such issues as ‘On
Premise: gives full control but at what cost?&amp;#39; usually has significant on-going
infrastructure, monitoring and management overheads. Whereas ‘Cloud&amp;#39; gives less
control (no farm solutions - sandbox solutions only, &amp;nbsp;no ‘Central Admin&amp;#39; access - ‘Tenant Admin&amp;#39;
access only) but is potentially far more cost effective for SMEs (However, annual
subscription costs can quickly spiral for larger enterprise deployments). The
session then went on to discuss other potential issues which should also be
considered such as the ‘US Patriot Act&amp;#39; (anyone considering Office365 and/or Cloud
solutions should seriously look into the implications of this before signing up
to anything), &amp;nbsp;using ‘generic cloud
providers&amp;#39; who provide reliable infrastructure with %99.9 uptime, but are often
not experts in supporting SharePoint. He then continued with the conclusion that
in reality the majority of ‘Cloud&amp;#39; solutions over the coming years, will in
fact be a combination of both of ‘On-Premise&amp;#39; and ‘Cloud&amp;#39; or &amp;quot;Hybrid
solutions&amp;quot;.&lt;/p&gt;

&lt;p&gt;twitter: &lt;a href="http://search.twitter.com/search?q=%23spsuk34" target="_blank"&gt;#spsuk34&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;My final session of the day was Todd Klindt&amp;#39;s (&lt;a href="http://twitter.com/ToddKlindt" target="_blank"&gt;@ToddKlindt&lt;/a&gt;) &amp;quot;PowerShell&amp;quot;, which again
was another fantastic session from Todd. Even though some may argue that it was
less complicated when compared to some other SharePoint PowerShell sessions
(such as Gary Lapointe&amp;#39;s ‘PowerShell Best Practices for SharePoint Administrators&amp;#39;
at last year&amp;#39;s &amp;quot;Best Practices conference&amp;quot;), it was still full of various
useful tips: such as use ‘Start-Transcript&amp;#39;, try to avoid using aliases and always
ensure you understand the difference between &amp;quot;evaluation&amp;quot; and &amp;quot;assignment&amp;quot; before
running any script (Todd gave an example of how he&amp;#39;d learnt this the ‘hard way&amp;#39;
by once successfully re-naming all of his SP databases to &amp;quot;SP_Config&amp;quot;)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://toddklindt.com/Slides/spsuk2011/PowerShell.pdf" target="_blank"&gt;http://toddklindt.com/Slides/spsuk2011/PowerShell.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://toddklindt.com/Slides/spsuk2011/PowerShell_transcript.20111112080916.txt" target="_blank"&gt;http://toddklindt.com/Slides/spsuk2011/PowerShell_transcript.20111112080916.txt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;twitter: &lt;a href="http://search.twitter.com/search?q=%23spsuk10" target="_blank"&gt;#spsuk10&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;The day ended with a Closing Keynote &amp;quot;SharePoint and the
Cloud: Crash or Convergence?&amp;quot; from Steve Fox. In which he ran through various demos
(at the audience&amp;#39;s request) on using Azure with both SharePoint as well as the
new ‘Power View&amp;#39; which will ship with SQL Server 2012 aka (&amp;#39;Denali&amp;#39;) (His &amp;quot;no
code&amp;quot; demo of combining an Azure data source with Excel and publishing it via &amp;nbsp;Excel Services was particularly impressive).
&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Nov2011/spsuk2011_27.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SPSUK_Nov2011/spsuk2011_27.jpg" style="margin:10px;" width="250" border="0" alt="" /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;From what I understand there were numerous other &amp;quot;highlight
sessions&amp;quot; that ran throughout the day which I wasn&amp;#39;t able to attend, as ran simultaneously
to those above (Becky Isserman&amp;#39;s &amp;quot;HTML 5 vs SilverLight 5&amp;quot; &lt;a href="http://search.twitter.com/search?q=%23spsuk01" target="_blank"&gt;#spsuk01&lt;/a&gt;, Eric Schupps&amp;#39; &amp;quot;Customizing
the SharePoint Packaging and Deployment Process in Visual Studio 2010&amp;quot; &lt;a href="http://search.twitter.com/search?q=%23spsuk02" target="_blank"&gt;#spsuk02&lt;/a&gt;, Chris O&amp;#39;Brien&amp;#39;s
&amp;quot;Custom Ribbon Development&amp;quot; &lt;a href="http://search.twitter.com/search?q=%23spsuk03" target="_blank"&gt;#spsuk03&lt;/a&gt;, Ant Clay and
Andrew Woodward&amp;#39;s &amp;quot;SharePoint ‘Innovation Games&amp;#39; Workshop&amp;quot; &lt;a href="http://search.twitter.com/search?q=%23spsuk38" target="_blank"&gt;#spsuk38&lt;/a&gt;&amp;nbsp; to name but a few).&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;All in all another great SharePoint Saturday!&lt;/p&gt;

&lt;p&gt;As usual a &lt;b&gt;HUGE
THANKS&lt;/b&gt; goes to the event organisers Brett Lonsdale (&lt;a href="http://twitter.com/brettlonsdale" target="_blank"&gt;@brettlonsdale&lt;/a&gt;) , Tony Pounder(&lt;a href="http://twitter.com/WorTony" target="_blank"&gt;@WorTony&lt;/a&gt;) and Mark Macrae(&lt;a href="http://twitter.com/m_macrae" target="_blank"&gt;@m_macrae&lt;/a&gt;) as well as all of the &lt;a href="http://www.sharepointsaturday.org/uk/Pages/sponsors.aspx" target="_blank"&gt;event
sponsors&lt;/a&gt; who made the day possible.&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Photos of the day&amp;#39;s events are available &lt;b&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/pages/photos-from-sharepoint-saturday-2011.aspx"&gt;&amp;quot;here&amp;quot;&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=194" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Conference/default.aspx">Conference</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SPSUK/default.aspx">SPSUK</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-Saturday/default.aspx">SharePoint-Saturday</category></item><item><title>SharePoint 2010 - Edit Document via Citrix XenApp</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2011/10/25/sharepoint-2010-edit-document-via-citrix-xenapp.aspx</link><pubDate>Tue, 25 Oct 2011 00:30:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:189</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;Whilst recently performing a new SharePoint 2010 deployment
for a client, I was presented with the following problem. &amp;nbsp;The client was using Citrix XenApp to deploy and
manage Office 2010 on their users&amp;#39; desktops and as such was receiving the following
error message&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/SharePointCompatibleError3.gif"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/SharePointCompatibleError3.gif" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&amp;quot;The document could not be opened for editing. A
Microsoft SharePoint Foundation compatible application could not be found to
edit the document.&amp;quot; &lt;/i&gt;&lt;/p&gt;


&lt;p&gt;...when attempting to use the &amp;quot;Edit in {office app}&amp;quot;&amp;nbsp; from the document menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/Edit%20In%20Menu.JPG"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/Edit%20In%20Menu.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now as you may (or may not) already be aware, by default
SharePoint is configured to use the ‘owssupp.dll&amp;#39; ActiveX control to open Office
documents in &amp;quot;edit mode&amp;quot;, which is installed as part of the &amp;quot;SharePoint Support
features&amp;quot; of the client&amp;#39;s Office installation. (Further info on the subject see:
&lt;a href="http://bradleychetty.blogspot.com/2011/08/microsoft-sharepoint-foundation.html"&gt;http://bradleychetty.blogspot.com/2011/08/microsoft-sharepoint-foundation.html&lt;/a&gt;
)&lt;/p&gt;

&lt;p&gt;Now as the client was running Office via Citrix, there was
no local installation of Office on the desktop machines and therefore no ‘owssupp.dll&amp;#39;.&lt;/p&gt;

&lt;p&gt;The obvious solution to the problem was to simply run the &amp;quot;IE
browser session&amp;quot; via Citrix as well, which does work as long as the &amp;quot;webclient
service&amp;quot; is running on the Citrix server (see &lt;a href="http://support.citrix.com/article/CTX125214"&gt;http://support.citrix.com/article/CTX125214&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;However, the client didn&amp;#39;t want to use Citrix for all web
and internet traffic and didn&amp;#39;t really want to give their users two browser
links on the desktops (ie. one to browse
SharePoint via Citrix and another local one for all other web/internet access).
&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;So, what to do?&lt;/p&gt;

&lt;p&gt;Well, SharePoint uses the &lt;b&gt;DOCICON.XML&lt;/b&gt; file to control which documents
are associated with a particular application (More information on how this works
can be found at &amp;quot;&lt;a href="http://msdn.microsoft.com/en-us/library/ms463701.aspx" title="Understanding DocIcon.xml files" target="_blank"&gt;Understanding DocIcon.xml files&lt;/a&gt;&amp;quot;),
but basically the &amp;quot;&lt;b&gt;OpenControl&lt;/b&gt;&amp;quot; attribute is used to specify the name of the
ActiveX control used to open the particular document type (see &lt;a href="http://msdn.microsoft.com/en-us/library/aa979488.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa979488.aspx&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;So one quick Google search later, and I found a useful
article from &amp;quot;&lt;a href="http://blogs.msdn.com/b/malag/" title="Manpreet&amp;#39;s SharePoint Developer Blog" target="_blank"&gt;Manpreet&amp;#39;s SharePoint Developer Blog&lt;/a&gt;&amp;quot;, which covered the basics
of &amp;quot;&lt;a href="http://blogs.msdn.com/b/malag/archive/2010/05/13/using-custom-opendocuments-control-to-open-custom-file-types-in-sharepoint.aspx" title="Using custom OpenDocuments control to open custom file types in SharePoint" target="_blank"&gt;writing a custom SharePoint.OpenDocuments&lt;/a&gt;&amp;quot; control (and even includes source
code for his ‘Malag.OpenDocuments control&amp;#39; as a starter for ten!).&lt;/p&gt;

&lt;p&gt;It was at this point that the client pointed out they also
had some &amp;quot;remote users&amp;quot; (connected over vpn) who didn&amp;#39;t have access to Citrix,
but &lt;b&gt;DID&lt;/b&gt; have a local copy of Office installed on their Laptops and would need
the same ability to &amp;quot;Edit Office Documents&amp;quot; directly from SharePoint...&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Now as far as I&amp;#39;m aware, the DOCICON.XML file only permits a
&amp;quot;one-to-one&amp;quot; association per file type, so using a &amp;quot;custom OpenDocuments&amp;quot;
control (to open files via Citrix) wasn&amp;#39;t going to be an option as the Citrix
PNAgent wouldn&amp;#39;t be available on the laptops of the remote users.&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;It seemed there was a requirement for &lt;b&gt;two&lt;/b&gt; &amp;quot;Edit in {office app}&amp;quot; menu
items to be available via the SharePoint
user interface. One to open/edit the file via Citrix and another to use local installation
of Office (ie. the default SharePoint &amp;quot;Edit&amp;quot; action)&lt;/p&gt;


&lt;p&gt;So I came up with the following &amp;quot;sandbox solution&amp;quot; to
achieve this:&lt;/p&gt;


&lt;p&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Create a &amp;quot;custom menu item&amp;quot; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;See the following for further info:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.thespgeek.com/2011/01/how-to-add-custom-menu-item-in.html"&gt;http://www.thespgeek.com/2011/01/how-to-add-custom-menu-item-in.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms473643.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms473643.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms460194.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms460194.aspx&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;I set the &amp;quot;Scope&amp;quot; of my feature to &amp;quot;Site&amp;quot;, so
that it could be activated on a &amp;quot;per site-collection&amp;quot; basis, but obviously if
you&amp;#39;d prefer it be controlled on a &amp;quot;per site&amp;quot; basis you could set your scope to
be &amp;quot;Web&amp;quot;.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
In the Elements.xml file, &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/EditViaCitrixOffice_Elements_xml.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/EditViaCitrixOffice_Elements_xml.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;..include a reference to
a &amp;quot;CustomAction ScriptBlock&amp;quot;, which includes the following code: &lt;br /&gt;&lt;/p&gt;

&lt;code&gt;
&lt;p&gt;&amp;lt;CustomAction&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Location=&amp;quot;ScriptLink&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
ScriptBlock=&amp;#39;function doOpenWithCitrix(paramval, OfficeApp){ &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
openCitrixOfficApp(getUNCPath(paramval), OfficeApp);}&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
function openCitrixOfficApp(strFileapth, strOfficeAppName){&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
var oShell = new ActiveXObject(&amp;quot;Shell.Application&amp;quot;);&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
var citrixCmd = &amp;quot;C:\\Program Files\\Citrix\\ICA Client\\pnagent.exe&amp;quot;;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;
/*Note - The Path to your pnagent.exe may need to be adjusted */&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
var commandParms = &amp;quot; /QLaunch \&amp;quot;&amp;quot;+ strOfficeAppName
+&amp;quot;\&amp;quot; /param:\&amp;quot;&amp;quot; + strFileapth +&amp;quot;\&amp;quot; &amp;quot;;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
oShell.ShellExecute(citrixCmd, commandParms, &amp;quot;&amp;quot;,
&amp;quot;open&amp;quot;, &amp;quot;1&amp;quot;);}&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
function getUNCPath(url){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
var returnVal;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
returnVal = decodeURI(url);&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
returnVal = returnVal.replace(new RegExp(&amp;quot;/&amp;quot;, &amp;quot;g&amp;quot;),
&amp;quot;\\&amp;quot;);&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
returnVal = returnVal.replace(new RegExp(&amp;quot;http:&amp;quot;,
&amp;quot;g&amp;quot;), &amp;quot;&amp;quot;);&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
returnVal = &amp;quot;\\\\&amp;quot; + location.hostname + returnVal;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
return returnVal;}&amp;#39;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Sequence=&amp;quot;101&amp;quot;&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;/CustomAction&amp;gt;&lt;/p&gt;
&lt;/code&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;This JavaScript attempts to run the Citrix PNAgent.exe,
along with the path to the Office document stored in SharePoint as a parameter.
&lt;/p&gt;

&lt;p&gt;For some reason Citrix didn&amp;#39;t seem to like &amp;quot;http://&amp;quot; paths, so I have included
a ‘getUNCPath&amp;#39; function which attempts to convert the URL of the document item
to a UNC path.&lt;/p&gt;

&lt;p&gt;(Again, please note that Citrix requires the
&amp;quot;webclient service&amp;quot; to be running on the Citrix server so that it is able
access the files via UNC paths - or rather via webDAV)&lt;/p&gt;


&lt;p&gt;It is possible include the script in a &amp;quot;.js
file&amp;quot; if you prefer (see &lt;a href="http://blog.voyta.net/2010/09/12/referencing-javascript-files-using-customaction-in-sharepoint-2010-sandboxed-solutions/"&gt;http://blog.voyta.net/2010/09/12/referencing-javascript-files-using-customaction-in-sharepoint-2010-sandboxed-solutions/&lt;/a&gt;),
but it&amp;#39;s not necessary for the purposes of this example.&lt;/p&gt;


&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Include the following &amp;quot;Custom Action&amp;quot;(s)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;code&gt;
&lt;p&gt;&amp;lt;CustomAction&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Id=&amp;quot;CitrixOffice_Word2010&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationType=&amp;quot;FileType&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationId=&amp;quot;doc&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Rights=&amp;quot;&lt;span class="selflink"&gt;EditListItems&lt;/span&gt;&amp;quot;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
ImageUrl=&amp;quot;/_layouts/images/icdoc.png&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Location=&amp;quot;EditControlBlock&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Sequence=&amp;quot;252&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Title=&amp;quot;Edit in Microsoft Word 2010 (via Citrix)&amp;quot; &amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;UrlAction Url=&amp;quot;javascript : doOpenWithCitrix(&amp;#39;{ItemUrl}&amp;#39;, &amp;#39;Word
2010&amp;#39;);&amp;quot;/&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;/CustomAction&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;CustomAction&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Id=&amp;quot;CitrixOffice_Word2010&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationType=&amp;quot;FileType&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationId=&amp;quot;docx&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Rights=&amp;quot;&lt;span class="selflink"&gt;EditListItems&lt;/span&gt;&amp;quot; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
ImageUrl=&amp;quot;/_layouts/images/icdoc.png&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Location=&amp;quot;EditControlBlock&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Sequence=&amp;quot;252&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Title=&amp;quot;Edit in Microsoft Word 2010 (via Citrix)&amp;quot; &amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;UrlAction Url=&amp;quot;javascript : doOpenWithCitrix(&amp;#39;{ItemUrl}&amp;#39;, &amp;#39;Word
2010&amp;#39;);&amp;quot;/&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;/CustomAction&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;CustomAction&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Id=&amp;quot;CitrixOffice_Excel2010&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationType=&amp;quot;FileType&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationId=&amp;quot;xls&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Rights=&amp;quot;&lt;span class="selflink"&gt;EditListItems&lt;/span&gt;&amp;quot; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
ImageUrl=&amp;quot;/_layouts/images/icxls.png&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Location=&amp;quot;EditControlBlock&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Sequence=&amp;quot;252&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Title=&amp;quot;Edit in Microsoft Excel 2010 (via Citrix)&amp;quot; &amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;UrlAction Url=&amp;quot;javascript : doOpenWithCitrix(&amp;#39;{ItemUrl}&amp;#39;, &amp;#39;Excel
2010&amp;#39;);&amp;quot;/&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;/CustomAction&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;CustomAction&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Id=&amp;quot;CitrixOffice_Excel2010&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationType=&amp;quot;FileType&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationId=&amp;quot;xlsx&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Rights=&amp;quot;&lt;span class="selflink"&gt;EditListItems&lt;/span&gt;&amp;quot; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
ImageUrl=&amp;quot;/_layouts/images/icxls.png&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Location=&amp;quot;EditControlBlock&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Sequence=&amp;quot;252&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Title=&amp;quot;Edit in Microsoft Excel (via Citrix)&amp;quot; &amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;UrlAction Url=&amp;quot;javascript : doOpenWithCitrix(&amp;#39;{ItemUrl}&amp;#39;, &amp;#39;Excel
2010&amp;#39;);&amp;quot;/&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;/CustomAction&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;CustomAction&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Id=&amp;quot;CitrixOffice_Ppoint2010&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegistrationType=&amp;quot;FileType&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationId=&amp;quot;ppt&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Rights=&amp;quot;&lt;span class="selflink"&gt;EditListItems&lt;/span&gt;&amp;quot; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
ImageUrl=&amp;quot;/_layouts/images/icppt.png&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Location=&amp;quot;EditControlBlock&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Sequence=&amp;quot;252&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Title=&amp;quot;Edit in Microsoft PowerPoint 2010 (via Citrix)&amp;quot; &amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;UrlAction Url=&amp;quot;javascript : doOpenWithCitrix(&amp;#39;{ItemUrl}&amp;#39;,
&amp;#39;PowerPoint 2010&amp;#39;);&amp;quot;/&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;/CustomAction&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;CustomAction&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Id=&amp;quot;CitrixOffice_Ppoint2010&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationType=&amp;quot;FileType&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
RegistrationId=&amp;quot;pptx&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Rights=&amp;quot;&lt;span class="selflink"&gt;EditListItems&lt;/span&gt;&amp;quot; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
ImageUrl=&amp;quot;/_layouts/images/icppt.pngg&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Location=&amp;quot;EditControlBlock&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Sequence=&amp;quot;252&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title=&amp;quot;Edit
in Microsoft PowerPoint 2010 (via Citrix)&amp;quot; &amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;UrlAction Url=&amp;quot;javascript : doOpenWithCitrix(&amp;#39;{ItemUrl}&amp;#39;,
&amp;#39;PowerPoint 2010&amp;#39;);&amp;quot;/&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;
&amp;lt;/CustomAction&amp;gt;&lt;/p&gt;
&lt;/code&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Each of these, creates a new Menu Item (with
the call to the custom JavaScript ) based on the associated FileType/FileExtension.&lt;/p&gt;


&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: the second parameter passed to the &amp;quot;doOpenWithCitrix&amp;quot;
function needs to be the &lt;b&gt;Application
Name&lt;/b&gt; that is published in Citrix. &lt;/p&gt;


&lt;p&gt;In this particular example, I have simply specified
&amp;quot;&amp;#39;Word 2010&amp;#39;, ‘Excel 2010&amp;#39; or ‘PowerPoint 2010&amp;#39;&amp;quot;, but obviously these may vary
depending on your Citrix setup.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;You should then be able to publish your feature as a &lt;a href="http://blogs.salmanghani.info/?tag=sandboxed-solutions" title="Sandbox Solution" target="_blank"&gt;Sandbox Solution&lt;/a&gt; and see the following additional menu item&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/EditViaCitrixOffice_menuitem.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/EditViaCitrixOffice_menuitem.jpg" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The final step that is required to get this working is to &amp;quot;&lt;b&gt;Enable&lt;/b&gt;&amp;quot; the &amp;quot;&lt;b&gt;Initialize and script ActiveX controls not marked as safe&lt;/b&gt;&amp;quot;in the Internet Explorer Security Options.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;(unfortunately the &amp;quot;new ActiveXObject(&amp;quot;Shell.Application&amp;quot;);&amp;quot; javascript call requires this setting to be enabled to function correctly).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.obilogic.co.uk/blogs/teamblog/InitializeandscriptActiveX.jpg"&gt;&lt;img src="http://community.obilogic.co.uk/blogs/teamblog/InitializeandscriptActiveX.jpg" border="0" height="311" width="512" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style="font-weight:bold;"&gt;NOTE:&lt;/span&gt; To prevent creating a security risk I would &lt;span style="font-weight:bold;"&gt;ONLY RECOMMEND&lt;/span&gt; changing this security option for &amp;quot;&lt;span style="font-weight:bold;"&gt;Trusted Sites&lt;/span&gt;&amp;quot; (which obviously then needs to be controlled and/or restricted).&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The source code and Visual Studio 2010 project is attached along with a complied &amp;quot;.wsp&amp;quot; file:&amp;nbsp; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://community.obilogic.co.uk/utility/filethumbnails/zip-Small.gif" style="width:16px;height:16px;" title="download" alt="download" height="16" width="16" /&gt;&amp;nbsp; &lt;b&gt;&lt;a href="http://community.obilogic.co.uk/files/folders/190/download.aspx" title="download"&gt;EditViaCitrixOffice_MenuItem.zip&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=189" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2010/default.aspx">SharePoint-2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2010/default.aspx">SP2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Edit-Document/default.aspx">Edit-Document</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Citrix/default.aspx">Citrix</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/Custom-Menu-Item/default.aspx">Custom-Menu-Item</category></item><item><title>Obilogic RSS Reader 2010 Now Available - Free Download</title><link>http://community.obilogic.co.uk/blogs/teamblog/archive/2011/04/17/obilogic-rss-reader-2010-now-available-free-download.aspx</link><pubDate>Sun, 17 Apr 2011 21:52:00 GMT</pubDate><guid isPermaLink="false">16fa3511-376e-4350-8311-b7de3a39c751:181</guid><dc:creator>aobi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;&lt;a href="http://wssv3.obilogic.co.uk/ObilogicWebParts/RSSReader/default.aspx" class="" title="RSS Reader"&gt;RSS Reader&lt;/a&gt;&amp;quot; Web Part for SharePoint 2010 is now available to &lt;a href="http://community.obilogic.co.uk/files/" class="" title="Downloads"&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/a&gt; ...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#30332d"&gt;Demo available at: &lt;br /&gt;&lt;/font&gt;&lt;a href="http://wssv3.obilogic.co.uk/ObilogicWebParts/RSSReader/" class="externalLink"&gt;http://wssv3.obilogic.co.uk/ObilogicWebParts/RSSReader/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://wssv3.obilogic.co.uk/ObilogicWebParts/StockQuote/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RSS Reader 2010 is also available for download from Codeplex: &lt;br /&gt;&lt;a href="http://obilogicrssreader.codeplex.com/" class="" title="obilogicrssreader.codeplex.com" target="_blank"&gt;http://obilogicrssreader.codeplex.com/&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;&lt;img src="http://community.obilogic.co.uk/aggbug.aspx?PostID=181" width="1" height="1"&gt;</description><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SharePoint-2010/default.aspx">SharePoint-2010</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/RSS/default.aspx">RSS</category><category domain="http://community.obilogic.co.uk/blogs/teamblog/archive/tags/SP2010/default.aspx">SP2010</category></item></channel></rss>