﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>Team Blog</title>
    <link>http://www.simego.com/Blog</link>
    <description>Blog articles from the Simego team relating to Simego products and other software technology</description>
    <item>
      <link>http://www.simego.com/Blog/2013/05/Calculated-Columns-UI-Enhancements</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Calculated Columns UI Enhancements</title>
      <description>&lt;p&gt;Just a quick post to show that we now have code highlighting and intellisense type support for our new calculated column feature.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;For example below is a screenshot of our CASE function which can be used to transform a value into 1 of several possibilities.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8d9180c7-2990-4022-ac91-44e577b4ada2"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_b4836ef6-ce49-47d8-a829-d3ff03b1bc8e" width="637" height="396"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;We also have a full list of our supported functions here &lt;a href="http://www.simego.com/Help/Functions"&gt;http://www.simego.com/Help/Functions&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 20 May 2013 15:36:55 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2013/05/Calculated-Columns</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Calculated Columns</title>
      <description>&lt;p&gt;We have a great new feature for Data Sync that we just have to tell you about, previously if you wanted to transform some value we had &amp;ldquo;Dynamic Columns&amp;rdquo; where you could write your own .NET C#. Now we have a simplified yet very powerful solution for when you just need something simple or if your not very good with .NET. We&amp;rsquo;ve tried to make it similar to other scripting solutions whilst keeping the ability to be really advanced if you need to.&lt;/p&gt;
&lt;p&gt;For example below is a little snippet that adds 30 days to Today.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e488cbf5-e2a7-402c-97b4-1fd8755ef33a"&gt;&lt;img height="331" width="410" src="http://www.simego.com/Blog/Attachment/blog_05d32338-0c2a-412e-877f-3719adc31ae1" alt="image" border="0" style="display: inline; border-width: 0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As with everything we do we&amp;rsquo;ve made it really easy just hit the (Fx) button on your Data Source to add a new column based on your Function.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve added lots of useful functions so you can virtually do anything you need, plus you can even mix it with the existing Dynamic Columns feature.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a List of Current Functions with more on the way!&lt;/p&gt;
&lt;p&gt;AND(params bool[])&lt;br /&gt;BITWISEAND(params int[])&lt;br /&gt;BITWISECOMPLEMENT(params int[])&lt;br /&gt;BITWISEOR(params int[])&lt;br /&gt;BITWISEXOR(params int[])&lt;br /&gt;CHOOSE(int?, params string[])&lt;br /&gt;CHOOSE(int?, params int?[])&lt;br /&gt;CHOOSE(int?, params double?[])&lt;br /&gt;CHOOSE(int?, params object[])&lt;br /&gt;CONCAT(params string[])&lt;br /&gt;CONCATENATE(params string[])&lt;br /&gt;DATALENGTH(byte[])&lt;br /&gt;DATEVALUE(string)&lt;br /&gt;DAY(System.DateTime?)&lt;br /&gt;FALSE()&lt;br /&gt;FROMBASE64(string)&lt;br /&gt;HOUR(System.DateTime?)&lt;br /&gt;IF(bool, object, object)&lt;br /&gt;IF(bool, string, string)&lt;br /&gt;IF(bool, int, int)&lt;br /&gt;INT(object)&lt;br /&gt;ISINT(string)&lt;br /&gt;ISNULL(object)&lt;br /&gt;ISNULLOREMPTY(string)&lt;br /&gt;ISNUMBER(string)&lt;br /&gt;ISO8601DATE(System.DateTime?)&lt;br /&gt;ISO8601DATETIME(System.DateTime?)&lt;br /&gt;JOIN(string, params string[])&lt;br /&gt;LEFT(string, int)&lt;br /&gt;LEN(string)&lt;br /&gt;LENGTH(string)&lt;br /&gt;LOWER(string)&lt;br /&gt;LTRIM(string)&lt;br /&gt;MID(string, int, int)&lt;br /&gt;MILLISECOND(System.DateTime?)&lt;br /&gt;MINUTE(System.DateTime?)&lt;br /&gt;MOD(int?, int)&lt;br /&gt;MONTH(System.DateTime?)&lt;br /&gt;NEWGUID()&lt;br /&gt;NOT(bool)&lt;br /&gt;NOW()&lt;br /&gt;NULL()&lt;br /&gt;NUMBER(object)&lt;br /&gt;OR(params bool[])&lt;br /&gt;PROPER(string)&lt;br /&gt;REPLACE(string, string, string)&lt;br /&gt;RIGHT(string, int)&lt;br /&gt;RND()&lt;br /&gt;RTRIM(string)&lt;br /&gt;SEARCH(string, string)&lt;br /&gt;SEARCH(string, string, int)&lt;br /&gt;SECOND(System.DateTime?)&lt;br /&gt;SPLIT(string, string)&lt;br /&gt;STR(object)&lt;br /&gt;TOBASE64(byte[])&lt;br /&gt;TODAY()&lt;br /&gt;TRIM(string)&lt;br /&gt;TRUE()&lt;br /&gt;UPPER(string)&lt;br /&gt;UTCNOW()&lt;br /&gt;WEEKDAY(System.DateTime?)&lt;br /&gt;WEEKNUM(System.DateTime?)&lt;br /&gt;YEAR(System.DateTime?)&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 15 May 2013 20:54:25 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2013/05/How-to-insert-a-large-amount-of-records-into-Dynamics-CRM-Online</link>
      <author>david@simego.com (David Evans)</author>
      <title>How to insert a large amount of records into Dynamics CRM Online</title>
      <description>&lt;p&gt;As more and more value is being derived from enhancing Dynamics CRM with integrated data, there has been an issue with the rate at which you can create and then maintain records with in your Dynamics CRM online environment. It is considered slow, expensive and difficult to achieve, this is more down to the implementations of the third party vendors&amp;nbsp; rather than some failing of the infrastructure or Dynamics API design.&lt;/p&gt;
&lt;p&gt;For this demonstration we are going to use a default Dynamics Online instance with no optimisation, I did&amp;nbsp;&lt;strong&gt;not need&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Microsoft Server Products &lt;/li&gt;
&lt;li&gt;Microsoft SQL Server Products including DTS or SSIS&lt;/li&gt;
&lt;li&gt;Any type of message queuing &lt;/li&gt;
&lt;li&gt;Any type of xml experience.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I am going to import 5000 simple contact records into the contact entity in a Dynamics CRM Online instance but this solution scales directly to 100,000 records or more (a later blog will introduce the how to run DS3 in parallel for high volume inserts). I did require:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The 5000 contact file can be found here (&lt;a title="http://www.briandunning.com/sample-data/" href="http://www.briandunning.com/sample-data/"&gt;http://www.briandunning.com/sample-data/&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Data Synchronisation Studio v3 found here (&lt;a title="http://www.simego.com/Products/Data-Synchronisation-Studio" href="http://www.simego.com/Products/Data-Synchronisation-Studio"&gt;http://www.simego.com/Products/Data-Synchronisation-Studio&lt;/a&gt;&amp;nbsp;&lt;em&gt;8mb download runs on the desktop or server&lt;/em&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I connected the Source to the CSV file and selected the 5000 record contact file.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_cb05f7ce-9066-4881-b522-35cf3293e3e3"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4e13fc4a-1b5c-428f-93f2-b7d4a6ccbe4c" width="702" height="388" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I then connected the destination to our dynamics CRM Online instance.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b4ae8f2b-7736-4a0e-aebe-7dfc33035734"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_afa0d649-1401-46e0-804a-a20c81cff8fa" width="699" height="386" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I mapped contact and address details to make sure the sync reflected a realistic insert.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_21219360-15c5-4652-a61b-aae338e5841f"&gt;&lt;img title="Screen Shot 2013-05-13 at 13.23.26" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" border="0" alt="Screen Shot 2013-05-13 at 13.23.26" src="http://www.simego.com/Blog/Attachment/blog_e894bd68-0685-4d4d-93ce-2947ebfd9179" width="897" height="603" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The compare only takes about 2 seconds and DS3 predicts 5000 inserts and previews the records:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_32aab00d-077c-4e40-982a-6c7b9e6c12b5"&gt;&lt;img title="Screen Shot 2013-05-13 at 13.23.51" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" border="0" alt="Screen Shot 2013-05-13 at 13.23.51" src="http://www.simego.com/Blog/Attachment/blog_08ba7ad6-fc77-4360-86dc-72c20ee9113a" width="898" height="600" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clicking the synchronise button synchronises the 5000 records from the Source to the Destination in 4:06 seconds (20 records per sec)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_880c0bb0-06fb-42a9-b520-4c5492b11f48"&gt;&lt;img title="Screen Shot 2013-05-13 at 13.28.11" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" border="0" alt="Screen Shot 2013-05-13 at 13.28.11" src="http://www.simego.com/Blog/Attachment/blog_87a0e67e-a4e0-49f4-bd33-2a200467bdbb" width="901" height="602" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This in itself is faster than most competing solutions but what is more important is the ability to alter the source system data and re-synchronise. This is where much migration pain is felt. For example we could decide that the web address is completely incorrect we are better to calculate it by using the last portion of the email address: ie. &lt;a href="mailto:david.evans@simego.com"&gt;david.evans@simego.com&lt;/a&gt; &amp;ndash;&amp;gt; &lt;a href="http://www.simego.com"&gt;http://www.simego.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We can achieve this by using a dynamic column which is just a calculated field:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5806421f-9043-4672-a569-f286fba7625e"&gt;&lt;img title="Screen Shot 2013-05-13 at 14.50.01" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" border="0" alt="Screen Shot 2013-05-13 at 14.50.01" src="http://www.simego.com/Blog/Attachment/blog_ec2a6005-6c45-41b0-a605-5493ef4a4065" width="894" height="264" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I can then just map this Dynamic Field onto the websiturl in the contact entity.&lt;/p&gt;
&lt;p&gt;Comparing the 5000 locally and the 5000 on Dynamics CRM Online takes a maximum of a couple of seconds. DS3 then shows you what it will be updated within Dynamics online. It will ONLY update columns that have been changed, meaning it will update other fields with may trigger workflows or plug-ins inadvertently.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_72863d74-3fe4-4c29-b552-3af8b7b63776"&gt;&lt;img title="Screen Shot 2013-05-13 at 14.50.40" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" border="0" alt="Screen Shot 2013-05-13 at 14.50.40" src="http://www.simego.com/Blog/Attachment/blog_f7092609-80b9-4baf-96f8-0eab47cab825" width="865" height="578" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We can now synchronise the updated column in less than 2 minutes (1:59) which is 42 rows per second. I could have stopped and restarted the sync at any time and it would have just set off where it stopped.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_668d4df9-794e-4ea8-8793-8ca00c4106f4"&gt;&lt;img title="Screen Shot 2013-05-13 at 14.53.21" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" border="0" alt="Screen Shot 2013-05-13 at 14.53.21" src="http://www.simego.com/Blog/Attachment/blog_46aa010a-6214-4dff-9f2c-06285809a3c6" width="856" height="572" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Whilst it is possible for other products to use parallel servers with message queues, it soon becomes very expensive and time consuming.My next post will demonstrate using DS3 in parallel which is only limited by the bandwidth and speed that Dynamics Online can process the incoming requests.&lt;/p&gt;
&lt;p&gt;If you would like a quick demonstration of DS3's Dynamics CRM integration (or any other Sharepoint, Active Directory integration) please feel free to drop an email to support@simego.com. We really are always happy to show of our solutions and share some of our clients successes.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 13 May 2013 15:09:45 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2013/03/Exporting-Data-from-Podio-into-SQL-Server</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Exporting Data from Podio into SQL Server</title>
      <description>&lt;p&gt;Here’s an example where were using Podio to allow users to enter details on forms upload pictures and then use Data Sync to integrate this data with SQL Server.&lt;/p&gt; &lt;p&gt;Data Sync will Synchronise the Form Data with a SQL Database and download the attached files into a Folder on the file system.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Here’s a typical form in Podio and we want to export this Meta Data to SQL and download the picture files.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_c785f336-0e69-4f0c-a4d4-42bbf4bd4b80"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_149d7693-f441-4f69-bf1f-790a6c3d0e8f" width="643" height="484"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;First we connect Data Sync to this App in Podio and include the columns were interested in the schema map.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a26ce5ba-d88a-4d7c-9ae0-840aedbf9117"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_3201f716-0882-4dff-8299-d72c9cf0e46f" width="644" height="454"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Using the Tools Create SQL Table Menu we automatically create a SQL Table from this Schema to import the Data.&lt;/p&gt; &lt;p&gt;Now everything is Mapped as we Expect.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_64628ac4-1fb1-4ac4-9fa5-bebe87db8411"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_c76d90bd-d75a-4e42-b590-ad3a9a5788db" width="644" height="370"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The Next Step is to use the Project automation feature of Data Sync to add your own code to download the files from Podio and write them to the Local Disk. &lt;/p&gt; &lt;p&gt;The Podio Provider exposes a special “Podio” object that allows us to interact directly with the Podio API, we added a special GetFile Method to this object to make it easy to download files from Podio.&lt;/p&gt; &lt;p&gt;At the End of the Synchronisation process we iterate through the New items collection and get each file and write them to the disk with the code below.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt; Usings
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync;
&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;

&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;class&lt;/span&gt; ProjectAutomationOverride : Simego.DataSync.Automation.ProjectAutomationShim &lt;span class="rem"&gt;//Do Not Change This Line&lt;/span&gt;
{    
    
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Start()
    {
        
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BeforeCompare(ProjectAutomationLoadResult loadResult)
    {

    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BeforeSynchronisation(ProjectAutomationCompareResult compareResult)
    {
            
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; End(ProjectAutomationResult result)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; ( result.HasChanges ) 
        {
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var item &lt;span class="kwrd"&gt;in&lt;/span&gt; result.CompareResult.New) 
            {
                &lt;span class="kwrd"&gt;string&lt;/span&gt; path = Path.Combine(
                    &lt;span class="str"&gt;@"C:\Temp\PodioExport"&lt;/span&gt;, 
                    item.SourceRow[5].BeforeColumnValue.ToString());
                
                File.WriteAllBytes(path, 
                
                    DataSourceA.Podio.GetFile(item.SourceRow[6].BeforeColumnValue.ToString()));    
            }
        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Error(ProjectAutomationException e)
    {
        
    }

}&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;[Note: The Index values in the SourceRow collection above relate to the row position in the Schema Map]&lt;/em&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now after the Synchronisation the SQL Table is populated from Podio and the Local Disk contains copies of the Files that were attached to the Form Files.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f4bb922a-6da6-4553-852c-021fcf52a6ed"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_2d3c6035-99fb-4b55-a235-9ee403738a9f" width="644" height="216"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2c0e30eb-37bd-4ea6-a068-b71c450e495b"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ae726708-5496-4319-83da-46942dd43a81" width="644" height="331"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This is just a simple example of how Data Sync can integrate with Podio to provide business value quickly and easily.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 14 Mar 2013 12:12:01 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2013/03/Connecting-to-Podio</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Connecting to Podio</title>
      <description>&lt;p&gt;We currently have two providers for Podio one for Space Contact Items and one for Space Apps.&lt;/p&gt; &lt;p&gt;To connect to Podio you will need to locate the Podio providers in the list of Providers and the easiest way is to use the search function.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8206d78b-afb3-495e-a2cd-70cba4859b7d"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_f6ea5c8d-afb7-4f2d-92c1-a0970aee4486" width="644" height="356"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;[Note: Leaving the OAuth settings blank will allow Data Sync to use our default application settings with Podio, you can override these with your own Podio API keys if you like.]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Click on the Credentials property and this will then bring up a web page where you need to authenticate with Podio and grant Data Sync permission to connect to your account.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d8d017fa-0e0f-48cf-8967-c4d167f5b6fa"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_2b39f735-1c7d-4004-8ea8-a3f313e622ae" width="644" height="354"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Once connected you can then pick the App in Podio to connect to from the &lt;strong&gt;App&lt;/strong&gt; Drop-down list.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The &lt;strong&gt;Silent&lt;/strong&gt; property prevents updates to the app INSERT/UPDATE from being reported to your Activity Stream.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2e77bbd4-0309-4abe-81d0-4a7ced58f6b6"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_cd74ed3d-58b4-4edf-8302-ca2632f91da8" width="644" height="356"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Clicking OK will then popup the Connection Library option which is a new feature that allows you to save credentials for use again later. The OAuth credentials will expire after 28 days so it’s a good idea to save these in the connection library so you can easily update them again later.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f90f2310-2064-41fa-8b80-87e50502bdb6"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_6b556ed0-7658-490e-9a6c-07b1ca0c700c" width="524" height="261"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;That’s it now your connected to Podio and you can start designing your integration or migration.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_05736be4-f2a4-4e72-aae3-3fe76311e07a"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_5c0fe8ae-bd66-40a5-95a7-934130ca4d62" width="644" height="401"&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 14 Mar 2013 11:26:07 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2013/02/Integration-with-Podio</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Integration with Podio</title>
      <description>&lt;p&gt;Here at Simego we love &lt;a href="https://company.podio.com"&gt;Podio&lt;/a&gt; so it was natural that we developed a connector for Podio that would allow us to integrate Data from our LOB systems into Podio.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Out of the Box Podio lets you import Excel sheets and a few other options. But we need something that we can run on a Schedule which can take information captured through our Website and ensure it ends up in Podio.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve made this all a bit too easy, simply connect Data Sync to your Source data and use the new Podio data provider. If your working with Contacts then you should use the Contacts provider. Set the Credentials which goes through the OAuth song and dance and then choose the Space in Podio to connect.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ceb46b47-9705-44f0-a687-91af94a01008"&gt;&lt;img height="356" width="644" src="http://www.simego.com/Blog/Attachment/blog_f9a3b0fe-04e4-4d08-8793-5072cbd566d4" alt="image" border="0" style="display: inline; border-width: 0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Then Map your data just as you would any other system, you need a Unique Key to relate records and Podio exposes a nice &lt;em&gt;external_id&lt;/em&gt; column you can use to store the ID from your source system.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_377db629-661f-4f05-a170-6cd07ea3b9b4"&gt;&lt;img height="484" width="630" src="http://www.simego.com/Blog/Attachment/blog_1f728f96-ec8c-43ee-8b47-73123635402e" alt="image" border="0" style="display: inline; border-width: 0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Then run through the normal Compare and Sync process and your new data will then be synchronised with data in Podio.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_859f7637-3597-47b5-975f-e2de7f66df4e"&gt;&lt;img height="484" width="630" src="http://www.simego.com/Blog/Attachment/blog_9dbac137-e9e0-4253-baa6-802d53312ad5" alt="image" border="0" style="display: inline; border-width: 0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_90b00da5-1a00-4951-9802-a193e10bed5e"&gt;&lt;img height="360" width="644" src="http://www.simego.com/Blog/Attachment/blog_92e9a7de-25d8-4ae1-b45a-b8c683d788aa" alt="image" border="0" style="display: inline; border-width: 0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_7ba21db8-00f8-488e-bcf6-3bc3edf40766"&gt;&lt;img height="484" width="577" src="http://www.simego.com/Blog/Attachment/blog_918e6be9-cc4a-46c2-9866-b1fa5443e1d7" alt="image" border="0" style="display: inline; border-width: 0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 22 Feb 2013 14:33:20 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2013/02/EMC-Documentum-Integration</link>
      <author>david@simego.com (David Evans)</author>
      <title>EMC Documentum Integration</title>
      <description>&lt;p&gt;We have recently been working with some of our partners to allow them to integrate their client&amp;rsquo;s &amp;lsquo;Documentum&amp;rsquo; environments using Data Sync Studio. Currently, this is still in development but early signs are that we will offer the integration as a product.&lt;/p&gt;
&lt;p&gt;We have developed the product to be purely api based and it needs no connections to the underlying Database or content servers.&lt;/p&gt;
&lt;p&gt;I am going to run through moving files between the desktop and a Documentum environment. We could just as easily move files from a Sharepoint Library to Documentum as well.&lt;/p&gt;
&lt;p&gt;As usual we use the following simple integration steps in DS3:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Connect to a source which in this case is a folder on my desktop &lt;/li&gt;
&lt;li&gt;Connect to the destination which is a Documentum folder within a Repository &lt;/li&gt;
&lt;li&gt;Map any fields we require. This mapping is a feature built into DS3 and allows us to lookup information to update Documentum metadata about the document entity. &lt;/li&gt;
&lt;li&gt;Press the &amp;lsquo;Synchronise&amp;rsquo; button and the documents are sent up to Documentum with the meta data correctly set. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For this demonstration we are going to use some simple text files as examples but we can target more complex types in Documentum.&lt;/p&gt;
&lt;p&gt;Step 1: Connecting to the file system source:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1d308f99-e2e4-4897-bf9c-648e63851222"&gt;&lt;img height="362" width="660" src="http://www.simego.com/Blog/Attachment/blog_76e43b13-3c8e-4f7c-a39e-61a3e61b6767" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Select the folder containing the files you would like in Documentum.&lt;/p&gt;
&lt;p&gt;Step 2 : Connecting to a Documentum Repository and Selecting in Folder&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_59f31120-ff4e-443e-ab17-981659d82363"&gt;&lt;img height="408" width="660" src="http://www.simego.com/Blog/Attachment/blog_d9137488-dc93-45e2-9406-f186d3f5d630" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We have several options:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Credentials&lt;/strong&gt;: Username, password and optionally Domain&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DocumentType&lt;/strong&gt;: The connector displays a dropdown listing all types within the repository.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DocumentumServerURL&lt;/strong&gt;: The http address of the Documentum DFC url.&lt;/p&gt;
&lt;p&gt;Timeout: A timeout in of any request.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ContentUpdateBehaviour&lt;/strong&gt;: Under some circumstances we are not interested in integrating the content of a document just the attributes (contentless documents). We can choose to synchronise the content or not.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Folder&lt;/strong&gt;: The connector allows you to browse the folders within the Repository to find a folder to sync.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RepositoryName&lt;/strong&gt;: The Repository Name.&lt;/p&gt;
&lt;p&gt;Step 3: Map the columns between the 2 Data Sources&lt;/p&gt;
&lt;p&gt;There are several things to note about the connector:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It will automatically bring back the attributes for the selected &amp;lsquo;type&amp;rsquo; In this case we are just using the vanilla &amp;lsquo;dm_document&amp;rsquo; type in Documentum. &lt;/li&gt;
&lt;li&gt;It will use the &amp;lsquo;dm_formats&amp;rsquo; table to map files to their correct &amp;lsquo;Format&amp;rsquo; in Documentum. &lt;/li&gt;
&lt;li&gt;It supports repeating attributes with a string[], int[] attribute type. &lt;/li&gt;
&lt;li&gt;Dynamic Columns are fully supported if we need to lookup values to write to attributes in the target types. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a6ef035e-49da-458a-941a-df2e781c8465"&gt;&lt;img height="398" width="660" src="http://www.simego.com/Blog/Attachment/blog_bd6b01b5-61c6-4ec8-b163-cd5ba8da3598" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I added a new Dynamic Field called &amp;lsquo;Subject&amp;rsquo; to map to the dm_document attribute Subject:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_58e68dbd-bae4-47d8-8038-3417ccc196af"&gt;&lt;img height="430" width="660" src="http://www.simego.com/Blog/Attachment/blog_3c5c606e-718b-473e-bd04-3c53ba6f898d" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Step 3: Run the Synchronisation:&lt;/p&gt;
&lt;p&gt;Comparing A-&amp;gt;B (File Systems &amp;ndash;&amp;gt; Documentum) and then synchronising moves the documents and updates the metadata accordingly:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2d1b403c-cea5-450b-9563-2328c9a4fcb2"&gt;&lt;img height="490" width="660" src="http://www.simego.com/Blog/Attachment/blog_91d72e3f-4623-4067-bd8d-62834bb07e04" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When I delete some files from the source file system and change the Subject in the Dynamic Column to be &amp;lsquo;Food and Beverage&amp;rsquo; we can update the new files.&lt;/p&gt;
&lt;p&gt;Comparing Comparing A-&amp;gt;B (File Systems &amp;ndash;&amp;gt; Documentum) again DS3 shows us the updates it will make to Documentum:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_be80455e-b348-4761-8f6f-dca6c7f36abb"&gt;&lt;img height="384" width="660" src="http://www.simego.com/Blog/Attachment/blog_149a2478-7bc6-49dd-80b5-4d04fcdb3e32" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You might notice the performance times, there is no caching and the Documentum Server (Data Source B) is 3000 miles away over the internet.&lt;/p&gt;
&lt;p&gt;We can then see the update to the Subject in the Document properties:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6f97d7c0-f574-43b5-8375-076543c57742"&gt;&lt;img height="493" width="660" src="http://www.simego.com/Blog/Attachment/blog_7f102a64-855b-4545-a288-913691ab3a77" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As we progress through the development of this connector I will post some more blogs.&lt;/p&gt;
&lt;p&gt;If you would like more information about this Documentum connector please just drop an email to &lt;a href="mailto:sales@simego.com"&gt;sales@simego.com&lt;/a&gt; and we can organise a chat over tea.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 21 Feb 2013 15:45:30 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2013/01/Install-Data-Sync-Team-Server</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Install Data Sync Team Server</title>
      <description>&lt;h3&gt;System Requirements&lt;/h3&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Microsoft Windows Server 2008/R2/2012  &lt;li&gt;IIS 7.0 or Higher  &lt;li&gt;Windows Authentication for IIS  &lt;li&gt;.NET Framework 4.0 Full Profile  &lt;li&gt;SQL Server 2008 or Higher configured for SQL Mixed Authentication Mode.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Step 1 – Data Synchronisation Studio&lt;/h3&gt; &lt;p&gt;Install &lt;a href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;Data Synchronisation Studio&lt;/a&gt; as normal selecting either 64 bit or 32 bit as required for your system. Then activate Data Sync with your Server Edition License Key.&lt;/p&gt; &lt;h3&gt;Step 2 – Data Sync Team Server&lt;/h3&gt; &lt;p&gt;Install &lt;a href="http://www.simego.com/Install/Ouvvi"&gt;Data Sync Team Server&lt;/a&gt; as normal by running the install program this will install the IIS WebSite for Ouvvi and install the Ouvvi Processing Service. &lt;/p&gt; &lt;h3&gt;Step 3 – DB Setup&lt;/h3&gt; &lt;p&gt;The next step is to create an Ouvvi Database that this instance of Ouvvi will connect to. When you start the Ouvvi Website if there’s no configuration file it will start the setup process.&amp;nbsp; Here you need to enter your Network Credentials these are your Windows Username &amp;amp; Password that has Admin rights for your SQL Server. The SQL Server Name and Instance Name such as &lt;em&gt;LOCALHOST\SQLEXPRESS&lt;/em&gt; the name of the Database you wish to create and a SQL User account name and password (Setup will create this user).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f9bd5c25-9b61-464c-981e-fb655dadcee7"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ee4c7b8b-9da4-45eb-a753-a7464655815a" width="593" height="484"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Step 4 – License&lt;/h3&gt; &lt;p&gt;Once the DB is configured which takes a few seconds you will be redirected to the home page with further setup instructions. The first thing is to enter your Server Edition license key. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1c12acb0-96e7-43bb-af6d-806ef1a580d4"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_487d0600-7737-4ac0-b1b0-c20eccfe77a5" width="644" height="369"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Selecting “Projects” from the Menu will re-direct you to the License Page. Enter your Key and Click Activate.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a334a5da-23c6-4b74-b8e3-f44fb1b97658"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_719110ee-cef8-4bbd-9141-c0eec51f6956" width="644" height="297"&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;Step 5 – Windows Service&lt;/h3&gt; &lt;p&gt;Next you need to open the Windows Service Control Manager (services.msc) to configure and Start the Ouvvi Processing Service.&lt;/p&gt; &lt;p&gt;Locate the “Ouvvi Processing Service” set the user to a domain service account you want to use to run the Data Sync integration Tasks and press Start.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_4ab8a142-65e4-4db7-bc29-e7ae84bd5295"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_dab3bb98-41b7-47ff-b77b-ae67a81dc5ce" width="644" height="319"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now if you switch to the Services –&amp;gt; System Services Tab you will see all the background Tasks have started and are running.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_26cf278e-bf8a-40f2-a893-d03a9347201c"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_9a55c63c-d219-4983-abca-834f68aaf1d2" width="644" height="270"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;NOTE: If you need to re-start the setup process you should delete the Ouvvi.config file from the Directory C:\ProgramData\Simego\Ouvvi and restart the OuvviWeb AppPool in IIS.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 07 Jan 2013 12:37:58 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/12/SQL-Change-Trigger-DS3-Team-Server-Feature</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SQL Change Trigger - DS3 Team Server Feature</title>
      <description>&lt;p&gt;Yesterday we blogged about the &lt;a href="http://www.simego.com/Blog/2012/12/Using-Ouvvi-to-Enable-Real-Time-CRM-Synchronisation"&gt;CRM Trigger&lt;/a&gt; that enables real-time synchronisation with &lt;a href="http://www.simego.com/Products/Ouvvi-Console"&gt;Ouvvi / Data Sync Team Server&lt;/a&gt;. Today we’re going to cover off the other side where you can trigger a project to start from a change in your SQL Database (SQL Server, Oracle, DB2, MySQL, ODBC, OleDB etc).&lt;/p&gt; &lt;p&gt;This works in a similar way to the CRM Trigger except this time we query your SQL Database every 30 seconds and ask for the latest &lt;strong&gt;DateTime&lt;/strong&gt; value of any changes.&lt;/p&gt; &lt;p&gt;To do this you need to write a query that would return the latest change timestamp from your database for the items your monitoring.&lt;/p&gt; &lt;h3&gt;For example&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;SELECT MAX(modifiedon) FROM dbo.AccountBase&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;To set this up you Add a new Trigger to your Data Sync Team Server environment.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1ba4ebbf-3c9e-43e9-bcf7-f3c48520c1dc"&gt;&lt;img title="Add Trigger" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" alt="Add Trigger" src="http://www.simego.com/Blog/Attachment/blog_862a6584-3f4d-4d35-b6a0-73ec610dfe1e" width="507" height="92"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Choose the SQL Trigger Option&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ff0fbc1c-86c8-40c4-9234-d7ed8796b3cc"&gt;&lt;img title="New Trigger" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" alt="New Trigger" src="http://www.simego.com/Blog/Attachment/blog_649564d7-86e9-40b2-9cd6-874ac2070b5f" width="644" height="266"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Then configure the Trigger, choosing the Network Library and connection string to your database and the Query to execute. (Yes you can use other database servers i.e. Oracle, IBM DB2, etc).&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_17f56d70-2d50-43df-b8cf-aa10d04f82e1"&gt;&lt;img title="Edit Trigger" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" alt="Edit Trigger" src="http://www.simego.com/Blog/Attachment/blog_dc8580fc-30f3-4f79-aaea-cb0824a81ce5" width="644" height="474"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;That’s it Ouvvi will start to Query your SQL DB every 30 seconds and when there’s a change projects linked to this trigger will be queued to start.&lt;/p&gt; &lt;p&gt;Now that the project is using a Trigger you can see under Reporting how the project is started through distribution of actual changes rather than a schedule.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ab7ae4c9-d1ef-4c55-bcd8-3889564da105"&gt;&lt;img title="Reporting" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="Reporting" src="http://www.simego.com/Blog/Attachment/blog_19ce55d0-2e62-4cd4-973d-5fcbe9f30ae9" width="644" height="440"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If your Table does not have a valid DateTime column that gets updated when the record is changed then you can implement a solution based on SQL Triggers to maintain an updated timestamp value like this.&lt;/p&gt; &lt;p&gt;Create a new SQL Table like this in your Database&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="overflow: auto; cursor: text; font-size: 8pt; border-top: silver 1px solid; font-family: 'Courier New', courier, monospace; border-right: silver 1px solid; border-bottom: silver 1px solid; padding-bottom: 4px; direction: ltr; text-align: left; padding-top: 4px; padding-left: 4px; margin: 20px 0px 10px; border-left: silver 1px solid; line-height: 12pt; padding-right: 4px; max-height: 200px; width: 97.5%; background-color: #f4f4f4"&gt; &lt;div id="codeSnippet" style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; [dbo].[OuvviTriggers] (&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt;     [ID] &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; &lt;span style="color: #0000ff"&gt;IDENTITY&lt;/span&gt;(1, 1) &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;     [Name] nvarchar(255) &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;     [Updated] datetime &lt;span style="color: #0000ff"&gt;DEFAULT&lt;/span&gt;(getdate()) &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&gt; )&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt; GO&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Then you can create a SQL Trigger on any Table that you want to monitor like this where you update the ‘TableA’ to match the name of the Table your monitoring.&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="overflow: auto; cursor: text; font-size: 8pt; border-top: silver 1px solid; font-family: 'Courier New', courier, monospace; border-right: silver 1px solid; border-bottom: silver 1px solid; padding-bottom: 4px; direction: ltr; text-align: left; padding-top: 4px; padding-left: 4px; margin: 20px 0px 10px; border-left: silver 1px solid; line-height: 12pt; padding-right: 4px; max-height: 200px; width: 97.5%; background-color: #f4f4f4"&gt;
&lt;div id="codeSnippet" style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TRIGGER&lt;/span&gt; TableA_OuvviTrigger&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; [TableA]&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FOR&lt;/span&gt; INSERT, &lt;span style="color: #0000ff"&gt;UPDATE&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;UPDATE&lt;/span&gt; [dbo].[OuvviTriggers]&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; [Updated] = GETDATE()&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [Name] = &lt;span style="color: #006080"&gt;'TableA'&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt; GO&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Then your Ouvvi Trigger just becomes &lt;strong&gt;SELECT [Updated] FROM [OuvviTriggers] WHERE [Name] = ‘TableA’&lt;/strong&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 11 Dec 2012 11:05:14 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/12/Using-Ouvvi-to-Enable-Real-Time-CRM-Synchronisation</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>CRM 2011 Real Time Synchronisation - DS3 Team Server Feature</title>
      <description>&lt;p&gt;DS3 Team Server or&amp;nbsp;&lt;a href="http://www.simego.com/Products/Ouvvi-Console"&gt;Ouvvi&lt;/a&gt; has a Triggering system that can be used to provide almost real-time synchronisation. Internally &lt;a href="http://www.simego.com/Products/Ouvvi-Console"&gt;Ouvvi&lt;/a&gt; has a 30 second clock that evaluates configured Triggers and when they need to be fired any projects associated with that trigger will be queued for execution. This feature is completely independent of your CRM system and does not require any special installation onto your CRM Server.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;One Trigger that Ouvvi has is the &lt;strong&gt;CRM Entity Trigger,&lt;/strong&gt; this trigger queries an Entity in CRM for any updates since the last change (createdon, modifiedon). If this changes then the Trigger is fired. The benefit to this method is that changes are replicated quickly and unnecessary scheduled syncs do not need to occur.&lt;/p&gt;
&lt;p&gt;To create a new &lt;strong&gt;CRM Entity&lt;/strong&gt; Trigger go to the Triggers view and choose Add Trigger&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_fe340336-4836-4ab2-bc1b-f58f235c1626"&gt;&lt;img height="126" width="250" src="http://www.simego.com/Blog/Attachment/blog_8a953a34-f005-4fe2-8a79-28260da28af2" alt="Add Trigger" border="0" style="display: inline; border: 0px;" title="Add Trigger" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then choose the &lt;strong&gt;CRM Entity&lt;/strong&gt; Trigger&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5075c66d-9c6a-432b-b79e-90f0a307ad0f"&gt;&lt;img height="388" width="644" src="http://www.simego.com/Blog/Attachment/blog_2fefc5d1-c349-4d43-bd9c-a5da24c7b11e" alt="Select Trigger" border="0" style="display: inline; border: 0px;" title="Select Trigger" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then configure the Trigger by entering your CRM Server Details and the Entity you want to monitor. (leave credentials blank to use the Ouvvi service credentials)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_23e85944-9e08-4245-83c8-c9076d24884d"&gt;&lt;img height="484" width="605" src="http://www.simego.com/Blog/Attachment/blog_4abbcd27-bc8a-456c-9334-515e56fcd76d" alt="Configure Trigger" border="0" style="display: inline; border: 0px;" title="Configure Trigger" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it &amp;hellip;. you simply then attach this trigger to the Ouvvi projects you want to execute when changes are made to this entity. It&amp;rsquo;s important that your projects are configured to run in the Single Instance mode so that they do not run in Parallel.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 10 Dec 2012 10:28:04 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/12/Connect-to-SharePoint-2013</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Connect to SharePoint 2013</title>
      <description>&lt;p&gt;For those of you planning to upgrade to SharePoint 2013 we thought we would let you know that DS works just fine with SharePoint 2013.&lt;/p&gt; &lt;p&gt;Connect as normal – we recommend you start using the &lt;strong&gt;Client API&lt;/strong&gt; Provider for new SharePoint projects.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2a1f2299-4a44-40de-bdda-b3fd27d05107"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_2daf6791-f23d-431f-9c9b-14ec85797596" width="644" height="356"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Browse your Site Schema to find the List you want to connect to.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e616e39a-a6e0-459a-bf00-9a4f539f7ede"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_fd0fe31f-ecfc-4023-bb85-3f9cd6503dcc" width="500" height="502"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Map your source to your target as normal&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d741757a-f515-4e0d-9692-ea22c10b3882"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_19189fc1-7767-4b5d-9055-76d19ed399b4" width="644" height="438"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Once you synchronise your Data is now presented in SharePoint 2013.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6a93759d-6df6-4e8c-917d-d3a1c7fbc723"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_9135e517-d474-40e8-84c7-89bf125a5e7b" width="642" height="484"&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 04 Dec 2012 16:49:13 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/12/Handling-SharePoint-Lookup-Columns</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Handling SharePoint Lookup Columns</title>
      <description>&lt;p&gt;The &lt;strong&gt;SharePoint 2010 (Client API)&lt;/strong&gt; Provider has an inbuilt feature to automatically match and link Lookup Columns based on the value associated with the List. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_fdf3cec0-61a7-4026-94d8-8460bcbd4895"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_57b1bfc1-42c5-4f4a-bb74-576f6ea466a1" width="644" height="356"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In this example we have created an Orders list and added one column that is a multi-value column that will contain the “Products” that relate to this Order.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_73701d46-0725-47dc-b536-4d71fd7e05b7"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_dc27ef0f-c643-4913-a2a7-0accce91f22f" width="231" height="484"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;To handle the lookup data we simply need to provide the name of the lookup value separated with a semi-colon(;) i.e. here we created an Excel file with the order details.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_c0021752-8893-48e1-b5d2-ff48fc2262ea"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_0f24eb97-cd28-4b0f-ad84-a04ca8735897" width="644" height="418"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We then simply create a DS Project to Map this to our Orders List&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8af81ec9-e316-4dea-bcb1-1fe9baccbe5a"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_e2e86a3e-d4b3-4f1e-88da-08e31a454d17" width="644" height="364"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Then once we synchronise this data the lookup is automatically connected.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_604427ad-feac-4ede-abad-d2792143a05e"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_a6253998-07bf-4be9-a6c6-1efe44d9e2f5" width="644" height="179"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b783c723-1238-4288-ac9f-4f7bfc7936c5"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ad8956bd-83a0-4a09-9e2b-f1ed584061ec" width="644" height="466"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;During the Synchronisation we download the list items from the related SharePoint List and index into this list to get SharePoint’s internal identifier number to assign to the item being linked. Therefore items must be an exact match and they must exist for the link to be successfully created.&lt;/p&gt; &lt;p&gt;If your Lookup is simply a single item then you just need to return the Name/Title of that item.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 03 Dec 2012 15:29:58 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/11/Connect-to-Dynamics-CRM-2011-Online</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Connect to Dynamics CRM 2011 Online</title>
      <description>&lt;p&gt;To Connect to Dynamics CRM 2011 Online with Data Synchronisation Studio you will need the URL to your CRM Environment.&lt;/p&gt; &lt;p&gt;For example one test environment of ours is at https://simegoltd.crm4.dynamics.com for data sync you need to remove the Organisation name part so this becomes https://crm4.dynamics.com&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_cc56b2d5-6888-4594-a25d-2ab74eb676a3"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_0afd494a-4867-4984-9fb1-2a4aa74c276e" width="319" height="87"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This environment is pre-Office 365 Integration therefore if you have CRM Linked to your Office 365 Environment on one of the E plans then the Url will most likely be &lt;a href="https://crm.dynamics.com"&gt;https://crm.dynamics.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You then Enter this into the &lt;strong&gt;CrmServerUrl&lt;/strong&gt; property of the Provider, For CRM Online with LiveId choose the LiveId Authentication Provider, for Office 365 Choose Federated.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_9a97c707-cb05-4f40-b49e-a389028fe5f7"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_f3dc72ff-b09f-4581-abd7-203ac75378e3" width="644" height="356"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Next Enter your credentials under Authentication and then Choose your Organisation name from the Drop-down this might take a little while as it discovers the Organisations that are linked to your account.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_279e14d0-31ad-47c2-a7ba-25a8fa418587"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_907d1cc7-fdbd-4ff7-9105-65f8d7f1319a" width="644" height="356"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Next Choose an Entity to work with from the Entity Drop-down.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ce4ec5ae-57ee-4116-b6d7-392ffe2d8abc"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_34901af8-55a5-4728-8149-2dff743c86c3" width="644" height="356"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Then Click OK to connect.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_cad73a05-8557-4cbd-9111-7f658ee318cd"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_c790f1ff-8c48-408a-9e99-350635fc8b0c" width="644" height="311"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Issues&lt;/h3&gt; &lt;p&gt;If you get an error message when you try to connect that the system cannot load the Microsoft.IdentityModel assembly&amp;nbsp; then you need to install the &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=17331"&gt;Windows Identity Framework&lt;/a&gt; (WIF) then re-start Data Sync for the changes to take affect.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1e79a659-24fd-478d-8734-245c78a9bb3f"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_f111fec6-7a53-4077-81f5-2a9b2a476a3b" width="492" height="185"&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 30 Nov 2012 15:19:57 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/11/Getting-Starting-with-a-Trial-Evaluation</link>
      <author>david@simego.com (David Evans)</author>
      <title>Getting Starting with a Trial Evaluation </title>
      <description>&lt;h3&gt;Introduction - DS3 is so simple you can just 'Get Started'!&lt;/h3&gt;
&lt;p&gt;Data Synchronisation Studio v3 (DS3) is moves data between computer systems without the cost, effort and risk associated with developing a system integration solution. You point DS3 at the data source and then the target and DS3 makes one side equal to the other.&lt;/p&gt;
&lt;p&gt;In more advanced cases DS3 will make both sides the same! Make change on either side and it synchronises with the other.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Starting an Evaluation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Download the latest trial from &lt;a href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;http://www.simego.com/Install/Data-Synchronisation-Studio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5d1c218c-0a67-42c8-971a-ddc0cd55ec81"&gt;&lt;img height="339" width="416" src="http://www.simego.com/Blog/Attachment/blog_326b73d2-4d3a-4601-a751-f556e075883d" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Click the zip file and then click on the Data Sync installer&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_aa063af8-9f81-46b0-9049-db6b8c1a9e57"&gt;&lt;img height="156" width="593" src="http://www.simego.com/Blog/Attachment/blog_af52d47d-ac72-4b19-9c63-53747da276fe" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Approve running the installer&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_3282284f-0465-4331-8f81-9b3711901ef2"&gt;&lt;img height="348" width="487" src="http://www.simego.com/Blog/Attachment/blog_40c4b6d6-2c32-488d-a3a6-528bebeb2b5c" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Install the application and Finish&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_57a897f9-ae16-41e2-b774-4e4d433a2c65"&gt;&lt;img height="328" width="420" src="http://www.simego.com/Blog/Attachment/blog_a09b4299-e6f6-4a81-84d8-7ac5203121c8" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt;&amp;nbsp; Run Data Sync for the first time:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_66ee1f33-fce4-4f1b-b39a-94c81664978c"&gt;&lt;img height="439" width="367" src="http://www.simego.com/Blog/Attachment/blog_4eb1b2ab-8023-4377-900f-7e9d05ba2a06" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3&gt;Getting a Trial License for DS3&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once started DS3 will ask for a key. Just send an Email to us requesting a Trial/Evaluation Key to support@simego.com, we will send you back a trial key within a few minutes and if you give us some detail on what you need to integrate eg, CRM + SQL, we have more quick start guides for many situations.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Request Key.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ca97396c-9303-4ba5-8fed-08365fa51596"&gt;&lt;img height="358" width="435" src="http://www.simego.com/Blog/Attachment/blog_6ba0cd47-253c-4569-a698-c9d424cead22" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; When you have your response back from support it will contain a key like this (this is not a valid Key!!):&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;QETSC3-SWSEZH-SRS4XM-S4EQHX-1YW4U6-HQ1BWA-U&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Click on the &amp;lsquo;Enter License Key&amp;rsquo; button and paste in the Key.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8fbe5b9e-be04-49db-8417-71c2437c85c1"&gt;&lt;img height="376" width="475" src="http://www.simego.com/Blog/Attachment/blog_a3585295-ac56-48c1-beed-37dc2d372e25" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Click the OK Button to enter Data Synchronisation Studio&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ab515e34-709c-4dae-aef4-ddbc02b6f9d7"&gt;&lt;img height="504" width="660" src="http://www.simego.com/Blog/Attachment/blog_28ccb7a5-6225-47fa-83ec-2494c140b632" alt="Screen Shot 2012-11-30 at 11.05.49" border="0" title="Screen Shot 2012-11-30 at 11.05.49" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 30 Nov 2012 09:41:55 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/11/Using-Lookups-to-Transform-Values</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using Lookups to Transform Values</title>
      <description>&lt;p&gt;In this simple example we will demonstrate how you can use the Lookup functionality in Data Synchronisation Studio to Transform/Convert a value via an Lookup Data source.&lt;/p&gt; &lt;p&gt;Our source data contains the numbers 1-10 and we want to convert these into the names of the Numbers.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_bd8f2451-c84d-41b8-a5d3-0dd9df8c2eef"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_d1c94170-cf70-4f17-b2a6-909a37b760a1" width="196" height="321"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We need then to create a Transformation Data source and for this we’re going to use Excel. We could use virtually anything we like, SQL, CRM, SharePoint, XML, CSV etc but Excel is ideal for this.&lt;/p&gt; &lt;p&gt;This Excel file contains the From and To values for the Transformation, we need to create Column headers in the First row and then the Data below i.e.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2991c991-f28b-460a-9859-3ad36862fae9"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ce752eac-f93d-4468-bae5-b09af4552636" width="533" height="590"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now we add the Lookup to the column (select the ID column, and press the ‘Add Lookup’ toolbar button) that we want to Transform, in our Example this is the ID column. First we select the Data source which for this example is Excel and browse to the Path of the Excel file. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b0b2589c-f117-47ae-99f9-f3984b39e38c"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4a940e73-3be2-47bc-b9b2-89eb5123d531" width="644" height="357"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now we define the Lookup connection details, so we want to join the Lookup based on the Value in the &lt;strong&gt;From&lt;/strong&gt; Column to the Value in the &lt;strong&gt;ID&lt;/strong&gt; column in our source data. We also specify the Data Type as &lt;strong&gt;Int32&lt;/strong&gt; since this is a Number 1-10.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_494a9c96-2ec8-4001-a803-dcf5f4c90023"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_3d3e17af-b657-4a7d-a683-9770d53df641" width="394" height="484"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We then add the “Lookup1_To” column from the Data source to our Schema Map so that we return the Value of the Lookup Transformation.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_be445ce6-d520-4015-a2b1-8bd3ea67bd40"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_93a5b889-400d-4413-a193-ae2f1d0cd023" width="644" height="169"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;There we have it a Transformation from an External Data source via Lookups.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_77f69876-9d0f-4882-92f8-843392879b19"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_8833afc4-ce06-46e4-8cd3-99dd4314d014" width="312" height="327"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This simple Transformation could be created in code via Dynamic Columns but this shows a no-code solution and has the added benefit that you can easily extend the transformation values by updating the Excel data source.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 27 Nov 2012 10:42:33 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/11/Connect-to-Office-365-Exchange-Server</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Connect to Office 365 Exchange Server</title>
      <description>&lt;p&gt;To connect to Exchange Server with Data Synchronisation Studio you need to get the URL for your Exchange Server. First go to your Outlook Web Access and the URL for your Exchange server.&lt;/p&gt; &lt;p&gt;For example this one is https://dbxprd0710.outlook.com/owa/?exsvurl=1&amp;amp;realm=office365.com&amp;amp;wa=wsignin1.0&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d2003fa0-6ee2-4019-b383-3cf4be2f3d06"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4896bacf-e6fc-4d08-9795-73c1113b2328" width="644" height="132"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This URL need to be modified so that it points to the Exchange Web Services URL so we take the server part and change it to https://dbxprd0710.outlook.com/ews/Exchange.asmx&amp;nbsp;&lt;/p&gt; &lt;p&gt;We then take this URL and enter it into the ExchangeUrl property of the “Exchange Web Services (Appointments)” provider.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b4da8b81-efe4-4eb6-89d3-a573673c1411"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_5b4c9123-135e-45ff-8dd1-110ee20b3c97" width="644" height="356"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We then enter our Exchange Credentials&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ae112b11-078e-414a-a33f-51bd79222469"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_9e30f91a-1fbe-4cd5-8254-d348feb0e17b" width="644" height="356"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We then add our Mailbox name to the Mailboxes collection, this details which mailbox data we wish to return.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_da59bd22-71b0-4e72-bb80-456f938a80ee"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_1e58f249-872d-49dd-a719-656886bd4b2d" width="644" height="355"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;And that’s it now you can return data from Office 365 Exchange Server.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_359329bd-f47c-437c-b4a3-119f77240e04"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_341d6745-0f28-417b-bbbd-160de44a33bd" width="644" height="368"&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 27 Nov 2012 10:17:26 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/11/Connect-to-365-SharePoint-Online</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Connect to 365 SharePoint Online</title>
      <description>&lt;p&gt;To connect to a List/Document Library with Data Synchronisation Studio on SharePoint Online you need to get the URL to your site.&lt;/p&gt; &lt;p&gt;For example in the screenshot below our Team Site URL would be http://crmonline4u.sharepoint.com/TeamSite&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f145aa17-69ad-42a0-9bf6-a6c5084e0771"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_b10bc5b0-d02c-46ba-bcaa-c9d415681e91" width="575" height="207"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You then enter this URL into the &lt;strong&gt;SharePointUrl&lt;/strong&gt; Property of the “Microsoft Office 365 SharePoint Online” Data Provider in Data Sync.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_07631713-da5f-49d2-b71e-3fffa5c7ca48"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_1b1f1888-ca67-42ae-a827-32d7275c0eb3" width="644" height="349"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You then need to enter the credentials for your SharePoint Online environment. Note that we do not currently support environments where you have federated authentication enabled to your own AD, standard 365 Authentication is fine.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_04e9fa8b-4b1d-4dc2-9976-3476b2980993"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4bdb1f12-a21c-4ba7-b266-2bf38bee85c5" width="644" height="350"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Next select the List that you wish to connect to from the &lt;strong&gt;ListName&lt;/strong&gt; drop down.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_fbc34a0b-d83d-4aac-af78-616ac5f263de"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_471011f3-73f3-41e9-8a7e-471bae269e22" width="644" height="352"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;And click OK to connect and there you have it!&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_7eadc0ca-4e66-4f7c-9aac-1e493d6999e4"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4ff7a69c-15d9-4dd2-87aa-c916e0eeaeb6" width="644" height="206"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Issues&lt;/h3&gt; &lt;p&gt;If you get an error message when you try to connect that the system cannot load the Microsoft.IdentityModel assembly&amp;nbsp; then you need to install the &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=17331"&gt;Windows Identity Framework&lt;/a&gt; (WIF) then re-start Data Sync for the changes to take affect.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;img alt="image" src="http://www.simego.com/Blog/Attachment/blog_f111fec6-7a53-4077-81f5-2a9b2a476a3b"&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 27 Nov 2012 10:04:01 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/11/Importing-CRM-2011-Connections</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Importing CRM 2011 Connections</title>
      <description>&lt;p&gt;To import/synchronise connection data in Dynamics CRM 2011 with Data Synchronisation Studio you need to define your schema map like this below.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_08375094-c66c-415a-bb60-7e701a4eaa91"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_43a40d26-9b2f-452f-87fe-f61a6509ddf3" width="644" height="236"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;record1idobjecttypecode&lt;/strong&gt; and &lt;strong&gt;record2idobjecttypecode&lt;/strong&gt; should return the names of the related entities for example.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_63304f06-ab81-4fc4-969c-185d1ed0a05a"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4ef33224-0104-4a6c-9f0b-e65f4878c322" width="644" height="92"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;CRM will automatically create the reverse connection which is a problem for Data Sync as it will see an extra record on the next sync. Therefore we filter this out by using an &lt;strong&gt;FetchXmlFilterExpression&lt;/strong&gt; and just select the rows where &lt;strong&gt;ismaster&lt;/strong&gt; is true as below.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_c2d49028-241a-4026-9e9b-3961780ee970"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_72c4846d-c173-42d0-9bff-c2187b62a0fa" width="194" height="244"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="overflow: auto; cursor: text; font-size: 8pt; border-top: silver 1px solid; font-family: 'Courier New', courier, monospace; border-right: silver 1px solid; border-bottom: silver 1px solid; padding-bottom: 4px; direction: ltr; text-align: left; padding-top: 4px; padding-left: 4px; margin: 20px 0px 10px; border-left: silver 1px solid; line-height: 12pt; padding-right: 4px; max-height: 200px; width: 97.5%; background-color: #f4f4f4"&gt; &lt;div id="codeSnippet" style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;filter&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="and"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;condition&lt;/span&gt; &lt;span style="color: #ff0000"&gt;attribute&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ismaster"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;operator&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="eq"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt;  &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;filter&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 26 Nov 2012 12:20:33 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/11/Empty-String-and-NULL-Behaviour</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Empty String and NULL Behaviour</title>
      <description>&lt;p&gt;By Default Data Sync detects NULL and an Empty String as a difference, however certain Data Sources such as CSV and SharePoint cannot differentiate between NULL and Empty String. Therefore we automatically override this behaviour for you when using these providers.&lt;/p&gt; &lt;p&gt;If you want to force NULL and Empty String to be considered Equal during the comparison you can do this within the Project Automation feature. Simply set the Property &lt;strong&gt;EmptyStringAndNullAreEqual&lt;/strong&gt; to True on one of the Data source Tables using the &lt;strong&gt;BeforeCompare&lt;/strong&gt; Method.&lt;/p&gt; &lt;h3&gt;For Example&lt;/h3&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_592c3bda-a801-40af-b980-40f4b6e1375a"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_6ac63005-02c8-44da-afcf-0ef88ebdad65" width="615" height="484"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div id="codeSnippetWrapper" style="overflow: auto; cursor: text; font-size: 8pt; border-top: silver 1px solid; font-family: 'Courier New', courier, monospace; border-right: silver 1px solid; border-bottom: silver 1px solid; padding-bottom: 4px; direction: ltr; text-align: left; padding-top: 4px; padding-left: 4px; margin: 20px 0px 10px; border-left: silver 1px solid; line-height: 12pt; padding-right: 4px; max-height: 200px; width: 97.5%; background-color: #f4f4f4"&gt; &lt;div id="codeSnippet" style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; BeforeCompare(ProjectAutomationLoadResult loadResult)&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: white"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;     loadResult.TableA.EmptyStringAndNullAreEqual = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-top-style: none; overflow: visible; font-size: 8pt; border-left-style: none; font-family: 'Courier New', courier, monospace; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; line-height: 12pt; padding-right: 0px; width: 100%; background-color: #f4f4f4"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 26 Nov 2012 11:00:43 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/08/Ouvvi-Data-Sync-Team-Server-Configuration-Management</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Ouvvi Data Sync Team Server - Configuration Management</title>
      <description>&lt;p&gt;With Ouvvi Data Sync Team Server you can manage Data Sync project settings from a Central Location with the &amp;lsquo;User Settings&amp;rsquo; page in Ouvvi.&lt;/p&gt;
&lt;p&gt;This allows you to easily switch Databases from Test to Live, specify credentials etc.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_488ba6d0-0556-4447-bedb-c72525acdf30"&gt;&lt;img height="474" width="644" src="http://www.simego.com/Blog/Attachment/blog_df3e0cae-e961-472b-a722-e390df845ba9" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When the Step is run inside Ouvvi or downloaded the configuration variables are expanded so that the value in the settings list is replaced with the value in the Data Sync project.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To enable a setting on a project to be managed this way you must edit the Data Sync project file before uploading into Ouvvi.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Open the project in Notepad and locate the configuration variables.&lt;/p&gt;
&lt;p&gt;For example to enable the SharePointUrl to be managed this way add a value in ConfigKey below.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;so this&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;Parameter Name="SharePointUrl" Value="&lt;a href="http://deathstar/test&amp;quot;"&gt;http://deathstar/test"&lt;/a&gt; ConfigKey="" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;becomes this&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;Parameter Name="SharePointUrl" Value="&lt;a href="http://deathstar/test&amp;quot;"&gt;http://deathstar/test"&lt;/a&gt; ConfigKey="&lt;strong&gt;OurSharePointSite&lt;/strong&gt;" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Then when you upload the project into Ouvvi it will create a new User Setting for &lt;strong&gt;OurSharePointSite&lt;/strong&gt; with the current value that allows you to easily switch the value at runtime.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 31 Aug 2012 17:32:35 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/08/Importing-Active-Directory-Contacts</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Importing Active Directory Contacts</title>
      <description>&lt;p&gt;This guide shows how you can Import/Export or Synchronise Contact Data with Active Directory with Data Synchronisation Studio. (Requires Data Synchronisation Studio Release 3.0.586 or greater)&lt;/p&gt;  &lt;p&gt;In this Example we have created a new OU called ‘Contacts’ that we will Synchronise our Contact Data into. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b90ded6d-3714-4ea2-80e5-423e7d5b5787"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ac53d0fb-1e88-49f6-ab5c-0950755ec2e6" width="575" height="336" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Connect Data Source A&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We have created some sample Data and connected it to Data Source A to Synchronise with Active Directory. In this example we use the UserCode column as our Unique Key and we will store this value in the EmployeeId attribute in Active Directory to maintain the link between records.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_aecd8c5c-c3d9-4894-a98f-cf82e9cf7462"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4d108903-593d-471f-92d2-241c49682826" width="644" height="315" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Connect Data Source B&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We need to specify a correctly formed LDAP Connection such as the one below for this.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;LDAP://OU=Contacts,DC=corp,DC=simego,DC=com&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We also need to modify the &lt;strong&gt;LDAPFilter&lt;/strong&gt; property to return objects of Type ‘Contact’ for example &lt;strong&gt;(&amp;amp;(objectCategory=contact))&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_7c77d9d1-894d-4a8f-b5df-ed3553bcc0a0"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_3b811a5b-98bc-4b59-8015-7d49447c0c63" width="644" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next we need to adjust a few properties on the Active Directory provider to enable the creation of new records in your AD.&lt;/p&gt;  &lt;p&gt;Set the following properties&lt;/p&gt;  &lt;p&gt;SchemaClassName to ‘Contact’&lt;/p&gt;  &lt;p&gt;SchemaItemFormat to ‘$FirstName$ $Surname$’&lt;/p&gt;  &lt;p&gt;EnableAdd to ‘True’&lt;/p&gt;  &lt;p&gt;EnableDelete to ‘True’ (Optional)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f43b4407-4046-4d67-aafa-5d0b6271a625"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ca9058f4-0214-4c5c-b7ea-951bcc1bdd32" width="377" height="384" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Then Setup your Schema Map to Map your Source Columns to Active Directory and in this case using the EmployeeID to Store an Identifier to the Contact record.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_538c3b65-edf6-4592-8ea4-fd44ed39714e"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_5ebbad9d-cffb-47ad-9463-1569d03d93e4" width="644" height="193" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now when you Compare and Synchronise the records are created in your AD.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_325c799a-a87b-4b37-8d9f-a96612dffd44"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_df1a9329-3739-4468-a5b0-6055cc55d5ec" width="644" height="308" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_12a46272-7bfd-445a-9175-a38bad0c8304"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_69cd4c72-f465-4b7d-bf6a-e28b872f0f08" width="416" height="461" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 31 Aug 2012 14:35:22 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/08/Dynamics-CRM-2011-N-N-Relationships</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Dynamics CRM 2011 N:N Relationships</title>
      <description>&lt;p&gt;This guide will demonstrate how to create N:N (Many to Many) Relationships in CRM 2011 with Data Synchronisation Studio. (requires Data Sync release 3.0.586 or greater)&lt;/p&gt;
&lt;p&gt;For this example we will use out of the box entities and show how to relate 1 or more Competitors to Opportunities.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Below shows an existing Opportunity linked to 3 Competitors in CRM we will create a Data Sync project that can create this automatically.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_57e465a2-e260-48fa-9f35-f12886670b39"&gt;&lt;img height="484" width="611" src="http://www.simego.com/Blog/Attachment/blog_1cd2dc05-fe10-4358-abcd-0fe11dbc8457" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Configure Source Data&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;First up we need to configure what it is were going to import/synchronise with CRM. To keep things simple we will create a CSV File containing the Target Relationships.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CSV Data&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Opportunity,Competitor   &lt;br /&gt;Opportunity 1, Competitor 1    &lt;br /&gt;Opportunity 1, Competitor 2    &lt;br /&gt;Opportunity 1, Competitor 3    &lt;br /&gt;Opportunity 2, Competitor 1    &lt;br /&gt;Opportunity 2, Competitor 2&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This Data shows we are Mapping &amp;lsquo;Opportunity 1&amp;rsquo; to Competitor 1,2 and 3 and &amp;lsquo;Opportunity 2&amp;rsquo; to Competitor 1 and 2.&lt;/p&gt;
&lt;p&gt;You will notice that we do not have the Target CRM Guids for the Competitor and Opportunity here so we will use the Data Sync Lookup Function to provide this transformation.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Configure Data Source A&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;First connect Data Source A to the CSV File that contains the relationships.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_75d79187-bd11-4caf-8640-50be0f576c69"&gt;&lt;img height="484" width="458" src="http://www.simego.com/Blog/Attachment/blog_2049965d-72ff-4ee4-8d33-0ff7d496a720" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Next we define a Lookup for Opportunity &amp;ndash;&amp;gt; CRM Opportunity.Name by adding a Lookup to the Opportunity Column linking to CRM Entity Opportunity and setting the Join Target column to the Name of the Opportunity.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b2e5fb59-b0e0-4c23-a5b5-687a3fac433d"&gt;&lt;img height="484" width="389" src="http://www.simego.com/Blog/Attachment/blog_dec11b1e-99ea-4b43-8fb3-fee5f2b40bb7" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Next we define a Lookup for Competitor&amp;ndash;&amp;gt; CRM Competitor.Name by adding a Lookup to the Competitor Column linking to CRM Entity Competitor and setting the Join Target column to the Name of the Competitor.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_4b9d1a06-f45d-4e84-a51b-444c6c89d394"&gt;&lt;img height="484" width="390" src="http://www.simego.com/Blog/Attachment/blog_0ecb7abf-480a-4a8c-a5fa-8e338dc96e4c" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we can test the Lookups by creating a Schema Map of OpportunityId and CompetitorId from the Lookup Columns.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ebf1fe86-561e-4fc0-ac8e-e1f5d01e2872"&gt;&lt;img height="484" width="569" src="http://www.simego.com/Blog/Attachment/blog_83fd9bfa-2374-41de-b511-395ba0b48e8b" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Then Check that the Data Looks good.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_29f871aa-a457-49d3-baf6-159a5e81384e"&gt;&lt;img height="484" width="586" src="http://www.simego.com/Blog/Attachment/blog_95e092c1-2d5e-4e63-b1a0-4cab22cc0d82" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Configure Data Source B&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Connect Data Source B to the new &amp;ldquo;Microsoft Dynamics CRM 2011 &amp;ndash; N:N&amp;rdquo; provider and choose the Relationship &amp;ldquo;opportunitycompetitors_association&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ad477944-45c0-4f95-9efa-df3b5739c017"&gt;&lt;img height="356" width="644" src="http://www.simego.com/Blog/Attachment/blog_8ca5cd68-4ccc-4bf7-abb7-56cbbe5080e8" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now configure your Schema Map so that you map the &lt;strong&gt;Lookup1_OpportunityId&lt;/strong&gt; to &lt;strong&gt;OpportunityId&lt;/strong&gt; and &lt;strong&gt;Lookup2_CompetitorId&lt;/strong&gt; to &lt;strong&gt;CompetitorId&lt;/strong&gt; and ensure that the Key Column is checked for both columns as were creating a Composite Key based on both values.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6be8f9c5-f353-4349-93fb-aa1ec3fad4d8"&gt;&lt;img height="128" width="649" src="http://www.simego.com/Blog/Attachment/blog_5a53519a-4bb2-4ede-ad81-fa31c3c589ce" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now you can Compare and Sync to update CRM with the Data and when you check CRM you will see the Relationship is now configured.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b2faac44-6c38-427d-b18b-23aafd2a1c2d"&gt;&lt;img height="204" width="644" src="http://www.simego.com/Blog/Attachment/blog_18332e04-c2da-4e72-a581-6040770519e3" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 31 Aug 2012 10:45:32 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/08/Manually-Setup-Ouvvi-Data-Sync-Team-Server</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Manually Setup Ouvvi : Data Sync Team Server</title>
      <description>&lt;p&gt;This guide shows how to setup the default Ouvvi Database manually from a Script which maybe your only option when installing the database onto a remote SQL Server.&lt;/p&gt;
&lt;p&gt;Ouvvi requires a Database on SQL2008, 2008R2 or 2012 and also runs with the free SQLEXPRESS editions. Your SQL Server must be configured to accept Standard SQL Accounts.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When Ouvvi starts it first offers the automatic option and this will connect to your Database server using Integrated Security from the Logged on user of the Browser. This can fail against remote servers or if this user does not have the required permissions.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: If you get an error trying to access the Ouvvi Web Page check that you have Windows Authentication Feature in IIS installed and activated on the Ouvvi Web Site.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;To configure manually, select the option to generate a SQL Script of the database.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8b5c64f7-730b-48a5-a62d-39d91215fb4b"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_6dc47f78-2220-4553-a9e7-f116c4653d7b" width="550" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now you need to enter some details for the script generation, specifically the SQL Database and SQL Username (SQL Stored Procedures will be granted Execute Permission with this Username) and the Ouvvi server that is running the Notification Service (Usually the current machine).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f41fddd1-97c9-4223-a6a5-676a61383aed"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4ab16817-5cfc-4946-8efb-756de8eeca00" width="551" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This will now create a SQL Script that you need to execute on your SQL Server to create the Database Structure and default Static Data.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_7e4e94bc-52da-4906-b4d7-889ba751e37f"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_bfafadba-1909-4bd2-baf4-23095a6239b4" width="551" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now you need to create a configuration file so that Ouvvi can connect to your database.&lt;/p&gt;
&lt;p&gt;Create a new XML Text File called &lt;strong&gt;Ouvvi.config&lt;/strong&gt; and place it in directory &lt;strong&gt;C:\ProgramData\Simego\Ouvvi&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This File should contain the SQL Connection String to Ouvvi an example is shown below.&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;connectionStrings&amp;gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;add name="ConsoleDB" connectionString="data source=.\SQLEXPRESS;initial catalog=Ouvvi;integrated security=false;persist security info=true;User ID=Ouvvi_User;Password=password;" /&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;/connectionStrings&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;You can then Click Home in your browser to take you back to Ouvvi home page.&lt;/p&gt;
&lt;p&gt;You may get a Schema Error where the database needs upgrading and by following the same procedure you can generate a Script to bring the Database up to date.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_024ff2e5-410f-4f9d-abbb-2da115c74b93"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_c5730db0-9e5e-4c51-9e99-3da2bca17840" width="551" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e946996d-d7d3-4e5c-83ec-6086e858b7b5"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_54b5ddfc-e39a-4f4b-a28a-f31dcafe8429" width="551" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_c330b00f-4238-4a3f-a387-5e59aa83d156"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_eb6e2389-4b6a-481f-953c-94efdc470ad5" width="551" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Then once the Database is all configured and correct you can then access the Ouvvi Home Page. Which details the last few steps to start the Ouvvi Processing service and start creating projects.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_c9080447-9d2d-4ade-bfe7-08e151b7267a"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_39f18863-25b3-4627-acd0-b698344d24dc" width="551" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 15 Aug 2012 08:53:16 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/08/Workaround-API-Limitations-eg-CreatedBy-and-ModifiedBy</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Workaround API Limitations eg CreatedBy and ModifiedBy</title>
      <description>&lt;p&gt;This is a little trick you can use with Data Synchronisation Studio Project Automation Feature to workaround limitations with certain system API&amp;rsquo;s such as Dynamics CRM.&lt;/p&gt;
&lt;p&gt;For example you can&amp;rsquo;t directly update the CreatedOn, ModifiedOn fields in Microsoft CRM via the Web Service API. However if you ignore the warnings about modifying the Database directly you can implement a little function at the end of the Sync to update the Database directly.&lt;/p&gt;
&lt;p&gt;This example uses a slightly modified version of the &lt;a href="https://github.com/robconery/massive/"&gt;Massive SQL Library by Rob Conery&lt;/a&gt; to simplify the SQL required and make it really simple.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Essentially at the end of the Synchronisation we run through the change set and update the fields in the Database Directly.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In this example the CreatedOn and ModifiedOn fields are part of the Sync operation as Updating them doesn&amp;rsquo;t error it simply ignores their values this way they are part of the Changed row data.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; End(ProjectAutomationResult result)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; ( result.HasChanges &amp;amp;&amp;amp; result.Success ) 
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; connection = &lt;span class="str"&gt;"Data Source=.;Initial Catalog=SimegoLtd_MSCRM;Integrated Security=True;"&lt;/span&gt;;    
            
            var model = &lt;span class="kwrd"&gt;new&lt;/span&gt; Simego.DataSync.Helpers.Massive.DynamicModel(connection, &lt;span class="str"&gt;"AccountBase"&lt;/span&gt;, &lt;span class="str"&gt;"AccountId", "System.Data.SqlClient"&lt;/span&gt;);
            
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var update &lt;span class="kwrd"&gt;in&lt;/span&gt; result.CompareResult.Updated) 
            {
                model.Update(
                    &lt;span class="kwrd"&gt;new&lt;/span&gt; { 
                        CreatedOn = (DateTime)update.SourceRow[1].BeforeColumnValue, 
                        ModifiedOn = (DateTime)update.SourceRow[2].BeforeColumnValue 
                    }, (Guid)update.SourceRow[0].BeforeColumnValue);        
            }
            
        }
    }&lt;/pre&gt;
&lt;p&gt;This trick could be used with many different systems to workaround limitations in the API. For example the Same trick could be used with SharePoint to update the Database directly this way too.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 09 Aug 2012 11:43:28 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/08/Dynamics-CRM-Import-limits</link>
      <author>david@simego.com (David Evans)</author>
      <title>Dynamics CRM Import Limits</title>
      <description>&lt;p&gt;As &amp;lsquo;Customer Relationship Solutions&amp;rsquo; become more and more utilised in industry, IT departments are going to be migrating/importing more and more data. Dynamics CRM is an excellent CRM solution and as such will continue to be the focus of many import/export scenarios.&lt;/p&gt;
&lt;p&gt;The Dynamics CRM Import Wizard has several limits due to it &amp;lsquo;uploading&amp;rsquo; the source data and fetchsql results.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a style="background-color: white;" href="http://julieyack.blogs.com/my_weblog/2012/06/importing-that-flat-data-will-be-easy-peasy-i-promise.html"&gt;Importing that flat data will be easy peasy, I promise!&lt;/a&gt;&lt;span style="background-color: white;"&gt; (this includes the reason and fix!)&lt;/span&gt; &lt;/li&gt;
&lt;li&gt;&lt;a style="background-color: white;" href="http://community.dynamics.com/product/crm/crmnontechnical/b/crmlessons/archive/2011/06/16/crm-2011-data-import-wizard.aspx"&gt;CRM 2011 Data Import Wizard&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I though I would just post a few screenshots to illustrate how easy it is to import and export data to and from Dynamics CRM 2011 (and 4.0) with Data Synchronisation Studio.&lt;/p&gt;
&lt;p&gt;What is more important is that we can change the source re-sync, ie make a mistake, fix and re-sync:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_189e55b5-70bb-40de-83be-3bf1e2cb327f"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Screen Shot 2012-08-07 at 15.16.33" border="0" alt="Screen Shot 2012-08-07 at 15.16.33" src="http://www.simego.com/Blog/Attachment/blog_1ce5d3d9-8e8d-44d3-bf00-7062a11d01c3" width="630" height="377" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What may be more interesting is the speed:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_962e1cda-c3ae-4f80-8469-a8dd26fb4c76"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Screen Shot 2012-08-07 at 15.31.19" border="0" alt="Screen Shot 2012-08-07 at 15.31.19" src="http://www.simego.com/Blog/Attachment/blog_e00c6c3b-2c47-49eb-b7ea-6c0313c6d604" width="630" height="380" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For a 35 Second video of developing the import from SQL to CRM:&lt;/p&gt;
&lt;p&gt;&lt;iframe height="500" src="http://www.youtube.com/embed/T-zNaYaCyk0" frameborder="0" width="700"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;div class="paddingTop"&gt;Watch as we sync from start to finish in 35 seconds!
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 08 Aug 2012 12:02:34 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/08/CRM-Change-Trigger-Ouvvi-Data-Sync-Team-Server</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>CRM Change Trigger-Ouvvi : Data Sync Team Server</title>
      <description>&lt;p&gt;We have created a CRM Entity change tracking trigger for Data Sync Team Server that operates in a similar way to the SharePoint List Change Trigger.&lt;/p&gt;
&lt;p&gt;Internally the trigger system calls each trigger at a 30 second interval to evaluate it&amp;rsquo;s state, the CRM trigger will then call a Web Service in CRM to see when the last item was created or updated. This is a quick call that only returns a single data item the DateTime of the last change.&amp;nbsp; If this has changed since the last time time a change was detected then any projects associated with this trigger will be started.&lt;/p&gt;
&lt;p&gt;Rather than synchronising on a timed schedule you can now achieve almost real-time updates (max 30 second delay) by implementing the Entity Change Trigger with your CRM environment.&lt;/p&gt;
&lt;p&gt;This feature is currently only supported with OnPremise AD Authenticated CRM 4.0/2011 installations.&lt;/p&gt;
&lt;p&gt;The feature requires no change to your CRM environment and can therefore be easily deployed.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To configure the Trigger add a new Trigger of type &amp;lsquo;Crm Entity Trigger&amp;rsquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_864f1aec-4d58-4106-ab3e-25e1ac3070bc"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_89b51096-9061-40b8-b23f-908ad0bfecf0" width="644" height="446" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Then enter the URL, Organisation Name and Entity Name you want to monitor you may also need to enter some credentials if Ouvvi is not running under an account that has access to your CRM environment.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2321bade-7b30-4deb-967d-ceedf2b8165f"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_e14733d0-83d9-414b-bcdc-d5651e4c4d3d" width="620" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The only other configuration item required is to ensure that your projects are configured for &amp;rsquo;Single Instance&amp;rsquo; so that multiple synchronisation operations do not occur in parallel.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_bc1b5e97-58a0-4d0e-85aa-b5fa16aace12"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_9f733e4a-568b-452a-8b58-fd6e83d718ca" width="644" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all it takes you can now simply associate this Trigger with any projects you want to run when a change is detected.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This new feature is in release 2.0.226&amp;nbsp;&lt;a title="http://www.simego.com/Install/Ouvvi-Beta" href="http://www.simego.com/Install/Ouvvi-Beta"&gt;http://www.simego.com/Install/Ouvvi-Beta&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 07 Aug 2012 10:29:29 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/08/HTTP-Change-Trigger-Ouvvi-Data-Sync-Team-Server</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>HTTP Change Trigger-Ouvvi : Data Sync Team Server</title>
      <description>&lt;p&gt;The latest Ouvvi Data Sync Team Server update includes a new Trigger for integration with custom solutions. This trigger calls an external HTTP service to evaluate whether the Trigger should be fired.&lt;/p&gt;
&lt;p&gt;The HTTP service should simply return the Date Time value of the last change in the format &lt;strong&gt;yyyy-MM-ddThh:mm:ss&lt;/strong&gt;. Ouvvi will then use this value to determine whether the Trigger should fire. As this is a triggering system your service should return very quickly so that it does not tie up the internal Ouvvi trigger list.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To configure this trigger simply add the &amp;lsquo;Http Trigger&amp;rsquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2dcc525d-942b-4f83-bdf5-e10389344e6e"&gt;&lt;img height="400" width="644" src="http://www.simego.com/Blog/Attachment/blog_63cad9b3-9b50-4a57-a52a-10116b5b4052" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Configure the URL and HTTP Method &amp;lsquo;GET&amp;rsquo; or &amp;lsquo;POST&amp;rsquo; if your service is authenticated you can enter Windows Credentials here as well.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6842dcd0-ada8-4424-b361-3269364f397f"&gt;&lt;img height="484" width="588" src="http://www.simego.com/Blog/Attachment/blog_2b7bb067-4a64-4cc2-a6f7-5b2853a66cd2" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now simply associate this trigger with any projects you want to start when the Trigger fires.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 07 Aug 2012 10:07:04 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/07/Updating-Custom-Geckoboard-Widget</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Updating Custom Geckoboard Widget</title>
      <description>&lt;p&gt;This is a quick guide that demonstrates how to update a custom Widget on &lt;a href="http://www.geckoboard.com/"&gt;Geckoboard&lt;/a&gt; with the result of a Data Synchronisation using the Project Automation Feature.&lt;/p&gt;
&lt;p&gt;Note: Requires Data Synchronisation Studio Release 3.0.570 or greater.&lt;/p&gt;
&lt;p&gt;First you need an account at &lt;a href="http://www.geckoboard.com/"&gt;Geckoboard&lt;/a&gt; you can signup for a free trial to test it out.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once you have your first Dashboard add a Custom Widget and configure it for Push, here I selected the Text widget that were just going to push a Single Text value to.&lt;/p&gt;
&lt;p&gt;You need to make a note of the Push URL and get your API key form your Account that we need in Data Sync Later.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_567184b2-e8f9-4891-9ecf-8d91eba65636"&gt;&lt;img height="493" width="659" src="http://www.simego.com/Blog/Attachment/blog_a2027862-974d-4b24-8419-0984157a04d7" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now that you have the widget on your dashboard we need to send it some data.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f987a518-1d21-431d-8bfd-d07e94c22330"&gt;&lt;img height="305" width="322" src="http://www.simego.com/Blog/Attachment/blog_e4a19f37-b744-4fa3-b6d8-851459824f6f" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This example uses a demo Data Sync project you can &lt;a href="http://www.simego.com/downloads/GeckoUpdateSample.zip"&gt;download&lt;/a&gt; but you can use any Data Source you like such as CRM, SharePoint, SQL etc.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;First we setup our Data Source and preview the Data from Data Source A.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_38cc5d9b-a630-4886-a3a2-b57071032d10"&gt;&lt;img height="143" width="516" src="http://www.simego.com/Blog/Attachment/blog_f33fa878-c5f0-4c89-8eef-d8b3b7482c3f" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a single item that were going to send to Geckoboard, next Export this result to an XML file from the Toolbar so we have a Datasource that we can connect Datasource B to and handle change events.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Connect Datasource B to the .NET XML Dataset provider by browsing to the XML file we just created.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_bb1c74e6-3481-4705-b291-3f16c0d014cb"&gt;&lt;img height="357" width="644" src="http://www.simego.com/Blog/Attachment/blog_b85c8e34-2100-4a15-88fe-9b41f7400d59" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You now have a simple Data Sync project set up that Updates the XML file when there are changes to the Source Data.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1fbca46d-511e-4d2a-8cb4-efb541c6c402"&gt;&lt;img height="334" width="644" src="http://www.simego.com/Blog/Attachment/blog_68667bb8-2316-42f7-b874-3d10d22d0de0" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_55ea9215-6f5c-427a-b7e4-1f3ace1735e5"&gt;&lt;img height="250" width="644" src="http://www.simego.com/Blog/Attachment/blog_69411058-d695-4f2f-81ba-9502765fe7e9" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now for the clever bit, switch to the Project Automation Tab and enable Project Automation so that we can send the results to Geckoboard.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We need to write the code that generates the Json payload to send to Geckoboard this is quite simple with .NET Anonymous types.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Within the End method of the Project Automation which occurs after the synchronisation to the XML file and therefore only updates Geckoboard when changes occur add the following code. &lt;em&gt;[Update widgetUrl and apiKey with your values].&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; End(ProjectAutomationResult result)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; ( result.Success &amp;amp;&amp;amp; result.HasChanges ) 
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; widgetUrl = &lt;span class="str"&gt;"https://push.geckoboard.com/v1/send/aaabbbccc"&lt;/span&gt;;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; apiKey = &lt;span class="str"&gt;"aaabbbcccc"&lt;/span&gt;;
            
            var data = &lt;span class="kwrd"&gt;new&lt;/span&gt; 
            { 
                    api_key = apiKey, 
                    data = &lt;span class="kwrd"&gt;new&lt;/span&gt; 
                    {                         
                        item = &lt;span class="kwrd"&gt;new&lt;/span&gt; []  
                        { 
                            &lt;span class="kwrd"&gt;new&lt;/span&gt; 
                            { 
                                text = result.CompareResult.Updated[0].SourceRow[1].BeforeColumnValue, 
                                &lt;span class="kwrd"&gt;value&lt;/span&gt; = result.CompareResult.Updated[0].SourceRow[0].BeforeColumnValue 
                            } 
                        } 
                    }
            };
                    
            var client = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Net.WebClient();
            client.UploadString(widgetUrl, Json.Encode(data));            
        }
    }&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The CompareResult object contains the results of the Comparison and in this case were only interested in Updates. the Updated object is an Array of Updated Rows and the SourceRow object links back to the Datasource A row. The index of the Columns match the Schema Map layout.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And then after the Sync you will see your Geckoboard updated.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f2dae647-a47e-4e7d-b662-e6a6a06d0696"&gt;&lt;img height="271" width="278" src="http://www.simego.com/Blog/Attachment/blog_70138729-04a4-481d-b2ae-5790c4c18fe2" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 27 Jul 2012 10:57:24 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/07/Import-File-Share-or-Folder-into-SharePoint-2010-Document-Library</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Import File Share or Folder into SharePoint 2010 Document Library</title>
      <description>&lt;p&gt;To setup a File/Folder/Share Synchronisation to a SharePoint 2010 document library is quick and easy with Data Synchronisation Studio.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Connect Data source A to your Source Folder and ensure you set the property &amp;ldquo;WebFriendlyPaths&amp;rdquo; to &lt;strong&gt;True&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_4da1021c-8936-4bbb-9efb-00577b30699c"&gt;&lt;img height="356" width="644" src="http://www.simego.com/Blog/Attachment/blog_1597101d-adb5-43cc-b7a3-42a442c4a496" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Connect your Target Data source B to SharePoint using the SharePoint &lt;strong&gt;Client API&lt;/strong&gt; provider this is for SharePoint 2010 only.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8389d324-d9f0-45b3-bb90-945fdcfd4536"&gt;&lt;img height="356" width="644" src="http://www.simego.com/Blog/Attachment/blog_183f08f4-3e36-45d2-860c-c04db72a4f52" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Map your Source to your Target like this&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_269e25c3-355a-42bb-b882-62497ff4e59d"&gt;&lt;img height="156" width="714" src="http://www.simego.com/Blog/Attachment/blog_129c2a33-3934-4c53-896a-627efeaa31c6" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And that&amp;rsquo;s it Compare A-&amp;gt;B and then Synchronise to copy the files from your Folder/Share into your SharePoint Document Library. Even the Created and Modified fields will match the File timestamps.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you want to update Metadata columns at the same time you can by either using Dynamic columns to return values for the Metadata Columns or use a Lookup function against another Data Source to provide the values for your metadata.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 25 Jul 2012 14:15:00 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/07/Transform-Any-Data-with-Data-Sync</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Transform Any Data with Data Sync</title>
      <description>&lt;p&gt;We have a database with order information where we just have 2 columns &lt;strong&gt;ID&lt;/strong&gt; and &lt;strong&gt;Data&lt;/strong&gt; where the Data column holds a Blob of strings like this below. I wanted to extract these strings into separate columns so that they could be stored in the database.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Courier New'; font-size: small;" face="Courier New" size="2"&gt;FIRST_NAME:Sean     &lt;br /&gt;LAST_NAME:Cleaver      &lt;br /&gt;COMPANY:Simego Ltd      &lt;br /&gt;EMAIL:sean@simego.com      &lt;br /&gt;PHONE:      &lt;br /&gt;FAX:      &lt;br /&gt;COUNTRY:United Kingdom      &lt;br /&gt;STATE:East Susses      &lt;br /&gt;CITY:St Leonards-on-Sea      &lt;br /&gt;ZIP:TN38 9NP      &lt;br /&gt;ADDRESS:34 Stirling Road      &lt;br /&gt;LICENSE_CODE:5E366AAFBB      &lt;br /&gt;EXPIRATION_DATE:2012-06-23      &lt;br /&gt;DATE_UPDATED:      &lt;br /&gt;CHANGED_BY:VENDOR      &lt;br /&gt;LICENSE_TYPE:REGULAR      &lt;br /&gt;DISABLED:0      &lt;br /&gt;RECURRING:0a      &lt;br /&gt;LICENSE_PRODUCT:4559088      &lt;br /&gt;START_DATE:2012-05-23      &lt;br /&gt;LICENSE_LIFETIME:0      &lt;br /&gt;PARTNER_CODE:      &lt;br /&gt;PSKU:      &lt;br /&gt;ACTIVATION_CODE:DCDA2M-MEX6DR-Q      &lt;br /&gt;EXPIRED:0      &lt;br /&gt;HASH:7b9dfb715ae1a703e12603aa&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;With Data Sync it took about 5 minutes to write a few Dynamic Columns to transform this into the right shape to import virtually anywhere. (CRM, Sharepoint, SQL etc)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For each row we basically read each line creating a Dictionary of the Values and then update the Dynamic Properties with the values from the Dictionary. The main task here was Cut &amp;amp; Paste &lt;img src="http://www.simego.com/Blog/Attachment/blog_e68e05b8-e0fa-483b-b3be-4a4972257bbe" alt="Smile" class="wlEmoticon wlEmoticon-smile" style="border-style: none;" /&gt;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; FIRST_NAME { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LAST_NAME { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; COMPANY { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; EMAIL { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; PHONE { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; FAX { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; COUNTRY { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; STATE { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CITY { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ZIP { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ADDRESS { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LICENSE_CODE { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; EXPIRATION_DATE { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; DATE_UPDATED { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CHANGED_BY { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LICENSE_TYPE { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; DISABLED { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; RECURRING { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LICENSE_PRODUCT { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; START_DATE { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LICENSE_LIFETIME { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; PARTNER_CODE { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; PSKU { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ACTIVATION_CODE { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; EXPIRED { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; HASH { get; set; }
    
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; BeginRow()
    {        
        Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; items = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();
        
        &lt;span class="kwrd"&gt;using&lt;/span&gt;(var sr = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringReader(Data)) 
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; line = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
            &lt;span class="kwrd"&gt;while&lt;/span&gt;((line = sr.ReadLine()) != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;string&lt;/span&gt; [] split = line.Split(&lt;span class="str"&gt;':'&lt;/span&gt;);
                &lt;span class="kwrd"&gt;if&lt;/span&gt; ( split.Length == 2 )
                {
                    items.Add(split[0], split[1]);    
                }                
            }
        }
        
        FIRST_NAME = items[&lt;span class="str"&gt;"FIRST_NAME"&lt;/span&gt;];
        LAST_NAME = items[&lt;span class="str"&gt;"LAST_NAME"&lt;/span&gt;];
        COMPANY = items[&lt;span class="str"&gt;"COMPANY"&lt;/span&gt;];
        EMAIL = items[&lt;span class="str"&gt;"EMAIL"&lt;/span&gt;];
        PHONE = items[&lt;span class="str"&gt;"PHONE"&lt;/span&gt;];
        FAX = items[&lt;span class="str"&gt;"FAX"&lt;/span&gt;];
        COUNTRY = items[&lt;span class="str"&gt;"COUNTRY"&lt;/span&gt;];
        STATE = items[&lt;span class="str"&gt;"STATE"&lt;/span&gt;];
        CITY = items[&lt;span class="str"&gt;"CITY"&lt;/span&gt;];
        ZIP = items[&lt;span class="str"&gt;"ZIP"&lt;/span&gt;];
        ADDRESS = items[&lt;span class="str"&gt;"ADDRESS"&lt;/span&gt;];
        LICENSE_CODE = items[&lt;span class="str"&gt;"LICENSE_CODE"&lt;/span&gt;];
        EXPIRATION_DATE = items[&lt;span class="str"&gt;"EXPIRATION_DATE"&lt;/span&gt;];
        DATE_UPDATED = items[&lt;span class="str"&gt;"DATE_UPDATED"&lt;/span&gt;];
        CHANGED_BY = items[&lt;span class="str"&gt;"CHANGED_BY"&lt;/span&gt;];
        LICENSE_TYPE = items[&lt;span class="str"&gt;"LICENSE_TYPE"&lt;/span&gt;];
        DISABLED = items[&lt;span class="str"&gt;"DISABLED"&lt;/span&gt;];
        RECURRING = items[&lt;span class="str"&gt;"RECURRING"&lt;/span&gt;];
        LICENSE_PRODUCT = items[&lt;span class="str"&gt;"LICENSE_PRODUCT"&lt;/span&gt;];
        START_DATE = items[&lt;span class="str"&gt;"START_DATE"&lt;/span&gt;];
        LICENSE_LIFETIME = items[&lt;span class="str"&gt;"LICENSE_LIFETIME"&lt;/span&gt;];
        PARTNER_CODE = items[&lt;span class="str"&gt;"PARTNER_CODE"&lt;/span&gt;];
        PSKU = items[&lt;span class="str"&gt;"PSKU"&lt;/span&gt;];
        ACTIVATION_CODE = items[&lt;span class="str"&gt;"ACTIVATION_CODE"&lt;/span&gt;];
        EXPIRED = items[&lt;span class="str"&gt;"EXPIRED"&lt;/span&gt;];
        HASH = items[&lt;span class="str"&gt;"HASH"&lt;/span&gt;];
        
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;span class="rem"&gt;// return false to remove row from results.&lt;/span&gt;
    }&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And the results in Data Sync Data Preview&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_409d68fd-2e99-4b2e-8bb7-11ae6aa65348"&gt;&lt;img height="279" width="644" src="http://www.simego.com/Blog/Attachment/blog_38a0950e-433e-4ab5-966d-695c96662d16" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 17 Jul 2012 17:55:48 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/07/Duplicate-Key-Values-Behaviour-Change</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Duplicate Key Values Behaviour Change</title>
      <description>&lt;p&gt;Data Sync Release: 3.0.568&lt;/p&gt;  &lt;p&gt;We have an update to the way Data Sync handles Duplicate Key values, previously during the load when Data Sync hit a duplicate key value it caused an internal exception and we displayed a list of keys showing you the exception. You would then need to either adjust the Key column in the schema map or fix the data to ensure all rows were unique.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://www.simego.com/Blog/Attachment/blog_7279c1fb-15f5-4399-83a3-d4ac0013516d"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_f789327a-eec1-4fea-8115-ea63fecbec5c" width="581" height="574" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This would keep happening for every duplicate key in your data source and it could be quite time consuming correcting the data to ensure that the key values are unique.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We have now changed this behaviour so that duplicate keys no longer cause the application to stop but rather the duplicate key rows are excluded from the comparison data set and flagged as a duplicate.&lt;/p&gt;  &lt;p&gt;When you preview the Data from the Schema Map PreviewA/B functions you will see a error icon next to the duplicate rows and a message at the bottom indicating how many duplicates there are in the result set. This provides a quick visual indication to whether your Key selection is correct.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0ad344b7-13d5-47a0-b70c-2ee3ae6cd017"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4db37761-79b1-4281-a730-4071ae6d00da" width="644" height="423" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;likewise the comparison results will show that some rows were excluded but it will not prevent the comparison from running.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_915c743b-89d2-49f4-9ff9-b956bbb7a981"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_f5972554-d575-440a-94e3-94534a632735" width="615" height="590" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;It is possible to force an error if there are duplicates via the Project Automation feature. You can simply test for Duplicates before the Compare and throw an exception to stop the process like this below.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_642a4007-c615-441a-bc57-baab8cb9e995"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_bfc28a81-8398-4e83-9ca2-97373a00a730" width="644" height="401" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;When you run the compare with this check Data Sync will simply show the error or log the error when running from the Run Tool.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_7f9c1ee4-bde8-47f9-892c-6153ebdaceb7"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_d4892fcb-7a8a-422b-99d8-9f4219a828db" width="507" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 16 Jul 2012 12:47:40 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/07/Partner-Program</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Partner Program</title>
      <description>&lt;p&gt;Are you an Application Integrator deploying solutions with Microsoft Dynamics or SharePoint?&lt;span style="background-color: white;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We're very pleased to announce the new Simego&amp;rsquo;s Partner Programme. This allows qualified partners to earn money by packaging their integration consultancy with Simego&amp;rsquo;s products?&lt;/p&gt;
&lt;p&gt;To learn more and find out if you are already qualified &lt;a title="Ask a question" href="/Question/"&gt;contact us&lt;/a&gt; today.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 13 Jul 2012 13:14:33 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/07/Data-Synchronisation-Studio-Fails-to-Start</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio-Fails to Start</title>
      <description>&lt;p&gt;If your copy of Data Synchronisation Studio fails to open the main window when you run the program it could be that the window location file is corrupt.&lt;/p&gt;
&lt;p&gt;The easiest thing to do is to remove your local settings for Data Sync and let it start from a clean start.&lt;/p&gt;
&lt;p&gt;Delete the following directory replacing &amp;lsquo;Sean&amp;rsquo; for your profile name.&lt;/p&gt;
&lt;p&gt;C:\Users\Sean\AppData\Local\Simego\DataSyncStudio30&lt;/p&gt;
&lt;p&gt;Now when Data Sync starts it will start with default settings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This directory maybe hidden on your system so you might need to show hidden files.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 10 Jul 2012 14:27:36 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/06/Yammer-Integration-with-Sharepoint</link>
      <author>david@simego.com (David Evans)</author>
      <title>Yammer Integration with Sharepoint</title>
      <description>&lt;p&gt;Yammer stands to make an even bigger splash in the Enterprise sector with Microsoft leading it. At Simego we have always developed solutions that allowed IT staff to integrate their systems with ease and Yammer will be no exception.&lt;/p&gt;
&lt;p&gt;All scenarios DO NOT NEED Yammer Admin permissions&lt;/p&gt;
&lt;h3&gt;Scenario: Send an update Notification to Yammer when a Status Changes in a Sharepoint list&lt;/h3&gt;
&lt;p&gt;Many IT departments need to notify their users when there are issues with email, file systems, Line-of-Business apps etc. This scenario shows how to connect to Yammer, connect to a Sharepoint &amp;lsquo;Status Board&amp;rsquo; and respond to changes in the list by sending a notification to Yammer.&lt;/p&gt;
&lt;p&gt;Prerequisites:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A Yammer account for your service to talk through : &lt;a href="mailto:systems@yourcomany.com"&gt;systems@yourcomany.com&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Data Sync Studio &lt;a href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;Download a 7 day full Version trial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sharepoint 2007 &amp;amp; 2010 (Online or On-Premise) &lt;/li&gt;
&lt;li&gt;MS SQL Express (or any to compare the list for changes). &lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;Step 1: Create a new List in Sharepoint similar to the one below&lt;/h5&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f7d31319-699d-4fb2-8e08-31df10e771be"&gt;&lt;img height="471" width="630" src="http://www.simego.com/Blog/Attachment/blog_a4c3fef5-274a-4720-8236-6680056b2d1b" alt="Sharepoint IT Systems Status List" border="0" title="Sharepoint IT Systems Status List" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is essentially a &amp;lsquo;Status Board&amp;rsquo; for the IT Department. Each &amp;lsquo;Service&amp;rsquo; can have the following states:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Operating with no issues&lt;/li&gt;
&lt;li&gt;The service is back up for most, but some users may be experiencing issues &lt;/li&gt;
&lt;li&gt;We are experiencing a serious problem with this service &lt;/li&gt;
&lt;li&gt;A small percentage of users are experiencing issues&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We want these Status updates to appear in Yammer&lt;/p&gt;
&lt;h5&gt;Step 2: Open Data Sync and connect to the list created in Step 1&lt;/h5&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b36c6c42-79c3-4b3f-8126-29cccbfcf617"&gt;&lt;img height="492" width="630" src="http://www.simego.com/Blog/Attachment/blog_be890524-7ed5-493a-a626-d42ae0760edc" alt="Step 1 Connect to Sharepoint Status Baord" border="0" title="Step 1 Connect to Sharepoint Status Baord" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_33a4df5d-aa94-47aa-b757-5e788f84dab7"&gt;&lt;img height="492" width="630" src="http://www.simego.com/Blog/Attachment/blog_f5dffdfc-8717-4c7c-8fc9-ea870b3cfc3b" alt="Step 1 Select the Status List" border="0" title="Step 1 Select the Status List" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;Step 3: Sync the SharePoint list with a SQL List (Data Sync can create the SQL Table for you)&lt;/h5&gt;
&lt;p&gt;Data Sync has a feature that left you create a new SQL Table based on the contents of your source. We are going to use that as a target. Create a SQL Table using the wizard from the Tools Menu.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_3eff256d-6edb-4874-902f-7d26a12766f6"&gt;&lt;img height="492" width="630" src="http://www.simego.com/Blog/Attachment/blog_1c6ddd70-45bf-4124-98e6-6a36da089375" alt="Step 2 Create the SQL Sync Table" border="0" title="Step 2 Create the SQL Sync Table" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can now compare the Sharepoint List to the SQL Table and Synchronise by pressing the :&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6c0eac6a-b127-46fc-aaaa-a88cbbeb6d0b"&gt;&lt;img height="27" width="110" src="http://www.simego.com/Blog/Attachment/blog_7c361756-319a-4b58-968c-25b49ae4d0c1" alt="Compare A to B" border="0" title="Compare A to B" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and then&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_49a89d17-c325-42d6-9d86-f9fb7bdf622d"&gt;&lt;img height="25" width="96" src="http://www.simego.com/Blog/Attachment/blog_5e00ff8a-0f96-4b85-ab2a-e73774e93134" alt="Synchronse A to B" border="0" title="Synchronse A to B" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;hellip;this will synchronise all the items in the Sharepoint List into the SQL Table.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5d2f9fae-ad01-42ff-9190-b046ab5d8398"&gt;&lt;img height="494" width="630" src="http://www.simego.com/Blog/Attachment/blog_f667bc15-8a29-4c2d-9389-91723503129d" alt="Step 2 Sync the Status into the SQL" border="0" title="Step 2 Sync the Status into the SQL" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, if you change an item in the Sharepoint list and then Compare and Synchronise a single update will be make to the SQL Table.&lt;/p&gt;
&lt;h3&gt;&lt;em&gt;It would be so useful to send that change notification to Yammer!!&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;Luckily for us Data Sync is unbelievable flexible, and uses the .net Framework with a built in development environment to hook into synchronisation events. (Sounds hard but it is automagic).&lt;/p&gt;
&lt;h5&gt;Step 4: Enable &amp;lsquo;Project Automation&amp;rsquo;&lt;/h5&gt;
&lt;p&gt;On the &amp;lsquo;Project Automation&amp;rsquo; Tab click on the &amp;lsquo;Enable Project Automation&amp;rsquo; link. &lt;a href="http://www.simego.com/Blog/Attachment/blog_1c3d6971-0533-4b76-9468-9330c65749e3"&gt;&lt;img height="560" width="630" src="http://www.simego.com/Blog/Attachment/blog_4b30ba6c-573d-42ff-92b1-46879ed3ccd5" alt="Project Automation" border="0" title="Project Automation" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is the bit that makes or breaks any web based solution like Yammer&amp;hellip;.Integration.&lt;/p&gt;
&lt;h5&gt;Step 5: Set up an Application in Yammer.&lt;/h5&gt;
&lt;p&gt;Waltz on over to Microsoft Yammer&amp;rsquo;s application creation page:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.yammer.com/client_applications/new" title="http://www.yammer.com/client_applications/new"&gt;http://www.yammer.com/client_applications/new&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and complete the following details obviously replacing your fake name for Simego&amp;rsquo;s!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_715cfafd-f00c-4df8-9fd7-b83a16d9ed54"&gt;&lt;img height="576" width="571" src="http://www.simego.com/Blog/Attachment/blog_8116dfd9-5482-4fe2-8f3f-04c70f94204b" alt="Register a new Yammer Application" border="0" title="Register a new Yammer Application" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and you should get a set of OAuth Keys and Secrets:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d87c59d5-a785-4e53-889c-0f30534543d0"&gt;&lt;img height="551" width="577" src="http://www.simego.com/Blog/Attachment/blog_e22a0b27-6168-4da0-a314-eb229901377e" alt="Results of Yammer Application Registration" border="0" title="Results of Yammer Application Registration" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Data Sync has a built in solution for authenticating with Yammer through their standard protocols but it is never going to be plain sailing!&lt;/p&gt;
&lt;h5&gt;Step 6: Do a Song and Dance to get OAuth working&lt;/h5&gt;
&lt;h5&gt;If Yammer approve &amp;lsquo;Data Sync&amp;rsquo; as a Global Application you will not need to do such a Song and Dance to get all these keys (Hint! Hint!)&lt;/h5&gt;
&lt;p&gt;We are going to use Data Sync&amp;rsquo;s development environment to do a neat trick for us by doing the OAuth dance and handing out the secure tickets so we can post to Yammer!&lt;/p&gt;
&lt;p&gt;Back to Data Sync and to the Project Automation editor window. We are now going to use the Consumer Key and Consumer Secret to get a Token Key and Token Secret using DataSync&amp;rsquo;s YammerHelper:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_604c724f-7210-4408-9ff1-30ca76d9aac9"&gt;&lt;img height="506" width="570" src="http://www.simego.com/Blog/Attachment/blog_9a6b1193-d01a-40e1-9383-79be9df27cc9" alt="Project Automation Yammer OAuth Dance" border="0" title="Project Automation Yammer OAuth Dance" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;private Simego.DataSync.Providers.OAuth.YammerHelper yammer;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void Start()     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Configure the helper     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yammer = new Simego.DataSync.Providers.OAuth.YammerHelper(     &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; "OHdHeOvWcpODC69Q58ecg", //Consumer Key     &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; "GbXNAYk8YwTTNDal4ZHwo6Pviph0nzJ3hPkhA4v5w"//Consumer Secret     &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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Get the yammer helper to negotiate with Yammer for our OAuth Keys     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Trace.WriteLine(yammer.Authorise());     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;Click the &amp;lsquo;Compare A-B&amp;rsquo; to start the OAuth negotiation.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e9a14be1-bc4f-4ca1-8046-34896402e3e1"&gt;&lt;img height="27" width="110" src="http://www.simego.com/Blog/Attachment/blog_f7d53d23-07b0-4aa4-b08f-b840f91a0747" alt="Compare A to B" border="0" title="Compare A to B" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Your web browser will launch and as you to authorise the application &lt;em&gt;(Pro-Tip : If you are not signed in to Yammer then you have to sign-in on this screen)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d74659d1-62cc-4606-b814-4cfc34b2fe9f"&gt;&lt;img height="320" width="621" src="http://www.simego.com/Blog/Attachment/blog_0d611cf5-46bc-4256-bfc0-2d901a406190" alt="Yammer OAuth Authorise Window" border="0" title="Yammer OAuth Authorise Window" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click the &amp;lsquo;Authorize&amp;rsquo; button to progress to the next stage. You should be presented with a code number :&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_c5482991-de45-4244-a7ca-a8b3c3519102"&gt;&lt;img height="281" width="626" src="http://www.simego.com/Blog/Attachment/blog_2e2451d5-6c10-4015-b338-4055319c0e9c" alt="Yammer OAuth Application Acceptance Key Window" border="0" title="Yammer OAuth Application Acceptance Key Window" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Data Sync should have shown you a little dialog to enter this code into:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1c966e17-3cfb-48ab-bb31-de0905e9ddb8"&gt;&lt;img height="191" width="368" src="http://www.simego.com/Blog/Attachment/blog_2ba4c887-f9d5-42c0-a888-a90f222c3813" alt="Data Sync OAuth Code Application Entry" border="0" title="Data Sync OAuth Code Application Entry" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The magic happens in the background and back on the Data Sync Project Automation page in the bottom of the window Data Sync will be displaying the TokenKey and TokenSecret:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ef34ebdc-baa1-4e4b-ab5c-c04f88162fd8"&gt;&lt;img height="536" width="630" src="http://www.simego.com/Blog/Attachment/blog_3d79abc4-c59b-4251-ab0d-b2210c7fa863" alt="Yammer Keys with OAuth Song and Dance Complete" border="0" title="Yammer Keys with OAuth Song and Dance Complete" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next we just need to copy those keys next to the Consumer Keys and Secrets and remove the yammer.Authorise() because we have completed the Dance!&lt;/p&gt;
&lt;p&gt;We can even send a Test Message using the yammer.SendMessage() method!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_668b3683-3764-4900-8243-89510b4fc2ea"&gt;&lt;img height="538" width="627" src="http://www.simego.com/Blog/Attachment/blog_5af5ace6-a0e1-4483-93c9-8069b65b26e5" alt="Yammer - Data Sync Connected!" border="0" title="Yammer - Data Sync Connected!" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In Yammer we will see the message:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d7c89372-9acb-401e-a24c-304980ec4588"&gt;&lt;img height="87" width="630" src="http://www.simego.com/Blog/Attachment/blog_5fb803a6-f3f2-4e38-9414-cf163f9a6812" alt="Yammer update of Data Sync Message" border="0" title="Yammer update of Data Sync Message" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;Step 7: Publish Changes when the Status Changes&lt;/h5&gt;
&lt;p&gt;All we need to do is add a little code to the &amp;lsquo;End&amp;rsquo; method:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_08e7319c-d837-4863-828f-b2c9ffe447b6"&gt;&lt;img height="541" width="630" src="http://www.simego.com/Blog/Attachment/blog_49eaba74-f405-44d6-94e6-7f51cb9f881c" alt="Yammer Notification from Change" border="0" title="Yammer Notification from Change" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;public override void End(ProjectAutomationResult result)   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( result.Success &amp;amp;&amp;amp; result.HasChanges ) {    &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach(var item in result.CompareResult.Updated) {    &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; yammer.SendMessage(string.Format("{0}, {1}",     &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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.SourceRow[3].BeforeColumnValue,     &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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.SourceRow[2].BeforeColumnValue));&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: The SourceRow columns are the columns in the Data Sync Sharepoint results referenced by number starting with 0.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And we are Done!!&lt;/p&gt;
&lt;h5&gt;Step 8: Test&lt;/h5&gt;
&lt;p&gt;To test just update the status of one of your Systems in the Sharepoint List and the changes with appear in Yammer:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f44c8315-2c61-4863-9a8f-ecffc1d696d6"&gt;&lt;img height="93" width="630" src="http://www.simego.com/Blog/Attachment/blog_8f946629-7439-4bc6-ba9f-aeb5484510f7" alt="Yammer Serice Update from Data Sync" border="0" title="Yammer Serice Update from Data Sync" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 26 Jun 2012 09:09:11 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/06/Data-Sync-Project-as-a-Data-Source</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Project as a Data Source</title>
      <description>&lt;p&gt;Imagine you have a reasonably complex Data Source configured that uses Dynamic Columns and possibly Lookups to define your Source Data Transformations. Currently if you wanted to use this again in another Sync job then you would have to copy it all again which isn’t ideal.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1d7752b7-9b19-4177-9ecc-c69e35a0febb"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_f1d10ad4-c8f2-4116-9de8-3d5c3b07d4c4" width="535" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;But now …with the new Data Sync Project File provider you can reference an external Data Sync Project as a Data Source.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d85d8fc1-8a99-4eaa-9b44-b9f1f7b2b942"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_c35e371e-8f0a-447f-9b5a-9aa64c7b4896" width="644" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So this Source appears just like a normal Data Source where you can then create new Dynamic Columns or Lookups against the already Dynamic Source.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_13c831a1-7444-4a76-8124-c5204d5bc0ed"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_b747f6ce-d4f6-46fc-9824-befd1be8c3dd" width="644" height="457" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can see from this that you could easily define a set of Data Sources in Data Sync Project Files and then simply attach them to new projects.&lt;/p&gt;  &lt;p&gt;This new feature is in Data Sync Release 3.0.560&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 20 Jun 2012 14:34:36 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/06/Importing-Currency-Rates-from-Avangate</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Importing Currency Rates from Avangate</title>
      <description>&lt;p&gt;If you use Avangate as your payment processing partner you may need to download their current currency rates so that you can present the same rate conversion to your customers on&amp;#160; your site.&lt;/p&gt;  &lt;p&gt;Avangate implement a simple XML based API where the following URL returns an XML Document containing the rates.&lt;/p&gt;  &lt;p&gt;&lt;a title="https://secure.avangate.com/content/exchange-xml.php?CURRENCY=USD" href="https://secure.avangate.com/content/exchange-xml.php?CURRENCY=USD"&gt;https://secure.avangate.com/content/exchange-xml.php?CURRENCY=USD&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;With Data Synchronsiation Studio you can implement a Synchronisation Import job to import this in about 2 minutes.&lt;/p&gt;  &lt;p&gt;Simply connect with the XML Provider and Specify the URL and Item XML XPath of &lt;strong&gt;//currency&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d421f1bd-ff3a-4fca-8152-82561627e5a1"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_0e0e76ac-d22e-4cad-a0e6-033a7c05e9a7" width="644" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Add 2 Columns &lt;strong&gt;csymbol&lt;/strong&gt; and &lt;strong&gt;crate&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f421d86d-731d-4182-a57b-30a87684d85d"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_66880480-ac34-4aa1-a80e-2e6d479e1b85" width="511" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1cfa52cb-2936-455a-88bc-de307029a982"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_5caf9c7a-ad17-47b1-9a58-f167a8dc669b" width="511" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And that is it preview the Data and setup the Synchronisation job to your Database.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6ba53590-636e-477a-949e-71becb474621"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_d7aa5679-3123-450b-b1fd-290a9fbbcf8b" width="350" height="888" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 13 Jun 2012 14:16:00 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/06/Using-Automation-to-Send-Email</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using Automation to Send Email</title>
      <description>&lt;p&gt;With the new Automation feature of Data Synchronisation Studio it is now incredibly easy to write custom actions in the pipeline. For example suppose you wanted an email sent whenever a synchronisation has run and you want to know the changed counts.&lt;/p&gt;
&lt;p&gt;You simply implement the End method of the Automation Class and send an SMTP Email message like this.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; End(ProjectAutomationResult result)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; ( result.Success &amp;amp;&amp;amp; result.HasChanges ) 
        {            
            var smtpClient = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Net.Mail.SmtpClient(&lt;span class="str"&gt;"smtp.gmail.com"&lt;/span&gt;, 587);
            
            smtpClient.EnableSsl = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            smtpClient.Credentials = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Net.NetworkCredential(&lt;span class="str"&gt;"username"&lt;/span&gt;, &lt;span class="str"&gt;"password"&lt;/span&gt;);
            
            &lt;span class="rem"&gt;//Message to Send&lt;/span&gt;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; message = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"New {0}, Updated {1}, Deleted {2}"&lt;/span&gt;, 
                result.CompareResult.New.Count, 
                result.CompareResult.Updated.Count, 
                result.CompareResult.Deleted.Count);
        
            &lt;span class="rem"&gt;//Send Message&lt;/span&gt;
            smtpClient.Send(&lt;span class="str"&gt;"from@simego.com"&lt;/span&gt;, &lt;span class="str"&gt;"to@simego.com"&lt;/span&gt;, &lt;span class="str"&gt;"Synchronisation Result"&lt;/span&gt;, message);                                                    
        }
    }&lt;/pre&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 13 Jun 2012 11:45:10 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/06/Data-Synchronisation-Studio---New-Features</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio : New Features</title>
      <description>&lt;p&gt;With the release of Data Sync 3.0.550 we have a few new features to tell you about.&lt;/p&gt;
&lt;h3&gt;Integrated Screen Sharing&lt;/h3&gt;
&lt;p&gt;Form the Help Menu you can now initiate a Screen Sharing session with us to help you with issues that you may have. Please contact support first if you have a problem and we will see how we can help.&lt;/p&gt;
&lt;h3&gt;Project Automation&lt;/h3&gt;
&lt;p&gt;With Data Sync you can now hook the internal process to handle certain events as they happen. This allows you to call another Data Sync project of example or report the actual individual data changes.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Start()
    {
        
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BeforeCompare(ProjectAutomationLoadResult loadResult)
    {

    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BeforeSynchronisation(ProjectAutomationCompareResult compareResult)
    {
            
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; End(ProjectAutomationResult result)
    {
        
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Error(ProjectAutomationException e)
    {
        
    }&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Custom Assemblies&lt;/h3&gt;
&lt;p&gt;If you want to use external assemblies that are not part of Data Sync with Dynamic Columns you can now tell Data Sync to load these Assemblies from the Project Properties menu.&lt;/p&gt;
&lt;h3&gt;Start a Synchronisation from Code&lt;/h3&gt;
&lt;p&gt;You can now easily start a Synchronisation Operation directly from your code like this.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;var op = &lt;span class="kwrd"&gt;new&lt;/span&gt; SynchronisationOperation();                
op.Execute(&lt;span class="str"&gt;@"C:\Temp\CSV.dsprj"&lt;/span&gt;);&lt;/pre&gt;
&lt;p&gt;If your sync is 2-way then you need a little more&lt;/p&gt;
&lt;pre class="csharpcode"&gt;var op = &lt;span class="kwrd"&gt;new&lt;/span&gt; SynchronisationOperation();                
op.Key = &lt;span class="str"&gt;"AAA"&lt;/span&gt;;
op.SolutionName = &lt;span class="str"&gt;"CSV"&lt;/span&gt;;
op.SolutionPath = &lt;span class="str"&gt;@"C:\Temp"&lt;/span&gt;);

op.Execute(&lt;span class="str"&gt;@"C:\Temp\CSV.dsprj"&lt;/span&gt;);&lt;/pre&gt;
&lt;p&gt;Then if you want to control logging you can provide your own implementation for IDataSourceLog&lt;/p&gt;
&lt;h3&gt;Load a Data Source from an existing Project&lt;/h3&gt;
&lt;p&gt;In dynamic columns you may need to load data from a remote source to build some kind of Lookup or other Transformation. Rather than accessing the underlying objects you can now easily load the data source from a pre-configured Data Sync Project file.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;var store = DataTableStore.LoadFrom(&lt;span class="str"&gt;@"C:\Temp\CSV.dsprj"&lt;/span&gt;);
        
&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var row &lt;span class="kwrd"&gt;in&lt;/span&gt; store.Rows) 
{
    var id = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)row[&lt;span class="str"&gt;"ID"&lt;/span&gt;];    
}&lt;/pre&gt;
&lt;p&gt;You can also create a Dictionary from this data source easily like this&lt;/p&gt;
&lt;pre class="csharpcode"&gt;var dict = store.ToDictionary&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;(&lt;span class="str"&gt;"ID"&lt;/span&gt;);&lt;/pre&gt;
&lt;h3&gt;Ouvvi&lt;/h3&gt;
&lt;p&gt;Ouvvi release 2.0.220 has also been updated to support these new Data Sync features.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 08 Jun 2012 11:34:30 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/05/Updating-Active-Directory-Manager-Attribute</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Updating Active Directory Manager Attribute</title>
      <description>&lt;p&gt;With Data Synchronisation Studio you can now update the Manager attribute with the AD Provider if you modify the Provider configuration slightly.&lt;/p&gt;
&lt;p&gt;By default we parse out the Manager field so that it&amp;rsquo;s more suitable for input to SharePoint or something. However you can now switch off this parsing to get to the raw AD attribute value.&lt;/p&gt;
&lt;p&gt;To update the manager you need to supply the full Distinguished name value of the AD Object you want to set which would be something like this below.&lt;/p&gt;
&lt;p&gt;CN=Sean Cleaver,CN=Users,DC=xxx,DC=xxx,DC=com&lt;/p&gt;
&lt;p&gt;Disable the &lt;strong&gt;TryParseValue&lt;/strong&gt; and &lt;strong&gt;ReadOnly&lt;/strong&gt; properties of the &lt;strong&gt;Manager&lt;/strong&gt; field in the Property Collection on the AD Provider.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_4430869d-8103-497c-bbd2-b37433127e64"&gt;&lt;img height="376" width="511" src="http://www.simego.com/Blog/Attachment/blog_20dfc22a-a89f-4826-b55e-787b04e136df" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here I created a Dynamic Column to return the Distinguished Name of the Manager to set against the AD Users.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a72a5fba-d555-425b-98de-222018c449d1"&gt;&lt;img height="400" width="622" src="http://www.simego.com/Blog/Attachment/blog_6f01db31-1564-491a-b058-94c62956ffc2" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now we just create a simple Schema Map mapping the X_Manager to Manager and using DSID as the Key column.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e26ea8a7-88a6-4c9b-a66a-0cf75464293e"&gt;&lt;img height="419" width="644" src="http://www.simego.com/Blog/Attachment/blog_29c11434-4984-4954-ae6d-516734f94fa8" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6920e974-991d-46f8-80d6-06640e7e7419"&gt;&lt;img height="137" width="579" src="http://www.simego.com/Blog/Attachment/blog_47b3674c-1797-4088-b1d0-4a065ad68f50" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now you just need to compare the data and synchronise the changes.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can download and use a fully featured version of Data Sync Studio for 15 Days to see how this AD solution works.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;Click here to go to the Downloads&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 10 May 2012 09:49:44 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/05/Create-an-RSS-Feed</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Create an RSS Feed</title>
      <description>&lt;p&gt;This post is an example of how you can use the Data Sync RSS Provider to create an Exchange Rate RSS feed. You can use a similar approach to create an RSS feed from virtually any kind of data.&lt;/p&gt;
&lt;p&gt;First we connect Data Source A to the FX Rate provider.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d9706395-d0fe-451d-bfc4-bca23810cded"&gt;&lt;img height="356" width="644" src="http://www.simego.com/Blog/Attachment/blog_a83fcd15-afe1-4237-a970-3a6a065a112f" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We want a couple of additional columns for our RSS File so we create them using Dynamic Columns.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1a1f415d-2b19-4163-abe3-c39b6799912f"&gt;&lt;img height="409" width="644" src="http://www.simego.com/Blog/Attachment/blog_73260a7c-9b57-4c65-950b-ed2ae7a2df59" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We then connect the Target Data source B to the RSS File provider, enter a name for the File and click OK.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_634f0f94-e007-4839-a18b-2f70409bcc1a"&gt;&lt;img height="356" width="644" src="http://www.simego.com/Blog/Attachment/blog_5ae51835-2661-49a1-8351-66c4e101089c" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We then create the Map between the FX Rates and the RSS File like this.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_bdfdaa0b-71c9-4b34-94fe-4719483f5475"&gt;&lt;img height="399" width="644" src="http://www.simego.com/Blog/Attachment/blog_4ecb3600-36fc-49bf-8b66-14a3cd9af42e" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Schema Map&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_489189e9-bbff-4d6d-b3b4-d2155b7f9312"&gt;&lt;img height="145" width="644" src="http://www.simego.com/Blog/Attachment/blog_538cb91b-27cc-489b-9074-1b0d93b3f5aa" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once you sync up the Data you will have a nice new RSS File that contains the current currency exchange rates from Yahoo.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_80769412-ba4d-4839-aa64-e3f228c58181"&gt;&lt;img height="772" width="528" src="http://www.simego.com/Blog/Attachment/blog_fd588491-98af-44a1-9f19-e832af66b19a" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 09 May 2012 16:10:03 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/05/Dynamics-CRM-2011-Import-Contacts-and-Accounts</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Dynamics CRM 2011 Import Contacts and Accounts</title>
      <description>&lt;p&gt;This (no code) post shows how to use Data Sync Studio and Lookup Columns to import Accounts and Contacts from SQL into Dynamics CRM and keep the relationship between Account and Contact.&lt;/p&gt;
&lt;p&gt;Our SQL Export Database consists of 2 tables &amp;ldquo;Account&amp;rdquo; and &amp;ldquo;Contact&amp;rdquo; these 2 tables are linked via a Foreign Key Contact.AccountID &amp;ndash;&amp;gt; Account.ID.&lt;/p&gt;
&lt;p&gt;Account SQL Table&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e370a745-ad33-4b6a-9a39-83c2beea1c1a"&gt;&lt;img height="163" width="283" src="http://www.simego.com/Blog/Attachment/blog_e5ea00c3-ffc2-4b3a-af7a-2a597f53246c" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Contact SQL Table&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_883679df-1698-4e46-91a5-1d121271af57"&gt;&lt;img height="316" width="644" src="http://www.simego.com/Blog/Attachment/blog_14d18284-c33f-40c3-8928-fdab4987f9ec" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dynamics CRM doesn&amp;rsquo;t work with Integer keys it uses Guids for the Primary Key. In many cases it may be impossible to change the source database to update each record with a Guids. We are using Data Synchronisation Studio which can manage the GUIDs without making any changes to your SQL Database or Dynamics CRM.&lt;/p&gt;
&lt;h3&gt;Step 1 - Import your Accounts from SQL&lt;/h3&gt;
&lt;p&gt;This is an easy Data Sync project where you simply import your accounts table into the Accounts entity mapping &lt;strong&gt;name&lt;/strong&gt; to &lt;strong&gt;name&lt;/strong&gt; and &lt;strong&gt;id&lt;/strong&gt; to &lt;strong&gt;accountnumber&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;Project in Data Synchronisation Studio&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_705382a2-2783-4e2d-b166-b101758b3a50"&gt;&lt;img height="399" width="644" src="http://www.simego.com/Blog/Attachment/blog_27e9e569-3615-4079-a74e-c23700a7cb8f" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Schema Map&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5caf9429-7c88-44d6-b6c7-b829f9ecd0fa"&gt;&lt;img height="147" width="644" src="http://www.simego.com/Blog/Attachment/blog_5c9c42b2-ea09-4ef2-9b49-5c3bd75329fb" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We now just sync the changes into the CRM Account entity.&lt;/p&gt;
&lt;h3&gt;Step 2 &amp;ndash; Import your Contacts&lt;/h3&gt;
&lt;p&gt;This step requires mapping the Contact table to the Contact entity in CRM mapping the ID value from the SQL Table to the &lt;strong&gt;ExternalUserIdentifier&lt;/strong&gt; column in CRM.&lt;/p&gt;
&lt;h4&gt;Project&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f48e36c1-9888-44c0-b1b5-3bc31b7b8dd0"&gt;&lt;img height="399" width="644" src="http://www.simego.com/Blog/Attachment/blog_a5b8882a-e30b-4683-9962-5227916d0794" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;SQL Schema Map&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6653e4c1-605c-4edd-b3ae-c4ab10a8ead7"&gt;&lt;img height="181" width="644" src="http://www.simego.com/Blog/Attachment/blog_dce93fff-9b6c-49f8-a234-6ed163290343" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We need one more trick to automatically associate the Contact with the imported Account record in Dynamics CRM. For this we define a Lookup between &lt;strong&gt;AccountID&lt;/strong&gt; and the &lt;strong&gt;accountnumber&lt;/strong&gt; in CRM.&lt;/p&gt;
&lt;p&gt;Select the &lt;strong&gt;AccountID&lt;/strong&gt; column in the Data source window and click the &amp;ldquo;Add Lookup&amp;rdquo; button.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a371fdbd-8b44-4419-8829-062c1e99d519"&gt;&lt;img height="247" width="269" src="http://www.simego.com/Blog/Attachment/blog_1d40b28e-f776-4009-bb43-858eccb3ea57" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next configure the Lookup Data source to connect back to the Dynamics CRM account entity.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f097b62b-e019-4284-9c1c-db236d16bd73"&gt;&lt;img height="356" width="644" src="http://www.simego.com/Blog/Attachment/blog_d1a6c09e-2d19-4291-bdc5-aa25b94804da" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next define the Lookup relationship by selecting &lt;strong&gt;accountnumber&lt;/strong&gt; in the Target Column field.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_54c788aa-2cbe-4878-ae36-63e523adc0dc"&gt;&lt;img height="484" width="393" src="http://www.simego.com/Blog/Attachment/blog_3c0535ee-a137-45c3-af16-c8956b921e7a" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now you can use all the columns from the related Account CRM entity in your project.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b4b00a6a-1b65-4d45-accf-58c4e3994d0b"&gt;&lt;img height="397" width="271" src="http://www.simego.com/Blog/Attachment/blog_8ecbabea-e149-4cd1-b9e0-74b9eef94dcb" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We now need to map &lt;strong&gt;Lookup1_accountid&lt;/strong&gt; to &lt;strong&gt;parentcustomerid&lt;/strong&gt; to create the relationship in Dynamics CRM.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f6e57f4e-506d-4c8e-841c-a4765b21ed79"&gt;&lt;img height="183" width="644" src="http://www.simego.com/Blog/Attachment/blog_85675fc8-a1c7-4175-8397-82d2e772c344" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and that's it you can sync up the data and see that your contacts are correctly related to your accounts.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_efeedf31-e425-4953-ba29-0c943f0b6560"&gt;&lt;img height="369" width="644" src="http://www.simego.com/Blog/Attachment/blog_925578bc-85f1-4854-8adf-6335ecef5c3c" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can download and use a fully featured version of Data Sync Studio for 15 Days to see how this SQL and CRM solution works&lt;span style="background-color: white;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;Click here to go to the Downloads&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 09 May 2012 15:39:05 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/04/Top-Ten-System-Migration-Traps</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Top Ten System Migration Traps</title>
      <description>&lt;p&gt;Considering the impact on delivery dates, testing, training, regulatory compliance and budget, it is always amazing how little focus there is on migration. There are many many traps to fall into when implementing a new system but migration is one stick that the underlying business will beat you with.&lt;/p&gt;
&lt;p&gt;1. Your project plan has one task that says &amp;lsquo;Migrate Data&amp;rsquo;.&lt;/p&gt;
&lt;p&gt;This is very easily done as either the team developing the new system or the vendor, can&amp;rsquo;t estimate the effort so it is just left as a single item. Don&amp;rsquo;t do it. Do some analysis that will at least give you a consideration of risk, effort and cost. Without these, managing the expectation of the business will be impossible.&lt;/p&gt;
&lt;p&gt;2. Not using an automation tool to migrate data.&lt;/p&gt;
&lt;p&gt;In the past I have conducted migrations based on SQL scripts, batch files, custom code etc. Quickly you realise that there are real benefits to automation. For example the new system has 5 new fields in a table. Rather than going back and redeveloping the migration code, you just point the tool at it and click update. 1 hour saved and no errors introduced, commit it to source control.&lt;/p&gt;
&lt;p&gt;3. Migrating old data that might better be placed in a reporting system.&lt;/p&gt;
&lt;p&gt;You should always consider that some data might be better placed in a reporting or document management solution. If you have a 'end of year' balance brought forward into a new system, do you need all of last years transactions or can you just lookup a report showing them?&lt;/p&gt;
&lt;p&gt;4. You let the vendor leave out migration or worse make it your entire problem.&lt;/p&gt;
&lt;p&gt;Migrating data is risky and can be expensive; your development team knows how their current system works better than anyone. Make sure you have some migration commitment from the vendor before agreeing the deliverables and costs.&lt;/p&gt;
&lt;p&gt;5. Assume that the migration with be&amp;nbsp;straightforward because the&amp;nbsp;old system and the new system do the same thing.&lt;/p&gt;
&lt;p&gt;The architectural requirements of systems mean that they may have completely differing internal structures and security models. These factors influence the effort of migration by factors of 10. Even simple upgrades between versions can be the same as moving to a different&amp;nbsp;vendor&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;6. Underestimate the effect of the new security model on migration.&lt;/p&gt;
&lt;p&gt;Security models are there to make sure that data is not viewed or manipulated by an unauthorised individual. During migrations it is often necessary to circumvent or assume the identity to extract and insert data. The developers of the current systems could make it extremely difficult for you to move data by using encryption, logic in the user screens and even more esoteric (smart at the time) tricks.&lt;/p&gt;
&lt;p&gt;7. Thinking you can sort out the data quality once it is in the new system.&lt;/p&gt;
&lt;p&gt;Often a driving reason the move to a new system is that it has better data quality control. For example, we often see telephone numbers saved as &amp;lsquo;TBC&amp;rsquo; in an old system and the new system will only allow number to be saved. A significant phase in migration is cleaning the underlying system so that clean data can be stored easily into the new system.&lt;/p&gt;
&lt;p&gt;8. Underestimating the involvement from the business to clean the data.&lt;/p&gt;
&lt;p&gt;As with 7, it is important to realise that users will have to assist in cleaning data. You can make this easier by creating lists of broken records and request rules for your automation tools to follow.&lt;/p&gt;
&lt;p&gt;9. Not realizing the impact of month/quarter/year ends on the migration.&lt;/p&gt;
&lt;p&gt;Many accounting systems require journaling and retrospective adjustment. Additionally, when picking a date for migration, make sure the business is available and not buried in month end, quarter end, tax year-end or year end.&lt;/p&gt;
&lt;p&gt;10. Not documenting the migration process so no one knows where the data came from!&lt;/p&gt;
&lt;p&gt;When migrating data it is often necessary to transform the data several times before it finally resides in the new system. Often a client will ask, why is the address used and not the billing address from the old system? You need to have a method of tracing the source to target and often you automation tools can help to generate documentation.&lt;/p&gt;
&lt;p&gt;At Simego we have been involved in assisting clients who have undertaken system migrations.&amp;nbsp;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 23 Apr 2012 14:31:26 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/04/Data-Synchronisation-Studio-2012</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio 2012</title>
      <description>&lt;p&gt;The latest version of Data Synchronisation Studio has gone live today, this release has had major re-work to allow loading of much larger data sets and to significantly reduce the memory usage of the application. Our reliance on the .NET DataTable object is now gone and we created a new object to store the data which uses fast disk based storage instead. This also allowed us to to improve Dynamic Columns so that DBNull.Value is now gone and is just NULL and you can now use Nullable&amp;lt;T&amp;gt; in you Dynamic Column properties.&lt;/p&gt;
&lt;p&gt;For example loading an comparing Data Sets of Millions of rows so now possible. For example below is a screenshot of Data Sync loading and displaying over 18 Million Rows from a CSV file.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8fcaea68-4d74-459d-abaf-550d6221aa8f"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_08ebe467-6e09-4997-97fb-4ac08f3b6f50" width="644" height="454" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We also now have a new Social Panel on the Start Page so that you can see our latest Blogs and Tweets right from within the application.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_054ba718-6805-4600-b41e-db4dd19699f5"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_a8725cef-4363-44fe-9688-b3a944438e6e" width="571" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This release includes our new Data Generator Provider which with Dynamic Columns allows for the generation of Sample Test Data or for you to connect to other data sources we haven&amp;rsquo;t created a provider for. With the Test Data Generator you can further transform your data such as creating Pivots etc.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 02 Apr 2012 10:15:01 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/03/Using-an-RSS-Feed-as-a-Data-Source</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using an RSS Feed as a Data Source</title>
      <description>&lt;p&gt;If you have an RSS Feed you want to use as a Data source with Data Synchronisation Studio it’s really easy to use the XML File provider to read this feed and present it as a Data Source.&lt;/p&gt;  &lt;p&gt;To configure the Data source you need to know the structure of the XML and a little XPath to define the Columns you want to return.&lt;/p&gt;  &lt;p&gt;First enter the URL to your Feed for example &lt;a title="http://www.simego.com/Blog/RSS" href="http://www.simego.com/Blog/RSS"&gt;http://www.simego.com/Blog/RSS&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_9dc5e1b1-12c0-48f9-b8fa-11d903c0db5f"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_284d3b42-76e5-45f4-9bcd-360c45cf43b3" width="644" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is a standard RSS feed so each item/row is within an item element in the Xml therefore we set the &lt;strong&gt;XmlItemElementXPath&lt;/strong&gt; to be &lt;strong&gt;//item&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_83838e1a-2e48-453e-992d-fb0f3075cc46"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_73bc2591-259c-4c13-a222-3f03e93d552d" width="644" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next we need to define the columns to return, as the RSS is quite simple we just create columns for Link, Author, Title, Description, Source and PublishDate that map directly to the Xml element name in the XPathExpression field.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_fd55f928-c2c0-4958-a90d-c0ccf5c0093d"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_e22feb6f-77e8-4625-9f88-e84231a24d40" width="511" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_dc06d712-74d1-46f6-ae45-1be787ad4025"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_7d61c78d-4786-4a98-9a33-3d9fa528c6ba" width="511" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2bb98741-c576-4b02-b484-b7368b3344e8"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_5ea48fbe-109f-4f7d-bea9-2aa701c65c41" width="511" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_aa3729bf-8f78-42b1-99bd-f8f4dcfdb942"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4a08f95a-a0d6-4e11-a264-f35e1f012a64" width="511" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_51d64f59-2609-4b02-9d16-c3db8fd8a188"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_1b9b808e-0057-45fb-a76a-46e73233e7b2" width="511" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d366459e-6ebc-44b0-ac6a-2c61d92beeff"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ce9a3e4a-6072-478d-a21b-4b1d23924b97" width="511" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And that’s it now you have an RSS feed as a Data source that you can use to synchronise into some other system.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d7a539ec-70a4-46ae-ab33-db647a0d66c4"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_1d78d521-4cbc-4a26-ac09-a2fc509ca9e5" width="644" height="343" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/DownloadManager/GetFile/1b1e02f7-2ab7-4bf3-b6c2-881026409381_RSSExample.dsprj"&gt;Download Example Data Sync Project&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 29 Mar 2012 11:06:11 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/03/Import-Csv-File</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Import Csv File</title>
      <description>&lt;h3&gt;Overview&lt;/h3&gt;
&lt;p&gt;This article describes how to import a file such as CSV into a new SQL Server Table with Data Synchronisation Studio.&lt;/p&gt;
&lt;p&gt;Data Synchronisation Studio can also import other files :-&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSV &lt;/li&gt;
&lt;li&gt;TAB &lt;/li&gt;
&lt;li&gt;XLS, XSLX (Microsoft Excel Files) &lt;/li&gt;
&lt;li&gt;MDB (Microsoft Access Database Files) &lt;/li&gt;
&lt;li&gt;SDF (SQL Server Compact) &lt;/li&gt;
&lt;li&gt;XML &lt;/li&gt;
&lt;li&gt;+ many more &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Step 1 - Open the CSV Data File&lt;/h4&gt;
&lt;p&gt;Choose the &lt;strong&gt;Connect Data Source&lt;/strong&gt; on Data Source A in Data Synchronisation Studio to open the connection dialog. Locate the CSV File provider and select it. Then enter the path to the CSV file in the Filename property.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5008acc2-bf0c-4dcf-ac09-339b87236966"&gt;&lt;img height="356" width="644" src="http://www.simego.com/Blog/Attachment/blog_9a417215-fed4-42ea-a44c-33f4b9bd392f" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once Data Sync loads the CSV File to discover the columns in your file you will be presented with the schema and a default schema map containing your columns.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ed567c5c-1f4a-4109-a069-1b80678913f2"&gt;&lt;img height="484" width="591" src="http://www.simego.com/Blog/Attachment/blog_48024e68-e960-41fc-8c2d-b2e3cff21f1b" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can now preview the data to check that it loads ok.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_46c0d34b-a7d7-4871-b477-cef5c44cf4d0"&gt;&lt;img height="458" width="644" src="http://www.simego.com/Blog/Attachment/blog_5cbb4896-48ca-41cc-9a92-e1f4ccdbe156" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now we need to adjust the schema to include the columns we want and setup the data types. We adjust the map like this below where we define the ID column as a Key and set the Data Type as an Integer.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8fb526a0-f62d-4be4-a669-7e4c739bc7ef"&gt;&lt;img height="293" width="644" src="http://www.simego.com/Blog/Attachment/blog_b5fa2cc6-194e-4220-bffe-6aa5ca072154" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Step 2 - Create SQL Database Table&lt;/h4&gt;
&lt;p&gt;We now use the &lt;strong&gt;Create SQL Table Wizard&lt;/strong&gt; from the &lt;strong&gt;Tools menu&lt;/strong&gt; to create a SQL Table to import the data. You can also connect to an existing SQL Table or SharePoint List etc.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_41500d5d-36ac-4886-bb3e-9e666cb312ef"&gt;&lt;img height="382" width="520" src="http://www.simego.com/Blog/Attachment/blog_5d363cbb-408a-4429-b8b4-9f0574b0ee34" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a5cf24a6-fcac-4202-b4ee-b41356e2c5ec"&gt;&lt;img height="382" width="520" src="http://www.simego.com/Blog/Attachment/blog_43cd19f5-4493-4182-9597-6127c4d17ca6" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_35939f16-65bd-4578-b7d1-0b5896f936e1"&gt;&lt;img height="382" width="520" src="http://www.simego.com/Blog/Attachment/blog_49a03a18-3c93-4e40-9131-5d22030dc0b8" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Step 3 - Import the Data&lt;/h4&gt;
&lt;p&gt;Now when the Table is created the Schema Map is mapped automatically ready to compare and load the data.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d4b57c6e-7d10-4210-afbe-478fba5c0a7b"&gt;&lt;img height="484" width="591" src="http://www.simego.com/Blog/Attachment/blog_dcdd91d3-56e8-4a65-b99b-390f1eb35fd0" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Selecting the Compare A-&amp;gt;B toolbar option compares the Data and creates a Change Set to apply to the Target. Simply click Synchronise and the data will be copied into the SQL Table. You can now save the project and quickly and easily run it again at any time.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_da5c22e0-d91c-4f49-a3be-31231f10743e"&gt;&lt;img height="484" width="591" src="http://www.simego.com/Blog/Attachment/blog_68da0fcb-0d9e-43c9-82a3-a39e26e4bd43" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can download and use a fully featured version of Data Sync Studio for 15 Days to see how this SQL CSV Import solution works&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;Click here to go to the Downloads&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 06 Mar 2012 14:37:37 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/03/Error-Starting-SQL-Admin</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Error Starting SQL Admin</title>
      <description>&lt;p&gt;This problem can occur when you "Refresh Server" and the process does not complete properly or you end task the application during some save operation of the core configuration files.&lt;/p&gt;
&lt;p&gt;The application stores a cache of your database list and the server list in XML documents under your profile&lt;/p&gt;
&lt;p&gt;On Windows XP&lt;/p&gt;
&lt;p&gt;C:\Documents and Settings\&amp;lt;ProfileName&amp;gt;\Local Settings\Application Data\Simego\SQLToolsExplorer&lt;/p&gt;
&lt;p&gt;On Windows Vista/7/2008&lt;/p&gt;
&lt;p&gt;C:\Users\&amp;lt;ProfileName&amp;gt;\AppData\Local\Simego\SQLToolsExplorer&lt;/p&gt;
&lt;p&gt;The quickest way to resolve the issue is to delete all the files in this folder however you can resolve it manually by checking that the XML Documents are not corrupt. Generally you will find that the file is missing an end tag.&lt;/p&gt;
&lt;table width="626" cellpadding="2" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="323" valign="top"&gt;&lt;strong&gt;Filename &lt;/strong&gt;&lt;/td&gt;
&lt;td width="301" valign="top"&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="323" valign="top"&gt;settings.xml&lt;/td&gt;
&lt;td width="301" valign="top"&gt;Records your server list with connection details          &lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="323" valign="top"&gt;{2BF0F4EA-1510-4143-82FB-968692943ECE}.xml&lt;/td&gt;
&lt;td width="301" valign="top"&gt;Application Settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="323" valign="top"&gt;{7FD68FA9-E96C-4607-A2EC-F380255CB1D9}.xml&lt;/td&gt;
&lt;td width="301" valign="top"&gt;Application Layout Settings          &lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="323" valign="top"&gt;Server Name.xml&lt;/td&gt;
&lt;td width="301" valign="top"&gt;Database List Cache for each server connection          &lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can safely delete any of the files however if you delete the settings.xml file you will need to delete all the server database cache files as well and then re-connect all your servers.&lt;/p&gt;
&lt;p&gt;TIP: If you connect to a Server on a Shared Host and your database list is large then you can edit the Database Cache List to only display your database(s).&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 06 Mar 2012 14:17:18 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/02/SharePoint-List-Data-Replication-with-Ouvvi</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SharePoint List Data Replication with Ouvvi</title>
      <description>&lt;p&gt;It&amp;rsquo;s possible to setup a near real-time bi-directional SharePoint List replicator between different SharePoint Sites/Farms etc with Ouvvi and Data Synchronisation Studio. Additionally there is nothing to install into your SharePoint environment so it can also work against hosted SharePoint or SharePoint which is locked down by your admins.&lt;/p&gt;
&lt;p&gt;Ouvvi 2.0 has a new Trigger for SharePoint Lists which fires whenever items in the list change therefore if you configure a bi-directional Data Sync project and load it into Ouvvi and assign the triggers to the project you can build a replication system.&lt;/p&gt;
&lt;p&gt;Here we define a new project in Ouvvi and create a single step which is the 2-Way Data Sync project. (You need to know how to build the 2-Way project with DSID replication columns).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_69abfbc6-9fca-4fa1-84f7-4316415c8d2e"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_94a5a2c9-3967-4d0e-9e91-d1b463a9c729" width="644" height="419" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We then define 2 triggers to query each list for changes, by default the triggers are executed every 30 seconds so you should expect the project to be kicked off within 30 seconds of a change (this is what I mean by near real-time).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f8232274-2840-4c17-8b62-5b80dec6d3ae"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_6607ec47-12fb-4fca-9b6f-6a6cecd99ff1" width="644" height="419" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You then assign the 2 triggers to the project so that whenever each one fires the project is started.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_26923bbf-3993-4547-b056-4d51444f079d"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_cfb765aa-3aaf-4af0-b59a-c222c56c699d" width="644" height="419" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To prevent the project running sync jobs in parallel we define the project as Single Instance this way each start request is queued and only one instance is ever running.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_460dfb63-3023-4660-8875-116d2a908492"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_0c008bc2-8846-4beb-8509-3604c9be72d0" width="493" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can also see in the logs when the sync runs how many items were changed.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_df9df94b-fcbf-4c18-9b53-963afb9b7991"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_2df8c1ec-58ba-4027-aeff-a3f8de234ba3" width="617" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And view real-time reports of the execution process.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b7de47da-fc0c-44cb-bf02-490ab7b64125"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_2b3d17c2-187b-47c8-8c3a-e66dcff12ab1" width="617" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 17 Feb 2012 15:10:41 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/02/Using-Data-Generator-to-get-Public-Holidays</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using Data Generator to get Public Holidays</title>
      <description>&lt;p&gt;You can find several public holiday feeds on the internet such as this one here&lt;/p&gt;
&lt;p&gt;&lt;a title="http://ical.mac.com/ical/UK32Holidays.ics" href="http://ical.mac.com/ical/UK32Holidays.ics"&gt;http://ical.mac.com/ical/UK32Holidays.ics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now with the Data Generator Data Provider in Data Synchronisation Studio 2012 and Dynamic Columns it&amp;rsquo;s easy to turn this into a Data Source.&lt;/p&gt;
&lt;p&gt;The first step is to connect Data Source A to the Data Generator.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8d376a25-d88e-481a-a636-3180a1c9156a"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_fa2a6e2b-814b-426e-b120-02be636708b5" width="644" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Data Generator simply returns a number between 1 and the number you set in the properties.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_68452d8a-b4a6-4bd2-b91e-cc2b332e8fd4"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ec093f7e-f4cb-4701-a781-a42aa7545be1" width="244" height="230" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All the magic happens in the Dynamic Column code where we override the Setup() method and load the Data from the holiday service into a List of Events. Then for each Row Data Sync calls BeginRow() and we simply return whether there are any more events and return the calendar data as properties of the Row.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt; Usings
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;
&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceRowOverride : Simego.DataSync.DynamicColumns.DataSourceRowInternal &lt;span class="rem"&gt;//Do Not Change This Line&lt;/span&gt;
{    
    &lt;span class="kwrd"&gt;private&lt;/span&gt; List&amp;lt;dynamic&amp;gt; Events = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;dynamic&amp;gt;();
        
    &lt;span class="kwrd"&gt;public&lt;/span&gt; DateTime StartDate { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; Events[ID-1].Date; } }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; DateTime EndDate { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; StartDate.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; TimeSpan(23, 59, 0)); } }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Title { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; Events[ID-1].Title; } }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; AllDayEvent { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;; } }
    
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; BeginRow()
    {        
        &lt;span class="kwrd"&gt;return&lt;/span&gt; ID &amp;lt;= Events.Count; &lt;span class="rem"&gt;// return false to remove row from results.&lt;/span&gt;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Setup()
    {
        var request = System.Net.HttpWebRequest.Create(&lt;span class="str"&gt;"http://ical.mac.com/ical/UK32Holidays.ics"&lt;/span&gt;);
                
        &lt;span class="kwrd"&gt;using&lt;/span&gt;(var reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamReader(request.GetResponse().GetResponseStream()))
        {            
            DateTime date = DateTime.MinValue;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; title = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; line = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            
            &lt;span class="kwrd"&gt;while&lt;/span&gt;((line = reader.ReadLine()) != &lt;span class="kwrd"&gt;null&lt;/span&gt;) 
            {                        
                &lt;span class="kwrd"&gt;if&lt;/span&gt; ( line.StartsWith(&lt;span class="str"&gt;"DTSTART"&lt;/span&gt;) )
                    date = DateTime.ParseExact(line.Substring(19), &lt;span class="str"&gt;"yyyyMMdd"&lt;/span&gt;, CultureInfo.CurrentCulture);
                
                &lt;span class="kwrd"&gt;if&lt;/span&gt; ( line.StartsWith(&lt;span class="str"&gt;"SUMMARY:"&lt;/span&gt;) )
                    title = line.Substring(8);
                
                &lt;span class="kwrd"&gt;if&lt;/span&gt; ( line.StartsWith(&lt;span class="str"&gt;"END:VEVENT"&lt;/span&gt;) ) 
                    Events.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; { Date = date, Title = title });
            }
            
            &lt;span class="rem"&gt;//Order the Events by Date&lt;/span&gt;
            Events = Events.OrderBy(p =&amp;gt; p.Date).ToList();
        }
    }
}&lt;/pre&gt;
&lt;p&gt;And there you have it, Calendar entries from a Public Calendar feed that you can import right into a SharePoint List.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_50285aca-55fb-4c74-ad7e-fecf0b6bc54c"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_77fc916b-12f8-4033-841b-d403ec358594" width="644" height="334" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/DownloadManager/GetFile/3b3a4b5c-abad-42b1-a7a7-4fc70a2b9142_CalendarEvents.dsprj"&gt;Download Sample Project File&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 14 Feb 2012 16:43:03 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/02/Test-Data-Generator-Download-for-Data-Sync</link>
      <author>info@simego.com (Tremayne Christ)</author>
      <title>Test Data Generator Download for Data Sync</title>
      <description>&lt;p&gt;Need hundreds, thousands, millions, hundreds of millions?! of rows of test data? Well you probably didn&amp;rsquo;t think to use Data Synchronisation Studio. Why would you, it&amp;rsquo;s a synchronising tool right?&lt;/p&gt;
&lt;p&gt;Well, yes, this is true. However, DS 2012 now includes a new provider that can generate as many rows as you need. Utilising this, we created a test data generator using dynamic columns. It can create you an entire user base in seconds!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;You can download and use a fully featured version of Data Sync Studio for 15 Days to see how this solution works and generate some data!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;Click here to go to the Downloads&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you have used Data Synchronisation Studio before, you will be familiar with data source sides A and B. You may also be familiar with the term Dynamic Columns.&lt;/p&gt;
&lt;p&gt;This test generator works by creating a faux data source on side A using Dynamic Columns. You can then use this to create faux data for &lt;a href="/Solutions/CRM-Integration"&gt;Dynamics CRM&lt;/a&gt;, SQL, &lt;a href="/Solutions/SharePoint-Integration"&gt;SharePoint&lt;/a&gt; etc. to give yourself an instant user base for testing.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f2581752-6924-43fd-b35d-a78bdbe5a9c2"&gt;&lt;img height="686" width="1024" src="http://www.simego.com/Blog/Attachment/blog_b83eff94-5aac-419c-b83d-d719841ed643" alt="TestData" border="0" title="TestData" style="background-image: none; margin: 30px 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do you have Data Synchronisation Studio 2012 (v3.0.500) or above?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes I do, &lt;a href="http://www.simego.com/DownloadManager/GetFile/0b4bfd78-ae6c-4958-8b72-ba5feb5734b6_Test%20Data%20Generator.dsprj"&gt;&lt;strong&gt;Download Test Data Generator Project&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;No, I need to get the 15 day trial &lt;strong&gt;&lt;a href="/Install/Data-Synchronisation-Studio"&gt;Download the Latest Version of Data Synchronisation Studio&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generates random name combinations &lt;/li&gt;
&lt;li&gt;Generates dates of births &lt;/li&gt;
&lt;li&gt;Chooses from five different countries &lt;/li&gt;
&lt;li&gt;Chooses a region based on the country &lt;/li&gt;
&lt;li&gt;Chooses a city based on the region &lt;/li&gt;
&lt;li&gt;Generates random road names &lt;/li&gt;
&lt;li&gt;Creates phone numbers based on the country&amp;rsquo;s number format &lt;/li&gt;
&lt;li&gt;Creates user identification codes &lt;/li&gt;
&lt;li&gt;Generates email address based on the users names &lt;/li&gt;
&lt;li&gt;Creates a password hash &lt;/li&gt;
&lt;li&gt;Generates &amp;lsquo;Date Joined&amp;rsquo; &amp;lsquo;Previous Login&amp;rsquo; &amp;amp; &amp;lsquo;Last Login&amp;rsquo; &lt;/li&gt;
&lt;li&gt;Randomly selects a security question and answer &lt;/li&gt;
&lt;li&gt;Creates a security PIN &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Columns&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ID (Int32) &lt;/li&gt;
&lt;li&gt;UID (Guid) &lt;/li&gt;
&lt;li&gt;UserCode (String) &lt;/li&gt;
&lt;li&gt;FirstName (String) &lt;/li&gt;
&lt;li&gt;MiddleInitial (String) &lt;/li&gt;
&lt;li&gt;LastName (String) &lt;/li&gt;
&lt;li&gt;DateOfBirth (DateTime) &lt;/li&gt;
&lt;li&gt;HouseNumberName (String) &lt;/li&gt;
&lt;li&gt;AddressLine1 (String) &lt;/li&gt;
&lt;li&gt;AddressLine2 (String) &lt;/li&gt;
&lt;li&gt;TownCity (String) &lt;/li&gt;
&lt;li&gt;Region (String) &lt;/li&gt;
&lt;li&gt;PostalCode (String) &lt;/li&gt;
&lt;li&gt;Country (String) &lt;/li&gt;
&lt;li&gt;PhoneNumber (String) &lt;/li&gt;
&lt;li&gt;MobileNumber (String) &lt;/li&gt;
&lt;li&gt;WorkNumber (String) &lt;/li&gt;
&lt;li&gt;Email (String) &lt;/li&gt;
&lt;li&gt;PasswordHash (String) &lt;/li&gt;
&lt;li&gt;Role (Int32) &lt;/li&gt;
&lt;li&gt;DateJoined (DateTime) &lt;/li&gt;
&lt;li&gt;PreviousLogin (DateTIme) &lt;/li&gt;
&lt;li&gt;LastLogin (DateTime) &lt;/li&gt;
&lt;li&gt;AccountStatus (Int32) &lt;/li&gt;
&lt;li&gt;SecurityQuestion (Int32) &lt;/li&gt;
&lt;li&gt;SecurityAnswer (String) &lt;/li&gt;
&lt;li&gt;SecurityPin (Int32) &lt;/li&gt;
&lt;li&gt;NewsletterSubscription (Boolean) &lt;/li&gt;
&lt;li&gt;AgreedToTerms (Boolean) &lt;/li&gt;
&lt;li&gt;Other (String) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How do I use this generator?&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make sure you have the correct version of Data Synchronisation Studio, as this project will only be supported by version 3.0.500 and above.      &lt;br /&gt;&lt;br /&gt;&lt;img title="DS_About" alt="DS_About" height="348" width="486" src="http://www.simego.com/Home/Attachment/DS_About.jpg" style="margin-bottom: 30px;" /&gt;&lt;/li&gt;
&lt;li&gt;Download the project, using the link above &lt;/li&gt;
&lt;li&gt;Open the project, making sure you are connected to the internet. This is so the project can download the names database (only happens once)      &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0bff1adc-4b78-47fd-ae29-92c61db87166"&gt;&lt;img height="418" width="576" src="http://www.simego.com/Blog/Attachment/blog_2ae1ae68-4bc6-4cdb-98c9-a8114a78edbe" alt="ProjectOpen" border="0" title="ProjectOpen" style="background-image: none; margin: 0px 0px 30px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Set the row count to the amount of rows you would like to create and set the seed to zero for completely random data.      &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0ee47890-97e8-4004-bcd6-66b5730a47c7"&gt;&lt;img height="479" width="535" src="http://www.simego.com/Blog/Attachment/blog_2235bb67-c76e-4511-9d05-a6fa5d4f499b" alt="RowCount" border="0" title="RowCount" style="background-image: none; margin: 0px 0px 30px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Click the &amp;lsquo;Preview A&amp;rsquo; button to check the data (optional)      &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_03fcc9aa-63b8-468f-9435-17d926a6286d"&gt;&lt;img height="119" width="580" src="http://www.simego.com/Blog/Attachment/blog_1cbb78f9-2905-42c1-a431-3268f7a4ddd4" alt="PreviewA" border="0" title="PreviewA" style="background-image: none; margin: 0px 0px 30px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;br /&gt;This is optional, because it can take a few minutes to generate the rows. This depends on the machine spec and the row count chosen. Below is a basic guide to timings.       &lt;br /&gt;&lt;br /&gt;10,000 = 1.5s       &lt;br /&gt;100,000 = 12s       &lt;br /&gt;1,000,000 = 2m &lt;/li&gt;
&lt;li&gt;Now that you have setup the generator to your liking, we can go about inserting the data into a usable SQL table. You can choose other data sources, but for this post we&amp;rsquo;ll use SQL.      &lt;br /&gt;Go to the tools menu and select create SQL Table. &lt;/li&gt;
&lt;li&gt;Follow the instructions of the SQL Table Wizard &lt;/li&gt;
&lt;li&gt;Once you&amp;rsquo;ve created your new SQL Table, Click &amp;lsquo;Compare A-&amp;gt;B&amp;rsquo;      &lt;br /&gt;This will compare the generated data with your new table. Obviously your new table is empty, so once the sync has completed you will see a list of items to add to SQL.       &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_194027d0-15a7-41c7-9298-1fe8fc66b9f1"&gt;&lt;img height="418" width="576" src="http://www.simego.com/Blog/Attachment/blog_064f35ad-3eb6-4aff-b6f7-865ef40098f7" alt="Compare" border="0" title="Compare" style="background-image: none; margin: 0px 0px 30px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Click the &amp;lsquo;Synchronise&amp;rsquo; button and then click &amp;lsquo;Start&amp;rsquo;      &lt;br /&gt;This will fill your SQL Table with all of your new generated data. You now have a test database to work with! &lt;/li&gt;
&lt;/ol&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 14 Feb 2012 16:20:10 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/01/Connecting-to-Firebird-Database-via-ODBC</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Connecting to Firebird Database via ODBC</title>
      <description>&lt;p&gt;You can use Data Synchronisation Studio with Firebird via the ODBC connection provider and the Firebird ODBC Driver.&lt;/p&gt;  &lt;p&gt;Ensure you have the Firebird/InterBase ODBC Driver installed and if you have Data Sync 64 bit edition you also have the 64 bit version of the ODBC Driver.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a836d86c-c566-443c-907d-47806fe029cf"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_90703725-931f-4bc9-8de6-8146e56bd255" width="644" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Select the ODBC Driver and enter the connection string to Firebird like this.&lt;/p&gt;  &lt;p&gt;DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=C:\Temp\EMPLOYEE.FDB&lt;/p&gt;  &lt;p&gt;Then select the Object in the database or switch to the SQL Tab and enter your own SQL.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_713bcdfa-d3c9-4572-9ec4-90c7f255ba0c"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_b279a98b-5bf4-43f4-8502-e3bd5eaa0098" width="504" height="504" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once the Schema Loads you can start defining your Project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_c2f2e761-664f-46c3-899b-284ff950f131"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_0310a01b-ce36-46e2-b924-e33ad16f0f6a" width="404" height="456" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Or just preview the Data to check the connection.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_7b39a592-e586-4300-99d1-6e5a64b09c82"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_97f7748e-2ee8-402b-94dc-edcde79fe043" width="593" height="446" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 19 Jan 2012 12:28:32 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2012/01/Data-Sync-Studio-and-Lookup-Columns</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Studio and Lookup Columns</title>
      <description>&lt;p&gt;Data Synchronisation Studio has a new feature to make it unbelievably easy to link data by way of Lookup Columns. A column can now link to any other data via a special Lookup column, you could do this with Dynamic Columns before but now it’s just click…click…click.&lt;/p&gt;  &lt;p&gt;You can connect SQL Data to SharePoint data for example or Join SQL Data across servers like SQL and Oracle or whatever you get the idea anything to anything.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;To get started connect your data source as before and select the column that represents the Link or Join&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d7292043-166e-4ed9-8f8f-cdd996d05bf2"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_5ef1a1c2-f620-4aad-9630-8291f9e3aaf8" width="350" height="381" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then click the Icon in the Data source Toolbar to Add a Lookup&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0d157ff4-e798-4f81-9a0d-870f188fc584"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_05b1c292-1754-4eee-9494-78b03afb4410" width="332" height="290" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once you configure the connection details you need to confirm the Lookup Join details which is essentially the Data Type and Column.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_149a6cb9-2ebc-47ed-aa54-80012202d857"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ca93d6fe-ab2c-4294-9dce-74e80f725ee8" width="413" height="509" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now once the Lookup loads you will see all the columns from the related Data source listed and you can add any of them to the Schema Map as if they were already in the source.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_4b75127d-6bed-48c1-83e2-9bd67b4eb0cf"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_691a687e-e2ef-478c-b31a-0b068dbe4357" width="405" height="587" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;That’s it really easy lookup columns in Data Synchronisation Studio, this feature is in release 3.0.444&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 18 Jan 2012 16:56:50 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/12/Set-Exchange-2010-Folder-Permissions-via-Powershell</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Set Exchange 2010 Folder Permissions via Powershell</title>
      <description>&lt;p&gt;For the Data Sync Exchange Providers to read Calendars,Contacts or Tasks from other mailboxes you will need to add Reviewer permission to the mailboxes for the user that is used in Data Sync. Fortunately you can do this with a PowerShell script like this.&lt;/p&gt;  &lt;p&gt;Add-MailboxFolderPermission -Identity ayla@contoso.com:\Contacts -User Ed@contoso.com -AccessRights Reviewer&lt;/p&gt;  &lt;p&gt;-Identity is mailbox and folder your targeting and –User is the user to grant access.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 08 Dec 2011 15:41:45 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/12/Synchronise-Documents-between-SharePoint-2007-and-2010</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Synchronise Documents between SharePoint 2007 and 2010</title>
      <description>&lt;p&gt;This blog article describes how you might synchronise Documents between SharePoint 2007 and SharePoint 2010 with Data Synchronisation Studio including custom Metadata columns whilst preserving the Created and Modified Timestamps and user accounts.&lt;/p&gt;
&lt;p&gt;Here we have a Document Library in SharePoint 2007 with a few Documents and a Folder where going to Synchronise this to a new SharePoint 2010 document library.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_071bc4a0-cf8c-4997-9a88-9e0a8286ec08"&gt;&lt;img height="197" width="644" src="http://www.simego.com/Blog/Attachment/blog_6bb224f2-0aca-47d9-8bac-66c7a615a546" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the Empty Document Library in SharePoint 2010 which will be the Target&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8ea1c5c6-ca6b-44dd-8a81-cee8a49ac990"&gt;&lt;img height="180" width="644" src="http://www.simego.com/Blog/Attachment/blog_4488b18d-7580-46fe-a401-1ffaa266b01c" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To define the project in Data Synchronisation Studio we need to use the SharePoint provider for SharePoint 2007 and the new SharePoint Client API provider for SharePoint 2010.&lt;/p&gt;
&lt;p&gt;Connect Data Source A to the SharePoint Provider&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d417d7d2-7381-4b29-8995-fc011299773f"&gt;&lt;img height="356" width="644" src="http://www.simego.com/Blog/Attachment/blog_347865c1-611a-45d3-bc81-4b4278598580" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Connect Data Source B to the SharePoint 2010 Client API Provider&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_626fba4a-81ce-444c-9b79-c5582266b381"&gt;&lt;img height="356" width="644" src="http://www.simego.com/Blog/Attachment/blog_453cde81-27c1-4944-aae7-a0530003d898" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Configure the Schema Map like this and add any other meta data columns you also wish to synchronise.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6cb83ed9-de95-45f1-a8ec-7ae73e9f4f63"&gt;&lt;img height="244" width="612" src="http://www.simego.com/Blog/Attachment/blog_e88e0c10-b094-434d-b737-f83c43c793b4" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ensure that the Document Library Update Behaviour is set for &lt;strong&gt;FileAndMetaData&lt;/strong&gt; on each side to that the Documents are uploaded.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5c6fa7f2-891c-40b9-87c0-446e8160553c"&gt;&lt;img height="149" width="328" src="http://www.simego.com/Blog/Attachment/blog_527f1c21-b5a6-4404-979e-20c721449315" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run a Compare A-&amp;gt;B and Synchronise the Documents&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d368ebba-ce23-4a55-a552-08597c7cd586"&gt;&lt;img height="484" width="558" src="http://www.simego.com/Blog/Attachment/blog_42cccca0-0024-4ee7-8440-4120cc7aa6b7" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And now the documents have been synchronised including the Created/Modified Timestamps and User accounts.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_dc7f7128-1f62-4269-b0dc-640a4da3f433"&gt;&lt;img height="207" width="644" src="http://www.simego.com/Blog/Attachment/blog_25f5a1c1-0a7d-4542-8f70-23534b5dd98e" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 02 Dec 2011 13:17:12 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/11/Data-Synchronisation-Studio-Connection-Dialog</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio Connection Dialog</title>
      <description>&lt;p&gt;As the number of Providers has increased that Data Synchronisation Studio now supports it was getting increasingly harder to locate the provider in the list. Therefore we have now re-worked the Connection Dialog into groups and allowed you to select your own Favourites which are easy to find under the Favourite Tab.&lt;/p&gt;  &lt;p&gt;This update is in release 3.0.434&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a3d9ab8c-a66e-4481-a20b-6142b8310f2c"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_64eaee11-fba5-4e8e-8591-5a3f8ea564c6" width="644" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 30 Nov 2011 17:33:29 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/11/Sync-Active-Directory-Group-Members-to-SharePoint-Security-Group</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Sync Active Directory Group Members to SharePoint Security Group</title>
      <description>&lt;p&gt;We have created a new Data Synchronisation Studio Provider that allows you to synchronise the Members in a SharePoint Security Group. You may want to use this to keep the Members in sync with Members in an Active Directory Group.&lt;/p&gt;
&lt;p&gt;This new Provider is in release 3.0.432 of Data Synchronisation Studio.&lt;/p&gt;
&lt;h2&gt;Example&lt;/h2&gt;
&lt;p&gt;Synchronise Members from AD Group to SharePoint Group&lt;/p&gt;
&lt;h3&gt;Connect Data Source A to Active Directory&lt;/h3&gt;
&lt;p&gt;In this example we use a LDAP Filter to return only those users of a specific AD group, for example&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: x-small;" size="2"&gt;(&amp;amp;(objectClass=User)(memberOf=CN=SharePoint Team Users,CN=Users,DC=corp,DC=litware,DC=inc))&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_27dfafc0-86bb-4e3d-960e-5d586c7ab512"&gt;&lt;img height="448" width="635" src="http://www.simego.com/Blog/Attachment/blog_dcbe52aa-ff52-4066-b6bb-65b3981e65e8" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Connect Data Source B to the &lt;strong&gt;Microsoft SharePoint Security Groups&lt;/strong&gt; provider&lt;/h3&gt;
&lt;p&gt;Choose the SharePoint Group to synchronise from the dropdown.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e959f290-4e98-46a8-926f-82df1acf2501"&gt;&lt;img height="448" width="635" src="http://www.simego.com/Blog/Attachment/blog_9fcaead1-b562-46b9-ba69-6709add68f50" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adjust the schema map like this so that the AD &lt;strong&gt;Account Name&lt;/strong&gt; is mapped to &lt;strong&gt;Login name&lt;/strong&gt; and &lt;strong&gt;Display Name&lt;/strong&gt; is mapped to &lt;strong&gt;Name&lt;/strong&gt;. Account Name should be the Key Column.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_bfc5602e-36de-45e4-abe5-05974034c928"&gt;&lt;img height="208" width="599" src="http://www.simego.com/Blog/Attachment/blog_d3c93b5f-1ba3-4453-9134-c5ba8ddc95dd" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Your completed project will look like this.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2830a7a2-e2bf-498b-a7ad-8a63470b7dc4"&gt;&lt;img height="401" width="644" src="http://www.simego.com/Blog/Attachment/blog_a5c8524b-8b93-4a8c-9239-ff8d3ca53daa" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Running a Compare A to B shows the differences and you can now synchronise the member lists.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5d18038b-1e8f-47d5-a89a-772477a725ad"&gt;&lt;img height="401" width="644" src="http://www.simego.com/Blog/Attachment/blog_dffa4833-ad1d-42b9-8126-ad7d1b31a75c" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And now after synchronisation in SharePoint the Group Members is populated.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_af741f7a-4248-4bab-a95e-44558d5b9045"&gt;&lt;img height="459" width="644" src="http://www.simego.com/Blog/Attachment/blog_f65324d0-2637-4bc9-b15e-b798a65ae90e" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now that the users have been correctly added to SharePoint you can also setup a standard SharePoint List sync with the User Information List to populate other meta data from AD into SharePoint.&lt;/p&gt;
&lt;p&gt;You can download and use a fully featured version of Data Sync Studio for 15 Days to see how this AD solution works.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;Click here to go to the Downloads&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 29 Nov 2011 16:20:47 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/11/Ouvvi-Azure-Blob-Upload</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Ouvvi Azure Blob Upload</title>
      <description>&lt;p&gt;Now with Ouvvi you can upload and download files into Azure Blob Storage, this is especially useful if you need to backup some files off site such as Database Backup images as part of your automated daily system processes.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_91bcde62-cdd3-437c-a182-9ae139aa9cf4"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_1b820a94-dced-45ee-977f-b6a7c98b6504" width="1024" height="601" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 15 Nov 2011 11:57:02 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/11/Ouvvi-Reporting-Features</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Ouvvi Reporting Features</title>
      <description>&lt;p&gt;Here&amp;rsquo;s a screenshot of the new Reporting Views were creating for Ouvvi. The view shows Tasks running in Ouvvi, how long they took and their status.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8d28f1ab-c1d8-4f4c-bb24-265f0f2fca45"&gt;&lt;img height="772" width="787" src="http://www.simego.com/Blog/Attachment/blog_d5ef4433-d7b9-4c07-a736-2a49234f82d2" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_519dfd8c-6552-4927-b8ee-0b7df2c42212"&gt;&lt;img height="772" width="787" src="http://www.simego.com/Blog/Attachment/blog_66031b8f-34f5-4c15-89e3-91f226186e2e" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 11 Nov 2011 15:53:43 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/11/Ouvvi-Refresh</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Ouvvi Refresh</title>
      <description>&lt;p&gt;Were working on a refresh of Ouvvi and creating better integration between Data Sync and Ouvvi so that eventually they will become one product together.&lt;/p&gt;  &lt;p&gt;The UI has been refreshed with a more modern look and feel.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0c944fea-c34d-4a10-a81b-d3be5127f48a"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_fa0ee935-7774-49ac-8f95-df466b9d02b3" width="644" height="455" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e2c1092a-8042-4be6-b820-dd80f355f30c"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_585f9676-17c7-4ce9-8ef0-2be24e1c9d67" width="644" height="455" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_919856c9-1e70-4e55-9771-4359aea86b32"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_29c04cda-f63f-410d-a98a-33a9d1c5b5f5" width="644" height="455" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Opening Data Sync Projects from Ouvvi now integrate with Data Sync and can simply be saved directly back to the Ouvvi Step without having to re-Import.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6c6d5b18-4b56-4b71-912b-1f0e9b46756c"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_80b95c8c-4cb7-48b1-8db4-c57faa64242c" width="500" height="229" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Changes to Ouvvi Include&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;View Queue and Queue Failure Tables&lt;/li&gt;    &lt;li&gt;Re-Submit a Queue Failure back to the processing Queue&lt;/li&gt;    &lt;li&gt;Stop/Abort a Running Instance&lt;/li&gt;    &lt;li&gt;Aborting a Running Instance now injects a ThreadAbortException&lt;/li&gt;    &lt;li&gt;Queue Peek support to prevent multiple instances of the Same Project from the UI&lt;/li&gt;    &lt;li&gt;New REST URL’s to remotely start a Project i.e. &lt;a href="http://localhost:4000/Project/Start/10"&gt;http://localhost:4000/Project/Start/10&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Simple Step re-ordering&lt;/li&gt;    &lt;li&gt;Change the Order of Projects on the Project View&lt;/li&gt;    &lt;li&gt;Control the Re-try count per Step&lt;/li&gt;    &lt;li&gt;Control the Failure Mode per Step&lt;/li&gt;    &lt;li&gt;Enable/Disable Steps&lt;/li&gt;    &lt;li&gt;Import/Export Project definitions&lt;/li&gt;    &lt;li&gt;Synchronise Running Threads back to main Project&lt;/li&gt;    &lt;li&gt;Step Handler for SQL Batch&lt;/li&gt;    &lt;li&gt;Support for OleDb, SQLClient and ODBC Data sources in SQL Commands&lt;/li&gt;    &lt;li&gt;Custom Step Handlers are loaded in the Database&lt;/li&gt;    &lt;li&gt;Updated Log Views&lt;/li&gt;    &lt;li&gt;Cross browser support&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Were also working on new features as we get ready for Ouvvi 2.0&lt;/p&gt;  &lt;p&gt;Were creating report views so you can see statistics about processes running in Ouvvi. Were also working on a solution which will submit log data to the “Ouvvi-Cloud” and allow us to create iPhone/Web Apps so that you can view the status of your running system from outside of your corporate network. (Handy for Remote Support)&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 08 Nov 2011 10:04:37 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/11/Active-Directory-Computers</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Active Directory Computers</title>
      <description>&lt;p&gt;Using the Active Directory Users provider it is possible to return the computer information stored within your Active Directory.&lt;/p&gt;  &lt;p&gt;To do this you need to adjust the LDAPFilter to&lt;/p&gt;  &lt;p&gt;(&amp;amp;(objectClass=Computer))&lt;/p&gt;  &lt;p&gt;And remove all the auto-generated Properties and add the following list :-&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;objectguid (DSID)&lt;/li&gt;    &lt;li&gt;adspath (AD Path)&lt;/li&gt;    &lt;li&gt;name (Name)&lt;/li&gt;    &lt;li&gt;operatingSystem (OperatingSystem)&lt;/li&gt;    &lt;li&gt;operatingSystemVersion (OperatingSystemVersion)&lt;/li&gt;    &lt;li&gt;operatingSystemServicePack (ServicePack)&lt;/li&gt;    &lt;li&gt;description (Description)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Once this is done refresh the Schema on your Data Source and Preview the data like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_66cd4dab-4c43-42fd-b149-fb0f327dd6d2"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_260e0081-17b3-4514-9776-399bf642323e" width="644" height="458" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 01 Nov 2011 16:41:10 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/08/Data-Sync-Ignore-Flag-Change</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Ignore Flag Change</title>
      <description>&lt;p&gt;In the latest build 3.0.414 we have made a change to the behaviour of the "&lt;strong&gt;Ignore&lt;/strong&gt;" flag on the schema map. Previously this flag just excluded the column from the comparison routine and therefore the value was never passed to the update routine.&lt;/p&gt;  &lt;p&gt;However now by setting this flag to true the value is not part of the comparison but if any other columns trigger an update then these fields marked "&lt;strong&gt;Ignore=True&lt;/strong&gt;" are also passed to the update routine.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_876f21cc-89de-47b4-b003-81c7d6da0657"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ff2c086c-359f-4f05-b03f-308884662f90" width="640" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d6a463f4-fa89-4553-950e-ecfcc9cddb70"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_db84370d-cd4b-4b3d-8c92-39de11442c28" width="599" height="211" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So in this example we have set the columns &lt;strong&gt;UnitsInStock&lt;/strong&gt;, &lt;strong&gt;UnitsOnOrder&lt;/strong&gt; and &lt;strong&gt;ReorderLevel&lt;/strong&gt; to Ignore=True. When we modify the &lt;strong&gt;ProductName&lt;/strong&gt; we get a change detected like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_9ed52770-7578-40b9-972f-85a43ae483d8"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_7e7013d7-e435-4577-afa4-db9ef60aaea3" width="532" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Additionally the &lt;strong&gt;Ignored&lt;/strong&gt; columns are flagged as changed even though the values are the same and all these values are passed to the Update routine.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_718c51d8-cc7e-4cff-a891-48359027f1dd"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_716456fe-6a1b-4134-ae19-b544f2d47737" width="529" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You would typically use this behaviour when you want to only compare certain columns to trigger an update but should there be a change you want to include values in the other columns. For example you may have audit columns UpdatedBy, UpdatedAt, etc but you don't want to trigger the update based on these values but trigger on actual data changes and include these columns when there is an update.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 23 Aug 2011 09:42:49 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/08/Integrate-Data-Sync-with-3rd-Party-Systems-Part-2</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Integrate Data Sync with 3rd Party Systems Part 2</title>
      <description>&lt;p&gt;See :- &lt;a href="http://www.simego.com/Blog/2011/08/Integrate-Data-Sync-with-3rd-Party-Systems" target="_blank"&gt;Integrate Data Sync with 3rd Party Systems Part 1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For users that do not have Visual Studio 2010 you can download the free Visual Web Developer Express 2010 from Microsoft and develop the Web Service with this version of Visual Studio.&lt;/p&gt;  &lt;p&gt;Download &lt;a title="http://www.microsoft.com/web/downloads/platform.aspx" href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;http://www.microsoft.com/web/downloads/platform.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_43772217-b770-4c46-9462-443f937926f2"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://www.simego.com/Blog/Attachment/blog_1a5335ea-bdbd-4f34-8b1b-a12d8121b981" width="640" height="443" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once installed simply copy the web service code from the &lt;a href="http://www.simego.com/Content/ApplicationFiles/DataSync_WebService_Connector.zip" target="_blank"&gt;download&lt;/a&gt; into your my documents folder to start working with the web service code.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_be33bf62-fcf1-4a5d-ab34-6cd9d78d8e36"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_0d7e4e67-fef9-450e-b602-7e947abc497b" width="644" height="398" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then double click on the solution file to open the project in Visual Studio which will then open like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_4cd67d76-4d29-4ac6-b134-415a276f013b"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_bcdd8008-61f6-4326-a681-ccf3af1f2b5a" width="628" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The sample project includes a very basic data source called "&lt;strong&gt;DefaultDataSource&lt;/strong&gt;" under the "&lt;strong&gt;DataSources&lt;/strong&gt;" folder you can open this and see how it works.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_c93c889f-dd81-40e1-bcbb-a099e8b8ac17"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_9dbbe4fb-5177-4934-a665-0d4c482106f5" width="628" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you put breakpoints on the &lt;strong&gt;GetDefaultSchema()&lt;/strong&gt; and &lt;strong&gt;GetData()&lt;/strong&gt; methods you can then step into the code as it runs. Press F5 to run the project and IE will start showing the default Web Page for the service.&lt;/p&gt;          &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_9fa3d079-d9a6-46f5-a249-5fa0ff12328a"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_30007e0b-6b86-48fd-adcc-c9ccee3f6d68" width="628" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1553b033-8858-471d-9168-f4b7f24b5c09"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ca699f83-42bc-4df4-badd-a0e5edfb8c16" width="644" height="419" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now connect Data Sync to the service&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b4344b4d-f9b0-42ed-9af0-50c699771dce"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_12f4c2f2-7b50-4414-b13a-654739151eec" width="644" height="454" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you click OK your first breakpoint &lt;strong&gt;GetDefaultSchema()&lt;/strong&gt; will be hit where Data Sync requests information from your Data Service about the Schema.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_fe8a8748-fc8d-41d5-9bfe-6cba7456d2c9"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_0145067f-b030-4ea1-93ca-e11a65cc7248" width="628" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hit F5 to continue and the Data Source is loaded into Data Sync like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_975709b9-5fbc-4918-9257-ba1e77fc4e98"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_c6ac2990-f18f-4066-b298-741e7267ec57" width="628" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now in Data Sync click the Preview A toolbar button on the Schema Map and then the &lt;strong&gt;GetData()&lt;/strong&gt; method will be hit.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a9fa5926-81bd-4eb4-9813-3f30b3fb5ff4"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_9680a632-de7a-4b51-a965-ce1d94ad6608" width="628" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hitting F5 again returns you to Data Sync and the Data is displayed from the service.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f0225dfb-5847-4ba1-839d-b81b7701041a"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_1d02bfb9-7b37-4a7e-9d0c-c703d1f1850f" width="628" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As you can see developing a custom web service to connect to your data source is quite simple. We used a simple SOAP WebService rather than WCF to keep it simple and we also kept the code simple rather than use any fancy code.&lt;/p&gt;  &lt;p&gt;You can add additional Data Sources to the Service by copying the &lt;strong&gt;DefaultDataSource&lt;/strong&gt; class and adding it in the &lt;strong&gt;DataSourceList&lt;/strong&gt; class. These are then available on the DataSource Dropdown when you connect in Data Sync.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; DataSyncService.DataSources
{
    &lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceList
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, Type&amp;gt; GetDataSources()
        {
            Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, Type&amp;gt; result = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, Type&amp;gt;();

            &lt;span class="rem"&gt;//Add Datasources here....&lt;/span&gt;
            result.Add(&lt;span class="str"&gt;&amp;quot;Default&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DefaultDataSource));

            &lt;span class="kwrd"&gt;return&lt;/span&gt; result;
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 18 Aug 2011 10:35:05 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/08/Integrate-Data-Sync-with-3rd-Party-Systems</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Integrate Data Sync with 3rd Party Systems</title>
      <description>&lt;p&gt;We now have an alternative way for you to integrate other systems that we do not have providers for with Data Sync. This could be used with virtually anything and support 2 way synchronisations.&lt;/p&gt;  &lt;p&gt;The process involves a Data Sync provider that connects to a Web Service and you would place your code in the web service. We have abstracted all the schema mapping code that you needed to contend with when writing providers directly so you simply detail with connectivity to the system your connecting to. Also as it's a separate Visual Studio project you can easily debug the Web Service end in Visual Studio.&lt;/p&gt;  &lt;h3&gt;Overview&lt;/h3&gt;  &lt;p align="left"&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e2921ef0-0932-417d-a72a-47ef2675e38a"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="image" alt="image" src="http://www.simego.com/Blog/Attachment/blog_de26e722-6f44-424d-bf4b-cc1b05057af4" width="180" height="403" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Web Service&lt;/h3&gt;  &lt;p&gt;The Web Service exposes a few methods that the Data Sync provider will interact with we are supplying a template Visual Studio Project that you can use to build your project.&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;GetSchemas - Return a List of DataSources/Schemas from the Service &lt;/li&gt;      &lt;li&gt;GetDefaultSchema - Returns Schema Information for a Schema/DataSource &lt;/li&gt;      &lt;li&gt;GetData - Returns the Data from the DataSource &lt;/li&gt;      &lt;li&gt;AddItem - Add's an Item &lt;/li&gt;      &lt;li&gt;UpdateItem - Update's an Item &lt;/li&gt;      &lt;li&gt;DeleteItem - Deletes an Item &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_663f7e4c-1d4b-4207-babc-ce243ff3224e"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://www.simego.com/Blog/Attachment/blog_5839f481-6e99-456c-9013-1a9d9c936551" width="640" height="460" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Really Simple Connector&lt;/h3&gt;  &lt;p&gt;Below is some sample source code for a really simple read-only connector that is also supplied in the sample project. You can see there are just a few simple methods that you need to implement to get it working.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; DataSyncService.DataSources
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DefaultDataSource : IDataSource
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; DataTable _dataTable = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();

        &lt;span class="kwrd"&gt;public&lt;/span&gt; DefaultDataSource()
        {
            &lt;span class="rem"&gt;//Setup Schema&lt;/span&gt;
            _dataTable.Columns.Add(&lt;span class="str"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt;));
            _dataTable.Columns.Add(&lt;span class="str"&gt;&amp;quot;FirstName&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;));
            _dataTable.Columns.Add(&lt;span class="str"&gt;&amp;quot;LastName&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));
            _dataTable.Columns.Add(&lt;span class="str"&gt;&amp;quot;Email&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));
            _dataTable.Columns.Add(&lt;span class="str"&gt;&amp;quot;Phone&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));

            _dataTable.Columns[&lt;span class="str"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;].Unique = &lt;span class="kwrd"&gt;true&lt;/span&gt;;

            &lt;span class="rem"&gt;//Add Rows&lt;/span&gt;
            _dataTable.Rows.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { 1, &lt;span class="str"&gt;&amp;quot;Sean&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Cleaver&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sean@simego.com&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;555-1234&amp;quot;&lt;/span&gt; });
            _dataTable.Rows.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { 2, &lt;span class="str"&gt;&amp;quot;Trem&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Christ&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;trem@simego.com&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;555-1235&amp;quot;&lt;/span&gt; });

        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;SchemaItem&amp;gt; GetDefaultSchema()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (from DataColumn column &lt;span class="kwrd"&gt;in&lt;/span&gt; _dataTable.Columns select &lt;span class="kwrd"&gt;new&lt;/span&gt; SchemaItem {ColumnName = column.ColumnName, DataType = column.DataType.ToString(), Unique = column.Unique}).ToList();
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;object&lt;/span&gt;[]&amp;gt; GetData(List&amp;lt;SchemaItem&amp;gt; detail)
        {
            var data = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;object&lt;/span&gt;[]&amp;gt;();

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(DataRow row &lt;span class="kwrd"&gt;in&lt;/span&gt; _dataTable.Rows)
            {
                var rowData = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[detail.Count];
                &lt;span class="kwrd"&gt;for&lt;/span&gt; (var i = 0; i &amp;lt; detail.Count; i++)
                    rowData[i] = row[detail[i].ColumnName];
                data.Add(rowData);
            }
            
            &lt;span class="kwrd"&gt;return&lt;/span&gt; data;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddItem(&lt;span class="kwrd"&gt;object&lt;/span&gt; key, DataItem[] values)
        {

        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UpdateItem(&lt;span class="kwrd"&gt;object&lt;/span&gt; key, DataItem[] values)
        {

        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DeleteItem(&lt;span class="kwrd"&gt;object&lt;/span&gt; key)
        {

        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;h3&gt;Connecting to the Web Service&lt;/h3&gt;

&lt;p&gt;To Connect to the Web Service you need to install the &lt;strong&gt;Data Sync Integration Web Service Connector&lt;/strong&gt; and then it's a matter of entering the URL to the Service and choosing a Data Source from the Drop down. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_496a28a9-070b-46cb-9d0d-628f1e8299eb"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_35037646-aff7-4f5b-968c-0b2490b89879" width="635" height="448" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you connect to the Web service everything just works like any other Data Source in Data Sync. You can change the Data Source, Refresh the Schema etc all from within Data Sync.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f2be9f12-6c18-4e98-80be-bca426140ee5"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_3b7c65d5-fdda-48c1-bb4d-7fa647fa67da" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download the necessary &lt;a href="http://www.simego.com/Content/ApplicationFiles/DataSync_WebService_Connector.zip" target="_blank"&gt;connector and sample web service code from here&lt;/a&gt;. &lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 16 Aug 2011 10:37:11 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/08/Linking-Contact-to-Account-in-Dynamics-CRM-2011-Online</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Linking Contact to Account in Dynamics CRM 2011 Online</title>
      <description>&lt;p&gt;If you want to link related records in Dynamics CRM 2011 Online with Data Synchronisation Studio you should create a Dynamic Column on the Source Data to return the ID of the related record.&lt;/p&gt;
&lt;p&gt;For example to link Contacts to Account you need to lookup the AccountID from the Account entity to get the internal CRM ID for the Account.&lt;/p&gt;
&lt;p&gt;Below is screenshot from CRM showing that my record relates to the Customer "Simego Ltd"&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2d3a34d6-799c-4a2e-9f87-2050bed46e45"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ef726b73-965f-40e9-a4a1-7aaae80dabc3" width="644" height="261" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;p&gt;What we need to do is load a List of Account ID's against the Account Number in the Setup method of the Dynamic Column Code like below. The code creates an instance of a CRMDataSourceReader and configures it to return the ID and Account Number from the CRM Server.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Get a DataTable object of the related List via a new CRM Reader&lt;/span&gt;
MSCrmDataSourceReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; MSCrmDataSourceReader();        
reader.Username = ((MSCrmDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceB.Reader).Username;
reader.Password = ((MSCrmDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceB.Reader).Password;
reader.CrmServerUrl = ((MSCrmDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceB.Reader).CrmServerUrl;
reader.Organisation = ((MSCrmDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceB.Reader).Organisation;
reader.Entity = &lt;span class="str"&gt;"account"&lt;/span&gt;;
&lt;span class="rem"&gt;//Create a Schema Map to return the ID and account number&lt;/span&gt;
reader.SchemaMap = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchema();
reader.SchemaMap.Map.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchemaItem(&lt;span class="str"&gt;"accountid"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Guid), &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, -1));
reader.SchemaMap.Map.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchemaItem(&lt;span class="str"&gt;"accountnumber"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;), &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, -1));
&lt;span class="rem"&gt;//Load the Data Table&lt;/span&gt;
DataTable accounts = reader.GetDataTable();        
&lt;span class="rem"&gt;//Create a Lookup Index to help speed-up lookups&lt;/span&gt;
&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(DataRow r &lt;span class="kwrd"&gt;in&lt;/span&gt; accounts.Rows) 
    accountLookup.Add((&lt;span class="kwrd"&gt;string&lt;/span&gt;)r[&lt;span class="str"&gt;"accountnumber"&lt;/span&gt;], (Guid)r[&lt;span class="str"&gt;"accountid"&lt;/span&gt;]);&lt;/pre&gt;
&lt;p&gt;Then we create a Dynamic Column that looks into the created Dictionary for an Account ID against the Account Number we have in the source data.
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// Return the Account ID via the Lookup Dictionary&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; accountid
{
    get 
    { 
        &lt;span class="kwrd"&gt;if&lt;/span&gt; ( accountLookup.ContainsKey(&lt;span class="kwrd"&gt;this&lt;/span&gt;.OrganisationID.ToString()) )
            &lt;span class="kwrd"&gt;return&lt;/span&gt; accountLookup[&lt;span class="kwrd"&gt;this&lt;/span&gt;.OrganisationID.ToString()];
        
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
    } 
}&lt;/pre&gt;
&lt;p&gt;When we preview this data you see that we get a Guid for the "accountid" field which is what we need to synchronise into the Parent Customer column.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_bddb0f15-f739-4e0c-a8f4-5e45e911937e"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_22cd8c03-6f0f-4d70-9827-9b2b555033f4" width="644" height="219" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Schema Map might look something like this where the accountid links to the parentcustomerid and we store the ID of the contact from the source system into the externaluseridentifier field.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_705ab590-3081-44f1-8bee-f3b4d92f5d2f"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_aa8b0be8-cf03-43d3-8cc3-f9ab5eaaee51" width="644" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;h3&gt;Complete Dynamic Column Code&lt;/h3&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt; Usings
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync.Providers.MSCrm2011;
&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// An object that defines the Dynaimc columns for this project.&lt;/span&gt;
&lt;span class="rem"&gt;/// To Create new Dynamic Columns simply expose them as properties in this class.&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceRowOverride : Simego.DataSync.DynamicColumns.DataSourceRowInternal &lt;span class="rem"&gt;//Do Not Change This Line&lt;/span&gt;
{
    &lt;span class="rem"&gt;//Category Index&lt;/span&gt;
    Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, Guid&amp;gt; accountLookup = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, Guid&amp;gt;();
    
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; accountname { 
        get { 
            
            &lt;span class="kwrd"&gt;if&lt;/span&gt; ( !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(Name) )
                &lt;span class="kwrd"&gt;return&lt;/span&gt; Name;
            
            &lt;span class="kwrd"&gt;return&lt;/span&gt; EmailAddress; 
        } 
    }
    
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; firstname { 
        get { 
            
            &lt;span class="kwrd"&gt;string&lt;/span&gt; [] parts = Name.Split(&lt;span class="str"&gt;' '&lt;/span&gt;);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; ( parts.Length &amp;gt; 0 )
                &lt;span class="kwrd"&gt;return&lt;/span&gt; parts[0].Trim();
            
            &lt;span class="kwrd"&gt;return&lt;/span&gt; Name; 
        } 
    }
    
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; lastname { 
        get { 
            
            &lt;span class="kwrd"&gt;string&lt;/span&gt; [] parts = Name.Split(&lt;span class="str"&gt;' '&lt;/span&gt;);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; ( parts.Length &amp;gt; 1 )
                &lt;span class="kwrd"&gt;return&lt;/span&gt; parts[1].Trim();
            
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;""&lt;/span&gt;; 
        } 
    }
    
    
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Return the Account ID via the Lookup Dictionary&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; accountid
    {
        get 
        { 
            &lt;span class="kwrd"&gt;if&lt;/span&gt; ( accountLookup.ContainsKey(&lt;span class="kwrd"&gt;this&lt;/span&gt;.OrganisationID.ToString()) )
                &lt;span class="kwrd"&gt;return&lt;/span&gt; accountLookup[&lt;span class="kwrd"&gt;this&lt;/span&gt;.OrganisationID.ToString()];
            
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
        } 
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Setup()
    {
        &lt;span class="rem"&gt;//Get a DataTable object of the related List via a new CRM Reader&lt;/span&gt;
        MSCrmDataSourceReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; MSCrmDataSourceReader();        
        reader.Username = ((MSCrmDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceB.Reader).Username;
        reader.Password = ((MSCrmDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceB.Reader).Password;
        reader.CrmServerUrl = ((MSCrmDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceB.Reader).CrmServerUrl;
        reader.Organisation = ((MSCrmDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceB.Reader).Organisation;
        reader.Entity = &lt;span class="str"&gt;"account"&lt;/span&gt;;
        &lt;span class="rem"&gt;//Create a Schema Map to return the ID and account number&lt;/span&gt;
        reader.SchemaMap = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchema();
        reader.SchemaMap.Map.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchemaItem(&lt;span class="str"&gt;"accountid"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Guid), &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, -1));
        reader.SchemaMap.Map.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchemaItem(&lt;span class="str"&gt;"accountnumber"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;), &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, -1));
        &lt;span class="rem"&gt;//Load the Data Table&lt;/span&gt;
        DataTable accounts = reader.GetDataTable();        
        &lt;span class="rem"&gt;//Create a Lookup Index to help speed-up lookups&lt;/span&gt;
        &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(DataRow r &lt;span class="kwrd"&gt;in&lt;/span&gt; accounts.Rows) 
            accountLookup.Add((&lt;span class="kwrd"&gt;string&lt;/span&gt;)r[&lt;span class="str"&gt;"accountnumber"&lt;/span&gt;], (Guid)r[&lt;span class="str"&gt;"accountid"&lt;/span&gt;]);
    }

}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;p&gt;You can download and use a fully featured version of Data Sync Studio for 15 Days to see how this CRM solution works.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;Click here to go to the Downloads&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 12 Aug 2011 15:47:03 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/08/Connecting-to-Dynamics-CRM-2011-Online</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Connecting to Dynamics CRM 2011 Online</title>
      <description>&lt;p&gt;A few customers have been struggling to connect Data Synchronisation Studio to their Dynamics CRM Instance.&lt;/p&gt;  &lt;p&gt;What you need is to ensure that you have the Windows Identity Framework (WIF) components installed on your machine from here &lt;a title="http://www.microsoft.com/download/en/details.aspx?id=17331" href="http://www.microsoft.com/download/en/details.aspx?id=17331"&gt;http://www.microsoft.com/download/en/details.aspx?id=17331&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then it is just a matter of entering your Live Credentials and the base URL to your hosted CRM environment. This will be something like &lt;a title="https://crm4.dynamics.com" href="https://crm4.dynamics.com"&gt;https://crm4.dynamics.com&lt;/a&gt; or &lt;a title="https://crm4.dynamics.com" href="https://crm5.dynamics.com"&gt;https://crm5.dynamics.com&lt;/a&gt; do not include your organisation name in the URL. You should then select an organisation and Data Sync will call the CRM Discovery Service to locate a list of Organisations that are available for your login. Finally choose the entity from the Entity drop down, you can choose built-in Entities or Custom entities from this list.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0e393c5f-af6f-4ccd-b0bf-4fc7cfa328eb"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_29b9c400-20ae-4559-9c97-1c106ce4714e" width="644" height="454" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Once your connected you will see all the columns that are available from your selected Entity in Data Sync.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_9d6ad013-8b49-4105-b686-543d3234f0b3"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4bb99a3d-d1f2-4df7-9213-103ca149f3fe" width="644" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 12 Aug 2011 15:03:38 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/08/SharePoint-List-and-SQL-Table-2-Way-Synchronisation</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SharePoint List and SQL Table 2 Way Synchronisation</title>
      <description>&lt;p&gt;This is a guide to show how you should go about configuring a 2 Way Synchronisation between a SQL Table and a SharePoint List with Data Synchronisation Studio.&lt;/p&gt;
&lt;h3&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.simego.com/Products/Data-Synchronisation-Studio" target="_blank"&gt;Data Synchronisation Studio 3.0&lt;/a&gt; You can download the &lt;a href="/Install/Data-Synchronisation-Studio"&gt;7 day trial here&lt;/a&gt; which to try out this solution &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/web/downloads/platform.aspx" target="_blank"&gt;SQL Server Compact Edition 4.0&lt;/a&gt; via Web Platform Installer&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Background&lt;/h3&gt;
&lt;p&gt;To successfully implement a 2 way sync you need to use a key value that will always be unique even when the new row is created from the other side. The simplest way is to use a GUID and this is what we recommend. Data Sync supports a special column we created called DSID in SharePoint that when Data Sync see's this column and it's blank it writes a new Guid back to the Row so that it always remains unique.&lt;/p&gt;
&lt;h3&gt;Setup Data Sources&lt;/h3&gt;
&lt;h5&gt;SQL Server Table&lt;/h5&gt;
&lt;p&gt;In this example were setting up a simple table that contains contact records and the important column in here is DSID which is configured as a &lt;strong&gt;uniqueidentifier&lt;/strong&gt; and has a default of &lt;strong&gt;newid()&lt;/strong&gt; so that new rows automatically get a new Guid value.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; [dbo].[Contacts] (
    [ContactID] &lt;span class="kwrd"&gt;int&lt;/span&gt; &lt;span class="kwrd"&gt;IDENTITY&lt;/span&gt;(1, 1) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [FirstName] nvarchar(255) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [LastName] nvarchar(255) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [MiddleName] nvarchar(255) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [Suffix] nvarchar(50) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [EmailAddress] nvarchar(255) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [Phone] nvarchar(255) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [DSID] uniqueidentifier &lt;span class="kwrd"&gt;DEFAULT&lt;/span&gt;(newid()) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;
)
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; [dbo].[Contacts] &lt;span class="kwrd"&gt;ADD&lt;/span&gt; &lt;span class="kwrd"&gt;CONSTRAINT&lt;/span&gt; [PK_Contacts_0B234716] &lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt; &lt;span class="kwrd"&gt;KEY&lt;/span&gt; &lt;span class="kwrd"&gt;CLUSTERED&lt;/span&gt; ([ContactID] &lt;span class="kwrd"&gt;ASC&lt;/span&gt;) &lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;p&gt;The table data will look like this below&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_69592ea5-5152-42f2-b994-7599674ce687"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ba614c8a-c78a-41e7-8352-2b7f4bf60c3a" width="644" height="121" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;SharePoint List&lt;/h5&gt;
&lt;p&gt;I have created a standard Contact List in a new SharePoint Site to be the Target for this Data. (This is SharePoint 2007 although you can use SharePoint 2010 as well).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_80644532-187e-4a80-9987-d73860862f2e"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_bc3ddddb-add0-4a58-93b7-334ad0f5970b" width="644" height="306" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This list does not have the column DSID yet so we need to add it and Data Sync has a special Wizard that lets you add new columns that are hidden from the user.&lt;/p&gt;
&lt;p&gt;From the tools menu select the &lt;strong&gt;SharePoint Column Wizard&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_bbbfe729-7382-4b9b-9a8e-5b0da60c373c"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_d02ea92a-fdae-4c42-9d89-4dba0820e596" width="375" height="257" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Step through the Wizard and Choose your SharePoint Server&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_84b534b2-31b0-4906-9198-c8ab29107130"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_d7eaaa6b-b1d1-4b1d-a736-b564bceeb2e1" width="520" height="402" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Select the List on which to add the new Column&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a0239700-49c1-4f1d-8ae0-f10d0eef34e8"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_af0d6cdb-918d-4896-b0b6-56354a73819e" width="520" height="402" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add the New Column &lt;strong&gt;DSID&lt;/strong&gt; to this List and make it hidden so the user cannot modify it.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_9eb20dbd-57c7-41b5-ad60-17c2783c00fb"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_edba2695-dd3f-46f4-9cfa-e61692a306c7" width="520" height="402" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Setup Data Sync Project&lt;/h3&gt;
&lt;p&gt;Start Data Sync and setup the project by connecting Data Source A to your SQL Table and Data Source B to the SharePoint List.&lt;/p&gt;
&lt;p&gt;Your Project would look like this with SQL Table on the Left and the Target SharePoint List on the right.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0c99b65c-fa78-4b10-b5dd-39fd3468339b"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_519a01fb-0b71-443b-97a8-c67a08459b1b" width="644" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Schema Map would look like this with &lt;strong&gt;DSID&lt;/strong&gt; as the Key and note that the SharePoint ID column is not included in this Map.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_bc64cedf-e07d-454f-af00-e79028a4e4c8"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_61483b1f-e9d0-4228-a647-a4b573eb7be4" width="580" height="197" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now we should sync 1 way all our data into SharePoint by simply Compare A-&amp;gt;B and Synchronise.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_471b9d7b-e61d-4530-bd58-fc035289662a"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_baf20d48-a1f7-4878-b568-acf2baa4d22b" width="644" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sync the contact records into SharePoint&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e222bd7a-6e51-4d04-b2dc-dab1b1689b37"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_fe5608f3-3f91-4bab-9bf0-3ee3ff6c595c" width="446" height="321" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run a Compare A-&amp;gt;B again to check that all the contact records are in Sync with SharePoint.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6a7a21c1-9d0f-4d71-9599-5e1471a01312"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_410e5baf-6ffc-4e48-8af3-34e922e2d76a" width="644" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And check SharePoint&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_9e215e1e-c2d5-4eb7-8f3f-bc033e262e9c"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_99b30177-2296-41e1-b79a-9ab3c80a4f0f" width="644" height="301" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Configure 2 Way Sync&lt;/h3&gt;
&lt;p&gt;Now to configure the 2 way sync we need to adjust the project properties, save the project and load it into the Run Tool.&lt;/p&gt;
&lt;p&gt;Select File -&amp;gt; Properties&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b73b8211-6332-4f7d-9f96-c33eea1efddf"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_aff394ee-e44e-484b-8506-65d856ea7f93" width="239" height="261" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Change the Sync option to SyncAandB to enable 2 way synchronisation.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_3ed21a5b-517c-47bb-8720-4d83eadd763f"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_2c07e693-2755-427d-9b67-128024c5eb0f" width="394" height="385" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then save the project.&lt;/p&gt;
&lt;h3&gt;Run Tool&lt;/h3&gt;
&lt;p&gt;Open the "Data Synchronisation Studio Run Tool" this is the program you use to configure unattended execution of Data Sync projects. With this you can create a Data Sync solution of many Data Sync projects and set the order of execution, send email and call other programs in the pipeline.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1b280046-89c1-400b-b1ce-664941994396"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_f28fbe35-78b7-4939-9f0e-256e1846ea23" width="644" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Under the File menu select Import and browse to your Data Sync project.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_4933895f-5ba1-43d8-8c61-4cd17d043b53"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_b4c74952-4047-40af-86c0-21ab48d0339a" width="240" height="248" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a78f0a62-3ba8-4c79-9272-0a329958aaff"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_b6637b56-1715-403f-aaf2-e349a733922c" width="644" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Save the Run Tool project and click Run in the Toolbar, if all is working you will get a nice green tick.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_8e2a318f-fbf3-4a11-aa3d-98308787a0df"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_7b436c48-4137-4e15-94c3-41197fc5bb5e" width="644" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On the Log tab you can see the detailed log of event's, here you can see a new SQL Server Compact Database is created and loaded with data from each side and this is how it detects the changes made on each side.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_67ad5793-2478-442d-853f-4d41097cca6d"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_6e8c0ac1-906f-4093-8ead-704b416781c6" width="576" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Snapshot Database is stored in the same path as the Run Tool solution project file like this.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d2daf9b9-7063-4e3f-824e-608530dd908b"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_789f9d4f-a4ca-4d3a-877f-ca89345be0cf" width="221" height="237" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now if you run the project again you will see a shorter log and no changes.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_02ba0357-8a28-4767-bd9f-62279a3cb29a"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_fd6dbd96-0c6f-44e6-8bcb-39cf43a0bd9c" width="576" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where as if you make a change in SharePoint you will see a change detected on B and applied to A like this.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_952aca51-ac46-4a84-be24-f06a61bb4f55"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_d5e88f50-2449-4611-a3f4-0996f0058f9e" width="576" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And this is essentially all you need to do to create a 2 way sync between a SharePoint list and a SQL Table.&lt;/p&gt;
&lt;p&gt;The only remaining step is to configure a schedule to run the project regularly.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 12 Aug 2011 11:39:00 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/08/Dynamic-Lookups-with-Data-Synchronisation-Studio</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Dynamic Lookups with Data Synchronisation Studio</title>
      <description>&lt;p&gt;Data Synchronisation Studio's Dynamic Columns makes it really easy to lookup Data in a remote system to Lookup Data and decorate the source Row with the value.&lt;/p&gt;  &lt;p&gt;For example we have this simple set of currency data, this contains an ID, Currency Name and Value. However our target Database requires an ID value for the Currency Name so we need to transform this with a Dynamic Column.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_11a9a92c-1623-4bcc-b777-fe4d8d97fd97"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_dd0d1748-f046-4be6-bfb8-c62f2079a72c" width="560" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Data Sync includes the excellent &lt;a href="https://github.com/robconery/massive" target="_blank"&gt;Massive Data Access library&lt;/a&gt; and by using this it's really easy to create a Lookup Dictionary that you can use to lookup the Currency ID.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt; Usings
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync.Helpers.Massive;
&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceRowOverride : Simego.DataSync.DynamicColumns.DataSourceRowInternal &lt;span class="rem"&gt;//Do Not Change This Line&lt;/span&gt;
{
    &lt;span class="kwrd"&gt;private&lt;/span&gt; dynamic currencyLookup;
    
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; CurrencyID
    {
        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; currencyLookup.ContainsKey(CurrencyName) ? currencyLookup[CurrencyName].ID : &lt;span class="kwrd"&gt;null&lt;/span&gt;; }
    }
    
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Setup() 
    {
        currencyLookup = &lt;span class="kwrd"&gt;new&lt;/span&gt; DynamicModel(DataSourceB.Settings[&lt;span class="str"&gt;&amp;quot;ConnectionString&amp;quot;&lt;/span&gt;], &lt;span class="str"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;).All().ToDictionary(k =&amp;gt; k.CurrencyName);    
    }

}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;



&lt;p&gt;Then it's just a simple case of mapping the &lt;strong&gt;Dynamic&lt;/strong&gt; &lt;em&gt;CurrencyID&lt;/em&gt; column to the target.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ada20b27-8203-40e5-9ace-d791cf71e7ee"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_63bbed48-5e17-4a8c-b7ec-77dc0b4986cc" width="1028" height="278" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 11 Aug 2011 14:45:43 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/07/Bulk-update-Active-Directory</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Bulk update Active Directory</title>
      <description>&lt;p&gt;Using Data Sync it's pretty easy to apply bulk updates to meta data stored in your Active Directory. One way is to export the whole AD to an Excel Spread sheet then sync changes from the Excel Sheet back to the AD.&lt;/p&gt;
&lt;p&gt;However another way if you just want to apply a transformation is to use Dynamic Columns, here were updating the Company Name and Email Address fields of all our Users in the AD. We set up a project that has the Source and Destination set to the same data source and we use Dynamic Columns to calculate the changes we need.&lt;/p&gt;
&lt;p&gt;Simple Dynamic Columns like this apply the Transformations we need and all we need do is Map the new Dynamic Columns to the AD Fields.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_755465a0-e79f-48a1-bce0-ef120d2cc817"&gt;&lt;img height="484" width="596" src="http://www.simego.com/Blog/Attachment/blog_db44969c-134b-46d4-bcfc-2ad4470a184f" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The completed project in Data Sync&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_6785c28a-8044-43cf-8ce7-904f9908e2cd"&gt;&lt;img height="397" width="644" src="http://www.simego.com/Blog/Attachment/blog_53903984-d07e-40fd-a7f8-c502288f680b" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 27 Jul 2011 11:14:11 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/06/Importing-Data-from-QuickBooks-with-Data-Sync-Studio</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Importing Data from QuickBooks with Data Sync Studio</title>
      <description>&lt;p&gt;This solution shows how you might connect a remote QuickBooks installation to Data Sync to synchronise the data with SharePoint, CRM or a SQL Database. &lt;/p&gt;  &lt;p&gt;In this example we have created a basic web server that gets installed onto the QuickBooks machine, this webserver exposes the QuickBooks data as an &lt;a href="http://www.odata.org" target="_blank"&gt;OData feed&lt;/a&gt; which can then be consumed by many applications such as &lt;a href="http://www.powerpivot.com/" target="_blank"&gt;Excel Power Pivot&lt;/a&gt; or &lt;a href="http://www.simego.com/Products/Data-Synchronisation-Studio" target="_blank"&gt;Data Synchronisation Studio&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The Web Server uses the Inuit COM API to access data stored in QuickBooks as in the example code below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_996a2e93-40ce-434a-812a-a1bf16752974"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_51be13d7-4529-45a2-b699-019722529983" width="713" height="589" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We run the Web server on the QuickBooks machine from the command line. &lt;/p&gt;  &lt;p&gt;To enable a external host url we have to run a little netsh command&lt;/p&gt;  &lt;p&gt;netsh http add urlacl url=&lt;a href="http://WIN-3KL7AJEADUK:4001/"&gt;http://WIN-3KL7AJEADUK:4001/&lt;/a&gt; user=WIN-3KL7AJEADUK\Sean&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2b563d28-7f8c-477b-9a3d-6160d9ef49ab"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_1db6864c-a1c3-458a-8ba9-4c6c8ca8beb6" width="644" height="146" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This Web server exposes a few admin / status screens so we can see what's going on &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_46b0e249-30cd-46cb-b1ec-b7ba2fcb76cb"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ceadae2d-7d0f-4587-b8b2-74982f30742e" width="644" height="393" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If we view the feeds in IE you get the default RSS view of the data from QuickBooks&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0bbe6fd0-5138-4f10-90d3-be31fb80fd58"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_30886aaa-d050-4c99-b076-d1af3166d211" width="535" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next we connect Data Sync to the Feed with the OData Provider&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_c1166a36-7739-4edb-9da3-ee0344531625"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_2d39f014-b2bd-4d4b-87dc-7611f42f6e4b" width="644" height="454" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And Voila we have connected Data Sync to the OData feed and can now work with it like any other Datasource in Data Sync.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a3cb348e-4c70-404a-b3d8-05f405afff61"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_eff493ed-676e-4f11-816b-aca7b80f4283" width="644" height="450" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you have a need for a solution like this to connect to your QuickBooks data please contact us.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 09 Jun 2011 13:16:11 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/06/Office-365-SharePoint-Data-Synchronisation</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Office 365 SharePoint Data Synchronisation</title>
      <description>&lt;p&gt;We have built a new Data Provider for Data Sync that can be used to Synchronise Lists and Document Libraries including Metadata between some source and Office 365 SharePoint Online.&lt;/p&gt;  &lt;p&gt;For Example Synchronising Documents between an OnPremise SharePoint Server Document Library and SharePoint Online is quite simple.&lt;/p&gt;  &lt;h3&gt;Supports&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Lists&lt;/li&gt;    &lt;li&gt;Document Libraries&lt;/li&gt;    &lt;li&gt;Lookup Columns (Automatic linking)&lt;/li&gt;    &lt;li&gt;Choice Columns&lt;/li&gt;    &lt;li&gt;Large Lists (over 2000 items) with Paging&lt;/li&gt;    &lt;li&gt;Folders in Document Libraries&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Requirements&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Data Synchronisaton Studio version 3.0.388 or higher&lt;/li&gt;    &lt;li&gt;Windows Identity Framework - &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=eb9c345f-e830-40b8-a5fe-ae7a864c4d76&amp;amp;displaylang=en" target="_blank"&gt;Download Here&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Connection to SharePoint Online&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_3d5921b2-3947-4d1b-abf9-f81b80bc4f03"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_918cdbce-382f-4dee-ad18-d9b8e90e6fcb" width="644" height="454" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Schema Map between SharePoint and SharePoint Online&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_a05f5073-4c5f-44cb-8d39-17aea3384bc4"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ad13cb28-1c2b-43fd-bc37-3f67037e42f6" width="644" height="380" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Compare Results&lt;/h3&gt;  &lt;p&gt;We can maintain the Created and Modified values and any folders are also created in SharePoint Online.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5ec8a85c-ab09-44dc-9d90-e1934284b366"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_cbcf58fd-d169-4da9-bc91-6d8c19856d88" width="644" height="380" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Synchronise the Data&lt;/h3&gt;        &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b86ac2a6-9c23-4960-9e6e-e0b8a48e09a8"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_044d78e9-4e69-436f-86ad-3c4a14eaf02a" width="244" height="176" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;All done&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0a44561d-65b4-4304-bf4b-f9ec53686a97"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_f82f61d8-a464-49ee-adf8-2076dad66bc9" width="644" height="380" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;With this new Data Provider you can either migrate to SharePoint Online from OnPremise or just publish some of your business data to the cloud. As with everything Data Sync you can setup a regular schedule to push content into SharePoint Online very easily.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 03 Jun 2011 10:11:04 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/05/Dynamic-Columns-Back-to-Basics</link>
      <author>info@simego.com (Trem)</author>
      <title>Dynamic Columns - Back to Basics</title>
      <description>&lt;p&gt;Today we&amp;rsquo;re going to look at DS3's (Data Synchronisation Studio 3) dynamic columns, however this time, it&amp;rsquo;s from a beginners perspective. We will be looking at combining values, adding dates, and pulling information from other data sources.&lt;/p&gt;
&lt;p&gt;So to start, we need to open DS3 and connect to a data source. I&amp;rsquo;m using the &lt;strong&gt;Microsoft&lt;/strong&gt; &lt;strong&gt;Adventureworks Database&lt;/strong&gt; and selecting the &lt;strong&gt;Contacts Table&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Once you have connected to your chosen data source, enable dynamic columns. You will see the following (or something like it). The part we&amp;rsquo;re interested in, is the section highlighted in yellow. This is the part that creates the new dynamic column.&lt;a href="http://www.simego.com/Blog/Attachment/blog_0a88a787-8ffb-4527-a2df-13b9da2e6e2f"&gt;&lt;img height="448" width="812" src="http://www.simego.com/Blog/Attachment/blog_98b7ba0f-2f4a-413e-b8f6-0d1b870d4df9" alt="dynamicColumnStart" border="0" title="dynamicColumnStart" style="background-image: none; margin: 0px 0px 4px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Deconstructing the Code&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="background-color: #ffff00;"&gt;public&lt;/span&gt; string MyNewColum&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;public means to make public/to make available for Data Sync to use.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;public &lt;span style="background-color: #ffff00;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: #ffff00;"&gt;string&lt;/span&gt; MyNewColum&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;string basically means you can use numbers, letters and symbols&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;public string &lt;span style="background-color: #ffff00;"&gt;MyNewColum&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MyNewColumn is the name of the dynamic column. This can be changed to anything baring in mind it cannot contain spaces or symbols, and must not start with a number.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #008000;" color="#008000"&gt;MyNewColumn&lt;/span&gt;&lt;/strong&gt; &amp;ndash; &lt;span style="color: #c0504d;" color="#c0504d"&gt;&lt;strong&gt;My New Column&lt;/strong&gt;&lt;/span&gt; &amp;ndash; &lt;strong&gt;&lt;span style="color: #008000;" color="#008000"&gt;MyNewColumn1&lt;/span&gt;&lt;/strong&gt; &amp;ndash; &lt;strong&gt;&lt;span style="color: #c0504d;" color="#c0504d"&gt;1MyNewColumn&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Adding Columns to Schema Map&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0bf72f72-003d-4778-a170-4cfbf5a5c597"&gt;&lt;img height="333" width="323" src="http://www.simego.com/Blog/Attachment/blog_042db494-dbb4-4472-a9fa-60158b85d166" align="left" alt="dsa-ndc" border="0" title="dsa-ndc" style="background-image: none; margin: 0px 30px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you now press the &lt;img height="19" width="51" src="http://www.simego.com/Blog/Attachment/blog_bef005a6-6899-4655-82cb-117fea8f4815" alt="build-button" border="0" title="build-button" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt; button at the top of the dynamic column window, you should notice a new column in &amp;lsquo;Data Source A&amp;rsquo; (left)&lt;/p&gt;
&lt;p&gt;Switch to your schema map and add this new column by either dragging it over or by double clicking.&lt;/p&gt;
&lt;p&gt;Now press the &lt;img height="19" width="74" src="http://www.simego.com/Blog/Attachment/blog_086b478e-348e-4b11-838a-050d9a30381f" alt="previewA-button" border="0" title="previewA-button" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt; button to preview the data from &amp;lsquo;Data Source A&amp;rsquo; including your new dynamic column. This will be the last column in the table and as you can see, the data in the column is the text that is returned from the function in the dynamic column window.&lt;/p&gt;
&lt;p style="clear: both;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;Combining Values&lt;/h2&gt;
&lt;p&gt;Combining values is very handy when needing to publish data on different systems. For example, building a new database for a new web application and pulling in existing customers from an older database.&lt;/p&gt;
&lt;p&gt;You may want to display a display name when a user is authenticated that will include their User ID, First Name and Last Name. In that table I&amp;rsquo;m using there is no such thing as User ID, so first I am going to create a User ID from the ContactID column.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; UserID
    {
        get
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"SU{0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.ContactID.ToString(&lt;span class="str"&gt;"D4"&lt;/span&gt;));
        }
    }&lt;/pre&gt;
&lt;p&gt;The above code will return something like this &lt;strong&gt;SU1234&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;&lt;span style="color: #c0504d;" size="2" color="#c0504d"&gt;&lt;em&gt;Remember&amp;hellip; If you have added a new property (column), to press the &amp;lsquo;Build&amp;rsquo; button to compile the code so that you can add it to the schema map before you click the &amp;lsquo;Preview&amp;rsquo; button. If you change the name of the column, also remember to add it back to the schema map.&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re using string.Format() so that we can add a prefix to the ContactID. The &amp;lsquo;{0}&amp;rsquo; gets replaced by &amp;lsquo;this.ContactID.ToString(&amp;ldquo;D4&amp;rdquo;)&amp;rsquo;    &lt;br /&gt;We could just use this.ContactID, however for a ContactID of 1, this would return &lt;strong&gt;SU1&lt;/strong&gt; which doesn&amp;rsquo;t look like much of a User ID, so instead we prepend zeros to the ContactID by using ToString(&amp;ldquo;D4&amp;rdquo;).     &lt;br /&gt;Now the User ID looks like this &lt;strong&gt;SU0001&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Now we have our User ID, we can start to build our display name. We&amp;rsquo;re again going to use string.Format() to do this.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; DisplayName
    {
        get
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"({0}) {1} {2}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.UserID, &lt;span class="kwrd"&gt;this&lt;/span&gt;.FirstName, &lt;span class="kwrd"&gt;this&lt;/span&gt;.LastName);
        }
    }&lt;/pre&gt;
&lt;p&gt;The above code will return something like this &lt;strong&gt;(SU1234) Joe Bloggs&lt;/strong&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;This format function contains &amp;lsquo;{0}&amp;rsquo;, &amp;lsquo;{1}&amp;rsquo; and &amp;lsquo;{2}&amp;rsquo;. UserID will replace &amp;lsquo;{0}&amp;rsquo;, FirstName will replace &amp;lsquo;{1}&amp;rsquo; and LastName will replace &amp;lsquo;{2}&amp;rsquo;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;As you may of noticed I have changed the Column name to &amp;lsquo;DisplayName&amp;rsquo;, so once built you will need to add this back to your schema map.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Inserting Time &amp;amp; Date&lt;/h2&gt;
&lt;p&gt;In this example we will be adding the &amp;lsquo;Synchronised Date&amp;rsquo; as this is one of the most simple things that you can do with DateTime.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; DateTime SyncDate
    {
        get
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; DateTime.Now;
        }
    }&lt;/pre&gt;
&lt;p&gt;This will actually return the time and date when the data is loaded rather than when it gets synchronised, however it gives a reasonable value.&lt;/p&gt;
&lt;p&gt;We could get slightly more complex and get a duration from two(2) dates.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; TimeSpan Duration
    {
        get
        {
            DateTime dt1 = DateTime.Now;
            DateTime dt2 = dt1.AddMinutes(8).AddSeconds(45);
            &lt;span class="kwrd"&gt;return&lt;/span&gt; dt2.Subtract(dt1);
        }
    }&lt;/pre&gt;
&lt;p&gt;So in this code example we are adding eight(8) minutes and forty five(45) seconds to dt1. This is just to create a new date so that we can get a duration from the two of them. In a real situation you would have another date to compare against. For example, online exam started and online exam finished would give you the duration that the examination took to complete.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Pulling Data form other Data Sources&lt;/h2&gt;
&lt;p&gt;Importing data during a sync can be extremely useful if you want to merge two(2) data sources. In this example we will link &amp;lsquo;Contact&amp;rsquo; with &amp;lsquo;ContactCreditCard&amp;rsquo; not that you would ever want to do this, but for the purpose of this example this is what we&amp;rsquo;ll be doing :)&lt;/p&gt;
&lt;p&gt;First off... Add the using &lt;strong&gt;Simego.DataSync.Helpers&lt;/strong&gt; at the top of the code window (Click the plus icon to expand them)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Create Lookup Helper Dictionary&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; OleDbDataLookupHelper&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; Lookup;
    
    &lt;span class="rem"&gt;// Create new Dynamic Column for Credit Card ID&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CreditCard
    {
        get
        {
            &lt;span class="rem"&gt;// Check to see if the Helper Dictionary contains a creadit card id for the current contact&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Lookup.Items.ContainsKey(&lt;span class="kwrd"&gt;this&lt;/span&gt;.ContactID))
            {
                &lt;span class="rem"&gt;// If contact has a credit card on file, return the credit card id&lt;/span&gt;
                &lt;span class="kwrd"&gt;return&lt;/span&gt; Lookup.Items[&lt;span class="kwrd"&gt;this&lt;/span&gt;.ContactID];
            }
            &lt;span class="rem"&gt;// Otherwise leave as blank&lt;/span&gt;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
        }
    }
    
    &lt;span class="rem"&gt;// This code happens before the data is loaded&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Setup()
    {
        &lt;span class="rem"&gt;// Add items to the Lookup Helper Dictionary&lt;/span&gt;
        Lookup = &lt;span class="kwrd"&gt;new&lt;/span&gt; OleDbDataLookupHelper&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(
            &lt;span class="rem"&gt;// This uses Data Source A's connection to the database.&lt;/span&gt;
            &lt;span class="rem"&gt;// This is fine if you are connecting to a table in the same database,&lt;/span&gt;
            &lt;span class="rem"&gt;// otherwise you would have to enter a connection string like this...&lt;/span&gt;
            &lt;span class="rem"&gt;// data source=MYSERVER;initial catalog=MYDATABASE;integrated security=false;persist security info=true;User ID=MYUSERNAME;Password=MYPASSWORD;&lt;/span&gt;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceA.Settings[&lt;span class="str"&gt;"ConnectionString"&lt;/span&gt;],
            &lt;span class="rem"&gt;// This is the select statement. This selects all records from table Sales.ContactCreditCard&lt;/span&gt;
            &lt;span class="str"&gt;"SELECT * FROM Sales.ContactCreditCard"&lt;/span&gt;,
            &lt;span class="rem"&gt;// This is the column we want to use for the dictionary key&lt;/span&gt;
            &lt;span class="str"&gt;"ContactID"&lt;/span&gt;,
            &lt;span class="rem"&gt;// This is the column we want to use as the value&lt;/span&gt;
            &lt;span class="str"&gt;"CreditCardID"&lt;/span&gt;
            );
    }&lt;/pre&gt;
&lt;p&gt;The above code creates a blank dictionary which we then populate during the setup by connecting to another table in the same database. We then create a new dynamic column which checks the dictionary for a value. If the dictionary contains an item for that contact, it then uses this a its value for the current row.&lt;/p&gt;
&lt;p&gt;I hope this has helped you understand a bit more how dynamic columns work. If you need any more help just ask in the comments.
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 26 May 2011 15:04:42 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/05/Using-SQL-Agent-to-Run-Data-Sync-Projects</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using SQL Agent to Run Data Sync Projects</title>
      <description>&lt;p&gt;If you prefer to use SQL Server Agent to schedule and run your Data Synchronisation Studio projects you can do so by calling our Run Tool from SQL Server.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Create a New Job&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_0a5d4511-ed0b-4ca9-92c7-064a0deae93b"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_f90732ba-14ed-40d5-ab07-8ec43a8333b9" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Add a new CmdExec Job Step&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_ee8a32e6-ab1f-44b3-ae1a-31812e9f1cc3"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_4bb1dd4b-d74c-4944-825d-9a3e260d152c" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Set the Command to &lt;em&gt;Simego.DataSync.Run.exe&lt;/em&gt; and path to your project file.&lt;/p&gt;  &lt;p&gt;For Example&lt;/p&gt;    &lt;p&gt;"C:\Program Files\Simego\Data Synchronisation Studio 3.0\Simego.DataSync.Run.exe" &amp;quot;C:\PathToProject\project.dsrun&amp;quot; -execute -window:minimize&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Data Sync will run under the user context of SQL Agent therefore your SQL Agent service account must have enough privileges to access the resources in your Data Sync projects.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 25 May 2011 16:42:38 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/05/CRM-2011-Import-Data-and-Create-Relation-to-Account-Entity</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>CRM 2011 - Import Data and Create Relation to Account Entity</title>
      <description>&lt;p&gt;This is an example to show you how to use &lt;strong&gt;Dynamic Columns&lt;/strong&gt; to lookup values in a related CRM entity in order to create a Parent Child relationship as in Sales History to Accounts using &lt;a href="/Solutions/CRM-Integration"&gt;Data Syncronisation Studio&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this example I created a very basic sales history Excel spread sheet that contains our Internal Account Number and the value.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_59ae1ff0-05c1-4bf2-86b8-c0580242fc3d"&gt;&lt;img height="484" width="359" src="http://www.simego.com/Blog/Attachment/blog_b196edd6-20bf-4490-aca8-110ff91efe8a" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We need to lookup the Account Number against the Account entity to get the Guid of the Account to sync into the Sales History entity.&lt;/p&gt;
&lt;p&gt;We use Dynamic Columns to Load the Account Entity, build a Dictionary of Account Numbers against Account ID's and use that to decorate the Source Data with a new Dynamic Column AccountID.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt; Usings
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync.Providers.MSCrm2011;
&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceRowOverride : Simego.DataSync.DynamicColumns.DataSourceRowInternal &lt;span class="rem"&gt;//Do Not Change This Line&lt;/span&gt;
{
    &lt;span class="rem"&gt;//Category Index&lt;/span&gt;
    Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, Guid&amp;gt; accountLookup = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, Guid&amp;gt;();
    
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Create a Virtual ID column for our Key&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; Guid id 
    {
        get 
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; Guid.NewGuid();
        }
    }
    
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Return the Account ID via the Lookup Dictionary&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; accountid
    {
        get 
        { 
            &lt;span class="kwrd"&gt;if&lt;/span&gt; ( accountLookup.ContainsKey(&lt;span class="kwrd"&gt;this&lt;/span&gt;.accountnumber) )
                &lt;span class="kwrd"&gt;return&lt;/span&gt; accountLookup[&lt;span class="kwrd"&gt;this&lt;/span&gt;.accountnumber];
            
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
        } 
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Setup()
    {
        &lt;span class="rem"&gt;//Get a DataTable object of the related List via a new CRM Reader&lt;/span&gt;
        MSCrmDataSourceReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; MSCrmDataSourceReader();        
        reader.CrmServerUrl = ((MSCrmDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceB.Reader).CrmServerUrl;
        reader.Organisation = ((MSCrmDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceB.Reader).Organisation;
        reader.Entity = &lt;span class="str"&gt;"account"&lt;/span&gt;;
        &lt;span class="rem"&gt;//Create a Schema Map to return the ID and account number&lt;/span&gt;
        reader.SchemaMap = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchema();
        reader.SchemaMap.Map.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchemaItem(&lt;span class="str"&gt;"accountid"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Guid), &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, -1));
        reader.SchemaMap.Map.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchemaItem(&lt;span class="str"&gt;"accountnumber"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;), &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, -1));
        &lt;span class="rem"&gt;//Load the Data Table&lt;/span&gt;
        DataTable accounts = reader.GetDataTable();        
        &lt;span class="rem"&gt;//Create a Lookup Index to help speed-up lookups&lt;/span&gt;
        &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(DataRow r &lt;span class="kwrd"&gt;in&lt;/span&gt; accounts.Rows) 
            accountLookup.Add((&lt;span class="kwrd"&gt;string&lt;/span&gt;)r[&lt;span class="str"&gt;"accountnumber"&lt;/span&gt;], (Guid)r[&lt;span class="str"&gt;"accountid"&lt;/span&gt;]);
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;p&gt;So now we can map our source data to our Sales History Entity in CRM.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_61cf6781-7d1b-47c3-b673-291bc982262d"&gt;&lt;img height="153" width="244" src="http://www.simego.com/Blog/Attachment/blog_b161f02b-625d-483f-af9a-a9007752eb7f" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b0d16b75-edf3-488e-b686-4746115220bd"&gt;&lt;img height="163" width="644" src="http://www.simego.com/Blog/Attachment/blog_9e79480c-e578-4b81-ae86-aa0e672771c1" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After we import the Data into CRM we now have Sales History items with the related Account defined correctly.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f05beb4d-c699-4171-bfd1-f9e1b84366f3"&gt;&lt;img height="540" width="1028" src="http://www.simego.com/Blog/Attachment/blog_bf092a63-7738-4ad0-a9c2-787cf80c78d6" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Note: In this example I created a virtual ID column as I had no row in my source Excel file, this causes all entries to be deleted and added on each run as the ID changes every time. In reality you would create a key based on multiple columns i.e. Account,Year,Month for example or store a source reference instead.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 10 May 2011 14:31:48 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/05/Integrate-Applications-with-Data-Sync</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Integrate Applications with Data Sync</title>
      <description>&lt;p&gt;We've been migrating some of the features of &lt;a href="http://www.simego.com/Products/Ouvvi-Console" target="_blank"&gt;Ouvvi&lt;/a&gt; into a new Service for &lt;a href="http://www.simego.com/Products/Data-Synchronisation-Studio" target="_blank"&gt;Data Synchronisation Studio&lt;/a&gt;. This makes it possible to integrate your applications with Data Sync to initiate the Sync when data actually changes to create almost real-time data synchronisation.&lt;/p&gt;  &lt;p&gt;For example in SharePoint you might develop a List Event Handler that calls this Service to initiate a Sync when a List Item has been changed.&lt;/p&gt;  &lt;p&gt;The service is really easy to setup and configure, this time we have No Database, No IIS etc. You simply install the service, set the user account, configure the settings in the ini file and start.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Supports&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;Time of Day Triggers&lt;/li&gt;      &lt;li&gt;Time Interval Triggers&lt;/li&gt;      &lt;li&gt;Remote Project Start&lt;/li&gt;      &lt;li&gt;Remote Log View&lt;/li&gt;      &lt;li&gt;Project Re-try&lt;/li&gt;      &lt;li&gt;Queue based execution&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We also have an interactive debug console so you can see what's happening in real-time inside the Sync service.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5fdea439-5f7d-4714-af03-066676af8b34"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_fab2b14b-2c98-4050-bb34-4969cbf8fea7" width="635" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There's also a Web Status site where you can view the configuration, view the log, remotely start Data Sync projects. (does not use IIS)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_1e037111-0933-4424-b8fd-df30ed5af7ca"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_9baf0fbf-497e-4be3-9bdd-ccd80895c02e" width="644" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;All configuration is via a simple ini file like this, so it's really easy to configure. (ini file as it's easier than Xml for end users to work with)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b739398b-8fcc-42e3-be69-bad45c586702"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_8a4e2ec7-32a7-46a0-b83f-df0fa8c8b4e8" width="1028" height="685" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;To initiate a Sync project from a remote application you just have to send a HTTP request like this &lt;a href="http://localhost:4000/Start/myproject"&gt;http://localhost:4000/Start/myproject&lt;/a&gt; to the Sync service, this then registers the job in the Job Queue and to start it immediately you send another HTTP request to &lt;a href="http://localhost:4000/Wake/DataSync"&gt;http://localhost:4000/Wake/DataSync&lt;/a&gt;. If you do not send the Wake Request then the job will start the next time the Data Sync process runs i.e. 30 seconds.&amp;#160; &lt;/p&gt;  &lt;p&gt;This application is currently in private beta if you are a current Data Sync customer would like to know more please contact us at the usual address.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 09 May 2011 15:22:01 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/04/Dynamic-Column-Example-Joining-Related-SharePoint-Lists</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Dynamic Column Example Joining Related SharePoint Lists</title>
      <description>&lt;p&gt;This is an example how you can use Dynamic Columns to pull in additional data to decorate your resultset with related Data. You could easily use this same process to decorate your data with additional data from other data sources. If you think about this makes Data Sync a very powerful Data Migration/Transformation tool.&lt;/p&gt;  &lt;p&gt;In this example I created a SharePoint List with Product data from the Northwind Database I then created a Lookup List with Category names and linked the 2 lists together via a SharePoint Lookup Column.&lt;/p&gt;  &lt;p&gt;The Goal is to pull out the "Description" column from the Category List for each Product in the Product List.&lt;/p&gt;  &lt;h3&gt;Here's the Data in SharePoint&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_7b58aff8-d071-45ce-84fe-c00618853ed8"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_3b687553-31b6-421b-9335-a6b2986d21c4" width="606" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here is the code for the Dynamic Columns in here we load the "Categories" list into a Data Table from SharePoint and create an index to lookup the Description value for each row.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt; Usings
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync.Providers.MSSharePoint;
&lt;span class="preproc"&gt;#endregion&lt;/span&gt;

&lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceRowOverride : Simego.DataSync.DynamicColumns.DataSourceRowInternal &lt;span class="rem"&gt;//Do Not Change This Line&lt;/span&gt;
{
    &lt;span class="rem"&gt;//Category Data&lt;/span&gt;
    DataTable categories;
    &lt;span class="rem"&gt;//Category Index&lt;/span&gt;
    Dictionary&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;, DataRow&amp;gt; lookup = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;, DataRow&amp;gt;();
    
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Get the Category ID from the Category Lookup Column&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; O_CategoryID
    {
        get { 
            &lt;span class="kwrd"&gt;int&lt;/span&gt; ix = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Category.IndexOf(&lt;span class="str"&gt;&amp;quot;;#&amp;quot;&lt;/span&gt;);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; ( ix &amp;gt; 0 )
                &lt;span class="kwrd"&gt;return&lt;/span&gt; Convert.ToInt32(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Category.Substring(0, ix));
            
            &lt;span class="kwrd"&gt;return&lt;/span&gt; 0; 
        }
    }

    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Description&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; O_CategoryDescription {         
        get 
        { 
            &lt;span class="kwrd"&gt;object&lt;/span&gt; val = lookup[O_CategoryID][&lt;span class="str"&gt;&amp;quot;Description&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; ( val == DBNull.Value ) &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;)val;
        } 
    }
    
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Setup()
    {
        &lt;span class="rem"&gt;//Get a DataTable object of the related List via a new SharePoint Reader&lt;/span&gt;
        SharePointDataSourceReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; SharePointDataSourceReader();
        reader.ListUrl = ((SharePointDataSourceReader)&lt;span class="kwrd"&gt;this&lt;/span&gt;.DataSourceA.Reader).ListUrl;
        reader.ListName = &lt;span class="str"&gt;&amp;quot;Categories&amp;quot;&lt;/span&gt;;
        &lt;span class="rem"&gt;//Get the Default Schema for this List&lt;/span&gt;
        reader.SchemaMap = reader.GetDefaultDataSchema();
        &lt;span class="rem"&gt;//Load the Data Table&lt;/span&gt;
        categories = reader.GetDataTable();        
        &lt;span class="rem"&gt;//Create a Lookup Index to help speed-up lookups&lt;/span&gt;
        &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(DataRow r &lt;span class="kwrd"&gt;in&lt;/span&gt; categories.Rows) 
            lookup.Add((&lt;span class="kwrd"&gt;int&lt;/span&gt;)r[&lt;span class="str"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;], r);
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;This is the result, here you can see we have pulled in the Description value from the related Categories List.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e6fed86e-a40f-489a-a799-1e10968e39c6"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_53499e24-719b-420a-81da-51c413f27165" width="644" height="474" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 27 Apr 2011 10:49:19 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/04/Data-Sync-Run-Tool-Automation-Example</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Run Tool Automation Example</title>
      <description>&lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;Requires: Data Sync version 3.0.372 or higher.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;This is an example of how to use the Data Sync Run Tool to automate several steps as part of an ETL type pipeline.&lt;/p&gt;  &lt;p&gt;In this example we are going to execute the following steps.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Download an Excel Spreadsheet with data from a Http Source (SharePoint Document Library)&lt;/li&gt;    &lt;li&gt;Import/Sync this Data with a SharePoint List&lt;/li&gt;    &lt;li&gt;Delete the downloaded file once complete&lt;/li&gt;    &lt;li&gt;Send an Email if there was an error&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;First we create an Excel file with the Data we want to Sync and Upload it to a SharePoint Document Library.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2370ccc6-13d2-4821-af09-2debf88e4c59"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_50ccc058-ad1f-4d5b-bb4e-3261687758ea" width="644" height="360" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next we create a Data Sync project that will Sync this Spreadsheet with a SharePoint List, save the project and exit Data Sync.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f6d1b288-6417-4227-b0b8-00e6ae0b9c76"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_9202c0f7-5a35-4306-9801-e30fa4b32fed" width="644" height="340" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Start up the Data Sync Run Tool and add a new "HTTP Download File Step"&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_be15798e-b7e4-4c98-8ba5-8e206cefaf22"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_7fdf5396-769e-49b8-bb8e-ec0bf7550437" width="414" height="267" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Edit the configuration for the Step i.e. enter the Destination Filename and Url to the Source file i.e. http://yoda/Shared%20Documents/products.xlsx&lt;/p&gt;      &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_b5a33dc4-d0eb-4363-b8e6-eb38ec5a34a0"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_c2f5af31-2ae5-4f26-a7d9-771467a03015" width="721" height="479" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next add the Data Sync project step from the File Import menu.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d80a199e-3989-4b7c-aa30-371ffe8d3621"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_61bf556b-dd4d-4a7a-a5d5-067a77e196dd" width="721" height="479" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next create a Delete File Step to Delete the Excel File after we have processed it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_169afd40-a44f-4044-a552-0036938f6e2f"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_fbd813e8-ad73-48b4-850d-1564bb7d5606" width="721" height="479" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next add a Step to Send us an email if there was an error, the trick here is to set the Run Condition to "&lt;em&gt;Failure&lt;/em&gt;" so this step only runs if there is an Error. You will also need to enter your SMTP server details under Tools Options for this to work.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5d45e894-e193-41af-bb0d-81d934a8200e"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_db6bd42a-cf6d-4db5-8176-20ba67c46e1a" width="721" height="479" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now run the project to check that it works as expected.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_e98baa37-a2ea-4a34-bb9b-690aac70844b"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_2fc236b4-2c6d-4eda-ae52-84be71f0ff7d" width="721" height="479" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_62ad5597-c8b6-4ca7-b9d3-aeab97399aa0"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_071e938e-88a4-410c-ae73-9fa330253e24" width="721" height="479" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;That's it now all you need do is save the Run project so you can open it any time to execute it or Schedule it with Windows Task Scheduler.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 26 Apr 2011 12:53:52 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/04/Avoiding-SSL-Errors</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Avoiding SSL Errors</title>
      <description>&lt;p&gt;We have added a new feature to Data Synchronisation Studio to allow you to override the SSL validation behaviour of any of the providers. &lt;/p&gt;  &lt;p&gt;You might want to do this if your using a self signed development certificate in a non-production system. By setting the &lt;strong&gt;OverrideSSLCheck&lt;/strong&gt; property in the project properties dialog to &lt;strong&gt;true&lt;/strong&gt; forces any SSL Certificate validations to return a successful response even if the certificate is invalid.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5894f985-b031-4481-83d7-b861f3a2137e"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_53c3524b-a527-4970-9d16-f666647fcf56" width="394" height="385" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 19 Apr 2011 16:52:45 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/04/Synchronising-SharePoint-Documents-and-Metadata</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Synchronising SharePoint Documents and Metadata</title>
      <description>&lt;p&gt;We have been working on a new SharePoint provider for Data Synchronisation Studio that makes it now possible to Sync documents and metadata between SharePoint Document Libraries. You might use this provider if you want to migrate between SharePoint 2007 and SharePoint 2010 or just between an on Premise server farm and an Off Premise server farm.&lt;/p&gt;  &lt;p&gt;This new provider is the same for Lists or Document Libraries and any custom columns you have on your library are now available. &lt;/p&gt;  &lt;p&gt;With Dynamic Columns it makes it really easy to decorate your document Library columns with data, for example you can now pull files from a file share and decorate the metadata from a database and synchronise this to a SharePoint document library. Rather than a Bulk import on Day 1 you can incrementally synchronise changed files and metadata over time.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_092ce6ca-9e0d-49f1-9ad3-abe7e259c22a"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_58b56619-877c-4b8c-9279-5eb800604734" width="1028" height="583" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 19 Apr 2011 16:40:49 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/04/Create-Website-Thumbnail-Images-Based-on-Larger-Originals-Using-Data-Synchronisation-Studios-Dynamic-Columns</link>
      <author>info@simego.com (Trem)</author>
      <title>Create Website Thumbnail Images Based on Larger Originals Using Data Synchronisation Studio's Dynamic Columns</title>
      <description>&lt;p&gt;I would just like to demonstrate how to create smaller versions of your images on your website using the latest version of Data Synchronisation Studio and its dynamic columns feature.    &lt;br /&gt;The main reason you would want to do this is for a major performance boost and reduction in page loading time.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_4d72fd94-f9ea-4c5f-9307-dc82be8187b0"&gt;&lt;img style="background-image: none; margin: 0px 30px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border-width: 0px;" title="mediaServer" border="0" alt="mediaServer" align="left" src="http://www.simego.com/Blog/Attachment/blog_d28f4e0b-ff6d-4b00-a4f6-d89913cda6e6" width="155" height="238" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So if you can imagine, the image on the left is a large 700px x 1200px image that will be used for a zoom control so that customers can see the item in greater detail. This is fine for this purpose, however using this size for a product list will greatly increase page loading time, and also eat away at your bandwidth.&lt;/p&gt;
&lt;p&gt;Resizing all site images by hand using an image editing suite will take you quite a while, and of course you&amp;rsquo;ll need the image editing suite in the first place. I&amp;rsquo;m sure there are a few solutions online to do this, however if your site is database driven and images have already been stored in the database, it makes it pretty difficult to do this.&lt;/p&gt;
&lt;p style="clear: both;"&gt;Data Synchronisation Studio will pull the image data from the database and using dynamic columns we can manipulate the image using a few lines of code in C#&lt;/p&gt;
&lt;p style="clear: both;"&gt;These thumbnail images can then be used for your item lists like so&amp;hellip;&lt;/p&gt;
&lt;p style="clear: both;"&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_03586f59-a5ec-467b-bcd2-a68a380cfc77"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="productList" border="0" alt="productList" src="http://www.simego.com/Blog/Attachment/blog_41ecf754-15a7-443a-8c68-c239aa9b2fb0" width="640" height="438" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3&gt;Reducing the image size with a bit of C#&lt;/h3&gt;
&lt;p&gt;So first of all we need to connect Data Sync to the site&amp;rsquo;s database (or a copy of)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_d641a5a0-980a-4bdc-ae9f-a53befa0d59b"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="ds-c" border="0" alt="ds-c" src="http://www.simego.com/Blog/Attachment/blog_0b2a40d8-e4f7-47af-a646-17ecfe9236c5" width="640" height="441" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So here I have opened the sites attachment table, which contains the images for the site.    &lt;br /&gt;It has many columns which include &amp;lsquo;Content Type&amp;rsquo;, &amp;lsquo;Name&amp;rsquo;, &amp;lsquo;Path&amp;rsquo;, &amp;lsquo;Length&amp;rsquo;, &amp;lsquo;Checksum&amp;rsquo;, &amp;lsquo;Data&amp;rsquo; etc. The only column we will be using for the conversion is &amp;lsquo;Data&amp;rsquo;. However we will also use the &amp;lsquo;ID&amp;rsquo; column so that we can synchronise back into another table.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_29011635-47df-4746-9854-6dae25c62cdf"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="sch-map" border="0" alt="sch-map" src="http://www.simego.com/Blog/Attachment/blog_0cca1c23-66fa-4c7c-b9ff-69041dc1f3fd" width="500" height="102" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At the moment my schema map looks like this, however this will change once we have created our dynamic column.&lt;/p&gt;
&lt;p&gt;To create the dynamic column, select the dynamic columns tab and click enable. This will load the dynamic column generator with some demo code.&lt;/p&gt;
&lt;p&gt;Where it has the demo column code, replace with this&amp;hellip;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] SmallImage
    {
        get
        {
            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                &lt;span class="rem"&gt;// Create a new stream and read in the data. Where this.Data = the Data Column&lt;/span&gt;
                &lt;span class="kwrd"&gt;using&lt;/span&gt; (MemoryStream stream = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Data))
                {
                    &lt;span class="rem"&gt;// Create the original image using the stream data&lt;/span&gt;
                    &lt;span class="kwrd"&gt;using&lt;/span&gt; (Image img = Image.FromStream(stream))
                    {
                        &lt;span class="rem"&gt;// Get the image dimensions&lt;/span&gt;
                        &lt;span class="kwrd"&gt;double&lt;/span&gt; width = img.Width;
                        &lt;span class="kwrd"&gt;double&lt;/span&gt; height = img.Height;
                        
                        &lt;span class="rem"&gt;// Only resize if the image is larger than the thumbnail size&lt;/span&gt;
                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (height &amp;gt; 150)
                        {
                            &lt;span class="rem"&gt;// Find the aspect ratio so that we don't distort the image during reduction&lt;/span&gt;
                            &lt;span class="kwrd"&gt;double&lt;/span&gt; aspectRatio = width / height;
                            
                            &lt;span class="rem"&gt;// Set a fixed height for your thumbnails&lt;/span&gt;
                            height = 150;
                            
                            &lt;span class="rem"&gt;// Get the width based on the height and aspect ratio to get the correct scale&lt;/span&gt;
                            width = height * aspectRatio;
                        }
                        
                        &lt;span class="rem"&gt;// Create a new image based on the original and new size&lt;/span&gt;
                        &lt;span class="kwrd"&gt;using&lt;/span&gt; (Bitmap bmp = &lt;span class="kwrd"&gt;new&lt;/span&gt; Bitmap(img, (&lt;span class="kwrd"&gt;int&lt;/span&gt;)width, (&lt;span class="kwrd"&gt;int&lt;/span&gt;)height))
                        {
                            &lt;span class="kwrd"&gt;using&lt;/span&gt; (MemoryStream smallImage = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream())
                            {
                                &lt;span class="rem"&gt;// Save the thumbnail image and return as a byte array&lt;/span&gt;
                                bmp.Save(smallImage, ImageFormat.Png);
                                &lt;span class="kwrd"&gt;return&lt;/span&gt; smallImage.ToArray();
                            }
                        }
                    }
                }
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt;
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            }
        }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;p&gt;This code is only a basic way of reduction and only reduces the image based on its aspect ratio. You could modify the code to create fixed sized thumbnails, it really does depend on your requirements.&lt;/p&gt;
&lt;p&gt;Click build to compile the code. If all is well, which it should be, go back to your schema map and add the new dynamic column by dragging it into the schema.&lt;/p&gt;
&lt;p&gt;Click preview&amp;hellip;    &lt;br /&gt;You can now see that we have an extra column which contains the thumbnail image data.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5e784f32-f007-4c8e-9a87-03cfd1c7f4fe"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="prev-data" border="0" alt="prev-data" src="http://www.simego.com/Blog/Attachment/blog_c40186a5-3550-418e-810f-554c5317d061" width="640" height="287" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This can now be published to the existing table or a new table.&lt;/p&gt;
&lt;p&gt;Just another thing that Data Synchronisation Studio can do.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sources      &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://www.amazon.co.uk" rel="nofollow"&gt;www.amazon.co.uk&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 14 Apr 2011 11:15:57 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/04/Filter-Active-Directory-Records-before-Synchronisation</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Filter Active Directory Records before Synchronisation</title>
      <description>&lt;p&gt;You know Data Sync can synchronise user information data from your Active Directory into SharePoint and SQL etc. You can also filter what records to include by specifying a LDAP filter like this&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(&amp;amp;(objectClass=user)(memberOf=CN=SimegoDevelopers,CN=Users,DC=office,DC=simego,DC=com))&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;However this can get really complicated real fast if you actually want to do something a bit more complex.&lt;/p&gt;
&lt;p&gt;Therefore with Dynamic Column filtering it's much simpler, just override the BeginRow() method and apply your filtering with .NET Code instead. This will then be evaluated at runtime and only the rows that return true from this function will be included in the resulting data set.&lt;/p&gt;
&lt;p&gt;If you have a large AD it's still a good idea to partially filter the results with an LDAP Filter to maybe limit the OU then apply the .NET filter for the trickier parts.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; BeginRow()
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; ( &lt;span class="kwrd"&gt;this&lt;/span&gt;.MemberOf.Contains(&lt;span class="str"&gt;"Simego Developers"&lt;/span&gt;) )
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
    }&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt; &lt;span style="background-color: #ffff00;"&gt;UPDATE: IncludeRow() is now BeginRow()&lt;/span&gt;&lt;/p&gt;
&lt;style type="text/css"&gt;&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--&gt;&lt;/style&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://www.simego.com/Blog/Attachment/blog_c16b2f93-0a57-480b-a02c-7397d13cc185"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_b36bf857-c58c-4d6b-a7ac-3ddb87be52dd" width="713" height="772" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 07 Apr 2011 11:25:56 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/04/CRM-2011-Import-Custom-Entities-and-Related-Data</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>CRM 2011 Import Custom Entities and Related Data</title>
      <description>&lt;p&gt;In this example were showing how you can Import/Synchronise data from a SQL Server Database into an instance of CRM 2011 with custom entitles and Data Synchronisation Studio.&lt;/p&gt;  &lt;p&gt;We're going to import Sales Order History from the Adventure Works database and relate each Order History line to an Account in the CRM system.&lt;/p&gt;  &lt;p&gt;Using the Query below we can pull out the Sales Order Header Lines and in this example we are going to relate the Contact ID back to the Account in CRM (previously we imported the Contacts into the Account Entity using the rowguid as the accountid in the CRM system)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_dd70674a-8600-4d27-b041-c26c139ccb86"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_881f3bcf-e1ae-4a6b-994b-a282514d2d5e" width="748" height="61" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; This is the typical result we get from the Query &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_77899ad5-3528-4ba0-9b65-da5d82292a76"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ac84876c-4496-48fb-a3d0-934d625dbfe7" width="524" height="366" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next we create a new Entity in CRM with 2 custom fields, Amount and Account&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Amount Field&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f5b6635c-36f1-45db-8f22-5fac20370fed"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_2807d0ff-ffc9-4edb-ba96-48dc1afd2ab9" width="617" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Account Field&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2b97ffc0-96c3-4802-9a07-07e866c9b38a"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_329edb63-6373-4d44-ad73-e7ed8d91f77c" width="617" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We can then simply map the Data in Data Sync between the Source SQL Query and CRM entity like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f5eb54b2-fb6d-4d2e-b19a-b4c53cdf249f"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_04cda757-9586-4c48-9379-e90f16386d09" width="1028" height="611" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Schema Map&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5b580378-17f8-4ed7-99e6-8ab0d90a28d9"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_511ae989-7688-4c17-a3ac-1a083236beb6" width="708" height="196" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Compare and Sync the Data&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_5b12815a-da4c-44a8-95c3-62e314d1c755"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_53ba8645-83ba-45d3-a079-442d0793d43e" width="705" height="500" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once the Data is imported you can then create a view to view the list of Sales or records.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_4e94a540-be21-401a-8d99-7fd7d7ab2c3c"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_915757c6-33b1-4675-8d0b-90af8c5dffd5" width="836" height="772" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sales order item showing Account Relationship connected.&lt;/p&gt;              &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_499ab597-eff5-4629-9ee1-04048c064e81"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_45c6eb38-7b3e-431a-9541-c2d412d87e73" width="1028" height="580" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 01 Apr 2011 11:02:56 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/03/Automate-Export-of-Data-from-CRM-2011-Online</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Automate Export of Data from CRM 2011 Online</title>
      <description>&lt;p&gt;With Data Sync it's really easy to setup an automation task to Export Data from your Cloud based CRM 2011 instance to an on-premise SQL Server for inclusion in what ever on premise applications require the data from your CRM system.&lt;/p&gt;  &lt;p&gt;For CRM Dynamics online you will also need to install the &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c148b2df-c7af-46bb-9162-2c9422208504&amp;amp;displaylang=en"&gt;Windows Identity Foundation (WIF)&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Simply setup a Data Sync project to Connect to CRM and a Local Data Source (Data Sync can create a SQL Table automatically from the CRM Schema with the SQL Table Wizard). &lt;/p&gt;  &lt;p&gt;To improve the performance only sync the specific columns you need, remove the unwanted columns from the Schema Map and only the columns in the Schema Map will be requested.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f6925657-009c-4692-a39c-e1dc4deb3cc9"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_57ee61d7-5f8b-411f-9e4a-ef94acd696c4" width="644" height="445" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Compare the data to get a Change Set to apply to your On-Premise database&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_46db4619-de4c-4847-bbf1-75471492efe2"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_e3bb4fa7-330f-4bee-ac42-5e83dc3407fa" width="696" height="489" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sync the changes.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_cc801c4a-e8b7-4356-9bc9-b299b25b3c87"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_0f8e3cd1-4c48-411b-8ef5-a38d543bc7f6" width="698" height="918" /&gt;&lt;/a&gt;&lt;/p&gt;        &lt;p&gt;You can then set the project to run in the Run Tool and maybe run several other exports as well or transformations.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2d37d1d2-17c6-4ac1-84ae-df1bf25db807"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_ab745842-4864-4c08-b295-907d3badf279" width="644" height="329" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_2cb72db5-88b3-4355-8f4a-b2140168a837"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_de0e502c-7b64-40bd-bb1e-25b435bf2f0c" width="644" height="329" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once the project is running successfully in the run tool you can then schedule it to run with Windows Task Scheduler so it runs every day.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 25 Mar 2011 15:58:12 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/03/Sync-Import-a-Subset-of-a-SQL-Table</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Sync/Import a Subset of a SQL Table</title>
      <description>&lt;p&gt;This update to Data Sync allows you to filter the SQL Providers to return a subset of data without loosing the ability to write back to the data source. &lt;/p&gt;  &lt;p&gt;The current filter option involves writing your own SQL Command however this prevents write back to the data source. Now you can supply your own WHERE clause as a separate parameter on the configuration instead and we just append it to the query we build. Therefore now you can sync a subset of data stored in a SQL Table.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_3fef172b-5e1d-4a38-a038-81263cefb420"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_cdcf31ff-5cf5-43c7-86fa-035392bbe357" width="373" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This update is available in the &lt;a href="http://www.simego.com/Products/Data-Synchronisation-Studio#Downloads" target="_blank"&gt;beta release&lt;/a&gt; of Data Sync Studio version 3.0.356&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 25 Mar 2011 13:39:43 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/03/Update-Clean-Repair-Data</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Update/Clean/Repair Data</title>
      <description>&lt;p&gt;This is an example of how you can use Data Sync to clean up existing data as part of a migration or just a clean up exercise.&lt;/p&gt;  &lt;p&gt;If you set the source and destination objects in Data Sync to the same data source you can then use Data Transformation via Dynamic Columns to simply clean up the data, view the change results and synchronise the changes.&lt;/p&gt;  &lt;p&gt;This is an example where we're Updating the Modified Timestamp and removing all the "-" from phone numbers and making sure there is no trailing or leading whitespace. This is a fairly trivial example but you could quite easily be more adventurous and virtually do what you like as your running full .NET Framework here.&amp;#160; &lt;/p&gt;  &lt;p&gt;Create the Transformation columns with the Dynamic Column code editor.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_588eaaaf-a133-48d0-9c02-c0a466a4328c"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_25f0f624-f8e7-4950-9cac-98dc6853285b" width="749" height="408" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;You can see here it's still fast as your running compiled code against your data.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_075a71f6-4ca8-42be-9996-b456f181d301"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_029c96cb-ac77-4652-9164-680a56d1b839" width="754" height="495" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And you can preview the changes &lt;u&gt;before&lt;/u&gt; you apply them to your database (try that with SQL!)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_f2240733-7803-491f-8a24-6bffd4e19a8b"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_a790a092-809c-4295-a03a-ae2d0bf32f1f" width="749" height="681" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And now it's all in a Data Sync project you can easily run the process again by just opening the Data Sync project and running compare and sync. &lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 25 Mar 2011 12:15:46 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/03/Data-Sync-with-Azure-Storage</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync with Azure Storage</title>
      <description>&lt;p&gt;Ok so we built a version that works with Azure Blob Storage as too. This version doesn't have the same problem as the Amazon S3 version as we can store Created and Modified dates as additional meta data and return it in a single request.&lt;/p&gt;  &lt;p&gt;We're going to use this provider on our Web Server to maintain a backup of all our Web Sites and Client Sites in Azure so if we loose the server we can restore very quickly. In fact we use Quvvi to backup all our databases daily as well and now we can use this provider with Ouvvi to post the backups to Azure automatically.&lt;/p&gt;  &lt;p&gt;Download the provider here (requires Data Sync version 3.0.352)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/downloads/Simego.DataSync.Providers.Azure.zip" target="_blank"&gt;Simego.DataSync.Providers.Azure&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 23 Mar 2011 17:03:28 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/03/Data-Sync-with-Amazon-S3-Storage</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync with Amazon S3 Storage</title>
      <description>&lt;p&gt;Out of interest I had a go at building a Data Sync provider that we could use to backup our Website content to Amazon S3. &lt;/p&gt;  &lt;p&gt;It turned out to be pretty simple using the Amazon SDK, there's a couple of gotchas that cause a little trouble as we can't set the modified date of a file in S3 so instead we add some custom meta data for Created and Modified which in turn hurts our performance on the read. We have to issue a web request for each file's metadata to return the modified and created dates. Good news is that if you're not that worried about that you can remove them from the schema map and just rely on the Length of the file for change detection.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/Blog/Attachment/blog_bd60475c-5f8e-465a-8069-8870a99355fc"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/blog_7ae6730b-b5f0-4c2d-995d-bbd35e2d6046" width="644" height="322" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Download the provider from here&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/downloads/Simego.DataSync.Providers.AmazonS3.zip" target="_blank"&gt;Simego.DataSync.Providers.AmazonS3.zip&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 22 Mar 2011 16:07:18 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/03/importexportsync-data-with-dynamics-crm-2011-online</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Import/Export/Sync Data with Dynamics CRM 2011 Online</title>
      <description>&lt;p&gt;With Data Sync 3.0 we have added a data provider for &lt;a target="_blank" href="http://crm.dynamics.com/"&gt;Microsoft Dynamics CRM 2011&lt;/a&gt;. With this provider you can read/write data to CRM 2011 including the hosted online version. This provider is written from the ground up with .NET 4.0 and uses the new WCF services to read and write the data.&lt;/p&gt;
&lt;p&gt;For CRM Dynamics online you will also need to install the &lt;a target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c148b2df-c7af-46bb-9162-2c9422208504&amp;amp;displaylang=en"&gt;Windows Identity Foundation (WIF)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can connect to any CRM entity and sync data from any of the Data Sync supported data sources, i.e. SQL Server, ODBC, OLEDB, SharePoint, Exchange, OData etc. If your planning on a migration project to CRM 2011 Data Sync is an ideal tool to manage data transfer as you can quickly migrate data in a repeatable and controllable manner.&lt;/p&gt;
&lt;p&gt;As Data Sync 3.0 also includes Dynamic Columns you can also use Data Sync to decorate existing records with additional metadata by building these Dynamic Columns to reference the additional metadata.&lt;/p&gt;
&lt;p&gt;Simply connect to your CRM instance by entering your credentials (Live ID for Online), Url and choose your organisation and entity.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/24ee12ff-f28c-4439-97f1-f679423b4223"&gt;&lt;img height="448" width="635" src="http://www.simego.com/Blog/Attachment/b62e506d-9e3f-4c6f-ad33-4632af6fb094" alt="Dynamics CRM Connection Configuration Screen" title="Dynamics CRM Connection Configuration" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can then simply map your data in Data Sync and sync away &amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/4da41baf-930b-448a-87e6-bf60e9c9f582"&gt;&lt;img height="459" width="714" src="http://www.simego.com/Blog/Attachment/cbd99f55-9d46-444a-8c14-1c7bc2996a6e" alt="Dynamics CRM Import Export Mapping Screen" title="Dynamics CRM Import Export Mapping Screen" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Away you go&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/6920c2f9-0a87-44e8-a73b-454bb89ef240"&gt;&lt;img height="461" width="717" src="http://www.simego.com/Blog/Attachment/67d0c4ca-9b3a-4f63-9c9b-f1dc17721aec" alt="Integrating Dynamics CRM using Simego Data synchronisation Studio" title="Integrating Dynamics CRM using Simego Data synchronisation Studio" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Download Data Sync now &lt;a href="/Install/Data-Synchronisation-Studio" title="Download Data Sync and Sync CRM Online"&gt;here&lt;/a&gt;, connect to CRM Online and export and import whatever data you need.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 01 Mar 2011 15:48:14 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/02/using-data-sync-dynamic-columns-to-build-vcard</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using Data Sync Dynamic Columns to build VCARD</title>
      <description>&lt;p&gt;&lt;a href="http://www.infuse.je" target="_blank"&gt;Infuse Consulting&lt;/a&gt; came up with an interesting use of Dynamic Columns to convert Contact Data stored in MS CRM into a &lt;a href="http://en.wikipedia.org/wiki/VCard" target="_blank"&gt;VCard file&lt;/a&gt; which could then be loaded into Google Apps or anything that accepts a VCARD data file.&lt;/p&gt;  &lt;p&gt;What you need is a Simple Data Provider which just outputs to a plain Text file &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.simego.com/Downloads/Simego.DataSync.PlainText.zip" target="_blank"&gt;Download Add-in&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.simego.com/Downloads/Simego.DataSync.PlainText_Src.zip" target="_blank"&gt;Download Source&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/7f829ccf-5a42-4755-b939-0acd59d24435"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/fbc6b822-7c29-425a-98b2-19eb7f34e305" width="644" height="389" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here’s an example VCard Dynamic Column you just make up the VCARD data in a String and return it as a property.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/f1f14ed5-8537-47c2-845f-b8ecc4451f8b"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/02865a6a-c051-421e-948a-6154f5b960c4" width="501" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As the simple data provider never returns any data you always get ADD Actions so it writes a new file each time, it’s pretty quick so not a problem really.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/2f03d6ff-211c-4eec-a337-685709319e44"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/6319c614-6cb4-4b73-a43e-fd0c3dc21205" width="644" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The final VCARD file that you can then import into Google Apps or any other program that accepts a VCARD file. &lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/e770cc4d-8c80-4b76-95c4-4152b06c0384"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/da7655b8-8639-48f3-b3bb-c0f770814504" width="488" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 22 Feb 2011 09:52:44 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/02/data-sync-generic-xml-provider</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync: Generic Xml Provider</title>
      <description>&lt;p&gt;&lt;a target="_blank" href="http://www.simego.com/Beta"&gt;Data Sync 3.0&lt;/a&gt; is now shipping with a generic &lt;strong&gt;Xml Provider&lt;/strong&gt; where you can turn any simple Xml Feed into a Data Source and Sync to SQL, Oracle, OleDB, SharePoint etc.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Suppose you have an Xml Feed like this something simple that represents rows and columns.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/1d55dd8a-07ed-47c2-9388-369b6d32a589"&gt;&lt;img height="360" width="476" src="http://www.simego.com/Blog/Attachment/7de5aeab-bf34-4471-8476-e23e8f91c6e8" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Simply connect it to data sync with the XML File provider&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/47fd68a4-f92f-4eea-8fbc-43f333892e81"&gt;&lt;img height="448" width="635" src="http://www.simego.com/Blog/Attachment/ac26926a-e578-4e58-87f4-5f0c67b15669" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Specify the XPath expression to each node (column) you want to return&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/5ca6edbe-4ad2-4e11-b74c-22cb380d06fa"&gt;&lt;img height="376" width="511" src="http://www.simego.com/Blog/Attachment/3f595dad-efaf-4c5d-a8a1-e890517b091a" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hey presto one Xml Data Source ready for synching&amp;hellip;.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/77cbc01a-7b91-4771-8bf4-50216204a3b7"&gt;&lt;img height="415" width="644" src="http://www.simego.com/Blog/Attachment/683f6550-c0f8-4101-974f-0647d96cfd6f" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 15 Feb 2011 12:41:11 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/02/create-a-safe-database-for-developmenttesting</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Create a safe Database for Development/Testing</title>
      <description>&lt;p&gt;So we all know that developing with “REAL” data is nice however usually it’s not practical as the data is sensitive and cannot be accessed out side of a production environment. So how about Data Synchronisation Studio just obfuscate the data that’s sensitive and you can then use real data for development and testing.&lt;/p&gt;  &lt;p&gt;In data sync create a mapping between a source database and your new test database. Then create some dynamic columns to obfuscate the sensitive data such as Client Name, Company Name etc.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="/Blog/Attachment/f2179208-b303-417c-abcf-f06487d4935f"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/dc4edd0f-5860-432c-b3ad-c950da9e1952" width="644" height="372" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Using the &lt;strong&gt;ObfuscateHelper&lt;/strong&gt; class you can obfuscate a string into something less obvious but still printable.&lt;/p&gt;  &lt;p&gt;i.e.&lt;/p&gt;  &lt;p&gt;ObfuscateHelper.SimpleObfuscateValue(this.CompanyName);&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/e50cb594-dc9e-4ef1-b12b-eba358ddf7da"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/3ad70e40-481a-4254-9548-533c0bc31711" width="644" height="361" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The results then look a bit like this where the letters are repeated keeping case and any special characters.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/85513f81-b128-4de6-abc7-e9b8d88a2388"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/a8c7e6a7-dc20-432b-ae54-ae9dd032f147" width="644" height="361" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 14 Feb 2011 15:43:08 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/02/government-suppliers-contracts-data-feed</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Government Suppliers &amp; Contracts Data Feed</title>
      <description>&lt;p&gt;Today the government announced a new website &lt;a title="http://www.contractsfinder.businesslink.gov.uk/" href="http://www.contractsfinder.businesslink.gov.uk/"&gt;http://www.contractsfinder.businesslink.gov.uk/&lt;/a&gt; to give businesses access to all government contracts over £25,000 in value.&lt;/p&gt;  &lt;p&gt;This site also has an Xml data feed available so I have put together this Data Provider for &lt;a href="http://www.simego.com/Products/Data-Synchronisation-Studio" target="_blank"&gt;Data Synchronisation Studio&lt;/a&gt; so you can import the data on a daily basis into SharePoint, Excel, SQL Server etc. for analysis.&lt;/p&gt;  &lt;p&gt;This adapter is only compatible with Data Sync 3.0 which you can get from here &lt;a title="http://www.simego.com/Beta" href="http://www.simego.com/Beta"&gt;http://www.simego.com/Beta&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The adapter is available from here &lt;a href="http://www.simego.com/downloads/Simego.DataSync.ContractsFeed.zip"&gt;http://www.simego.com/downloads/Simego.DataSync.ContractsFeed.zip&lt;/a&gt; you simply install it into Data Sync as an Add-In&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Simply Connect to the &lt;strong&gt;ContractFeedReader&lt;/strong&gt; data source&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/2f7ac902-3118-441c-b410-17975faeb61e"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/ae1975b8-1119-4b46-90f0-4f267745b22e" width="644" height="451" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here’s the Data Schema Loaded&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/4d02d180-2a79-4392-a4fa-bf251a93f61e"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/0e3ede83-9eda-4aa3-b02b-b0cf024f775d" width="644" height="388" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Clicking Preview returns the data (you can then sync this to multiple data sources)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/d2ee3b95-9e26-4218-89ae-44702cf91ddd"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/5bf685f5-cfba-4d66-a1c4-912e1ffb5237" width="644" height="388" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;The Code&lt;/h3&gt;  &lt;p&gt;This is the Data Sync provider source code if you want to write your own provider or extend this one.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Xml;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync.Providers;
&lt;p&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Simego.DataSync.ContractsFeed&lt;br /&gt;
{&lt;br /&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ContractFeedReader : ReaderProviderBase&lt;br /&gt;
    {        &lt;br /&gt;
        [Category(&lt;span class="str"&gt;&amp;quot;Configuration&amp;quot;&lt;/span&gt;)]&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; FeedUrl { get; set;  }&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; ContractFeedReader()&lt;br /&gt;
        {&lt;br /&gt;
            FeedUrl = &lt;span class="str"&gt;&amp;quot;http://contractsfinder.businesslink.gov.uk/service/GetNoticeXmlFile.ashx&amp;quot;&lt;/span&gt;;&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; DataSchema GetDefaultDataSchema()&lt;br /&gt;
        {&lt;br /&gt;
            DataTable dt = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable(&lt;span class="str"&gt;&amp;quot;ContractFeed&amp;quot;&lt;/span&gt;);&lt;br /&gt;
            &lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;NoticeID&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Reference&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;DateCreated&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DateTime));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;DatePublished&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DateTime));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;DeadlineDate&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DateTime));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;ValueMin&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;double&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;ValueMax&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;double&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;OrganisationName&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;OrganisationContact&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Description&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Region&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;NoticeType&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Url&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;/p&gt;
&lt;p&gt;            dt.Columns[&lt;span class="str"&gt;&amp;quot;NoticeID&amp;quot;&lt;/span&gt;].AllowDBNull = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;
            dt.Columns[&lt;span class="str"&gt;&amp;quot;NoticeID&amp;quot;&lt;/span&gt;].Unique = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;
            &lt;br /&gt;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchema(dt); &lt;br /&gt;
                        &lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; DataTable GetDataTable()&lt;br /&gt;
        {&lt;br /&gt;
            &lt;span class="rem"&gt;//Create a Schema Mapping Helper&lt;/span&gt;&lt;br /&gt;
            DataSchemaMapping mapping = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchemaMapping(SchemaMap, Side);&lt;br /&gt;
            &lt;br /&gt;
            DataTable dt = SchemaMap.GetDataTable();&lt;/p&gt;
&lt;p&gt;            XmlDocument document = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();&lt;br /&gt;
            document.Load(FeedUrl);&lt;/p&gt;
&lt;p&gt;            XmlNodeList list = document.SelectNodes(&lt;span class="str"&gt;&amp;quot;NOTICES/NOTICE&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (XmlNode node &lt;span class="kwrd"&gt;in&lt;/span&gt; list)&lt;br /&gt;
            {&lt;br /&gt;
                DataRow row = dt.NewRow();&lt;br /&gt;
                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (DataSchemaItem item &lt;span class="kwrd"&gt;in&lt;/span&gt; SchemaMap.GetIncludedColumns())&lt;br /&gt;
                {&lt;br /&gt;
                    &lt;span class="kwrd"&gt;string&lt;/span&gt; columnName = mapping.MapColumnToDestination(item);&lt;/p&gt;
&lt;p&gt;                    &lt;span class="kwrd"&gt;switch&lt;/span&gt; (columnName)&lt;br /&gt;
                    {&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;NoticeID&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;NOTICEID&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Reference&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;REFERENCENUMBER&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;DateCreated&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;DATECREATED&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;DatePublished&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;DATEPUBLISHED&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;DeadlineDate&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;DEADLINEDATE&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;ValueMin&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;VALUEMIN&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;ValueMax&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;VALUEMAX&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;STATUS&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;OrganisationName&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;ORGANISATION/NAME&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;OrganisationContact&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;ORGANISATION/CONTACTEMAIL&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;DETAILS/TITLE&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Description&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;DETAILS/DESCRIPTION&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Region&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;REGION/@NAME&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;NoticeType&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;NOTICETYPE/@NAME&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Url&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                row[columnName] = DataSchemaTypeConverter.ConvertTo(GetNodeVal(node, &lt;span class="str"&gt;&amp;quot;URL&amp;quot;&lt;/span&gt;), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;/p&gt;
&lt;p&gt;                    }&lt;br /&gt;
                }&lt;/p&gt;
&lt;p&gt;                dt.Rows.Add(row);&lt;br /&gt;
            }&lt;/p&gt;
&lt;p&gt;            &lt;br /&gt;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; dt;&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; GetNodeVal(XmlNode node, &lt;span class="kwrd"&gt;string&lt;/span&gt; name)&lt;br /&gt;
        {&lt;br /&gt;
            XmlNode n = node.SelectSingleNode(name);&lt;br /&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (n != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;
                &lt;span class="kwrd"&gt;return&lt;/span&gt; n.InnerText;&lt;/p&gt;
&lt;p&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; DBNull.Value;&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; List&amp;lt;ProviderParameter&amp;gt; GetInitializationParameters()&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;ProviderParameter&amp;gt; parameters = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;ProviderParameter&amp;gt;();&lt;/p&gt;
&lt;p&gt;            parameters.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ProviderParameter(&lt;span class="str"&gt;&amp;quot;FeedUrl&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.FeedUrl));&lt;/p&gt;
&lt;p&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; parameters;&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Initialize(List&amp;lt;ProviderParameter&amp;gt; parameters)&lt;br /&gt;
        {&lt;br /&gt;
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ProviderParameter p &lt;span class="kwrd"&gt;in&lt;/span&gt; parameters)&lt;br /&gt;
            {&lt;br /&gt;
                &lt;span class="kwrd"&gt;switch&lt;/span&gt; (p.Name)&lt;br /&gt;
                {&lt;br /&gt;
                    &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;FeedUrl&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                        {&lt;br /&gt;
                            &lt;span class="kwrd"&gt;this&lt;/span&gt;.FeedUrl = p.Value;&lt;br /&gt;
                            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                        }&lt;br /&gt;
                    &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;br /&gt;
                        {&lt;br /&gt;
                            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/pre&gt;&lt;br /&gt;
&lt;style type="text/css"&gt;&lt;/p&gt;
&lt;p&gt;.csharpcode, .csharpcode pre&lt;br /&gt;
{&lt;br /&gt;
	font-size: small;&lt;br /&gt;
	color: black;&lt;br /&gt;
	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;
	background-color: #ffffff;&lt;br /&gt;
	/*white-space: pre;*/&lt;br /&gt;
}&lt;br /&gt;
.csharpcode pre { margin: 0em; }&lt;br /&gt;
.csharpcode .rem { color: #008000; }&lt;br /&gt;
.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;
.csharpcode .str { color: #006080; }&lt;br /&gt;
.csharpcode .op { color: #0000c0; }&lt;br /&gt;
.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;
.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;
.csharpcode .html { color: #800000; }&lt;br /&gt;
.csharpcode .attr { color: #ff0000; }&lt;br /&gt;
.csharpcode .alt &lt;br /&gt;
{&lt;br /&gt;
	background-color: #f4f4f4;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	margin: 0em;&lt;br /&gt;
}&lt;br /&gt;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 11 Feb 2011 22:40:12 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/02/data-sync-30-run-tool</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync 3.0 - Run Tool</title>
      <description>&lt;p&gt;Another new addition to Data Sync 3.0 is an upgrade to the run.exe program that you typically use to schedule Data Sync projects to run. Now this application is a full GUI application where you add steps and save as a *.dsrun solution file.&lt;/p&gt;
&lt;p&gt;Each step is either a Data Sync project or any other step type that we ship such as Email and SQL Task. Each step is executed in turn subject to the &amp;ldquo;RunCondition&amp;rdquo; which is a status of the current batch so if the batch is failing you can add a step of type &amp;ldquo;Email&amp;rdquo; with a &amp;ldquo;RunCondition&amp;rdquo; of &amp;ldquo;Failure&amp;rdquo; to send an email if the process is failing.&lt;/p&gt;
&lt;h3&gt;Main UI Window&lt;/h3&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/629d081e-d4bc-4553-8c87-544dd859d529"&gt;&lt;img height="428" width="644" src="http://www.simego.com/Blog/Attachment/bdfad062-cafd-4227-b4af-6dafaaf7ca66" alt="image" border="0" title="image" style="display: inline; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Sync SQL Database Wizard&lt;/h3&gt;
&lt;p&gt;Also we have a wizard in the program that can generate a batch of Data Sync projects and solution file to synchronise tables from one database to another without having to create each one in Data Sync.&lt;/p&gt;
&lt;p&gt;Simply point the wizard at the source and destination databases, choose a save location and that&amp;rsquo;s it.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/a87759f7-c189-4d1a-98ed-3b82a78777ad"&gt;&lt;img height="428" width="644" src="http://www.simego.com/Blog/Attachment/e281b1f7-cac6-4376-8d44-80e10a92637c" alt="image" border="0" title="image" style="display: inline; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Wizard then creates individual Data Sync project files and a solution file and opens it in the program ready to run.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/affab0e7-ef6f-4db9-a387-23e142845dd9"&gt;&lt;img height="428" width="644" src="http://www.simego.com/Blog/Attachment/b09ad70c-7510-4840-9715-a77cce3031bf" alt="image" border="0" title="image" style="display: inline; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Logging has also been improved to show you a nice list, the events are also recorded in the Windows Application log.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/4f0dc233-b10c-4fcf-9643-6a75f7453889"&gt;&lt;img height="428" width="644" src="http://www.simego.com/Blog/Attachment/931d00da-4cc0-4e07-967f-a4501ace5d16" alt="image" border="0" title="image" style="display: inline; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 01 Feb 2011 20:31:40 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/01/data-sync-30-lookup-helper-class</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync 3.0 Lookup Helper Class</title>
      <description>&lt;p&gt;We’ve created a lookup helper class that’s going to be part of Data Sync 3.0 to help when you need to lookup values that are in a different SQL Table in Dynamic Columns.&lt;/p&gt;  &lt;p&gt;You need to import the &lt;strong&gt;Simego.DataSync&lt;/strong&gt; library and then create an Instance of the &lt;strong&gt;OleDbDataLookupHelper&lt;/strong&gt; object. This is a generic object so you can define the Key and Value type as any base type. Then you need to populate the list with values in the &lt;strong&gt;Setup&lt;/strong&gt; method. Finally return a value by calling &lt;strong&gt;Lookup.Items[key]&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;The example below shows all the parts and as you can see it’s just a few lines of code.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/2fc76e24-07ea-403f-9fad-eac1ad54bcab"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/7ec60315-7e9c-4f66-87bc-81325b42d263" width="644" height="467" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 21 Jan 2011 16:08:51 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/01/import-sql-data-to-sharepoint-list</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Import SQL Data to SharePoint List</title>
      <description>&lt;p&gt;Quick 1 minute video to demo how easy it is to import data from SQL Server into a SharePoint List with Data Synchronisation Studio, even creates the List on your SharePoint server for you.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e8b1cfb8-5622-4e02-b1f1-08e2ef9761e3" class="wlWriterEditableSmartContent"&gt;&lt;div id="8a2cfcc3-1181-457a-86eb-205c8d7cc857" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=esgqAG4SVkw" target="_new"&gt;&lt;img src="http://www.simego.com/Blog/Attachment/ad0333cf-713b-4524-95e0-4b347015fa01" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('8a2cfcc3-1181-457a-86eb-205c8d7cc857'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/esgqAG4SVkw?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/esgqAG4SVkw?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Once the project is setup you can easily save it as a project and repeat the import applying only the changed data back to your SharePoint List.&lt;/p&gt;  &lt;p&gt;The reverse is also possible by comparing the data in SharePoint against the SQL Table this way any changes in SharePoint are applied to your SQL Table.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sat, 15 Jan 2011 14:07:20 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/01/data-sync-30dynamic-columns-demo-video</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync 3.0 – Dynamic Columns Demo Video</title>
      <description>&lt;p&gt;
&lt;p&gt;Quick 1 minute demo to show how easy it is to create Data Transformations with Dynamic columns in Data Sync 3.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;"&gt;
&lt;div id="e557aa04-5169-4f77-86bf-728f98889e59" style="margin: 0px; padding: 0px; display: inline;"&gt;
&lt;div&gt;&lt;a target="_new" href="http://www.youtube.com/watch?v=LhtTfx9Zpbc"&gt;&lt;img galleryimg="no" onload="var downlevelDiv = document.getElementById('e557aa04-5169-4f77-86bf-728f98889e59'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/LhtTfx9Zpbc?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/LhtTfx9Zpbc?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" src="http://www.simego.com/Blog/Attachment/85b2acbd-bcc6-4e40-92e3-afce1299cbae" style="border-style: none;" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 12 Jan 2011 16:20:38 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/01/data-sync-30-row-filter</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync 3.0 – Row Filter</title>
      <description>&lt;p&gt;With the Dynamic Column support in Data Sync 3.0 it is now possible to filter rows from Data Source A client side. You simply override the method &lt;strong&gt;IncludeRow()&lt;/strong&gt; and return &lt;strong&gt;true&lt;/strong&gt; if you want to keep it or &lt;strong&gt;false&lt;/strong&gt; if you don’t want to pass it on to the comparison engine.&lt;/p&gt;  &lt;p&gt;The example below only returns rows where the City equals “London”.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/f00a51f4-265e-48e8-961e-1a22fa3ea7d8"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/dfb3d1eb-b911-41db-90e1-b168110c5089" width="644" height="468" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt; &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 12 Jan 2011 13:39:54 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/01/data-sync-30-compile-time-error-improvements</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync 3.0 – Compile Time Error Improvements</title>
      <description>&lt;p&gt;We’ve made some improvements with how compile time errors are displayed within the Dynamic Columns designer.&lt;/p&gt;  &lt;p&gt;When we get a compile error the error line is now displayed in Yellow as below and double clicking on the error will take you to the line that has the error in the compiled output window.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/6e6cd3c1-c960-401e-bcc6-3d3ef5290191"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/439c5def-1650-4815-9a77-11d2632db9ed" width="644" height="430" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The line with the error also displays the wavy red-line to guide you to the problem. To fix the error simply switch back to the Source Code editor and edit the code.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/9edb024c-babe-4fc4-bb4b-84e3237ddf3f"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/071b238e-a07f-43de-8bfb-8d023be64f2b" width="644" height="425" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 12 Jan 2011 13:22:25 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/01/data-sync-studio-30-intellisense</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Studio 3.0 - Intellisense</title>
      <description>&lt;p&gt;We’ve made a few changes to the Dynamic Column feature in Data Sync 3.0 to include full intellisense, also now you can access any assembly that is loaded inside the Data Sync AppDomain.&lt;/p&gt;  &lt;p&gt;With this new feature it makes it just too easy to transform your data from one format to another, I am not sure we should make it this easy!&lt;/p&gt;  &lt;h3&gt;Screenshot of the Designer&lt;/h3&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/1506b29f-bbbc-4c13-b11f-5b064d1a5fdf"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/bc0a26e5-3134-4955-a273-0cca452fc10b" width="644" height="430" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 11 Jan 2011 09:22:51 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/01/validate-domain-names</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Validate Domain Names</title>
      <description>&lt;p&gt;Going one step further we can validate the domain names by testing each row to see if there is a web site on the end with this simple Dynamic Column in Data Sync 3.0&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Net;
&lt;p&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceRowOverride : DataSourceRowInternal&lt;br /&gt;
{    &lt;br /&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; EmailDomain { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; GetDomainName(Email); } }&lt;br /&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsValidDomainName { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; IsValidDomain(EmailDomain); } }&lt;/p&gt;
&lt;p&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetDomainName(&lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;) &lt;br /&gt;
    {&lt;br /&gt;
        var expression = &lt;span class="kwrd"&gt;new&lt;/span&gt; Regex(&lt;span class="str"&gt;@&amp;quot;[A-Z0-9._%-]+@([A-Z0-9.-]+\.[A-Z]{2,4})&amp;quot;&lt;/span&gt;, RegexOptions.IgnoreCase);&lt;br /&gt;
        &lt;br /&gt;
        var match = expression.Match(&lt;span class="kwrd"&gt;value&lt;/span&gt;);&lt;br /&gt;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; ( match.Success )&lt;br /&gt;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; match.Result(&lt;span class="str"&gt;&amp;quot;$1&amp;quot;&lt;/span&gt;);&lt;br /&gt;
            &lt;br /&gt;
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsValidDomain(&lt;span class="kwrd"&gt;string&lt;/span&gt; domainName) &lt;br /&gt;
    {&lt;br /&gt;
        &lt;span class="kwrd"&gt;try&lt;/span&gt; &lt;br /&gt;
        {&lt;br /&gt;
            var request = HttpWebRequest.Create(&lt;span class="str"&gt;&amp;quot;http://www.&amp;quot;&lt;/span&gt; + domainName);&lt;br /&gt;
            request.Timeout = 1000;&lt;br /&gt;
            &lt;span class="kwrd"&gt;using&lt;/span&gt;(var response = request.GetResponse()) &lt;br /&gt;
            {&lt;br /&gt;
                &lt;br /&gt;
            }    &lt;br /&gt;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;
        } &lt;br /&gt;
        &lt;span class="kwrd"&gt;catch&lt;/span&gt;(WebException)&lt;br /&gt;
        {&lt;br /&gt;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;    &lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;&lt;/pre&gt;

&lt;br /&gt;&lt;style type="text/css"&gt;
&lt;br /&gt;
.csharpcode, .csharpcode pre&lt;br /&gt;
{&lt;br /&gt;
	font-size: small;&lt;br /&gt;
	color: black;&lt;br /&gt;
	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;
	background-color: #ffffff;&lt;br /&gt;
	/*white-space: pre;*/&lt;br /&gt;
}&lt;br /&gt;
.csharpcode pre { margin: 0em; }&lt;br /&gt;
.csharpcode .rem { color: #008000; }&lt;br /&gt;
.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;
.csharpcode .str { color: #006080; }&lt;br /&gt;
.csharpcode .op { color: #0000c0; }&lt;br /&gt;
.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;
.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;
.csharpcode .html { color: #800000; }&lt;br /&gt;
.csharpcode .attr { color: #ff0000; }&lt;br /&gt;
.csharpcode .alt &lt;br /&gt;
{&lt;br /&gt;
	background-color: #f4f4f4;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	margin: 0em;&lt;br /&gt;
}&lt;br /&gt;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 04 Jan 2011 16:25:26 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/01/using-regular-expressions-with-data-sync-30</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using Regular Expressions with Data Sync 3.0</title>
      <description>&lt;p&gt;This is a real quick example of how to use a regular expression with Data Sync 3.0 Dynamic Columns to extract the Domain Name from a users Email address.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/e4c427a9-269c-4d3a-9e26-04274dc11a48"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/fa4c6d7d-3fc5-40a8-8c5a-ad2e651d8ed2" width="644" height="399" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Dynamic Column Code&lt;/h3&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceRowOverride : DataSourceRowInternal
{    
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; EmailDomain { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; GetDomainName(Email); } }
        
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetDomainName(&lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;) 
    {
        var expression = &lt;span class="kwrd"&gt;new&lt;/span&gt; Regex(&lt;span class="str"&gt;@&amp;quot;[A-Z0-9._%-]+@([A-Z0-9.-]+\.[A-Z]{2,4})&amp;quot;&lt;/span&gt;, RegexOptions.IgnoreCase);
        
        var match = expression.Match(&lt;span class="kwrd"&gt;value&lt;/span&gt;);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; ( match.Success )
            &lt;span class="kwrd"&gt;return&lt;/span&gt; match.Result(&lt;span class="str"&gt;&amp;quot;$1&amp;quot;&lt;/span&gt;);
            
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 04 Jan 2011 15:47:23 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2011/01/referencing-external-data-with-data-sync-30</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Referencing External Data with Data Sync 3.0</title>
      <description>&lt;p&gt;This example shows how you can reference data which is held in an external database from within the new Dynamic Column support of Data Sync 3.0.&lt;/p&gt;  &lt;p&gt;This is a rather trivial example however it shows the concept.&lt;/p&gt;  &lt;p&gt;Override the “&lt;strong&gt;Setup&lt;/strong&gt;” method and implement the data loading in this method, for this example were creating a Dictionary of Email Addresses keyed on the Row ID. Setup is only called once during the load process of the Data Source so it’s a good place to load this data.&lt;/p&gt;  &lt;p&gt;The Settings object is a dictionary of settings configured for the Data Source so we can easily pull out the database connection string from this list.&lt;/p&gt;  &lt;p&gt;The Property &lt;strong&gt;Email4&lt;/strong&gt; returns the Email address from the Dictionary rather than the actual Data source.&lt;/p&gt;  &lt;p&gt;We can even add out own Using statements at the top of the class. &lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/e4ff7ef2-0a38-4a88-b96f-c7f4766ef41f"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/3d3d0e83-9bd6-48f4-b15e-9f7139658989" width="644" height="399" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Our Code for the Project&lt;/h3&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data.OleDb;
&lt;p&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceRowOverride : DataSourceRowInternal&lt;br /&gt;
{&lt;br /&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Email4 { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; Lookup[ID]; } }&lt;br /&gt;
    &lt;br /&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; Lookup = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;br /&gt;
    &lt;br /&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Setup() &lt;br /&gt;
    {&lt;br /&gt;
        &lt;span class="kwrd"&gt;string&lt;/span&gt; connectionString = Settings[&lt;span class="str"&gt;&amp;quot;ConnectionString&amp;quot;&lt;/span&gt;];    &lt;br /&gt;
        &lt;br /&gt;
        &lt;span class="kwrd"&gt;using&lt;/span&gt;(OleDbConnection c = &lt;span class="kwrd"&gt;new&lt;/span&gt; OleDbConnection(connectionString)) &lt;br /&gt;
        {&lt;br /&gt;
            c.Open();&lt;br /&gt;
            &lt;br /&gt;
            &lt;span class="kwrd"&gt;using&lt;/span&gt;(OleDbCommand cmd = &lt;span class="kwrd"&gt;new&lt;/span&gt; OleDbCommand(&lt;span class="str"&gt;&amp;quot;SELECT * FROM Clients_D&amp;quot;&lt;/span&gt;, c)) &lt;br /&gt;
            {&lt;br /&gt;
                OleDbDataReader dbReader = cmd.ExecuteReader();&lt;br /&gt;
                &lt;span class="kwrd"&gt;while&lt;/span&gt;(dbReader.Read())&lt;br /&gt;
                    Lookup.Add((&lt;span class="kwrd"&gt;int&lt;/span&gt;)dbReader[&lt;span class="str"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;], (&lt;span class="kwrd"&gt;string&lt;/span&gt;)dbReader[&lt;span class="str"&gt;&amp;quot;Email&amp;quot;&lt;/span&gt;]);&lt;br /&gt;
                    &lt;br /&gt;
            }    &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/pre&gt;&lt;/p&gt;
&lt;h3&gt;Complete Generated Code&lt;/h3&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;#region&lt;/span&gt; Usings
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text.RegularExpressions;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync.Interfaces;
&lt;span class="preproc"&gt;#endregion&lt;/span&gt;
&lt;p&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Simego.DataSync.DynamicColumns_631D8F4B &lt;br /&gt;
{&lt;br /&gt;
    &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data.OleDb;&lt;br /&gt;
    &lt;br /&gt;
    &lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceRowOverride_631D8F4B : DataSourceRowInternal_631D8F4B&lt;br /&gt;
    {&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Email4 { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; Lookup[ID]; } }&lt;br /&gt;
        &lt;br /&gt;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; Lookup = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;br /&gt;
        &lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Setup() &lt;br /&gt;
        {&lt;br /&gt;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; connectionString = Settings[&lt;span class="str"&gt;&amp;quot;ConnectionString&amp;quot;&lt;/span&gt;];    &lt;br /&gt;
            &lt;br /&gt;
            &lt;span class="kwrd"&gt;using&lt;/span&gt;(OleDbConnection c = &lt;span class="kwrd"&gt;new&lt;/span&gt; OleDbConnection(connectionString)) &lt;br /&gt;
            {&lt;br /&gt;
                c.Open();&lt;br /&gt;
                &lt;br /&gt;
                &lt;span class="kwrd"&gt;using&lt;/span&gt;(OleDbCommand cmd = &lt;span class="kwrd"&gt;new&lt;/span&gt; OleDbCommand(&lt;span class="str"&gt;&amp;quot;SELECT * FROM Clients_D&amp;quot;&lt;/span&gt;, c)) &lt;br /&gt;
                {&lt;br /&gt;
                    OleDbDataReader dbReader = cmd.ExecuteReader();&lt;br /&gt;
                    &lt;span class="kwrd"&gt;while&lt;/span&gt;(dbReader.Read())&lt;br /&gt;
                        Lookup.Add((&lt;span class="kwrd"&gt;int&lt;/span&gt;)dbReader[&lt;span class="str"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;], (&lt;span class="kwrd"&gt;string&lt;/span&gt;)dbReader[&lt;span class="str"&gt;&amp;quot;Email&amp;quot;&lt;/span&gt;]);&lt;br /&gt;
                        &lt;br /&gt;
                }    &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
    &lt;span class="preproc"&gt;#region&lt;/span&gt; Generated Code&lt;br /&gt;
    &lt;span class="kwrd"&gt;class&lt;/span&gt; DataSourceRowInternal_631D8F4B : IDataSourceRow &lt;br /&gt;
    {&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; Settings { get; set; }&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; IDataSourceReader Reader { get; set; }&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; DataRow Row { get; set; }&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; DataTable Table { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; Row.Table; } }&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; TraceWriter Trace { get; set; }&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; ID { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt;)Row[&lt;span class="str"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;]; } }&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Logo { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;)(Row[&lt;span class="str"&gt;&amp;quot;Logo&amp;quot;&lt;/span&gt;] == DBNull.Value ? &lt;span class="kwrd"&gt;null&lt;/span&gt; : Row[&lt;span class="str"&gt;&amp;quot;Logo&amp;quot;&lt;/span&gt;]); } }&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Email { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;)(Row[&lt;span class="str"&gt;&amp;quot;Email&amp;quot;&lt;/span&gt;] == DBNull.Value ? &lt;span class="kwrd"&gt;null&lt;/span&gt; : Row[&lt;span class="str"&gt;&amp;quot;Email&amp;quot;&lt;/span&gt;]); } }&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Setup() { &lt;span class="rem"&gt;/* Override Setup to handle any Startup Initialization. */&lt;/span&gt; }&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BeginRow( &lt;span class="rem"&gt;/* Override BeginRow to handle any Initialization on each row. */&lt;/span&gt;) { }&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IncludeRow() { &lt;span class="rem"&gt;/* Override IncludeRow to filter out rows. */&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;; }&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; EndRow( &lt;span class="rem"&gt;/* Override EndRow to handle any Cleanup on each row. */&lt;/span&gt; ) { } &lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;    &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;br /&gt;
}&lt;/pre&gt;&lt;br /&gt;
&lt;style type="text/css"&gt;&lt;/p&gt;
&lt;p&gt;.csharpcode, .csharpcode pre&lt;br /&gt;
{&lt;br /&gt;
	font-size: small;&lt;br /&gt;
	color: black;&lt;br /&gt;
	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;
	background-color: #ffffff;&lt;br /&gt;
	/*white-space: pre;*/&lt;br /&gt;
}&lt;br /&gt;
.csharpcode pre { margin: 0em; }&lt;br /&gt;
.csharpcode .rem { color: #008000; }&lt;br /&gt;
.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;
.csharpcode .str { color: #006080; }&lt;br /&gt;
.csharpcode .op { color: #0000c0; }&lt;br /&gt;
.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;
.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;
.csharpcode .html { color: #800000; }&lt;br /&gt;
.csharpcode .attr { color: #ff0000; }&lt;br /&gt;
.csharpcode .alt &lt;br /&gt;
{&lt;br /&gt;
	background-color: #f4f4f4;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	margin: 0em;&lt;br /&gt;
}&lt;br /&gt;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;&lt;/p&gt;
&lt;p&gt;.csharpcode, .csharpcode pre&lt;br /&gt;
{&lt;br /&gt;
	font-size: small;&lt;br /&gt;
	color: black;&lt;br /&gt;
	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;
	background-color: #ffffff;&lt;br /&gt;
	/*white-space: pre;*/&lt;br /&gt;
}&lt;br /&gt;
.csharpcode pre { margin: 0em; }&lt;br /&gt;
.csharpcode .rem { color: #008000; }&lt;br /&gt;
.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;
.csharpcode .str { color: #006080; }&lt;br /&gt;
.csharpcode .op { color: #0000c0; }&lt;br /&gt;
.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;
.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;
.csharpcode .html { color: #800000; }&lt;br /&gt;
.csharpcode .attr { color: #ff0000; }&lt;br /&gt;
.csharpcode .alt &lt;br /&gt;
{&lt;br /&gt;
	background-color: #f4f4f4;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	margin: 0em;&lt;br /&gt;
}&lt;br /&gt;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 04 Jan 2011 15:29:29 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/12/data-synchronisation-studio-30-dynamic-columns</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio 3.0 : Dynamic Columns</title>
      <description>&lt;p&gt;Data Sync 3.0 adds the ability to write custom Dynamic/Calculated columns to your Source Data Schema. You write these columns as Properties within a C# class and they are then exposed in the schema like this. Once they're designed you can simply drag them onto the Schema Map like any other column.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/fd55a1b5-62e3-4f3d-8e24-9f03a5d347eb"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/712a6753-58ab-4a66-b538-bd62d585a23a" width="644" height="368" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The design of the properties is built into Data Sync itself so you simply write the code and hit the Build button to verify that your code builds and update the schema.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;First you need to enable Dynamic Columns in your project by clicking the “&lt;strong&gt;Enable Dynamic Columns&lt;/strong&gt;” link in the Dynamic Columns window.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/bcc9824f-19fa-4c97-ad4c-a3d3addc8c7f"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/d08a8016-26c5-47b5-aba1-462861e359c2" width="644" height="418" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now you can write your properties using usual C# syntax and with the full power of the .NET 4.0 framework.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/8719a4c1-c10e-4c05-811b-96afcb1fc241"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/bc234520-ac4e-4e09-9485-8a45af9aa3ad" width="644" height="418" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Building the code generates an assembly at runtime which is used to return the values of the dynamic column.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/dfc53219-0425-4d25-8d45-ba3b5eb55ac7"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/58d492f5-dc3d-4f20-a69a-62748a95cf92" width="644" height="418" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;With these new dynamic columns you can inject formatting, new columns, calculations etc into the sync process without having to resort to SQL as before.&lt;/p&gt;  &lt;p&gt;You can also use this feature to clean up/fix your data by pointing the source and destination at the same database table and writing dynamic columns to transform the data.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 31 Dec 2010 12:21:54 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/12/basecamp-highrise-data-sync-provider</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Basecamp &amp; Highrise Data Sync Provider</title>
      <description>&lt;p&gt;&lt;a href="http://www.simego.com/downloads/Simego.37Signals.Provider.zip"&gt;Download Data Sync Add-in&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I have just put together a Data Sync provider which connects to 37 Signals &lt;a href="http://highrisehq.com/"&gt;Highrise&lt;/a&gt; and &lt;a href="http://basecamphq.com/"&gt;Basecamp&lt;/a&gt; to pull Company and People data from those accounts so that you can integrate the data with your other systems.&lt;/p&gt;  &lt;p&gt;Once you install the add-in into Data Sync just enter the URL to your Highrise or Basecamp account and your API key to get going.&lt;/p&gt;  &lt;p&gt;Once you have connected to the Data Source it’s really easy to then import the data into other systems such as SharePoint Lists, SQL Databases etc. (i.e. Maintain your client list centrally in Highrise and sync it to your other LOB systems).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Connection Dialog&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/c6974554-0f7d-477d-9a95-0d9004286135"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/08fa4340-50aa-47f7-95ae-e7c56080443a" width="644" height="451" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;BaseCamp Data in Data Sync&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/3c9c706a-ec2f-4450-a443-a71df6532348"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/bef46f55-2578-473a-ac16-251fcfdb9b8c" width="644" height="440" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 17 Dec 2010 11:53:54 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/12/developing-a-data-sync-custom-provider</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Developing a Data Sync Custom Provider</title>
      <description>&lt;p&gt;This is an example of a Data Provider for Data Sync that uses the base class &lt;strong&gt;ReadOnlyReaderProviderBase&lt;/strong&gt; to reduce the effort required to build a provider.&lt;/p&gt;  &lt;p&gt;Essentially you have to provide an implementation for the following methods.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;GetDataTable&lt;/strong&gt; – Return the Data.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;GetDefaultDataSchema&lt;/strong&gt; – Describe the Schema of the Source.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;GetInitializationParameters&lt;/strong&gt; – Describe what input parameters the provider requires.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Initialize&lt;/strong&gt; – Populate the parameter values.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You will need to reference 2 Simego assemblies &lt;em&gt;Simego.DataSync.dll&lt;/em&gt; and &lt;em&gt;Simego.DataSync.Providers.dll&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Once you have a provider built you just drop it in the Data Sync install directory to make it available.&lt;/p&gt;  &lt;h3&gt;Sample Code&lt;/h3&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Xml;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync.Providers;
&lt;p&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Simego.DataSync.FXRateProvider&lt;br /&gt;
{&lt;br /&gt;
    [ProviderInfo(Name = &lt;span class="str"&gt;&amp;quot;FX Rates&amp;quot;&lt;/span&gt;)]&lt;br /&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; FXRatesDataSourceReader : ReadOnlyReaderProviderBase&lt;br /&gt;
    {                        &lt;br /&gt;
        [Category(&lt;span class="str"&gt;&amp;quot;Connection&amp;quot;&lt;/span&gt;)]&lt;br /&gt;
        [Description(&lt;span class="str"&gt;&amp;quot;Filename of the Excel file to read.&amp;quot;&lt;/span&gt;)]&lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BaseCurrency { get; set; }&lt;br /&gt;
        &lt;br /&gt;
        &lt;span class="preproc"&gt;#region&lt;/span&gt; IDataSourceReader Members&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; FXRatesDataSourceReader()&lt;br /&gt;
            : &lt;span class="kwrd"&gt;base&lt;/span&gt;()&lt;br /&gt;
        {&lt;br /&gt;
            BaseCurrency = &lt;span class="str"&gt;&amp;quot;USD&amp;quot;&lt;/span&gt;;&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; DataTable GetDataTable()&lt;br /&gt;
        {&lt;br /&gt;
            &lt;span class="rem"&gt;//Get a Table to store the results.&lt;/span&gt;&lt;br /&gt;
            DataTable dt = SchemaMap.GetDataTable();&lt;br /&gt;
            dt.TableName = &lt;span class="str"&gt;&amp;quot;FXRates&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p&gt;            &lt;span class="rem"&gt;//Create a Schema Mapping Helper&lt;/span&gt;&lt;br /&gt;
            DataSchemaMapping mapping = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchemaMapping(SchemaMap, Side);&lt;br /&gt;
            &lt;span class="rem"&gt;//Get the Rates from Yahoo&lt;/span&gt;&lt;br /&gt;
            Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;double&lt;/span&gt;&amp;gt; rates = GetFXRates();&lt;br /&gt;
            &lt;br /&gt;
            &lt;span class="rem"&gt;//Caculate the Conversion Rate from other base currency&lt;/span&gt;&lt;br /&gt;
            &lt;span class="kwrd"&gt;double&lt;/span&gt; conversion_rate = 1 / rates[BaseCurrency];&lt;/p&gt;
&lt;p&gt;            &lt;span class="rem"&gt;//Create a Sorted List of Rates&lt;/span&gt;&lt;br /&gt;
            var rateList = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;br /&gt;
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; k &lt;span class="kwrd"&gt;in&lt;/span&gt; rates.Keys)&lt;br /&gt;
                rateList.Add(k);&lt;br /&gt;
            rateList.Sort();&lt;/p&gt;
&lt;p&gt;            &lt;span class="rem"&gt;//Populate the Rates Table&lt;/span&gt;&lt;br /&gt;
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; k &lt;span class="kwrd"&gt;in&lt;/span&gt; rateList)&lt;br /&gt;
            {&lt;br /&gt;
                DataRow newRow = dt.NewRow();&lt;br /&gt;
                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (DataSchemaItem item &lt;span class="kwrd"&gt;in&lt;/span&gt; SchemaMap.GetIncludedColumns())&lt;br /&gt;
                {&lt;br /&gt;
                    &lt;span class="kwrd"&gt;string&lt;/span&gt; columnName = mapping.MapColumnToDestination(item);&lt;br /&gt;
                    &lt;span class="kwrd"&gt;switch&lt;/span&gt; (columnName)&lt;br /&gt;
                    {&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                newRow[item.ColumnName] = DataSchemaTypeConverter.ConvertTo(k, item.DataType); &lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Rate&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                newRow[item.ColumnName] = DataSchemaTypeConverter.ConvertTo(Math.Round(rates[k] * conversion_rate, 4), item.DataType);&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                        &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;br /&gt;
                            {&lt;br /&gt;
                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                            }&lt;br /&gt;
                    }                    &lt;br /&gt;
                }&lt;/p&gt;
&lt;p&gt;                dt.Rows.Add(newRow);&lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;p&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; dt;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; DataSchema GetDefaultDataSchema()&lt;br /&gt;
        {&lt;br /&gt;
            DataTable dt = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable(&lt;span class="str"&gt;&amp;quot;FXRates&amp;quot;&lt;/span&gt;);&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;br /&gt;
            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Rate&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;double&lt;/span&gt;));&lt;/p&gt;
&lt;p&gt;            dt.Columns[&lt;span class="str"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;].AllowDBNull = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;
            dt.Columns[&lt;span class="str"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;].Unique = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;
            dt.Columns[&lt;span class="str"&gt;&amp;quot;Rate&amp;quot;&lt;/span&gt;].AllowDBNull = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/p&gt;
&lt;p&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchema(dt);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; List&amp;lt;ProviderParameter&amp;gt; GetInitializationParameters()&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;ProviderParameter&amp;gt; parameters = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;ProviderParameter&amp;gt;();&lt;/p&gt;
&lt;p&gt;            parameters.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ProviderParameter(&lt;span class="str"&gt;&amp;quot;BaseCurrency&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.BaseCurrency));&lt;br /&gt;
            &lt;br /&gt;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; parameters;&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Initialize(List&amp;lt;ProviderParameter&amp;gt; parameters)&lt;br /&gt;
        {&lt;br /&gt;
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ProviderParameter p &lt;span class="kwrd"&gt;in&lt;/span&gt; parameters)&lt;br /&gt;
            {                &lt;br /&gt;
                &lt;span class="kwrd"&gt;switch&lt;/span&gt; (p.Name)&lt;br /&gt;
                {&lt;br /&gt;
                    &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;BaseCurrency&amp;quot;&lt;/span&gt;:&lt;br /&gt;
                        {&lt;br /&gt;
                            &lt;span class="kwrd"&gt;this&lt;/span&gt;.BaseCurrency = p.Value;&lt;br /&gt;
                            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                        }&lt;br /&gt;
                    &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;br /&gt;
                        {&lt;br /&gt;
                            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;      &lt;br /&gt;
        &lt;br /&gt;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;double&lt;/span&gt;&amp;gt; GetFXRates()&lt;br /&gt;
        {&lt;br /&gt;
            Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;double&lt;/span&gt;&amp;gt; rates = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;double&lt;/span&gt;&amp;gt;();&lt;br /&gt;
            XmlReader reader = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;br /&gt;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; name = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;br /&gt;
            &lt;span class="kwrd"&gt;double&lt;/span&gt; price = 0;&lt;br /&gt;
            &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;
            {&lt;br /&gt;
                reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(&lt;span class="str"&gt;&amp;quot;http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote;currency=true?view=basic&amp;amp;format=xml&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p&gt;                &lt;span class="rem"&gt;//Add the Default USD Rate&lt;/span&gt;&lt;br /&gt;
                rates.Add(&lt;span class="str"&gt;&amp;quot;USD&amp;quot;&lt;/span&gt;, 1);&lt;/p&gt;
&lt;p&gt;                &lt;span class="kwrd"&gt;while&lt;/span&gt; (reader.Read())&lt;br /&gt;
                {&lt;br /&gt;
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.NodeType == XmlNodeType.Element)&lt;br /&gt;
                    {&lt;/p&gt;
&lt;p&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.Name.Equals(&lt;span class="str"&gt;&amp;quot;field&amp;quot;&lt;/span&gt;, StringComparison.OrdinalIgnoreCase))&lt;br /&gt;
                        {&lt;br /&gt;
                            &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.GetAttribute(&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;) == &lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;)&lt;br /&gt;
                            {&lt;br /&gt;
                                &lt;span class="kwrd"&gt;string&lt;/span&gt; ccy = reader.ReadElementString();&lt;br /&gt;
                                &lt;span class="kwrd"&gt;if&lt;/span&gt; (ccy.StartsWith(&lt;span class="str"&gt;&amp;quot;USD/&amp;quot;&lt;/span&gt;))&lt;br /&gt;
                                    name = ccy.Substring(4);&lt;br /&gt;
                            }&lt;/p&gt;
&lt;p&gt;                            &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.GetAttribute(&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;) == &lt;span class="str"&gt;&amp;quot;price&amp;quot;&lt;/span&gt;)&lt;br /&gt;
                            {&lt;br /&gt;
                                price = Convert.ToDouble(reader.ReadElementString());&lt;br /&gt;
                            }&lt;/p&gt;
&lt;p&gt;                            &lt;span class="kwrd"&gt;if&lt;/span&gt; (name != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; price != 0)&lt;br /&gt;
                            {&lt;br /&gt;
                                rates.Add(name, price);&lt;/p&gt;
&lt;p&gt;                                name = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;br /&gt;
                                price = 0;&lt;/p&gt;
&lt;p&gt;                            }&lt;/p&gt;
&lt;p&gt;                        }&lt;/p&gt;
&lt;p&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.Name.Equals(&lt;span class="str"&gt;&amp;quot;resource&amp;quot;&lt;/span&gt;, StringComparison.OrdinalIgnoreCase))&lt;br /&gt;
                        {&lt;br /&gt;
                            name = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;br /&gt;
                            price = 0;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            &lt;span class="kwrd"&gt;finally&lt;/span&gt;&lt;br /&gt;
            {&lt;br /&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;
                    reader.Close();&lt;br /&gt;
            }&lt;/p&gt;
&lt;p&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; rates;&lt;br /&gt;
        } &lt;br /&gt;
    }&lt;br /&gt;
}&lt;/pre&gt;&lt;br /&gt;
&lt;style type="text/css"&gt;&lt;br /&gt;
.csharpcode, .csharpcode pre&lt;br /&gt;
{&lt;br /&gt;
	font-size: small;&lt;br /&gt;
	color: black;&lt;br /&gt;
	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;
	background-color: #ffffff;&lt;br /&gt;
	/*white-space: pre;*/&lt;br /&gt;
}&lt;br /&gt;
.csharpcode pre { margin: 0em; }&lt;br /&gt;
.csharpcode .rem { color: #008000; }&lt;br /&gt;
.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;
.csharpcode .str { color: #006080; }&lt;br /&gt;
.csharpcode .op { color: #0000c0; }&lt;br /&gt;
.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;
.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;
.csharpcode .html { color: #800000; }&lt;br /&gt;
.csharpcode .attr { color: #ff0000; }&lt;br /&gt;
.csharpcode .alt &lt;br /&gt;
{&lt;br /&gt;
	background-color: #f4f4f4;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	margin: 0em;&lt;br /&gt;
}&lt;br /&gt;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 10 Dec 2010 14:12:14 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/12/importing-fx-rates-with-data-sync</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Importing FX Rates with Data Sync</title>
      <description>&lt;p&gt;This is an example of how to build a custom data provider for Data Synchronsiation Studio to import FX (Currency Exchange) rates from the Yahoo rate service.&lt;/p&gt;  &lt;p&gt;Once you have this provider you can then Sync/Import these rates daily into many other systems such as SharePoint, MS CRM, SQL Server etc.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/downloads/Simego.DataSync.FXRateProvider.zip"&gt;Download Data Sync Add-In&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;FX Rate provider in the List of Providers&lt;/h4&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/f8a2d991-04d7-443e-a802-5baa09811948"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/8a704b19-922b-46db-a828-9a11a118ab20" width="244" height="172" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;FX Rates in Data Sync Preview Window&lt;/h4&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/045dd86e-d474-477d-a789-76a7be7bcb4e"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/76404433-d8ae-4c59-be63-8a67c68421dd" width="644" height="378" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;The Code&lt;/h3&gt;  &lt;p&gt;The following code shows how to build a read-only data provider from scratch you simply compile the DLL and drop it into the Data Sync install directory. Data Sync will then use refection to load this assembly at runtime.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;p&gt;  &lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Xml;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync.Interfaces;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Simego.DataSync.Providers;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Simego.DataSync.FXRateProvider&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;{&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;    [ProviderInfo(Name = &lt;span class="str"&gt;&amp;quot;FX Rates&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; FXRatesDataSourceReader : IDataSourceReader&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;    {                &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        [Category(&lt;span class="str"&gt;&amp;quot;Synchronisation&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        [Description(&lt;span class="str"&gt;&amp;quot;Enable ADD operations on Data source.&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EnableAdd { get; set; }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        [Category(&lt;span class="str"&gt;&amp;quot;Synchronisation&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        [Description(&lt;span class="str"&gt;&amp;quot;Enable UPDATE operations on Data source.&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EnableUpdate { get; set; }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        [Category(&lt;span class="str"&gt;&amp;quot;Synchronisation&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        [Description(&lt;span class="str"&gt;&amp;quot;Enable DELETE operations on Data source.&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EnableDelete { get; set; }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        [Category(&lt;span class="str"&gt;&amp;quot;Connection&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        [Description(&lt;span class="str"&gt;&amp;quot;Filename of the Excel file to read.&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BaseCurrency { get; set; }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="preproc"&gt;#region&lt;/span&gt; IDataSourceReader Members&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        [Browsable(&lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; DataSchema SchemaMap { get; set; }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        [Browsable(&lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; DataSchemaSide Side { get; set; }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        [Browsable(&lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; ReadWrite { get; set; }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        [Browsable(&lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; IDataSourceLog Log { get; set; }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; FXRatesDataSourceReader()&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            ReadWrite = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            BaseCurrency = &lt;span class="str"&gt;&amp;quot;USD&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; DataTable GetDataTable()&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="rem"&gt;//Get a Table to store the results.&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            DataTable dt = SchemaMap.GetDataTable();&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            dt.TableName = &lt;span class="str"&gt;&amp;quot;FXRates&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="rem"&gt;//Create a Schema Mapping Helper&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            DataSchemaMapping mapping = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchemaMapping(SchemaMap, Side);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="rem"&gt;//Get the Rates from Yahoo&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;double&lt;/span&gt;&amp;gt; rates = GetFXRates();&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            &lt;span class="rem"&gt;//Caculate the Conversion Rate from other base currency&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;double&lt;/span&gt; conversion_rate = 1 / rates[BaseCurrency];&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="rem"&gt;//Create a Sorted List of Rates&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            var rateList = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; k &lt;span class="kwrd"&gt;in&lt;/span&gt; rates.Keys)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                rateList.Add(k);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            rateList.Sort();&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="rem"&gt;//Populate the Rates Table&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; k &lt;span class="kwrd"&gt;in&lt;/span&gt; rateList)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                DataRow newRow = dt.NewRow();&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (DataSchemaItem item &lt;span class="kwrd"&gt;in&lt;/span&gt; SchemaMap.GetIncludedColumns())&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                    &lt;span class="kwrd"&gt;string&lt;/span&gt; columnName = mapping.MapColumnToDestination(item);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                    &lt;span class="kwrd"&gt;switch&lt;/span&gt; (columnName)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                    {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;:&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                                newRow[item.ColumnName] = DataSchemaTypeConverter.ConvertTo(k, item.DataType); &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                            }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                        &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Rate&amp;quot;&lt;/span&gt;:&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                            {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                                newRow[item.ColumnName] = DataSchemaTypeConverter.ConvertTo(Math.Round(rates[k] * conversion_rate, 4), item.DataType);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                        &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                    }                    &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                dt.Rows.Add(newRow);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; dt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;double&lt;/span&gt;&amp;gt; GetFXRates()&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;double&lt;/span&gt;&amp;gt; rates = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;double&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            XmlReader reader = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; name = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;double&lt;/span&gt; price = 0;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(&lt;span class="str"&gt;&amp;quot;http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote;currency=true?view=basic&amp;amp;format=xml&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                &lt;span class="rem"&gt;//Add the Default USD Rate&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                rates.Add(&lt;span class="str"&gt;&amp;quot;USD&amp;quot;&lt;/span&gt;, 1);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                &lt;span class="kwrd"&gt;while&lt;/span&gt; (reader.Read())&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.NodeType == XmlNodeType.Element)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                    {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.Name.Equals(&lt;span class="str"&gt;&amp;quot;field&amp;quot;&lt;/span&gt;, StringComparison.OrdinalIgnoreCase))&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                            &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.GetAttribute(&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;) == &lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                                &lt;span class="kwrd"&gt;string&lt;/span&gt; ccy = reader.ReadElementString();&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                                &lt;span class="kwrd"&gt;if&lt;/span&gt; (ccy.StartsWith(&lt;span class="str"&gt;&amp;quot;USD/&amp;quot;&lt;/span&gt;))&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                                    name = ccy.Substring(4);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.GetAttribute(&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;) == &lt;span class="str"&gt;&amp;quot;price&amp;quot;&lt;/span&gt;)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                            {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                                price = Convert.ToDouble(reader.ReadElementString());&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                            }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                            &lt;span class="kwrd"&gt;if&lt;/span&gt; (name != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; price != 0)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                                rates.Add(name, price);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                                name = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                                price = 0;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader.Name.Equals(&lt;span class="str"&gt;&amp;quot;resource&amp;quot;&lt;/span&gt;, StringComparison.OrdinalIgnoreCase))&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            name = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                            price = 0;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                    }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;finally&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (reader != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                    reader.Close();&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; rates;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; DataSchema GetDefaultDataSchema()&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            DataTable dt = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable(&lt;span class="str"&gt;&amp;quot;FXRates&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;));&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            dt.Columns.Add(&lt;span class="str"&gt;&amp;quot;Rate&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;double&lt;/span&gt;));&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            dt.Columns[&lt;span class="str"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;].AllowDBNull = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            dt.Columns[&lt;span class="str"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;].Unique = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            dt.Columns[&lt;span class="str"&gt;&amp;quot;Rate&amp;quot;&lt;/span&gt;].AllowDBNull = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSchema(dt);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetMappedSourceColumn(&lt;span class="kwrd"&gt;string&lt;/span&gt; name)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; Utility.GetMappedSourceColumn(SchemaMap, Side, name);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;ProviderParameter&amp;gt; GetInitializationParameters()&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            List&amp;lt;ProviderParameter&amp;gt; parameters = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;ProviderParameter&amp;gt;();&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            parameters.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ProviderParameter(&lt;span class="str"&gt;&amp;quot;BaseCurrency&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.BaseCurrency));&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; parameters;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Initialize(DataSchema schema, DataSchemaSide side)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.SchemaMap = schema;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Side = side;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Initialize(List&amp;lt;ProviderParameter&amp;gt; parameters)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ProviderParameter p &lt;span class="kwrd"&gt;in&lt;/span&gt; parameters)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            {                &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                &lt;span class="kwrd"&gt;switch&lt;/span&gt; (p.Name)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                    &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;BaseCurrency&amp;quot;&lt;/span&gt;:&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                            &lt;span class="kwrd"&gt;this&lt;/span&gt;.BaseCurrency = p.Value;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                    &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;                        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;                }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; IDataSourceWriter GetWriter()&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] GetBlobData(List&amp;lt;Simego.DataSync.Engine.DataCompareColumnItem&amp;gt; sourceRow)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; NotCompatibleProviderException(&lt;span class="str"&gt;&amp;quot;This provider is not compatible with File based Synchronisation.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetFilePath(List&amp;lt;Simego.DataSync.Engine.DataCompareColumnItem&amp;gt; sourceRow)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; NotCompatibleProviderException(&lt;span class="str"&gt;&amp;quot;This provider is not compatible with File based Synchronisation.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetFileName(List&amp;lt;Simego.DataSync.Engine.DataCompareColumnItem&amp;gt; sourceRow)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; NotCompatibleProviderException(&lt;span class="str"&gt;&amp;quot;This provider is not compatible with File based Synchronisation.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;                       &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre&gt;    }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;  &lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;style type="text/css"&gt;&lt;br /&gt;
.csharpcode, .csharpcode pre&lt;br /&gt;
{&lt;br /&gt;
	font-size: small;&lt;br /&gt;
	color: black;&lt;br /&gt;
	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;
	background-color: #ffffff;&lt;br /&gt;
	/*white-space: pre;*/&lt;br /&gt;
}&lt;br /&gt;
.csharpcode pre { margin: 0em; }&lt;br /&gt;
.csharpcode .rem { color: #008000; }&lt;br /&gt;
.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;
.csharpcode .str { color: #006080; }&lt;br /&gt;
.csharpcode .op { color: #0000c0; }&lt;br /&gt;
.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;
.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;
.csharpcode .html { color: #800000; }&lt;br /&gt;
.csharpcode .attr { color: #ff0000; }&lt;br /&gt;
.csharpcode .alt &lt;br /&gt;
{&lt;br /&gt;
	background-color: #f4f4f4;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	margin: 0em;&lt;br /&gt;
}&lt;br /&gt;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 07 Dec 2010 11:01:49 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/12/quickly-create-master-detail-view-on-sharepoint-wss</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Quickly Create Master Detail View on SharePoint WSS</title>
      <description>&lt;p&gt;This is a quick example of how to create a Master Detail view of your business data in WSS (not just MOSS). Many people are using the BDC to create these views on MOSS but you can do it quickly with Data Sync and out of the box web parts on WSS in about 10 minutes without any changes to your SharePoint server.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Step 1 – Get your data sources in order&lt;/h3&gt;  &lt;p&gt;This example uses 2 tables from the popular Northwind sample database, Suppliers and Products were going to create a simple Master Detail view where we select the Supplier and filter the Products based on the Supplier. i.e. Filter the SupplierID column in the Products table from the Supplier Table.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Step 2 – Import your Data to SharePoint&lt;/h3&gt;  &lt;p&gt;Connect Data Sync Studio to your first table or view i.e. Suppliers you will then see a schema map like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/6f381b7d-a6a9-46dd-b393-d7180252ed48"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/3b0142a5-d974-4952-abf3-44c926c5a0c1" width="644" height="397" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now using the SharePoint List Wizard under the Tools Menu create the List on your SharePoint server (You could use existing lists or do this manually however this is much quicker). Select your server and a name for your list. &lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/5b03bb58-d62c-4e6a-b6c7-beef8376c7d0"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/8e4fde98-4e5c-4f9d-8cdd-a371b344d283" width="244" height="176" /&gt;&lt;/a&gt; &lt;a href="/Blog/Attachment/986d5cfe-e4c8-4914-b75e-1ae4294f71fa"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/68673c76-cb31-4d52-bbab-080bdd7c6a97" width="244" height="176" /&gt;&lt;/a&gt; &lt;a href="/Blog/Attachment/68572532-20ad-4fb4-9b32-0005d94d7e5a"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/0bc84028-f39d-455e-b76d-5316207c9dda" width="244" height="176" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now the Schema Map is linked inside Data Sync Studio, you can compare and Sync the Data to get the data into your SharePoint Lists.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/67f68f8d-8772-4c88-9b01-d0dd84da11e7"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/8db9df40-a163-42ff-9656-7deba32f501d" width="644" height="397" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now follow the same procedure for the Products table.&lt;/p&gt;  &lt;h3&gt;Step 3 – Create your SharePoint Page&lt;/h3&gt;  &lt;p&gt;Create a new Web Part page and add the 2 lists to the page Suppliers &amp;amp; Products then create a new Web Part Connection between Products and Suppliers.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/468e8c9a-2066-4750-b0ed-62c3ff75c9f7"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/02a3509d-7108-4955-ad47-dd9cd7c42c2a" width="644" height="290" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/cf2691fc-ab31-4b27-b062-3a6e2d0dbd6a"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/27105012-d8b6-4c4e-b033-73f83642ed13" width="244" height="127" /&gt;&lt;/a&gt; &lt;a href="/Blog/Attachment/41417826-3452-42fa-99a5-ca7f8bc0ad91"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/26891eb0-bf2f-497f-9754-36f334b5ca50" width="244" height="127" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That’s it so now when you select a Supplier the Product list is filtered based on that selected Supplier.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/ce78ca1b-e9f2-438b-a617-60d12d3bdc11"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/f20c5fa7-545c-4bf2-a6f1-d2e0371b6a1d" width="644" height="473" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;All that’s left is to setup 2 Synchronisation jobs to sync the source data into your SharePoint lists.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 03 Dec 2010 08:42:11 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/10/ouvvi-service-log</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Ouvvi – Service Log</title>
      <description>&lt;p&gt;We have just rolled out an update to Ouvvi 1.2.32 to help those who use Ouvvi to integrate systems together and build custom step handlers.&lt;/p&gt;  &lt;p&gt;You can now run the service component interactively in-process with your handlers which is easier than attaching to the Ouvvi service. &lt;/p&gt;  &lt;p&gt;All log events (including Trace level regardless of the System Setting) are displayed in the log window and anything you write to the .NET Trace log are also captured. Additionally you can force the service out of sleep by waking up the “Project” or “Step” queues.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/3715a4a9-4810-49a8-9cb0-9fa394af8f3a"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/e1705d9d-3602-430a-b93e-c0a0843908fc" width="635" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 04 Oct 2010 16:01:58 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/09/data-synchronisation-studio-update</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio Update</title>
      <description>&lt;p&gt;We’ve rolled out an update to Data Synchronisation Studio 2.0 that now includes a Start Page which lists your most recent projects along with a Statistics page on the results to return some metrics about the compare process.&lt;/p&gt;  &lt;p&gt;We have also added a multi-threaded project loader so you can see the project loading which helps with data providers that take a little while to connect to the data source.&lt;/p&gt;  &lt;p&gt;Additionally we now save previous settings on some of the data providers to speed up connecting to your data source where you always enter the same server name.&lt;/p&gt;  &lt;p&gt;This update is on the Beta Site now and is available for all customers that have an active subscription.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/70b47357-8e19-407d-abe6-aab9c0ce1ef3"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/e11df6fd-6136-4793-a030-91953aadf35b" width="644" height="394" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/aeb69196-66c7-4c91-a8b5-8b93cc30e7f9"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/81166c17-bf7a-4743-a902-aeeef03a1b1f" width="644" height="394" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 20 Sep 2010 10:42:51 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/07/service-desk-updated-screenshots</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Service Desk – Updated Screenshots</title>
      <description>&lt;p&gt;Here's some updated screenshots from our new Service Desk Solution.&amp;#160; &lt;/p&gt;  &lt;p&gt;The Dashboard displays basic Stats and allows you to filter the Ticket List by the Statistic. You will also see the Tag cloud where we Tag requests with meta data when they are created. This process is handled externally via a simple script which can be on any server so in our case we validate inbound messages against registered users in our Simego Database and Tag the message with the Product in question.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/70d9e978-0fe9-496e-875a-ed276a588110"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/45ea99ed-4d45-4623-858c-014be70bab58" width="619" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The Ticket List allows you to easily and quickly view summary information on each ticket before opening it.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/a7699310-7c92-4207-aedd-9bf2bbb3a2d9"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/043bacd6-96b3-4a61-8bda-dad495dc5fde" width="521" height="484" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;When an Email message is received into the service desk the attachments are extracted, compressed and inserted into the database and then are available to view within the Service Request.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/0b2a9fb0-e9be-4516-9f40-4a89b02ade65"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/59387c4c-8b95-48aa-a2de-df1b25ec8070" width="521" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You simply reply inline to the customer from the web page.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/da9157a7-b2d3-478b-87b5-8f48a5a40289"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/05ea3e3f-9ad2-41aa-a980-51fd92c999ee" width="521" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ouvvi handles pulling in the email messages from a mailbox and forwards the RAW Mime Message to the Service Desk. To speed things up Ouvvi creates a new Ouvvi Project Task for each message, that way we can import multiple messages at once across multiple threads and each message has it’s own re-try pattern to follow.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/31a610e0-134d-492d-8c59-f0624d59b8e8"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/79d9be25-2705-4e57-8647-b748a1e28cd7" width="521" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 06 Jul 2010 11:47:42 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/06/new-service-desk-application</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>New Service Desk Application</title>
      <description>&lt;p&gt;Here’s a little preview of a new Service Desk (aka Help Desk) solution that were working on.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ASP.NET MVC Service Desk Solution&lt;/li&gt;    &lt;li&gt;SQL Server 2008 Database&lt;/li&gt;    &lt;li&gt;User Authentication via OpenID, Windows, Custom Authentication&lt;/li&gt;    &lt;li&gt;Integration with Ouvvi – to Pull Requests from Mailboxes and add to the Service Desk&lt;/li&gt;    &lt;li&gt;Rules/Classification Engine&amp;#160; - To tag service requests with MetaData and create Tag Clouds&lt;/li&gt;    &lt;li&gt;Time based Escalation process&lt;/li&gt;    &lt;li&gt;OData – R/W for API Access, PowerPivot, SQL Server Reporting Services&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Dashboard&lt;/h3&gt;  &lt;p&gt;Instantly view the Status of the Service Desk and see what needs be be acted on quickly.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/9c260c26-b5fb-4e81-b953-05c92660aaa6"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/af19f6fe-46f2-4365-b2e5-4a0dbbd70a41" width="614" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;List of Open Tickets&lt;/h3&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/a63b5f37-ab1a-4af7-a6cb-23fca9c9f388"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/5a9b3918-6b50-48d5-b518-af06fcd68959" width="605" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 21 Jun 2010 15:16:59 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/06/integrating-multiple-systems-with-ouvvi-as-a-message-broker</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Integrating multiple Systems with Ouvvi as a Message Broker</title>
      <description>&lt;p&gt;Here’s a high level overview of how you can utilise the Ouvvi message processing pipeline to integrate multiple systems, transform messages, validate, decorate etc.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/d5d1813d-c451-41cc-9683-2b3d5dc9e9ad"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/40506714-6946-46ce-8451-cb7f49da243b" width="419" height="772" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Using Ouvvi to handle this kind of operation has a number of benefits&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Automatic Message re-try to handle those times when things don’t work first time.&lt;/li&gt;    &lt;li&gt;Scale-out across servers or have stand-by servers ready to take over.&lt;/li&gt;    &lt;li&gt;Separation of responsibility, Ouvvi projects run under their own security context.&amp;#160; &lt;/li&gt;    &lt;li&gt;Re-use coded steps across multiple projects to build new functionality dynamically.&lt;/li&gt;    &lt;li&gt;Multi-threaded, run multiple processing threads per Ouvvi server.&lt;/li&gt;    &lt;li&gt;Pause the processing pipe-line by stopping the Ouvvi service with no-loss of messages.&lt;/li&gt;    &lt;li&gt;Simple Backup as all messages are stored in SQL Server Queue and can be easily restored or moved to a new server.&lt;/li&gt;    &lt;li&gt;Simple programming interface, easily develop new steps, run service code in-process with Visual Studio to step through entire pipeline.&lt;/li&gt;    &lt;li&gt;Unified logging, logs can be tracked back to individual message instance through the system.&lt;/li&gt;    &lt;li&gt;User interface to configure, view and track operation.&lt;/li&gt; &lt;/ol&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 11 Jun 2010 11:27:16 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/06/automated-svn-backup-via-ouvvi</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Automated SVN Backup via Ouvvi</title>
      <description>&lt;p&gt;Here’s an example of how to automate backup of an SVN repository on Windows with Ouvvi. We used to backup on each check-in but after a while that just got too much and we ended up with several GB of backup images on our server and had to periodically delete them. It was also slowing down the check-in so now we just to it every Sunday morning.&lt;/p&gt;  &lt;p&gt;We have setup an end-of-week schedule to back up all our SVN repositories like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/fa51c4d0-a07a-43f2-a40e-4f7dced0f8f3"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/a514ba7b-3e13-4254-97ad-deca2328017b" width="561" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Each Task is configured like this to call the svnadmin.exe &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;svnadmin.exe hotcopy &amp;quot;C:\Repositories\xxxx&amp;quot; &amp;quot;C:\Backup\Svn\xxxx\{{FILEDATE}}&amp;quot;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/df9e4a91-121d-4543-b182-73ddb580d96a"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/7db6620e-881c-426a-b958-cd8eb0914708" width="644" height="482" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 11 Jun 2010 09:56:43 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/06/building-a-web-hosting-solution-with-ouvvi</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Building a Web Hosting Solution with Ouvvi</title>
      <description>&lt;p&gt;Ouvvi is far more than just a plain web based scheduling system. Recently we have been playing around creating a new solution to automatically provision web hosting space, domain mappings, SQL Databases etc. &lt;/p&gt;  &lt;p&gt;This came about because I wanted to create an easier way to automatically configure new Hosting space, SQL Databases etc which is virtually instant. After try a few web hosts and finding these actions can take several hours to complete. This way I can easily manage multiple sites on our own dedicated servers.&lt;/p&gt;  &lt;p&gt;This was also a Test to see if Ouvvi can successfully handle this kind of integration with 3rd Party applications.&lt;/p&gt;  &lt;p&gt;This solution involves a ASP.NET MVC website for all the site configuration where you add web space accounts and delegate to Ouvvi on the back-end to handle asynchronous messages to create the actual space under IIS. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/71beb2ea-9655-4de5-8059-70909d7563c7"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/6c079326-b0ac-497f-9256-0ac8b70c9656" width="566" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/e2496e1a-2e8b-4c1f-8e25-60782e19e232"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/44fcd883-c15d-4bd6-87f7-b4b37333c436" width="644" height="458" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For Example we send this message to Ouvvi via the Ouvvi Web Service to Create a new Site&lt;/p&gt;  &lt;p&gt;&amp;lt;Action Function=&amp;quot;CreateSite&amp;quot; ReturnUrl=&amp;quot;&lt;a href="http://localhost:0000/MetaData/Update/Site/{C8308A6F-459C-4E7F-8789-2440DDA79D9D}&amp;quot;"&gt;http://localhost:0000/MetaData/Update/Site/{C8308A6F-459C-4E7F-8789-2440DDA79D9D}&amp;quot;&lt;/a&gt;&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;MetaData&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Name&amp;gt;My New Site&amp;lt;/Name&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;/MetaData&amp;gt;    &lt;br /&gt;&amp;lt;/Action&amp;gt;&lt;/p&gt;  &lt;p&gt;This message includes a return Url to notify the client application about the result.&lt;/p&gt;  &lt;p&gt;The Response message is something like this&lt;/p&gt;  &lt;p&gt;&amp;lt;ActionResponse Function=&amp;quot;CreateSite&amp;quot;&amp;gt;   &lt;br /&gt;&amp;#160; &amp;lt;Result&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SiteCode&amp;gt;s101234&amp;lt;/SiteCode&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TempUrl&amp;gt;&lt;a href="http://s101234.simegohosting.com"&gt;http://s101234.simegohosting.com&lt;/a&gt;&amp;lt;/TempUrl&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;IPAddress&amp;gt;79.123.123.67&amp;lt;/IPAddress&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SpaceAllocated&amp;gt;1024&amp;lt;/SpaceAllocated&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SpaceUsed&amp;gt;0&amp;lt;/SpaceUsed&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;PhysicalPath&amp;gt;c:\sites\www\s101234&amp;lt;/PhysicalPath&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Status&amp;gt;0&amp;lt;/Status&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;/Result&amp;gt;    &lt;br /&gt;&amp;lt;/ActionResponse&amp;gt;&lt;/p&gt;  &lt;p&gt;These messages are processed via the Ouvvi Pipeline and passed between steps via the Message Context. The message Context in Ouvvi allows you to pass metadata to your Steps to action.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Below shows the Ouvvi Project configuration we have 2 steps.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Step 1 – Handles all the real work and calls a custom handler to create sites etc from the Message stored in Context.&lt;/li&gt;    &lt;li&gt;Step 2 – Handles the call-back to the client application. (We break it into 2 steps so that the automatic re-try a failure process is handled.)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/713f07ef-864a-48bc-a256-fd7824c60606"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/a9361d6e-3c27-43ee-a604-923650dac95c" width="566" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now we have a fully integrated solution with a visual feedback of status on the back-end and even if the server is busy Ouvvi will process the configuration steps later without impacting the UI to the client.&lt;/p&gt;  &lt;p&gt;The best bit – This only took us a few days to get up and running.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 10 Jun 2010 10:57:56 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/06/my-experiments-with-oauth</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>My Experiments with OAuth</title>
      <description>&lt;p&gt;I have been playing around with OAuth from C# and after researching available code/samples/libraries on the internet none seemed to be quite as neat and tidy as I would like. So I decided to write my own plus if I am going to put this into some new products were working on we needed to write our own implementation.&lt;/p&gt;  &lt;p&gt;We now have a simple API where we setup a Configuration Object with details of the service were connecting to, Urls, Keys etc. Then just Call Authorize this handles all the authorization bouncing around (we call back on an interface IAuthControl to persist data between requests).&lt;/p&gt;  &lt;p&gt;From then on we have a method GetServiceResponse which handles interaction with the service provider and signing the requests. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here’s an example of Sending a Tweet to Twitter and Authorizing the application.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;TwitterExample.cs&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;namespace oAuthWeb    &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public class TwitterExample     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; const string REQUEST_TOKEN = &amp;quot;&lt;a href="http://api.twitter.com/oauth/request_token&amp;quot;;"&gt;http://api.twitter.com/oauth/request_token&amp;quot;;&lt;/a&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; const string AUTHORIZE = &amp;quot;&lt;a href="http://api.twitter.com/oauth/authorize&amp;quot;;"&gt;http://api.twitter.com/oauth/authorize&amp;quot;;&lt;/a&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; const string ACCESS_TOKEN = &amp;quot;&lt;a href="http://api.twitter.com/oauth/access_token&amp;quot;;"&gt;http://api.twitter.com/oauth/access_token&amp;quot;;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string Execute(HttpContext httpContext, IAuthControl control)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AuthConfiguration config = new AuthConfiguration     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ConsumerKey = &amp;quot;xxxxxx&amp;quot;,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ConsumerSecret = &amp;quot;xxxxxxxxxx&amp;quot;, &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RequestTokenUrl = REQUEST_TOKEN,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RequestAuthorizeUrl = AUTHORIZE,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RequestAccessTokenUrl = ACCESS_TOKEN, &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CallbackUrl = &lt;a href="http://test.oauth.com"&gt;http://test.oauth.com&lt;/a&gt;, &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TokenKey = httpContext.Session[&amp;quot;OAuth_TokenKey&amp;quot;] as string,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TokenSecret = httpContext.Session[&amp;quot;OAuth_TokenSecret&amp;quot;] as string,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; State = (AuthState)Enum.Parse(typeof(AuthState), httpContext.Session[&amp;quot;OAuth_State&amp;quot;] as string ?? AuthState.None.ToString())     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (Auth.Authorize(config, control))    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AuthResponse response = Auth.GetServiceResponse(config,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new AuthRequest     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Method = AuthRequestMethod.POST,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Url = &amp;quot;&lt;a href="http://api.twitter.com/1/statuses/update.xml&amp;quot;"&gt;http://api.twitter.com/1/statuses/update.xml&amp;quot;&lt;/a&gt;,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Body = &amp;quot;status=&amp;quot; + AuthHelper.UrlEncode(&amp;quot;Test Tweet from my C# Code&amp;quot;),     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ContentType = Auth.ContentType_ApplicationFormUrlEncoded     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (response.Status == HttpStatusCode.OK)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return response.Body;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return null;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Default.aspx.cs&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;public partial class _Default : System.Web.UI.Page, IAuthControl    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; protected void Page_Load(object sender, EventArgs e)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TwitterExample example = new TwitterExample();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; content.InnerHtml = Server.HtmlEncode(example.Execute(HttpContext.Current, this));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; #region IAuthControl Members &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void RedirectTo(string url)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Redirect(url);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void SaveAuthState(AuthConfiguration config)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Session[&amp;quot;OAuth_TokenKey&amp;quot;] = config.TokenKey;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Session[&amp;quot;OAuth_TokenSecret&amp;quot;] = config.TokenSecret;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Session[&amp;quot;OAuth_State&amp;quot;] = config.State.ToString();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string GetRequestValue(string key)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return Request[key];     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; #endregion    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 07 Jun 2010 14:25:18 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/05/data-synchronisation-studio-obfuscate-options</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio – Obfuscate Options</title>
      <description>&lt;p&gt;We’ve added a new Obfuscate Option to Data Sync so that it now has a simple mode where the text is replaced with the first character matching case and spaces etc. So you get results like this below.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/c5eb1bba-70c8-4064-85bc-59961179a478"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/adbe0c6f-5f59-407d-b719-15fce20b2e55" width="637" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 25 May 2010 16:37:52 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/05/ouvvi-uptime</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Ouvvi – Uptime</title>
      <description>&lt;p&gt;We have been running the latest build of Ouvvi 1.1.20 now for 22 straight days running jobs every 15 minutes and backup our databases every day.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/842d4f70-ba0e-4321-9ae1-efe7f5b8c29f"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/4ffb331b-d811-4410-8579-91c07b425eac" width="644" height="333" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 25 May 2010 16:24:21 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/05/obfuscate-data-with-data-synchronisation-studio</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Obfuscate Data with Data Synchronisation Studio</title>
      <description>&lt;p&gt;Occasionally we need to obfuscate sensitive data whether it’s to create a test version of a production database for development or to send sensitive data outside of an organisation.&lt;/p&gt; &lt;p&gt;We have created a new function in Data Synchronisation Studio to Obfuscate data during the synchronisation from the client application.&lt;/p&gt; &lt;p&gt;To enable the Obfuscate function just select “Obfuscate” from the Data menu.&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/76f12a33-a91a-458a-86ff-f87195ebc646"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/7b67bf05-069b-418b-928a-177074cbc93f" width="244" height="178"&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;Now when you Compare A to B you will be presented with an Obfuscate Options dialog where you can then choose which &lt;strong&gt;String&lt;/strong&gt; based columns to Obfuscate and whether to include a Salt value with the hash generation.&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/3ed3ba18-f912-4d8d-ad41-dc443af7b0f2"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/df4978a1-a0ac-45b5-8618-4ce65c6452c0" width="329" height="484"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Below shows the results after the compare here you can see that the &lt;strong&gt;ProductName&lt;/strong&gt; column is going to be updated with an Obfuscated value based on the hash of the original value and the Primary Key. The process is reasonably fast on one of our development machines it takes less than a second to process 4000 records.&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/4870a685-91d2-4135-8ec0-481ceef212ba"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/5e080905-77a2-4fe0-935b-0f0fa0f3c821" width="644" height="365"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;We can simply synchronise now and our target database will be updated with the Obfuscated data.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 04 May 2010 20:29:41 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/04/ouvvi-handler-changes</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Ouvvi Handler Changes</title>
      <description>&lt;p&gt;Were making some changes to Ouvvi to make is far simpler to write new Handlers for the message pipeline. Before you had to write the Handler, Serialization Code and UI code. Now we have streamlined all this so you just write the handler and decorate the Data Model to describe how to render the configuration UI. The serialization is handled automatically via reflection. This handler then just needs to be registered in the database and it’s good to go.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So a very simple handler now looks like this&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;public class DirectoryCreateStepData   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [Designer(ControlType = DesignerControlType.TextBox, Description = &amp;quot;Path&amp;quot;, RequiredField = true)]    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string Path { get; set; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; [Designer(Description = &amp;quot;Creates a Directory&amp;quot;)]   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public class DirectoryCreateStepHandler : StepHandler&amp;lt;DirectoryCreateStepData&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public override void Execute(DirectoryCreateStepData data)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Create Directory    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!Directory.Exists(data.Path))    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Directory.CreateDirectory(data.Path); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now because the UI is dynamically rendered from the MetaData were writing an iPhone UI as well, which is great if your stuck down the Pub and need to quickly check that your end of day processes have all completed correctly.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 09 Apr 2010 10:45:58 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/03/data-sync-consuming-odata-feeds</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Consuming OData Feeds</title>
      <description>&lt;p&gt;Were writing a new Data Provider for Data Sync that can consume an &lt;a href="http://www.odata.org/home"&gt;OData&lt;/a&gt; Feed for example below were pulling in the Speakers data from the recent MIX event using the published OData feed &lt;a href="http://api.visitmix.com/OData.svc/" title="http://api.visitmix.com/OData.svc/"&gt;http://api.visitmix.com/OData.svc/&lt;/a&gt;&amp;#0160;&lt;/p&gt; &lt;br /&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/f7d23042-c60a-4cf7-8117-9cf3c7f5c476"&gt;&lt;img alt="image" border="0" height="330" src="http://www.simego.com/Blog/Attachment/ea0b2bb6-6506-4c12-95f2-ffa044e5c61d" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" width="644" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;br /&gt; &lt;p&gt;This makes importing and syncing changes from public OData feeds a real snap, point Data Sync at an OData Feed and then Synchronise it to your destination system. Even Sync it into a SharePoint List and setup some workflows to handle data changing events or let your users subscribe to the data.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 25 Mar 2010 11:52:02 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/03/sharepoint-import-csv-excel-data-file</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SharePoint: Import CSV/ Excel Data File</title>
      <description>&lt;p&gt;This example shows how you can use Data Synchronisation Studio to import data in a CSV file directly to a SharePoint list. Without making any configuration changes to your SharePoint environment, no web parts to install so no issues with your SharePoint Admins. You do not need to run this on your SharePoint Servers either and can even be used with Shared Hosting installs of SharePoint such as Microsoft Online Services.&lt;/p&gt;
&lt;p&gt;First get a copy 15 day free trial of Data Sync from &lt;a href="http://www.simego.com"&gt;http://www.simego.com&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Connect Data Sync to your CSV Data Source&lt;/h3&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/45985222-a8e3-4398-a5d3-d4ac3f8f69f7"&gt;&lt;img height="454" width="644" src="http://www.simego.com/Blog/Attachment/a1ae108b-34c2-4ec9-bacf-be30a46b371f" alt="image" border="0" title="image" style="display: inline; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You will now have some thing setup like this&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/aaff7fc6-aac9-462f-99ca-950ca9d74fc7"&gt;&lt;img height="423" width="644" src="http://www.simego.com/Blog/Attachment/04d50b51-033f-4e7f-8d5a-46115ead2532" alt="image" border="0" title="image" style="display: inline; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s needed now is a destination list in SharePoint so you can either create one manually or use Data Sync to create one for you.&lt;/p&gt;
&lt;p&gt;First adjust the schema map to match the Data Types were working with like this&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/8cc2d31b-2512-4293-8a16-bd37add0028a"&gt;&lt;img height="165" width="644" src="http://www.simego.com/Blog/Attachment/81801473-aab8-4ec1-98cc-a0a6de90ec76" alt="image" border="0" title="image" style="display: inline; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now go to the Tools menu and Choose &lt;strong&gt;Create SharePoint List&lt;/strong&gt; and Step through the Wizard.&lt;/p&gt;
&lt;h3&gt;Select the Site to Create the List&lt;/h3&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/b77de6ad-5357-49d6-9119-880e1033d7d5"&gt;&lt;img height="465" width="644" src="http://www.simego.com/Blog/Attachment/66c0c313-0f2a-4b3a-923c-40bb50a6d311" alt="image" border="0" title="image" style="display: inline; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Give the List a Name&lt;/h3&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/8e3b22b5-b307-4117-a86d-f7ca1b8252b6"&gt;&lt;img height="465" width="644" src="http://www.simego.com/Blog/Attachment/e0726982-8ca9-4760-91a2-daed9008b4dd" alt="image" border="0" title="image" style="display: inline; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now Data Sync has this list mapped like this which needs a little adjustment, we need to change the &amp;ldquo;Key Column&amp;rdquo; back to &amp;ldquo;EntryID&amp;rdquo; and adjust the Data Types.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/7052f4ed-d5fa-444b-bc1b-8688e398a197"&gt;&lt;img height="423" width="644" src="http://www.simego.com/Blog/Attachment/cf37b4b1-9845-42b6-9206-4e57ec2b1069" alt="image" border="0" title="image" style="display: inline; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So the Schema Map should look like this&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/92f2f38e-9ab6-4058-91ba-15f94acb3779"&gt;&lt;img height="157" width="644" src="http://www.simego.com/Blog/Attachment/b2d4cb1a-2979-4ac7-8f06-dcd18cf29d1a" alt="image" border="0" title="image" style="display: inline; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now Compare the Data A-&amp;gt;B to see what rows should be copied to SharePoint (i.e. all of them).&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/c014f3ba-d965-4c50-ad21-08cf542432f7"&gt;&lt;img height="484" width="461" src="http://www.simego.com/Blog/Attachment/97640434-fcc8-4e97-b47d-2919f5b8d292" alt="image" border="0" title="image" style="display: inline; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next click the &amp;ldquo;Synchronise&amp;rdquo; toolbar button and click Start to copy the data across.&lt;/p&gt;
&lt;h3&gt;Here we have our data in SharePoint&lt;/h3&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/921b6ae9-9f3c-47d6-9308-714eade2bec8"&gt;&lt;img height="437" width="644" src="http://www.simego.com/Blog/Attachment/ce934dcf-2ca4-4fc8-b9e2-4b58afb66e52" alt="image" border="0" title="image" style="display: inline; border: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can then save this import as a Data Sync project and re-run it when you like and only the changes will be copied to SharePoint.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 10 Mar 2010 16:46:52 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/03/data-synchronisation-studio-20-use-your-own-sql-queries</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio 2.0 – Use your own SQL Queries</title>
      <description>&lt;p&gt;In Data Synchronisation Studio 2.0 we have added the ability for you to connect SQL Data sources to your own custom queries rather than just Tables and Views.&lt;/p&gt;  &lt;p&gt;If you use this feature the Data Source will be read-only but since this feature is probably only going to be used for pushing report type data up to SharePoint it’s one-way anyway.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;When you connect the data source you can choose the “SQL” tab like this and enter any SQL SELECT Statement.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/ab2e725c-9ab5-4ca3-accb-89752a93be49"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/9e642d99-5fc2-404f-a8f5-c1fc3c6afe7e" width="626" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can also tweak it if you like from the Data Source properties window like this&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/a8cae176-2eae-4ec8-8c93-93339bd809e4"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/a8fee5e4-d691-4c26-bb53-ab47c9c84c6b" width="417" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This feature has been added to the following data providers for Data Sync&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Microsoft SQL Server&lt;/li&gt;    &lt;li&gt;OLEDB Data sources&lt;/li&gt;    &lt;li&gt;ODBC Data sources&lt;/li&gt;    &lt;li&gt;Oracle&lt;/li&gt;    &lt;li&gt;MySQL&lt;/li&gt;    &lt;li&gt;Microsoft Access&lt;/li&gt; &lt;/ul&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 10 Mar 2010 15:21:48 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/03/locally-run-ouvvi-without-iis</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Locally Run Ouvvi without IIS</title>
      <description>&lt;p&gt;So if you just have a development machine (no access to a server) and want to run the Ouvvi Web Console without IIS you can use the Visual Studio Development Server instead.&lt;/p&gt;  &lt;p&gt;Install Ouvvi as normal but skip the last configuration step at the end of the install.&lt;/p&gt;  &lt;p&gt;Then you need to start the Development Web Server like this.&lt;/p&gt;  &lt;p&gt;&amp;quot;C:\Program Files (x86)\Common Files\microsoft shared\DevServer\9.0\WebDev.WebServer.EXE&amp;quot; /port:4040 /path:&amp;quot;C:\Program Files (x86)\Simego\Ouvvi Website\Web&amp;quot;&lt;/p&gt;  &lt;p&gt;Make sure you choose the right TCP port here I am using 4040.&lt;/p&gt;  &lt;p&gt;Then you can finish the Ouvvi configuration however I had to re-start the server after provisioning the database as it didn’t pick up the &lt;u&gt;web.config&lt;/u&gt; file changes but after that it was fine.&lt;/p&gt;  &lt;p&gt;Remember Ouvvi only requires the web console for setup, configuration and status reporting the actual project/step processing occurs via the Ouvvi Service so you don’t need to run the Web console all the time.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 09 Mar 2010 13:22:44 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/03/synchronising-data-from-a-simple-http-service</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Synchronising Data from a Simple Http Service</title>
      <description>&lt;p&gt;We have created a new Data Provider for Data Synchronisation Studio 2.0 which accepts a CSV formatted response from a Http Stream.&lt;/p&gt;  &lt;p&gt;This means you can easily integrate any system in which you can expose data as a Http response formatted as CSV with SharePoint or any of the other data providers which support writing back to the data store.&lt;/p&gt;  &lt;p&gt;For example if you create a simple service that returns a response similar to this&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/651faa09-22a7-463e-bdac-404688f24fb8"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://www.simego.com/Blog/Attachment/1417bc2e-6da3-4808-b9a2-9dcc9e129dfa" width="640" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can then load this in Data Sync 2.0 by specifying the Uri to the Http response like this using the new CSV File/Http File Data Provider.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/a1b52072-d49d-4e39-95f2-e3e5d5fe331e"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.simego.com/Blog/Attachment/bc0d867d-2405-4025-8add-fd692175288c" width="644" height="454" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This can then use this as the source data in Data Sync to be synchronised to SharePoint.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/2889f61e-616f-4869-89e6-c3bef98959f9"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[5]" border="0" alt="clip_image002[5]" src="http://www.simego.com/Blog/Attachment/7c69a87a-a546-421c-8fa6-66063c89c207" width="644" height="417" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can download a simple example below that demonstrates how to create a Simple CSV Http response or Simple SOAP 1.1 Web Service to use with Data Sync.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.simego.com/downloads/NorthwindService_Sample.zip"&gt;Download Sample Code&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 09 Mar 2010 10:32:28 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/02/backup-your-sql-express-databases-for-free</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Backup your SQL Express Databases for Free</title>
      <description>&lt;p&gt;Did you know with &lt;a href="http://www.simego.com/Products/Ouvvi-Console"&gt;Ouvvi Express&lt;/a&gt; edition you can easily schedule a SQL Backup of your departmental databases and compress them on a daily basis.&lt;/p&gt;  &lt;p&gt;The setup is so simple and only takes a few minutes to get going, and as you create more databases all you need do is login to the web console and add more steps to the backup schedule.&lt;/p&gt;  &lt;p&gt;You can see here every day were backing up 4 SQL databases in our Office.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/e22c8034-ea18-4fb6-adc1-b86b18a31d93"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/93a6971d-9782-4096-b49a-4857346d6879" width="542" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To configure the step for the actual backup is quite easy you just create a SQL Backup Step and configure it like this.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/f704f184-be2b-4cf7-8bfa-4332bcbf2733"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/8d598a6b-604d-4647-b6d3-d2d06ba213a7" width="644" height="462" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This gives us a daily backup file like this on our server&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/806b6368-530f-48f8-be2a-7b214870ec9d"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/80191d29-062e-48e6-8345-273c49ccfd88" width="644" height="305" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt; You can then add notifications to the pipeline if the process fails and keep an eye on things via the RSS Feed.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/0f5d4f85-0bbe-486f-84fb-a6dfd73f6edf"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/e25e5be8-6eab-4740-8250-a4141aac7ece" width="644" height="462" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 26 Feb 2010 17:20:17 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/02/data-synchronisation-studio-20-and-ouvvi-beta-out</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio 2.0 and Ouvvi Beta out</title>
      <description>&lt;p&gt;We have released to the &lt;a href="http://www.simego.com"&gt;Simego&lt;/a&gt; Website new Beta installs for the following :-&lt;/p&gt;  &lt;h4&gt;Data Synchronisation Studio 2.0&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Supports &lt;a href="http://www.simego.com/Products/Ouvvi-Console"&gt;Ouvvi&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Side by Side install with Data Sync 1.0 &lt;/li&gt;    &lt;li&gt;UI Improvements &lt;/li&gt;    &lt;li&gt;Select which rows to sync from comparison results &lt;/li&gt;    &lt;li&gt;All fixes since 1.0.188 rolled up into 2.0 &lt;/li&gt;    &lt;li&gt;Experimental support for SharePoint 2010 &lt;/li&gt;    &lt;li&gt;Strong named assemblies &lt;/li&gt;    &lt;li&gt;GAC installed main assemblies. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Available here &lt;a href="http://www.simego.com/beta"&gt;www.simego.com/beta&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;DS 2.0 will be a free upgrade to all those customers who purchased data sync in the last 12 months. Outside of this there will be a small upgrade fee to extend your support and maintenance for a further 12 months. &lt;/p&gt;  &lt;h4&gt;Ouvvi Express 1.0&lt;/h4&gt;  &lt;p&gt;Free Web based Process Automation and scheduler system, supports backup of SQL Server Databases, Running SQL Commands, Starting SQL Jobs, Pinging Web Sites, Running Data Sync Projects, Email, SMS, RSS etc&lt;/p&gt;  &lt;p&gt;See &lt;a title="http://www.simego.com/Products/Ouvvi-Console" href="http://www.simego.com/Products/Ouvvi-Console"&gt;http://www.simego.com/Products/Ouvvi-Console&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Install guide here &lt;a title="Ouvvi Install &amp;amp; Setup" href="http://www.simego.com/Articles/OuvviSetupGuide"&gt;Ouvvi Install &amp;amp; Setup&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 25 Feb 2010 09:36:11 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/02/data-synchronisation-studio-20</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio 2.0</title>
      <description>&lt;p&gt;We have a new feature for Data Synchronisation Studio 2.0 which we think you might like when you’re trying to control better which data to migrate between systems. You can see in the screenshot below we have added a new “Sync” column to the compare results this allows you to specify which rows to actually sync across to the destination system.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/333a19b0-3862-4976-ac34-2510b3f6901f"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/98b86710-5038-4d61-89fb-597dc1de771e" width="644" height="409" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can also now preview the data from each side as the schema map by clicking on the “Preview A” or “Preview B” mini-toolbar buttons. This allows you to see the data exactly as Data Sync will see it when it compares the data. It also prevents downloading all columns from the source system which can speed things up a little.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/b3a2d716-66a1-4542-b6dd-e37fba16cc47"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/bbbe9fc6-d300-4769-aebb-3014c95813cc" width="644" height="409" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Other additions to the Schema Map include :-&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Double Click Column in data source to add it to the Map. &lt;/li&gt;    &lt;li&gt;Multi-select Schema Map Rows and delete with one click. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Also Data Synchronisation Studio 2.0 can be installed side-by-side with DS 1.0 and Data Sync 2.0 integrates with Ouvvi.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 24 Feb 2010 09:11:33 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/02/using-ouvvi-to-schedule-sql-database-backup</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using Ouvvi to Schedule SQL Database Backup</title>
      <description>&lt;p&gt;We have just added a new Step Handler that runs a backup of a SQL Server Database and additionally you can ZIP up the backup image to save on disk space.&lt;/p&gt; &lt;p&gt;Below is a screenshot of the Step configuration and you can see here were using the Token expansion system for the backup filename which makes it easy to create a unique filename.&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/2a002eaf-3b2d-420e-a49a-d93134c7aab3"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/386685f5-6dd0-4064-af5e-da8490431a29" width="644" height="478"&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;Tokens&lt;/h3&gt; &lt;p&gt;This is a list of the static token values that we have added to Ouvvi&lt;/p&gt; &lt;ul&gt; &lt;p&gt;INSTANCEID&lt;br&gt;PROJECTID&lt;br&gt;DAY&lt;br&gt;MONTH&lt;br&gt;YEAR&lt;br&gt;FILEDATE&lt;br&gt;DATE&lt;br&gt;FILETIME&lt;br&gt;TIME&lt;br&gt;HOUR&lt;br&gt;MIN&lt;br&gt;SEC&lt;br&gt;MACHINE&lt;br&gt;USERNAME&lt;br&gt;DOMAIN&lt;br&gt;APPPATH&lt;br&gt;PERSONAL&lt;br&gt;SYSTEM&lt;br&gt;LOCALAPPLICATIONDATA&lt;br&gt;APPLICATIONDATA&lt;br&gt;COMMONAPPLICATIONDATA&lt;br&gt;PROGRAMFILES&lt;br&gt;TEMP&lt;br&gt;NEWGUID&lt;/p&gt;&lt;/ul&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sun, 21 Feb 2010 13:31:14 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/02/using-the-ouvvi-status-feed</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using the Ouvvi Status Feed</title>
      <description>&lt;p&gt;So in Ouvvi we have created an RSS/Atom feed that returns the current status of all the projects in the console. This has a variety of uses including the ability to advertise to other business units that everything is all running correctly.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/9ceb9d39-20d0-4c80-9f6f-942a9770c2b2"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/aff25c4b-40d9-42ad-a485-31b822949e3c" width="244" height="102" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For example I am consuming the Status Feed here in Outlook and it allows me to see that the jobs are all running and I get an update each time it’s run.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/527945db-87b5-497d-9c41-e134eae83ce4"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/1e8de17d-8eec-409a-a75f-5a13c1e66f1c" width="644" height="446" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 09 Feb 2010 11:46:47 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/02/ouvvi-running-for-another-week</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Ouvvi – Running for another Week</title>
      <description>&lt;p&gt;So we left the current build of &lt;strong&gt;Ouvvi&lt;/strong&gt; running all last week (since 29th Jan) on our Server processing it’s jobs and it’s just running perfectly, no increase in Memory usage, low CPU usage and all services still running perfectly!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/f8bedcc3-ff6d-4c6b-b88e-e587f27272e9"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/d8ac260f-0ac4-4925-94e9-b4d1459a84fe" width="644" height="365" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/21290eb5-e33c-48cc-8a99-f19de5405664"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/18acb243-a11a-4975-8400-ad8617a112b4" width="367" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/c52a6e60-7a08-4c3d-91e1-222e91237068"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/8f8d7b67-e1e2-4f17-a23e-600808ee61f7" width="367" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 08 Feb 2010 09:53:57 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/02/new-ouvvi-step-types</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>New Ouvvi Step Types</title>
      <description>&lt;p&gt;We’ve added a few new Step Handlers to Ouvvi to extend the integration capabilities.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;HttpWebRequest&lt;/strong&gt; – Allows you to call an external web page and validate the result with a Regular Expression. This can simply be used to check that a remote service is running or used to notify an external service that an Ouvvi project has completed.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SQL Job&lt;/strong&gt; – Allows you to Start a Job in SQL Server Agent typically this might be used to start an SSIS Package.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SMS Message&lt;/strong&gt; – Like the Email Message handler you can also send SMS’s via the &lt;a href="http://www.csoft.co.uk"&gt;www.csoft.co.uk&lt;/a&gt; SMS Gateway Service.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Ouvvi Project&lt;/strong&gt; – You can Start another Ouvvi Project.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/99e238c7-4155-4e9b-b32a-6edce1ebcf07"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/2f711950-afbe-4d50-8f09-5a6da51ad256" width="644" height="393" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 02 Feb 2010 10:28:25 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/02/testing-ouvvi-uptime</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Testing Ouvvi Uptime</title>
      <description>&lt;p&gt;So were running Ouvvi internally here on our server to check the reliability of leaving the service completely unattended we have been running for several days now and all is working very well. We have two projects setup one that backs up our database from the Internet on Start of Day and End of Day, the other runs every 30 minutes and synchronises our Exchange Timesheet data with SQL and SharePoint.&lt;/p&gt;  &lt;p&gt;Ouvvi Service(s) List here were running 3 instances of the Step Service on the same Server and you can see that the last service checkpoint was a few seconds ago and it’s been running since 29th Jan.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/b4c8234b-e80c-417e-ac33-b82dc52094e8"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/25fa9e52-da54-4ae2-bdc9-afc936a870bf" width="644" height="389" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Task Manager is showing that Memory usage has not climbed up at all even when running several data sync projects every 30 minutes. &lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/06fbddcb-46c6-4de4-8a7a-2d3ec56dc3fe"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/498b734d-82e7-451c-8bf2-0c8d95c458f6" width="432" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And CPU usage is pretty much flat which is really good.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/cfcfb962-8100-4308-b296-7a0ab7c85010"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/18a6f418-7309-43de-aefa-736c39a03bf6" width="432" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 02 Feb 2010 10:21:00 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/01/server-performance-running-ouvvi</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Server Performance Running Ouvvi</title>
      <description>&lt;p&gt;Were quite keen that Ouvvi can be deployed onto existing infrastructure and not impact normal server operations. In fact were running Ouvvi on our DC which is also running SQL Server, SharePoint and Team Foundation Server. &lt;/p&gt;  &lt;p&gt;Below shows a Server CPU Graph running the Ouvvi Service. Here you can see that running all the Ouvvi Services in the background doesn’t impact server CPU load also the actual Memory usage is quite low at 16MB this value will increase depending on the size of the Data Sync projects your running but should drop down to around this figure when Ouvvi is idle.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/72787141-9ba6-4746-9ac5-5a927774b2e5"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/dd6bd8fb-4a13-4b3a-9677-93a4000e5c97" width="244" height="223" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/eef40129-847e-4f4b-bbfd-9a4b21c5c8d5"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/d965e36a-a203-4a03-a935-170d998905a1" width="244" height="223" /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 26 Jan 2010 14:33:04 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/01/using-ouvvi-to-schedule-and-manage-your-data-sync-etl</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using Ouvvi to Schedule and Manage your Data Sync ETL</title>
      <description>&lt;p&gt;Here’s a quick overview of how we are using Ouvvi internally to manage our Data Sync projects.&lt;/p&gt;  &lt;p&gt;We have a series of Steps that basically download our Timesheet Data from Exchange Server which is then synchronised into a SQL Table. Then we create a View that returns statistics about the time spent on each project which is Synchronised into a SharePoint List with Data Sync.&lt;/p&gt;  &lt;p&gt;So this project consists of the following Steps&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Get Exchange Records &lt;/li&gt;    &lt;li&gt;Update Job Codes (2 way sync of SharePoint List containing Job Codes) &lt;/li&gt;    &lt;li&gt;Update Job Stats &lt;/li&gt;    &lt;li&gt;Email support if there was an error. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In Ouvvi this is really easy to setup we just create a new project and add the steps like below.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/5c9109af-3f35-4b4e-8d0c-7127f5e9509f"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Ouvvi Project View" border="0" alt="Ouvvi Project View" src="http://www.simego.com/Blog/Attachment/76fb98d7-33a7-428e-8f7f-0e41d27d3537" width="527" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Adding a Data Sync Step is easy too we just enter the path to the Data Sync Project like so.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/19653a19-0434-4b45-8de5-4c8364dcd01d"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Ouvvi - Adding Step" border="0" alt="Ouvvi - Adding Step" src="http://www.simego.com/Blog/Attachment/6398c311-68fd-4ce4-8e7a-d2938b9d3370" width="527" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We want this process to run at “Start of Day” and every 30 minutes so we just add the Triggers for “Start of Day” and 30 Minutes.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/f6348701-5231-4d63-81d0-4f099756d579"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Ouvvi - Adding Trigger" border="0" alt="Ouvvi - Adding Trigger" src="http://www.simego.com/Blog/Attachment/b1574b91-eb9c-47a5-b62e-c12a49c33b0e" width="644" height="382" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For the Failure report we just add a SMTP Step which only runs on the Run Condition “Failure” like so.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/f3452735-7ffe-4df4-b034-2e67d865d88b"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Ouvvi - Email Report" border="0" alt="Ouvvi - Email Report" src="http://www.simego.com/Blog/Attachment/c9ab488f-493f-4b2b-a594-5253464ad284" width="486" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And that’s it all setup and running every day, logging the status to the Ouvvi logs and reporting any error to our HelpDesk. (Ouvvi has an automatic retry pattern so we need 3 failures in a row to initiate an actual error).&lt;/p&gt;  &lt;p&gt;Anytime we need to kick this process off again Ad-Hoc we can just hit the &lt;strong&gt;Start&lt;/strong&gt; button without having to log onto the server.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 26 Jan 2010 12:45:38 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2010/01/coming-soon-ouvvi-for-datasync-etl</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Coming Soon – Ouvvi for DataSync / ETL</title>
      <description>&lt;p&gt;So we have been busy putting a new solution together to better manage Data Sync projects and ETL along with any solution that requires a series of steps to be followed. This could be an STP system, Order Processing, Data Import/Extract or anything really.&lt;/p&gt; &lt;p&gt;The solution involves a Web Front End application for Management and a Windows Service that handles the actual processing. &lt;/p&gt; &lt;p&gt;The system involves creating a project and adding steps to the project which are processed in turn, each step has a run condition which allows for example running a step when the batch fails such as a step to send an email/sms alert.&lt;/p&gt; &lt;p&gt;Projects and Steps are added to a Queue for processing to ensure that the system remains consistent between failures, re-starts etc and can be easily backed up via SQL Server backup.&amp;nbsp; &lt;/p&gt; &lt;h3&gt;Features &lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Scale-out across Processes/Servers/Machines for both Web Application and Service processing.  &lt;li&gt;Resilient against failures via Retry Pattern and Queue System to maintain consistency.  &lt;li&gt;Redundancy/Failover via running multiple services on separate machines.  &lt;li&gt;Unified Logging where all messages from all projects/steps are captured into a single logging table  &lt;li&gt;Logging clean up where expired logs are deleted (could also be archived)  &lt;li&gt;Queue clean up where failed/unknown state messages are removed after retry count fails.  &lt;li&gt;Start of Day/End of Day Triggers  &lt;li&gt;Easily Develop new Step Handlers for integration of any system i.e. Execute SSIS Package, Run SP, BCP, Backup Database, FTP etc.  &lt;li&gt;Easily Develop new Triggers such as File Drop, Web Service etc.  &lt;li&gt;RSS Status Reports  &lt;li&gt;Content Management to enable Project/Step documentation within the console.&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Prototype Step Handler&lt;/h3&gt; &lt;p&gt;Creating new Steps is as simple as creating a class that derives from StepHandler like so.&lt;/p&gt; &lt;p&gt;public class SqlStepHandler : StepHandler&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void Execute()&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LogService.LogEvent(InstanceID, ProjectID, StepIndex, LogSeverity.Information, "SqlStepHandler.Execute", "Start", this.Name);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;h3&gt;Screenshot&lt;/h3&gt; &lt;p&gt;&lt;br&gt;&lt;a href="/Blog/Attachment/03f2ac01-a8f0-4133-b4da-69bce43075ad"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/98b05bb7-ace8-4159-91fe-7479be7fda00" width="244" height="147"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;System Requirements&lt;/h3&gt; &lt;p&gt;We have chosen not to use the very latest software to build this solution so that the requirements are pretty minimal and therefore could be installed easily onto existing infrastructure or virtualized with Hyper-V or VMWare.&lt;/p&gt; &lt;h4&gt;For the Web Application&lt;/h4&gt;Windows Server 2003+, Server 2008, Vista, 7&lt;br&gt;IIS 6.0 +&lt;br&gt;.NET Framework 3.5 SP1&lt;br&gt;SQL Server 2005+ (and Express)&lt;br&gt; &lt;h4&gt;For the Processing Service&lt;/h4&gt; &lt;p&gt;Windows Server 2003+, Server 2008, Vista, 7&lt;br&gt;.NET Framework 2.0+&lt;br&gt;SQL Server 2005+ (and Express)&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 13 Jan 2010 10:52:33 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/12/accessing-word-document-properties-via-office11-interop-library</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Accessing Word Document Properties via Office11 Interop Library</title>
      <description>&lt;p&gt;To access Word Document Properties with the Office 2003 Interop Libraries for the .NET Framework you need to use reflection to access the collection and read the Name and Value properties of each item in the List.&lt;/p&gt; &lt;p&gt;For example to Return a List of Document Properties might do something like this.&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:452a2db7-0311-459a-adae-fe3c9fd8bb85" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ICollection&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;DocumentProperty&lt;/span&gt;&amp;gt; GetDocumentProperties()&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;ICollection&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;DocumentProperty&lt;/span&gt;&amp;gt; returnValue = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;DocumentProperty&lt;/span&gt;&amp;gt;();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;IEnumerable&lt;/span&gt; p = (&lt;span style="color:#2b91af"&gt;IEnumerable&lt;/span&gt;)_Document.CustomDocumentProperties;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; f &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; p)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Type&lt;/span&gt; item = f.GetType();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;try&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;returnValue.Add(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DocumentProperty&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Name = GetProperty&amp;lt;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;&amp;gt;(item, f, &lt;span style="color:#a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;),&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Value = GetProperty&amp;lt;&lt;span style="color:#0000ff"&gt;object&lt;/span&gt;&amp;gt;(item, f, &lt;span style="color:#a31515"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;});&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af"&gt;TargetInvocationException&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;//Do nothing&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af"&gt;COMException&lt;/span&gt;)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;//Do nothing&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; returnValue;&lt;/li&gt; &lt;li&gt;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; T GetProperty&amp;lt;T&amp;gt;(&lt;span style="color:#2b91af"&gt;Type&lt;/span&gt; t, &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; o, &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; name)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; (T)t.InvokeMember(name,&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;BindingFlags&lt;/span&gt;.Default |&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;BindingFlags&lt;/span&gt;.GetProperty,&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;null&lt;/span&gt;, o,&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;null&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 07 Dec 2009 20:26:48 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/12/creating-pdf-documents-with-pdf-creator</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Creating PDF Documents with PDF Creator</title>
      <description>&lt;p&gt;This sample shows how you can create a command line utility program to automatically convert Word (.doc) documents into a PDF file with the &lt;a href="http://sourceforge.net/projects/pdfcreator/"&gt;PDF Creator&lt;/a&gt; Library.&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f378e530-3795-4c3e-9d72-2759f40f7592" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 3em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; System;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; System.IO;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; System.Threading;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; Microsoft.Office.Interop.Word;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; PDFCreator;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;namespace&lt;/span&gt; PdfPrinter&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Program&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;int&lt;/span&gt; Main(&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;[] args)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;WordConstants&lt;/span&gt; Constants = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;WordConstants&lt;/span&gt;();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; PDF_Printer = &lt;span style="color:#a31515"&gt;&amp;quot;PDFCreator&amp;quot;&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; infile = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; outfile = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Creating PDF Document&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; currentArg = &lt;span style="color:#a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; arg &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; args)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (arg.Equals(&lt;span style="color:#a31515"&gt;&amp;quot;-infile:&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase) ||&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;arg.Equals(&lt;span style="color:#a31515"&gt;&amp;quot;-outfile:&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase) ||&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;arg.Equals(&lt;span style="color:#a31515"&gt;&amp;quot;-printer:&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;currentArg = arg.ToLower();&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;else&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;switch&lt;/span&gt; (currentArg)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;case&lt;/span&gt; &lt;span style="color:#a31515"&gt;&amp;quot;-infile:&amp;quot;&lt;/span&gt;:&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;infile = arg;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;currentArg = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;break&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;case&lt;/span&gt; &lt;span style="color:#a31515"&gt;&amp;quot;-outfile:&amp;quot;&lt;/span&gt;:&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;outfile = arg;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;currentArg = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;break&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;case&lt;/span&gt; &lt;span style="color:#a31515"&gt;&amp;quot;-printer:&amp;quot;&lt;/span&gt;:&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PDF_Printer = arg;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;currentArg = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;break&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;default&lt;/span&gt;:&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;break&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;//Verify the input file exists&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;.IsNullOrEmpty(infile) ||&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;!&lt;span style="color:#2b91af"&gt;File&lt;/span&gt;.Exists(infile))&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Error - Input file &amp;#39;{0}&amp;#39; does not exist.&amp;quot;&lt;/span&gt;, infile);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; -1;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;.IsNullOrEmpty(outfile))&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Error - No output file.&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; -1;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;//Check that the output directory exists&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (!&lt;span style="color:#2b91af"&gt;Directory&lt;/span&gt;.Exists(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.GetDirectoryName(outfile)))&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Directory&lt;/span&gt;.CreateDirectory(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.GetDirectoryName(outfile));&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;clsPDFCreator&lt;/span&gt; pdfCreator = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;try&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfCreator = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;clsPDFCreator&lt;/span&gt;();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (!pdfCreator.cStart(&lt;span style="color:#a31515"&gt;&amp;quot;/NoProcessingAtStartup&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;false&lt;/span&gt;))&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Unable to start PDFCreator.&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; -1;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfCreator.cWindowState = 1;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Save currently active printer.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; defaultPrinter = pdfCreator.cDefaultPrinter;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Set parameters for saving the generating pdf automatically to a directory.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;clsPDFCreatorOptions&lt;/span&gt; pdfPrintOptions = pdfCreator.cOptions;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Use auto save functionality.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfPrintOptions.UseAutosave = 1;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Use directory for saving the file.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfPrintOptions.UseAutosaveDirectory = 1;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Name of the output directory.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfPrintOptions.AutosaveDirectory = &lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.GetDirectoryName(outfile);&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Format in which file is to be saved. 0 if for pdf.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfPrintOptions.AutosaveFormat = 0;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Name of the output file name.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfPrintOptions.AutosaveFilename = &lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.GetFileName(outfile);&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;//Set the Options&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfCreator.cOptions = pdfPrintOptions;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;//Clear the Cache&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfCreator.cClearCache();&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;//Stop the Printer&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfCreator.cPrinterStop = &lt;span style="color:#0000ff"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Starting Word&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Create new instance of word application.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;ApplicationClass&lt;/span&gt; word = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;ApplicationClass&lt;/span&gt;();&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Set pdf creator as active printer. Name should be same as you gave while installation.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;try&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;//Set the PDF Printer Current&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;word.ActivePrinter = PDF_Printer;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; documentName = infile;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;//Open the Document&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Document&lt;/span&gt; document = word.Documents.Open(&lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; documentName, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Printing PDF Document&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;//Print the document to the PDF Printer&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;word.PrintOut(&lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.background, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.append, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.range, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.outputFileName, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.from, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.to, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.item, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.copies, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.pages, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.pageType, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.printToFile, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.collate, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.fileName, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.activePrinterMacGX, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.manualDuplexPrint, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.printZoomColumn, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.printZoomRow, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.printZoomPaperWidth, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.printZoomPaperHeight);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Wait untill the document is queued.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;while&lt;/span&gt; (pdfCreator.cCountOfPrintjobs != 1)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Thread&lt;/span&gt;.Sleep(100);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Start the printing.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfCreator.cPrinterStop = &lt;span style="color:#0000ff"&gt;false&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Wait until the print queue is completed.&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;while&lt;/span&gt; (pdfCreator.cCountOfPrintjobs != 0)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Thread&lt;/span&gt;.Sleep(100);&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Close all the opened documents.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af"&gt;Document&lt;/span&gt; doc &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; word.Documents)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;doc.Close(&lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.FalseValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Stop the printer.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfCreator.cPrinterStop = &lt;span style="color:#0000ff"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;finally&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Set back the default printer.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;word.ActivePrinter = defaultPrinter;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;word.Quit(&lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.FalseValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue, &lt;span style="color:#0000ff"&gt;ref&lt;/span&gt; Constants.MissingValue);&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;PDF Document Created {0}&amp;quot;&lt;/span&gt;, pdfCreator.cOutputFilename);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;finally&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Shutdown the PDF Printer&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (pdfCreator != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfCreator.cClose();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;pdfCreator = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; 0;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;WordConstants&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; MissingValue = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; FalseValue = &lt;span style="color:#0000ff"&gt;false&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; background = &lt;span style="color:#0000ff"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; append = &lt;span style="color:#0000ff"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; range = Microsoft.Office.Interop.Word.&lt;span style="color:#2b91af"&gt;WdPrintOutRange&lt;/span&gt;.wdPrintAllDocument;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; outputFileName = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; from = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; to = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; item = Microsoft.Office.Interop.Word.&lt;span style="color:#2b91af"&gt;WdPrintOutItem&lt;/span&gt;.wdPrintDocumentContent;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; copies = 1;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; pages = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; pageType = Microsoft.Office.Interop.Word.&lt;span style="color:#2b91af"&gt;WdPrintOutPages&lt;/span&gt;.wdPrintAllPages;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; printToFile = &lt;span style="color:#0000ff"&gt;false&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; collate = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; fileName = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; activePrinterMacGX = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; manualDuplexPrint = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; printZoomColumn = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; printZoomRow = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; printZoomPaperWidth = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Object&lt;/span&gt; printZoomPaperHeight = &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.Missing;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 07 Dec 2009 17:41:59 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/12/sample-dynamically-creating-code-at-runtime-and-calling-from-your-program</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Sample: Dynamically Creating Code at Runtime and Calling from your Program</title>
      <description>&lt;P&gt;This is a small sample that shows how you can build code at runtime and generate an assembly to execute code which could be defined in a database or something. This example shows how to dynamically create a class that add the values of 2 numbers via the expression &lt;span class=str&gt;&lt;strong&gt;=Convert.ToInt32(a) + Convert.ToInt32(b)&lt;/strong&gt;. &lt;/span&gt;&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System;&lt;/PRE&gt;&lt;PRE&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.CodeDom.Compiler;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/PRE&gt;&lt;PRE&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Globalization;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Reflection;&lt;/PRE&gt;&lt;PRE&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Text;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; Microsoft.CSharp;&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;span class=kwrd&gt;namespace&lt;/span&gt; ExpressionTest&lt;/PRE&gt;&lt;PRE&gt;{&lt;/PRE&gt;&lt;PRE class=alt&gt;  &lt;span class=kwrd&gt;class&lt;/span&gt; Program&lt;/PRE&gt;&lt;PRE&gt;  {&lt;/PRE&gt;&lt;PRE class=alt&gt;    &lt;span class=kwrd&gt;static&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; Main(&lt;span class=kwrd&gt;string&lt;/span&gt;[] args)&lt;/PRE&gt;&lt;PRE&gt;    {      &lt;/PRE&gt;&lt;PRE class=alt&gt;      List&amp;lt;KeyValuePair&amp;lt;&lt;span class=kwrd&gt;string&lt;/span&gt;, &lt;span class=kwrd&gt;string&lt;/span&gt;&amp;gt;&amp;gt; properties = &lt;span class=kwrd&gt;new&lt;/span&gt; List&amp;lt;KeyValuePair&amp;lt;&lt;span class=kwrd&gt;string&lt;/span&gt;, &lt;span class=kwrd&gt;string&lt;/span&gt;&amp;gt;&amp;gt;();&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;      properties.Add(&lt;span class=kwrd&gt;new&lt;/span&gt; KeyValuePair&amp;lt;&lt;span class=kwrd&gt;string&lt;/span&gt;, &lt;span class=kwrd&gt;string&lt;/span&gt;&amp;gt;(&lt;span class=str&gt;"a"&lt;/span&gt;, &lt;span class=str&gt;"1"&lt;/span&gt;));&lt;/PRE&gt;&lt;PRE&gt;      properties.Add(&lt;span class=kwrd&gt;new&lt;/span&gt; KeyValuePair&amp;lt;&lt;span class=kwrd&gt;string&lt;/span&gt;, &lt;span class=kwrd&gt;string&lt;/span&gt;&amp;gt;(&lt;span class=str&gt;"b"&lt;/span&gt;, &lt;span class=str&gt;"200"&lt;/span&gt;));&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;      &lt;span class=kwrd&gt;string&lt;/span&gt; expression = &lt;span class=str&gt;"=Convert.ToInt32(a) + Convert.ToInt32(b)"&lt;/span&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;/PRE&gt;&lt;PRE&gt;      &lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=kwrd&gt;string&lt;/span&gt; className = &lt;span class=str&gt;"Expression1"&lt;/span&gt;;&lt;/PRE&gt;&lt;PRE&gt;      &lt;span class=kwrd&gt;string&lt;/span&gt; methodName = &lt;span class=str&gt;"GetSum"&lt;/span&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=kwrd&gt;string&lt;/span&gt; namespaceName = &lt;span class=str&gt;"ExpressionTest"&lt;/span&gt;;&lt;/PRE&gt;&lt;PRE&gt;      &lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=rem&gt;//Create a Class&lt;/span&gt;&lt;/PRE&gt;&lt;PRE&gt;      StringBuilder _class = &lt;span class=kwrd&gt;new&lt;/span&gt; StringBuilder();&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=rem&gt;//Start Usings&lt;/span&gt;&lt;/PRE&gt;&lt;PRE&gt;      _class.Append(&lt;span class=str&gt;"using System;\r\n"&lt;/span&gt;);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;      &lt;span class=rem&gt;//Start Namespace&lt;/span&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;      _class.AppendFormat(&lt;span class=str&gt;"namespace {0} {{\r\n"&lt;/span&gt;, namespaceName);&lt;/PRE&gt;&lt;PRE&gt;      &lt;span class=rem&gt;//Start Class&lt;/span&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;      _class.AppendFormat(&lt;span class=str&gt;"public class {0} {{\r\n"&lt;/span&gt;, className);&lt;/PRE&gt;&lt;PRE&gt;      &lt;span class=rem&gt;//Start Properties&lt;/span&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=kwrd&gt;foreach&lt;/span&gt; (KeyValuePair&amp;lt;&lt;span class=kwrd&gt;string&lt;/span&gt;, &lt;span class=kwrd&gt;string&lt;/span&gt;&amp;gt; p &lt;span class=kwrd&gt;in&lt;/span&gt; properties)&lt;/PRE&gt;&lt;PRE&gt;      {&lt;/PRE&gt;&lt;PRE class=alt&gt;        _class.AppendFormat(&lt;span class=str&gt;"public string {0};\r\n"&lt;/span&gt;, p.Key);&lt;/PRE&gt;&lt;PRE&gt;      }&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=rem&gt;//Start Constructor&lt;/span&gt;&lt;/PRE&gt;&lt;PRE&gt;      _class.AppendFormat(&lt;span class=str&gt;"public {0} () {{\r\n"&lt;/span&gt;, className);&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=kwrd&gt;foreach&lt;/span&gt; (KeyValuePair&amp;lt;&lt;span class=kwrd&gt;string&lt;/span&gt;, &lt;span class=kwrd&gt;string&lt;/span&gt;&amp;gt; p &lt;span class=kwrd&gt;in&lt;/span&gt; properties)&lt;/PRE&gt;&lt;PRE&gt;      {&lt;/PRE&gt;&lt;PRE class=alt&gt;        _class.AppendFormat(&lt;span class=str&gt;"{0}=\"{1}\";\r\n"&lt;/span&gt;, p.Key, p.Value);&lt;/PRE&gt;&lt;PRE&gt;      }      &lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=rem&gt;//End Constructor&lt;/span&gt;&lt;/PRE&gt;&lt;PRE&gt;      _class.Append(&lt;span class=str&gt;"}\r\n"&lt;/span&gt;);&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;/PRE&gt;&lt;PRE&gt;      &lt;span class=rem&gt;//Start Expression&lt;/span&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;      _class.AppendFormat(&lt;span class=str&gt;"public string {0}() {{\r\n"&lt;/span&gt;, methodName);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=kwrd&gt;if&lt;/span&gt; (expression.StartsWith(&lt;span class=str&gt;"="&lt;/span&gt;))&lt;/PRE&gt;&lt;PRE&gt;      {&lt;/PRE&gt;&lt;PRE class=alt&gt;        _class.AppendFormat(&lt;span class=str&gt;"return Convert.ToString({0});\r\n"&lt;/span&gt;, expression.Substring(1));&lt;/PRE&gt;&lt;PRE&gt;      }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;      &lt;span class=rem&gt;//End Expression&lt;/span&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;      _class.Append(&lt;span class=str&gt;"}\r\n"&lt;/span&gt;);&lt;/PRE&gt;&lt;PRE&gt;      &lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=rem&gt;//End Class&lt;/span&gt;&lt;/PRE&gt;&lt;PRE&gt;      _class.Append(&lt;span class=str&gt;"}\r\n"&lt;/span&gt;);&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;span class=rem&gt;//End Namespace&lt;/span&gt;&lt;/PRE&gt;&lt;PRE&gt;      _class.Append(&lt;span class=str&gt;"}\r\n"&lt;/span&gt;);&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;/PRE&gt;&lt;PRE&gt;      &lt;span class=rem&gt;//Compile the Class&lt;/span&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;      CompilerParameters options = &lt;span class=kwrd&gt;new&lt;/span&gt; CompilerParameters();&lt;/PRE&gt;&lt;PRE&gt;      options.GenerateInMemory = &lt;span class=kwrd&gt;true&lt;/span&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;      options.GenerateExecutable = &lt;span class=kwrd&gt;false&lt;/span&gt;;&lt;/PRE&gt;&lt;PRE&gt;      &lt;span class=kwrd&gt;foreach&lt;/span&gt; (AssemblyName assembly &lt;span class=kwrd&gt;in&lt;/span&gt; &lt;span class=kwrd&gt;typeof&lt;/span&gt;(Program).Assembly.GetReferencedAssemblies())&lt;/PRE&gt;&lt;PRE class=alt&gt;      {&lt;/PRE&gt;&lt;PRE&gt;        options.ReferencedAssemblies.Add(&lt;span class=kwrd&gt;string&lt;/span&gt;.Format(&lt;span class=str&gt;"{0}.dll"&lt;/span&gt;, assembly.Name));&lt;/PRE&gt;&lt;PRE class=alt&gt;      }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;      CSharpCodeProvider provider = &lt;span class=kwrd&gt;new&lt;/span&gt; CSharpCodeProvider();&lt;/PRE&gt;&lt;PRE&gt;      CompilerResults results = provider.CompileAssemblyFromSource(options, _class.ToString());&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;      &lt;span class=kwrd&gt;if&lt;/span&gt; (!results.Errors.HasErrors)&lt;/PRE&gt;&lt;PRE class=alt&gt;      {&lt;/PRE&gt;&lt;PRE&gt;        &lt;span class=rem&gt;//Invoke the Expression Method&lt;/span&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        Type t = results.CompiledAssembly.GetType(&lt;span class=kwrd&gt;string&lt;/span&gt;.Format(&lt;span class=str&gt;"{0}.{1}"&lt;/span&gt;, namespaceName, className));&lt;/PRE&gt;&lt;PRE&gt;        &lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;span class=kwrd&gt;object&lt;/span&gt; instance = t.InvokeMember(t.Name, &lt;/PRE&gt;&lt;PRE&gt;          BindingFlags.CreateInstance | &lt;/PRE&gt;&lt;PRE class=alt&gt;          BindingFlags.Instance | &lt;/PRE&gt;&lt;PRE&gt;          BindingFlags.NonPublic | &lt;/PRE&gt;&lt;PRE class=alt&gt;          BindingFlags.Public, &lt;span class=kwrd&gt;null&lt;/span&gt;, &lt;span class=kwrd&gt;null&lt;/span&gt;, &lt;span class=kwrd&gt;null&lt;/span&gt;, CultureInfo.CurrentCulture);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;span class=kwrd&gt;if&lt;/span&gt; (instance != &lt;span class=kwrd&gt;null&lt;/span&gt;)&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;          &lt;span class=kwrd&gt;string&lt;/span&gt; result = (&lt;span class=kwrd&gt;string&lt;/span&gt;)t.InvokeMember(methodName, &lt;/PRE&gt;&lt;PRE&gt;            BindingFlags.InvokeMethod | &lt;/PRE&gt;&lt;PRE class=alt&gt;            BindingFlags.Instance | &lt;/PRE&gt;&lt;PRE&gt;            BindingFlags.Public | &lt;/PRE&gt;&lt;PRE class=alt&gt;            BindingFlags.NonPublic, &lt;span class=kwrd&gt;null&lt;/span&gt;, instance, &lt;span class=kwrd&gt;null&lt;/span&gt;, CultureInfo.CurrentCulture);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;          Console.WriteLine(&lt;span class=str&gt;"{0}{1}"&lt;/span&gt;, result, expression);&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;/PRE&gt;&lt;PRE&gt;      }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;      Console.ReadLine();&lt;/PRE&gt;&lt;PRE class=alt&gt;    }&lt;/PRE&gt;&lt;PRE&gt;  }&lt;/PRE&gt;&lt;PRE class=alt&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 07 Dec 2009 10:16:55 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/12/previewing-sharepoint-2010-foundation</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Previewing SharePoint 2010 Foundation</title>
      <description>&lt;p&gt;My setup which seems to work rather well for an Installation of SharePoint 2010 Foundation consists of the following&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MacBook Pro 2.53Ghz 4GB Unibody Running Windows 7 x64 Ultimate &lt;/li&gt;    &lt;li&gt;Intel X25-M 160 GB G2 SSD &lt;/li&gt;    &lt;li&gt;VMWare 7 Workstation &lt;/li&gt;    &lt;li&gt;Virtual Image of Windows Server 2008 Enterprise R2 x64 2GB RAM allocated, 1 CPU, 2 Cores &lt;/li&gt;    &lt;li&gt;SharePoint 2010 Foundation Beta installed onto the Virtual in Standalone mode. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I was quite surprised how well this actually runs considering the system requirements for SharePoint 2010 but I have found it to be very snappy and it looks very good.&lt;/p&gt;  &lt;p&gt;I think the trick here is the SSD without an SSD virtualization is pretty slow on a standard laptop but with an SSD it’s really quick well worth the upgrade costs. What's really impressive is if you switch between the Virtual and your base OS there’s no delay even if your installing software or something in the Virtual the main OS is still really responsive.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sat, 05 Dec 2009 20:36:25 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/12/changing-the-maximum-content-length-for-iis7</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Changing the Maximum Content Length for IIS7</title>
      <description>&lt;p&gt;Under IIS7 there’s a new setting that prevents large content being sent to the server. If your using NeatUpload then you will see the error as a 404. However you might want to allow for such large content for example posting a video file to the server. The trick is to update the &lt;strong&gt;maxAllowedContentLength&lt;/strong&gt; attribute which can be easily done from your &lt;strong&gt;web.config&lt;/strong&gt; file like so. &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.webServer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;requestFiltering&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;requestLimits&lt;/span&gt; &lt;span class="attr"&gt;maxAllowedContentLength&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;314572800&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;headerLimits&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;headerLimits&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;requestLimits&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;requestFiltering&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.webServer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sat, 05 Dec 2009 20:25:00 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/11/sql-bits-v---celtic-manor---newport-wales</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SQL Bits V - Celtic Manor - Newport Wales</title>
      <description>&lt;p&gt;I will be attending the SQL Bits conference this week in Newport on Friday and Saturday so if anybody would like to hook up whilst I am there please drop me a line and we can arrange a time.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 18 Nov 2009 09:28:45 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/11/data-synchronisation-studio-sql-azure-support</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio – SQL Azure Support</title>
      <description>&lt;p&gt;We have just updated Data Synchronisation Studio so that you can connect to a SQL Azure database. Previously you couldn’t browse the Databases and Schema when trying to connect, SQL Azure prevents calling the Database Schema tables directly from the OleDb provider for some reason this is all fixed now in Data Sync.&lt;/p&gt;  &lt;p&gt;We have been testing some simple synchronisations between a local SQL Server and SQL Azure and so far found that writing data to SQL Azure to be pretty slow once we had some data in there the compare was pretty quick and any updates after that were also quick. &lt;/p&gt;  &lt;p&gt;Download the latest version of Data Synchronisation Studio from &lt;a href="http://www.simego.com/beta"&gt;http://www.simego.com/beta&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 10 Nov 2009 14:31:32 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/11/azure-sql-manager-support-updated</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Azure SQL Manager – Support Updated</title>
      <description>&lt;p&gt;Today we have been updating our experimental support for Azure SQL. So far we have enough support for the application to be very useful for development/testing with Azure SQL.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Browse Objects&lt;/strong&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Databases &lt;/li&gt;    &lt;li&gt;Tables &lt;/li&gt;    &lt;li&gt;Views &lt;/li&gt;    &lt;li&gt;Procedures &lt;/li&gt;    &lt;li&gt;Functions &lt;/li&gt;    &lt;li&gt;Synonyms &lt;/li&gt;    &lt;li&gt;Indexes &lt;/li&gt;    &lt;li&gt;Logins &lt;/li&gt;    &lt;li&gt;Users &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Script / Edit&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Tables &lt;/li&gt;    &lt;li&gt;Views &lt;/li&gt;    &lt;li&gt;Procedures &lt;/li&gt;    &lt;li&gt;Functions &lt;/li&gt;    &lt;li&gt;Synonyms &lt;/li&gt;    &lt;li&gt;Indexes &lt;/li&gt;    &lt;li&gt;Logins &lt;/li&gt;    &lt;li&gt;Users (assign roles, change passwords) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Also you can sync data between SQL Server and Azure SQL with the Data compare features.&lt;/p&gt;  &lt;p&gt;Schema compare is partially working (compare works by sync has issues) except for Table changes which fails due to deprecated SQL functions.&lt;/p&gt;  &lt;h3&gt;Connecting to Azure SQL Server&lt;/h3&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/97dcbeb6-112c-4f24-b122-fad7fe1ba4e0"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Connect-SqlAzure" border="0" alt="Connect-SqlAzure" src="http://www.simego.com/Blog/Attachment/3b4ee762-97b6-4523-9b68-13dd98f90f69" width="244" height="214" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Viewing Schema and Table Data&lt;/h3&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/87bc7405-dfef-489c-af6d-9ea20a8c178a"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Connect-SqlAzure" border="0" alt="Connect-SqlAzure" src="http://www.simego.com/Blog/Attachment/e9f48003-b7a7-49df-a246-f348396db045" width="244" height="141" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Download the latest build of SQL Tools from &lt;a href="http://www.simego.com/beta"&gt;http://www.simego.com/beta&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 09 Nov 2009 21:50:40 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/11/experimental-sql-azure-support-for-sql-admin-studio</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Experimental SQL Azure Support for SQL Admin Studio</title>
      <description>&lt;p&gt;So I have been tinkering with &lt;a href="http://www.microsoft.com/windowsazure/sqlazure/"&gt;SQL Azure&lt;/a&gt; this weekend and it looks pretty good but I needed a few tools&amp;#0160;to work with my databases. As SQL Admin Studio is my favorite tool for working with databases I have made a few tweaks so that it works with SQL Azure.&lt;/p&gt;
&lt;p&gt;So in the latest beta build you can browse the database schema, edit table data, compare schema, compare and sync&amp;#0160;data etc.&lt;/p&gt;
&lt;p&gt;There are a few problems with Logins, Users,&amp;#0160;Table Designer and the scripts that are generated from the schema compare but I hope to improve this over time.&lt;/p&gt;
&lt;p&gt;Download: &lt;a href="http://www.simego.com/beta"&gt;http://www.simego.com/beta&lt;/a&gt; &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 09 Nov 2009 14:19:10 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/10/virtualization-on-windows-7</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Virtualization on Windows 7</title>
      <description>Now that I have a shiny new Windows 7 install I was looking for ways to create a Virtual Image for SharePoint development on my Laptop as I really don&amp;#39;t want to run Server and Hyper-V. After looking into the new &lt;a href="http://www.microsoft.com/windows/virtual-pc/download.aspx"&gt;XP Mode for Windows 7&lt;/a&gt;&amp;#0160;I thought that surely the new Windows VIrtual PC must be able to run a server image. Sure enough &lt;a href="http://www.microsoft.com/windows/virtual-pc/"&gt;Windows Virtual PC&lt;/a&gt;&amp;#0160;integrates really well with Windows 7 and best of all you can even create a Server Virtual image the only limitations I have found so far is that you can only use 32 bit OS&amp;#39;s and a Single CPU so no SharePoint 2010.
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 27 Oct 2009 20:01:23 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/10/installing-visual-studio-2010-beta-2-on-mac-book-pro</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Installing Visual Studio 2010 Beta 2 on Mac Book Pro</title>
      <description>&lt;p&gt;So being one of those types who just has to go ahead and try the latest and greatest releases of Visual Studio. I went ahead and tried to install VS 2010 Beta 2 today on my Mac Book Pro Bootcamp Windows 7 x64 setup. But oh no it kept failing with some stupid Access Denied error. After a few reboots and an a cup of coffee I worked it out! The Mac partition is read-only and for some reason the .NET Framework 4&amp;#0160;Installer tries to use this disk to expand the installation files and then just fails so the fix is to remove the Drive letter from the Mac partition and all is well.&lt;/p&gt;
&lt;p&gt;Oh and VS2010 looks pretty good can&amp;#39;t wait to to give it a proper spin....&lt;/p&gt;
&lt;p&gt;Just worked out what I now need to run SharePoint 2010 -- Apple have just refreshed their iMac&amp;#39;s so the new Quad i7 27&amp;#39; with 8GB&amp;#0160;RAM looks about right.&amp;#0160;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 20 Oct 2009 22:31:14 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/10/simego-gains-microsoft-certified-partner</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Simego gains Microsoft Certified Partner</title>
      <description>&lt;p&gt;Great News! Today Simego became a Microsoft Certified Partner after much hard&amp;nbsp;work over the past few months&amp;nbsp;and &lt;a title="Data Synchronisation Studio" href="http://www.simego.com/Products/Data-Synchronisation-Studio"&gt;Data Synchronisation Studio&lt;/a&gt; now passes both "Windows 7 Compatible" and "Works with Windows Server 2008 R2" Certification programs.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 13 Oct 2009 10:11:35 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/05/sync-list-data-between-sharepoint-farms</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Sync List Data between SharePoint Farms</title>
      <description>&lt;p&gt;We have been getting a few inquiries lately about how to sync data between an internal SharePoint environment and a Client SharePoint environment. The good news is that this&amp;nbsp; is really easy with &lt;a title="Data Synchronisation Studio" target="_blank" href="http://www.simego.com/Products/Data-Synchronisation-Studio"&gt;Data Synchronisation Studio&lt;/a&gt;. Just connect the Source A to your master internal SharePoint data and then connect the Destination to B which might be on the internet and choose which columns to Sync and go.&lt;/p&gt;
&lt;p&gt;You can also sync documents this way too.&lt;/p&gt;
&lt;p&gt;Or even publish an internal issues/tasks/calendar list to an external client portal so your clients can view how the project is running without needing access to your internal SharePoint environment.&lt;/p&gt;
&lt;p&gt;Data Synchronisation Studio also connects with most hosted installations of SharePoint so if you don&amp;rsquo;t already have an external portal for clients this is a quick and cost effective solution.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 13 May 2009 12:21:46 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/05/data-sync-beta-update</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Beta Update</title>
      <description>&lt;p&gt;We have updated the SharePoint data providers for Data Sync to allow you to choose which view to bind to whilst this was possible before by hacking the project file it’s now just a simple selection from the schema properties window.&lt;/p&gt;  &lt;p&gt;See the screenshot below.&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/21ebab89-1edf-435f-a62d-e7f5bd44f8cc"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.simego.com/Blog/Attachment/33fe416c-e931-4f91-8fe8-fe11b3ac5946" width="152" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is supported on both the SharePoint List provider and the SharePoint Document Library allowing you to filter the SharePoint Data via a Custom View.&lt;/p&gt;  &lt;p&gt;Download the latest build from &lt;a href="http://www.simego.com/beta" target="_blank"&gt;http://www.simego.com/beta&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 12 May 2009 11:20:20 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/05/create-a-timesheet-application-with-sharepoint-and-exchange</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Create a Timesheet Application with SharePoint and Exchange</title>
      <description>&lt;h3&gt;Overview&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;This example shows how you can build a real-time (almost) timesheet reporting system by using Exchange Server, SQL Server and SharePoint Server along with &lt;a href="http://www.simego.com/Products/Data-Synchronisation-Studio" target="_blank"&gt;Data Synchronisation Studio&lt;/a&gt;. Each employee will record their time within their Exchange calendar and define the entry as a &lt;strong&gt;Work Hours&lt;/strong&gt; category. Data Sync will then aggregate all the entries from each user calendar and present a summary view within SharePoint.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Preview of Summary Page&lt;/h3&gt;
&lt;div&gt;&lt;img alt="Preview of SharePoint Timesheet Summary" src="http://www.simego.com/Blog/Attachment/bca45905-ed14-44e4-814b-ce0e9bde2007" /&gt;&lt;/div&gt;
&lt;h3&gt;&lt;span style="font-size: small;"&gt;Preview of Exchange Calendar Item&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;Recording time is as simple as creating a calendar item and setting a few properties. &lt;/span&gt; 
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Set the item Category to &lt;strong&gt;Work Hours&lt;/strong&gt; &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Set the value of Location to the Job identification Code &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Set the body of the message to the description of the work completed &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-size: small;"&gt; This data will then be synchronised via Data Synchronisation Studio to a SQL Server Table which can then be used for reporting.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;img alt="Preview of Exchange Item" src="http://www.simego.com/Blog/Attachment/787f1efa-dbc7-4393-a24f-d0c8cd831463" /&gt;&lt;/div&gt;
&lt;h3&gt;Step 1 - Create Database&lt;/h3&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;Create a SQL database with SQL Server called &lt;strong&gt;TimesheetDB&lt;/strong&gt; to store the timesheet records from Exchange Server and job detail Records.&lt;/span&gt;&lt;/div&gt;
&lt;div class="code"&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;USE [TimesheetDB] &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;SET QUOTED_IDENTIFIER OFF &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;SET ANSI_NULLS OFF &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;CREATE TABLE [dbo].[Job] ( &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DSID] uniqueidentifier DEFAULT(newid()) NOT NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Code] nvarchar(255) NOT NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Company] nvarchar(255) NOT NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Name] nvarchar(255) NOT NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Quote] int NOT NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Active] int NOT NULL &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;ALTER TABLE [dbo].[Job] ADD CONSTRAINT [PK_1AD0E075] PRIMARY KEY CLUSTERED ([DSID] ASC) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;SET QUOTED_IDENTIFIER OFF &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;SET ANSI_NULLS OFF &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;CREATE TABLE [dbo].[Billing] ( &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [CalendarID] nvarchar(50) NOT NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [CreationDate] datetime NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [LastModified] datetime NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [StartDate] datetime NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [EndDate] datetime NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Duration] int NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Importance] ntext NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Priority] int NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Subject] nvarchar(255) NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Body] ntext NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Location] nvarchar(255) NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Category] nvarchar(255) NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [MailBoxName] nvarchar(255) NULL &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;ALTER TABLE [dbo].[Billing] ADD CONSTRAINT [PK_2FA475F7] PRIMARY KEY CLUSTERED ([CalendarID] ASC) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;SET QUOTED_IDENTIFIER ON &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;SET ANSI_NULLS ON &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;CREATE VIEW Timesheet_Stats&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;AS&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;SELECT &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Billing].Location AS Code, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Job.Company, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Job.Name, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Job.Quote, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROUND(SUM(CAST(Billing.Duration as float))/60/60, 2) AS Total, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROUND(CAST(LAST_MONTH.Duration as float)/60/60, 2) AS [Last Month], &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROUND(CAST(THIS_MONTH.Duration as float)/60/60, 2) AS [This Month] &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;FROM [Billing] &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;INNER JOIN Job ON Job.Code = [Billing].Location &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;LEFT JOIN ( SELECT [Location], SUM([Duration]) AS [Duration] FROM [dbo].[Billing] WHERE Month([StartDate]) = Month(DATEADD(m, -1, GETDATE())) GROUP BY [Location]) LAST_MONTH ON LAST_MONTH.Location = [Billing].[Location] &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;LEFT JOIN ( SELECT [Location], SUM([Duration]) AS [Duration] FROM [dbo].[Billing] WHERE Month([StartDate]) = Month(GETDATE()) GROUP BY [Location]) THIS_MONTH ON THIS_MONTH.Location = [Billing].[Location] &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GROUP BY [Billing].Location, Job.Company, Job.Name, Job.Quote, Job.Active, LAST_MONTH.Duration, THIS_MONTH.Duration &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;HAVING Job.Active = 0 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;GO&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-size: small;"&gt;Step 2 - Create Exchange Sync Project&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;To connect Data Sync to your exchange server you will need to define a control file that contains the connection details to your server and the mailboxes that should be included in the synchronisation.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;Create an Xml file call &lt;strong&gt;Timesheet.xml&lt;/strong&gt; that is similar to the example below.&lt;/span&gt;&lt;/div&gt;
&lt;div class="code"&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre&gt;&lt;span style="font-size: small;"&gt;&amp;lt;Exchange&amp;gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;lt;Server&amp;gt;&lt;a href="https://yourserver/exchange"&gt;https://yourserver/exchange&lt;/a&gt;&amp;lt;/Server&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;lt;Username&amp;gt;&amp;lt;/Username&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;lt;Password&amp;gt;&amp;lt;/Password&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;lt;Domain&amp;gt;&amp;lt;/Domain&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;lt;FormsAuthentication&amp;gt;False&amp;lt;/FormsAuthentication&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;lt;Calendar&amp;gt;#SERVER#/#MAILBOX#/Calendar&amp;lt;/Calendar&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;lt;DaysBackToReturn&amp;gt;90&amp;lt;/DaysBackToReturn&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;lt;Category&amp;gt;Work Hours&amp;lt;/Category&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;lt;MailBoxes&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;MailBox&amp;gt;user1@domain.com&amp;lt;/MailBox&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;MailBox&amp;gt;user2@domain.com&amp;lt;/MailBox&amp;gt;     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;MailBox&amp;gt;user3@domain.com&amp;lt;/MailBox&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;lt;/MailBoxes&amp;gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;lt;/Exchange&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;Now connect Data Source A of Data Sync to this Xml file via the &lt;strong&gt;Exchange Calendars&lt;/strong&gt; data provider.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;img alt="Preview of Data Sync Job Project Options" src="http://www.simego.com/Blog/Attachment/5a29b69b-3a2d-4c67-ba1e-276f3c90b3f5" /&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;Then connect Data source B to the Billing Table in the Timesheet Database and your Data Sync project should now look like this.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;img alt="Preview of Data Sync Job Project Options" src="http://www.simego.com/Blog/Attachment/ac6a4486-e5d3-4df2-8279-527f419549f0" /&gt;&lt;/div&gt;
&lt;h3&gt;Step 3 - Create Job List&lt;/h3&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;Connect Data Sync to the &lt;strong&gt;Job&lt;/strong&gt; Table and then create a SharePoint List called Job to Sync the table.&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;Screenshot of the Job project in Data Sync&lt;/h3&gt;
&lt;div&gt;&lt;img alt="Preview of Data Sync Job Project" src="http://www.simego.com/Blog/Attachment/8cb30522-1694-4eed-b40d-250b585e5d28" /&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;The Job list should be configured for 2-way sync so that new Jobs added to the SharePoint List are synchronised with the Database. To do this go to the File menu and choose properties and set the sync option to &lt;strong&gt;SyncAandB&lt;/strong&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;img alt="Preview of Data Sync Job Project Options" src="http://www.simego.com/Blog/Attachment/2d9bb128-779a-4272-a210-9069616d5d58" /&gt;&lt;/div&gt;
&lt;h3&gt;Step 4 - Create Summary List&lt;/h3&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;Connect Data Sync to the &lt;strong&gt;Timesheet_Stats&lt;/strong&gt; View and then create a SharePoint List called Summary to Sync the view.&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;Step 5 - Setup Schedule&lt;/h3&gt;
&lt;div&gt;T&lt;span style="font-size: small;"&gt;his project requires that the synchronisation is run in a particular order for example. &lt;/span&gt; 
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Sync Job List &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Sync Exchange Data &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Sync Summary List &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-size: small;"&gt; To execute the synchronisation in this order you need to setup the &lt;strong&gt;Simego.DataSync.Run.exe&lt;/strong&gt; command line application like this&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Simego.DataSync.Run.exe Job.dsprj Exchange.dsprj Summary.dsprj&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;Now when the Synchronisation process is started each project will be processed in order.&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;Note - Mailbox Security&lt;/h3&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;For data sync to read the entries from each user calendar the account that is used to run the sync requires &lt;strong&gt;Reviewer&lt;/strong&gt; access at the Mailbox and Calendar level. Which can be configured via the Outlook Client.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;You can download and use a fully featured version of Data Sync Studio for 15 Days to see how this Sharepoint solution works.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;Click here to go to the Downloads&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 08 May 2009 10:04:10 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/05/how-to-synchronise-a-sharepoint-document-library-with-a-file-share</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>How to Synchronise a SharePoint Document Library with a File Share</title>
      <description>&lt;h3&gt;Overview&lt;/h3&gt;
&lt;div&gt;This article describes how to use &lt;a target="_blank" href="http://www.simego.com/Products/Data-Synchronisation-Studio"&gt;Data Synchronisation Studio&lt;/a&gt; to Synchronise a File Share with a SharePoint Document Library. This could be useful during a migration from a traditional file server to SharePoint or to just publish internal documents to SharePoint.&lt;/div&gt;
&lt;h3&gt;Step 1 - Install Custom Web Services Solution&lt;/h3&gt;
&lt;div&gt;Download our custom SharePoint Web Services solution below and deploy to your SharePoint environment. To install the solution into your SharePoint environment use the STSADM application for example&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;STSADM.EXE -o addsolution -filename Simego.SharePoint.Services.wsp&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;Then deploy the solution from the SharePoint Central Administration console.&lt;/div&gt;
&lt;div&gt;This custom web service allows us to update the Modified Timestamp on files that are synchronised with SharePoint.&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.simego.com/Downloads/Simego.SharePoint.Services.zip"&gt;Download SharePoint Solution Package&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Step 2 - Connect to File Share&lt;/h3&gt;
&lt;div&gt;Enter the Path to your file share in the connection dialog for datasource A you can also define an ignore pattern list and optionally choose to recuirse through all sub directores.&lt;/div&gt;
&lt;div class="screenshots_x"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href="http:/www.simego.com/content/images/articles/DataSync-Connect-FileShare-Large.jpg" title="Connect to File Share Data Source"&gt;&lt;img src="http://www.simego.com/Blog/Attachment/cfb3d7e1-e4a3-4644-b1ce-857e4b377899" alt="Connect to File Share Data Source" /&gt;&lt;/a&gt;
&lt;div&gt;Connect File Share Data Source&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
&lt;h3&gt;Step 3 - Connect to the Destination SharePoint Document Library&lt;/h3&gt;
&lt;div&gt;Enter the Url to your SharePoint Site in the connection dialog for datasource B.&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href="/Blog/Attachment/3ebc62f4-f310-491c-b1bd-aa4c1bffff10" title="Connect to SharePoint Document Library Data Source"&gt;&lt;img src="http://www.simego.com/Blog/Attachment/7bebde82-b95a-4db3-958b-e585fd2fa361" alt="Connect to SharePoint Document Library Data Source" /&gt;&lt;/a&gt;
&lt;div&gt;1 - Connect to SharePoint Document Library Data Source&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href="/Blog/Attachment/7feddc62-3852-4fc2-b305-c56b3cd1706e" title="Connect to SharePoint Document Library Data Source"&gt;&lt;img src="http://www.simego.com/Blog/Attachment/e918d7a6-c600-41ab-b717-235bc27f69ec" alt="Connect to SharePoint Document Library Data Source" /&gt;&lt;/a&gt;
&lt;div&gt;2 - Connect to SharePoint Document Library Data Source&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
&lt;h3&gt;Step 3 - Disable Compare on File Length&lt;/h3&gt;
&lt;div&gt;Set the compare option on the File Length Property to &lt;strong&gt;False&lt;/strong&gt; to disable comparing the file length as the value reported by SharePoint is different to the file system length.&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href="/Blog/Attachment/f91b04a3-c724-46b4-84b0-cf2ab0db5e73" title="Data Sync Schema Map"&gt;&lt;img src="http://www.simego.com/Blog/Attachment/41fd9081-9ec6-4126-9862-ee5f2dcd1218" alt="Data Sync Schema Map" /&gt;&lt;/a&gt;
&lt;div&gt;Data Sync Schema Map&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
&lt;h3&gt;Step 4 - Compare A-&amp;gt;B and Synchronise&lt;/h3&gt;
&lt;div&gt;Run an initial compare to look for the new documents that need to be added to SharePoint in this case we should see all documents as the SharePoint list contains no documents.&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href="/Blog/Attachment/3e857bc7-8424-44bd-9940-59ac34405d31" title="Compare Results"&gt;&lt;img src="http://www.simego.com/Blog/Attachment/4558b4e9-f3d6-424d-9718-95c054ba9213" alt="Compare Results" /&gt;&lt;/a&gt;
&lt;div&gt;Compare Results&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href="/Blog/Attachment/031ddb45-9643-415c-a6a0-be2b3e771662" title="Start a Synchronisation"&gt;&lt;img src="http://www.simego.com/Blog/Attachment/0ce7d3fa-d7a2-40cb-a316-ae28e523bf94" alt="Start a Synchronisation" /&gt;&lt;/a&gt;
&lt;div&gt;Start a Synchronisation&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href="/Blog/Attachment/0f606b61-348c-4297-a22d-7f95912244db" title="Documents in SharePoint"&gt;&lt;img src="http://www.simego.com/Blog/Attachment/552f2574-9c61-491e-8697-ddb05cb62d4c" alt="Documents in SharePoint" /&gt;&lt;/a&gt;
&lt;div&gt;Document Library in SharePoint Populated&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
&lt;h3&gt;Other Options&lt;/h3&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Synchronise Document Library to a File Share by reversing this process. &lt;/li&gt;
&lt;li&gt;Synchronise Documents between different SharePoint Environments or Site Collections by connecting two SharePoint Document Libraries. &lt;/li&gt;
&lt;li&gt;Synchronise two file shares by connecting two different file shares. &lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 08 May 2009 09:58:47 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/03/csv-file-provider-for-data-sync</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>CSV File Provider for Data Sync</title>
      <description>&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;Download the provider from &lt;a target="_blank" href="http://www.simego.com/Install/Data-Synchronisation-Studio"&gt;http://www.simego.com/download&lt;/a&gt; then start &lt;a target="_blank" href="http://www.simego.com/Products/Data-Synchronisation-Studio"&gt;Data Synchronisation Studio&lt;/a&gt; version 1.0.156 or higher and go to the Tools Menu and select &amp;ldquo;Add-in Manager&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/76964f96-5a43-4fd9-8ffe-5be93193a121"&gt;&lt;img border="0" width="244" src="http://www.simego.com/Blog/Attachment/03a814f5-b699-4bab-b04c-685f10138e07" alt="image" height="96" style="display: inline; border: 0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then click the Install button and step through the installation wizard when the install is complete you should see the provider in the installed add-ins list.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/809b9bc9-390b-445b-a569-8d52c1087aca"&gt;&lt;img border="0" width="244" src="http://www.simego.com/Blog/Attachment/7cb4eb20-9343-4682-b699-2e11abc27a4f" alt="image" height="125" style="display: inline; border: 0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now when you connect to a data source you will have a CSV File option&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/184a0534-bfa2-4d1c-98f1-569e0351ba46"&gt;&lt;img border="0" width="244" src="http://www.simego.com/Blog/Attachment/7ce8d0f5-67fe-4e1b-a0aa-ad650c3de627" alt="image" height="171" style="display: inline; border: 0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 17 Mar 2009 10:09:33 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/03/data-synchronisation-studio-update</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio - Update</title>
      <description>&lt;p&gt;The latest build 1.0.156 of &lt;a href="http://www.simego.com/Products/Data-Synchronisation-Studio"&gt;Data Synchronisation Studio&lt;/a&gt;is now avaliable for download from our web site.&lt;/p&gt;
&lt;p&gt;This version includes fixes and improvements from customer feedback and support for the new MS CRM 4.0 add-on data provider.&lt;/p&gt;
&lt;p&gt;We have also added a new Wizard that allows you to add new columns to an existing SharePoint List such as the DSID synchronisation column.&lt;/p&gt;
&lt;p&gt;Also Create Scheduled Task is now working on Server 2008 x64&lt;/p&gt;
&lt;p&gt;And finally you can now connect to SharePoint instances that are using Forms Based Authentication or are behind ISA server.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 16 Mar 2009 09:49:57 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/03/use-custom-ad-attributes-with-data-sync-ad-provider</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Use Custom AD Attributes with Data Sync AD Provider</title>
      <description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Hi,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;o:p&gt;&amp;#0160;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;We have updated the Data Sync AD provider to allow you to add additional properties without the need for us to build a specific providers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;o:p&gt;&amp;#0160;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;When you re-open your AD project file you should notice a new file is created called &lt;span style="text-decoration: underline;"&gt;projectname.properties.xml&lt;/span&gt; in the same directory this file contains all the properties that are available to you and is a simple xml document.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;o:p&gt;&amp;#0160;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;For example :-&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;o:p&gt;&amp;#0160;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;lt;Properties&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;objectguid&amp;quot; DisplayName=&amp;quot;DSID&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;displayname&amp;quot; DisplayName=&amp;quot;Display Name&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;givenname&amp;quot; DisplayName=&amp;quot;First Name&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;sn&amp;quot; DisplayName=&amp;quot;Surname&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;telephonenumber&amp;quot; DisplayName=&amp;quot;Telephone Number&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;mobile&amp;quot; DisplayName=&amp;quot;Mobile Number&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;facsimiletelephonenumber&amp;quot; DisplayName=&amp;quot;Fax Number&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;ipphone&amp;quot; DisplayName=&amp;quot;IP Phone Number&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;postalcode&amp;quot; DisplayName=&amp;quot;Postal Code&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;co&amp;quot; DisplayName=&amp;quot;Country&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;c&amp;quot; DisplayName=&amp;quot;Country Code&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;postofficebox&amp;quot; DisplayName=&amp;quot;POBox&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;wwwhomepage&amp;quot; DisplayName=&amp;quot;Homepage&amp;quot; Updateable=&amp;quot;True&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;objectcategory&amp;quot; DisplayName=&amp;quot;Category&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;distinguishedname&amp;quot; DisplayName=&amp;quot;Distinguished Name&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;adspath&amp;quot; DisplayName=&amp;quot;AD Path&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;samaccountname&amp;quot; DisplayName=&amp;quot;Account Name&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;userprincipalname&amp;quot; DisplayName=&amp;quot;Logon Name&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;lt;/Properties&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;o:p&gt;&amp;#0160;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;o:p&gt;&amp;#0160;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;All you need do is edit this file to add the additional properties where Name=the name of the property in Active Directory. Then re-open the project. You can then drag the new property from the Schema window onto the blank area of the Map to add the additional column.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;o:p&gt;&amp;#0160;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;o:p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;For example add these properties to your file.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;o:p&gt;&amp;#0160;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;employeeID&amp;quot; DisplayName=&amp;quot;Employee ID&amp;quot; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;#0160; &amp;lt;Property Name=&amp;quot;employeeNumber&amp;quot; DisplayName=&amp;quot;Employee Number&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;#0160;&lt;/p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: &amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: &amp;#39;Times New Roman&amp;#39;; mso-ansi-language: EN-GB; mso-fareast-language: EN-GB; mso-bidi-language: AR-SA"&gt;This new feature is in Data Sync Version 1.0.44 and higher the latest version can be downloaded from &lt;a href="http://www.simego.com/download"&gt;http://www.simego.com/download&lt;/a&gt; or &lt;a href="http://www.simego.com/beta"&gt;&lt;font color="#800080"&gt;http://www.simego.com/beta&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 16 Mar 2009 09:42:19 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/03/crm-40-data-provider-for-data-synchronisation-studio</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>CRM 4.0 Data Provider for Data Synchronisation Studio</title>
      <description>&lt;p&gt;We have just released an add-on Data provider to &lt;a href="http://www.simego.com/Products/Data-Synchronisation-Studio" title="Data Synchronisation Studio"&gt;Data Synchronisation Studio&lt;/a&gt;&amp;nbsp;that allows you to connect to MS CRM 4.0 and synchronise your data between a variety of data sources such as MS SQL Server, Oracle, MySQL,&amp;nbsp;SharePoint, OLEDB, ODBC etc.&lt;/p&gt;
&lt;p&gt;We will post some examples on this blog later.&lt;/p&gt;</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 16 Mar 2009 09:39:03 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2009/01/automating-code-signing</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Automating Code Signing</title>
      <description>&lt;p&gt;Were still using Nant to automate the build process for all Simego Products and recently we got a Code Signing Certificate and needed to add this into the build process. I looked at just adding the command line tasks for &lt;strong&gt;SignTool.exe&lt;/strong&gt; to our build script however we have many assemblies and this process would be pretty boring. So I put together a quick Nant task that would reflect over the assembly and if it exposes a Company attribute of “Simego” then it sign’s the assembly.&lt;/p&gt;  &lt;h5&gt;Custom Nant Task&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;using System;      &lt;br /&gt;using System.Collections.Generic;       &lt;br /&gt;using System.Text;       &lt;br /&gt;using NAnt.Core.Attributes;       &lt;br /&gt;using NAnt.Core;       &lt;br /&gt;using System.IO;       &lt;br /&gt;using System.Reflection;       &lt;br /&gt;using System.Diagnostics; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;namespace SimegoNantLib      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [TaskName(&amp;quot;SignTool&amp;quot;)]       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public class SignTool : Task       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private string _path;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private string _signToolPath; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [TaskAttribute(&amp;quot;signtoolpath&amp;quot;, Required = false)]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string SignToolPath       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get { return _signToolPath; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set { _signToolPath = value; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [TaskAttribute(&amp;quot;path&amp;quot;, Required = false)]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string Path       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get { return _path; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set { _path = value; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; protected override void ExecuteTask()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Extract Certificate       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string certificatePath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), string.Format(&amp;quot;Cert{0}.pfx&amp;quot;, Guid.NewGuid().GetHashCode().ToString(&amp;quot;X8&amp;quot;)));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (Stream s = this.GetType().Assembly.GetManifestResourceStream(&amp;quot;SimegoNantLib.Certificate.pfx&amp;quot;))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; byte[] data = new byte[s.Length];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; s.Read(data, 0, data.Length); &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (FileStream fs = new FileStream(certificatePath, FileMode.CreateNew))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fs.Write(data, 0, data.Length);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Process files in directory looking to see if the assembly is a Simego product.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; List&amp;lt;string&amp;gt; filesToSign = new List&amp;lt;string&amp;gt;(); &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach (FileInfo fInfo in new DirectoryInfo(Path).GetFiles())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fInfo.Extension.Equals(&amp;quot;.dll&amp;quot;, StringComparison.OrdinalIgnoreCase) ||       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fInfo.Extension.Equals(&amp;quot;.exe&amp;quot;, StringComparison.OrdinalIgnoreCase))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; byte[] buffer = new byte[fInfo.Length];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (FileStream fs = new FileStream(fInfo.FullName, FileMode.Open, FileAccess.Read))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fs.Read(buffer, 0, buffer.Length);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Assembly assembly = Assembly.Load(buffer);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AssemblyCompanyAttribute[] attrib = (AssemblyCompanyAttribute[])assembly.GetCustomAttributes(typeof(AssemblyCompanyAttribute), true);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (attrib != null &amp;amp;&amp;amp; attrib.Length &amp;gt; 0)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (attrib[0].Company.Contains(&amp;quot;Simego&amp;quot;))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; filesToSign.Add(fInfo.FullName);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch { throw; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Sign Files      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string signToolCommand = &amp;quot;sign /f \&amp;quot;{0}\&amp;quot; /p {1} /t &lt;/em&gt;&lt;a href="http://timestamp.comodoca.com/authenticode"&gt;&lt;em&gt;http://timestamp.comodoca.com/authenticode&lt;/em&gt;&lt;/a&gt;&lt;em&gt; \&amp;quot;{2}\&amp;quot;&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach (string file in filesToSign)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ProcessStartInfo pStartInfo = new ProcessStartInfo(SignToolPath, string.Format(signToolCommand, certificatePath, &amp;quot;mypassword&amp;quot;, file));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pStartInfo.WindowStyle = ProcessWindowStyle.Hidden; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Process p = Process.Start(pStartInfo);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p.WaitForExit();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (p.ExitCode != 0)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new BuildException(string.Format(&amp;quot;SignTool.exe returned a result of {0}&amp;quot;, p.ExitCode));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; finally       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (File.Exists(certificatePath))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; File.Delete(certificatePath);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;}&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;Then in my Nant build script I just add the custom task library.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;lt;loadtasks assembly=&amp;quot;D:\Projects\SQLTools\SimegoNantLib.dll&amp;quot; /&amp;gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;And add a target to process the files&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;lt;target name=&amp;quot;SignFiles&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SignTool signtoolpath=&amp;quot;C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\signtool.exe&amp;quot; path=&amp;quot;${dsstudio.build.dir}\Files&amp;quot; /&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;lt;/target&amp;gt;&lt;/em&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 19 Jan 2009 13:01:44 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/12/data-sync-studio---beta-update</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Studio - Beta Update</title>
      <description>&lt;p&gt;A new release of Data Synchronisation Studio (v1.0.100.0) has been released to the beta site this new release provides support for the following :-&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Microsoft Access Database Synchronisation&lt;/li&gt; &lt;li&gt;Generic ODBC Database Synchronisation&lt;/li&gt; &lt;li&gt;Generic OLEDB Database Synchronisation&lt;/li&gt; &lt;li&gt;File Synchronisation from the File System&lt;/li&gt; &lt;li&gt;SharePoint Document Library Synchronisation&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The big new feature here is the ability to sync files and synchronise a SharePoint document library with a directory structure. This allows for a gradual migration from a file server onto SharePoint or to just automatically import documents from some other system. &lt;/p&gt; &lt;p&gt;To fully support updating of "Created" and "Modified" file dates a new custom feature must be installed on the SharePoint server contact us for more details about this.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://sharepoint.simego.com/KB/DataSyncStudio/default.aspx" target="_blank"&gt;Data Sync Beta Download Site&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 05 Dec 2008 12:29:38 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/11/data-sync-studio---updated</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Studio - Updated</title>
      <description>&lt;p&gt;It's been a while since I posted an update about Data Synchronisation Studio. Well we have been really busy making improvements based on customer feedback.&lt;/p&gt; &lt;p&gt;Below are a few of the improvements we have made recently.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Ability to enable case in-sensitive comparisons.&lt;/li&gt; &lt;li&gt;Ability to ignore white space differences when comparing text.&lt;/li&gt; &lt;li&gt;You can now edit the Synchronisation Option from the UI under File-&amp;gt;Properties.&lt;/li&gt; &lt;li&gt;New Connection dialog and the ability to provide your own connection interface on custom data providers.&lt;/li&gt; &lt;li&gt;New simple command line tool for 1-Way synchronisation's without the need to snapshot the source/destination data.&lt;/li&gt; &lt;li&gt;Updated sample code for the Custom Excel Data source. &lt;/li&gt; &lt;li&gt;Ability to refresh the schema of the data source without reloading the project.&lt;/li&gt; &lt;li&gt;Ability to re-connect a data source to a different connection without creating a new project.&lt;/li&gt; &lt;li&gt;Ability to see at a glance the details about the connection.&lt;/li&gt; &lt;li&gt;Ability to schedule a Windows Task from the UI.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The latest beta release is now 1.0.85 which is available from &lt;a title="http://sharepoint.simego.com/KB/DataSyncStudio/default.aspx" href="http://sharepoint.simego.com/KB/DataSyncStudio/default.aspx"&gt;http://sharepoint.simego.com/KB/DataSyncStudio/default.aspx&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 10 Nov 2008 12:54:27 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/09/silverlight-20-combobox-dropdown</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SilverLight 2.0 ComboBox / DropDown</title>
      <description>&lt;p&gt;I have had a few requests to provide a complete project with source code for the sample combo box solution for SilverLight.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/38a0cbf3-769e-4764-ba51-8fe58b337253" style="DISPLAY: inline"&gt;&lt;img alt="SilverLight-DropDown-1" border="0" class="at-xid-6a00d8357f1fe369e200e554fd0e958834 image-full " src="http://www.simego.com/Blog/Attachment/c04199f4-4a0d-487b-9859-4d7ff0675cb5" title="SilverLight-DropDown-1" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I still seem to have an issue with the list changing the height of the control when the drop down is enabled. Changing the ZIndex of the Canvas makes no difference probably some combination of Canvas and StackPanel issue not too sure.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/155ce51c-4358-4938-b92d-b48836050879"&gt;Download SilverlightComboBox.zip (10.5K)&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 04 Sep 2008 11:19:09 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/09/adding-silverlight-charts-to-sharepoint</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Adding SilverLight Charts to SharePoint</title>
      <description>&lt;p&gt;Would you believe it! After building the SharePoint Chart solution to work with Flash Charts I came across these SilverLight Charts from &lt;a href="http://www.visifire.com/" target="_blank"&gt;VISIFire&lt;/a&gt; which are just fantastic. So I have updated the code to work with these charts.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Remember to get SilverLight to work on your server you need to add the MIME Type "application/x-&lt;em&gt;silverlight&lt;/em&gt;-app" for the XAP extension.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/4ba093c7-9103-434c-a85d-3f2399f279d0"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="474" alt="WSS_Chart3" src="http://www.simego.com/Blog/Attachment/a4053f63-a0ff-432d-9c82-e442b5465c7a" width="644" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The Code adds a Web Part to SharePoint for displaying a Bar Chart from Data Stored within a SharePoint List.&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/3b5620d8-4181-4533-8aff-b12773815c65" target="_blank"&gt;Download Simego.SilverLight.Charts.zip (158.2K)&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 02 Sep 2008 13:06:29 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/09/create-dynamic-flash-charts-with-sharepoint</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Create Dynamic Flash Charts with SharePoint</title>
      <description>&lt;p&gt;Previously I had detailed how to create fancy dashboard pages in SharePoint by using free flash charts from &lt;a href="http://www.fusioncharts.com/Free/" target="_blank"&gt;Fusion Charts&lt;/a&gt;. Now I have created a Web Part that does all the hard work to dynamically display a Bar Chart from Data held within a SharePoint List which could then be easily modified to use BDC Data or SQL Server etc.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Below shows how the Chart might look on your SharePoint page you simply add the Web part to the page and setup the List to get the data from.&lt;/p&gt; &lt;h3&gt;Chart Web Part &lt;/h3&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/feaa1304-e690-4ff9-8a3b-2b47e7500fba"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="459" alt="WSS_Chart1" src="http://www.simego.com/Blog/Attachment/71998168-0fcd-4952-a5b0-14a302d00b67" width="644" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;Chart Web Part Design View&lt;/h3&gt; &lt;p&gt;&amp;nbsp;&lt;a href="/Blog/Attachment/f33d636a-8c6e-48a7-91b7-77efeb564e64"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="396" alt="WSS_Chart2" src="http://www.simego.com/Blog/Attachment/b0840900-0a0b-4168-af22-ae320df448cc" width="644" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This solution assumes that the Flash SWF file for the Chart in located in a Charts document library within the current Web.&lt;/p&gt; &lt;p&gt;You may download the source code for this solution to see how to build the solution yourself. &lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/7fa1e597-a9c8-475a-b109-cc74eb362f0d" target="_blank"&gt;Download Simego.Charts.zip (8.8K)&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 01 Sep 2008 20:58:41 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/08/how-to-write-a-csv-provider-for-data-sync-studio</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>How to: Write a CSV Provider for Data Sync Studio</title>
      <description>&lt;p&gt;Recently I had been tasked with the requirement to import Weather Data from the Met Office Weather Data Feed. They basically dump a CSV file onto your server via FTP and it's up to you to import it into your own systems. There are a 101 ways of doing this but as Data Sync is my current favourite I thought I would just write a provider to do it.&lt;/p&gt; &lt;p&gt;The reason for this is to actually only apply the changes to the database rather than the brutal delete everything and import. Also as Data Sync supports multiple providers (Oracle, MySQL, MSSQL, SharePoint etc) I can easily import this data into a variety of systems.&lt;/p&gt; &lt;p&gt;Here's the source code&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;using System;&lt;br&gt;using System.Collections.Generic;&lt;br&gt;using System.Text;&lt;br&gt;using Simego.DataSync.Interfaces;&lt;br&gt;using Simego.DataSync;&lt;br&gt;using System.Data.OleDb;&lt;br&gt;using System.Data;&lt;br&gt;using Simego.DataSync.Providers;&lt;br&gt;using System.IO;  &lt;p&gt;namespace Simego.Weather&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class CurrentWeatherDataSourceReader : IDataSourceReader&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private const string CONNECT_STR = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"text;FMT=Delimited\"";  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected DataSchema _schemaMap;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected DataSchemaSide _side = DataSchemaSide.DataSourceA;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private bool _readWrite = false;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string _weatherCsvFileName;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string WeatherCsvFileName&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return _weatherCsvFileName; }&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; set { _weatherCsvFileName = value; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region IDataSourceReader Members  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DataSchema SchemaMap&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return _schemaMap; }&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; set { _schemaMap = value; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DataSchemaSide Side&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return _side; }&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; set { _side = value; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool ReadWrite&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return _readWrite; }&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; set { _readWrite = value; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DataTable GetDataTable()&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region Create Schema.ini&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; string schemaIni = Path.Combine(Path.GetDirectoryName(WeatherCsvFileName), "Schema.ini");  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (File.Exists(schemaIni)) File.Delete(schemaIni);  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (StreamWriter sw = File.CreateText(schemaIni))&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(string.Format("[{0}]", Path.GetFileName(WeatherCsvFileName)));&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; sw.WriteLine("Format=Delimited(,)");&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; sw.WriteLine("MaxScanRows=100");&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; sw.WriteLine("CharacterSet=ANSI");  &lt;p&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; //Add the Columns....&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; sw.WriteLine("Col1=\"Code\" Integer");&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; sw.WriteLine("Col2=\"Name\" TEXT");&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; sw.WriteLine("Col3=\"State\" TEXT");&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; sw.WriteLine("Col4=\"Country\" TEXT");&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; sw.WriteLine("Col5=\"Continent\" TEXT");&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; sw.WriteLine("Col6=\"Type\" TEXT");&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; sw.WriteLine("Col7=\"Hour\" Integer");&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; sw.WriteLine("Col8=\"Day Name\" TEXT");&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; sw.WriteLine("Col9=\"Day\" Integer");&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; sw.WriteLine("Col10=\"Month\" Integer");&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; sw.WriteLine("Col11=\"Year\" Integer");  &lt;p&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; sw.WriteLine("Col12=\"WindDirection\" TEXT");&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; sw.WriteLine("Col13=\"WindSpeed\" Double");&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; sw.WriteLine("Col14=\"Temp\" Double");&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; sw.WriteLine("Col15=\"SkyCode\" Integer");&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; sw.WriteLine("Col16=\"Visibility\" TEXT");&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; sw.WriteLine("Col17=\"Pressure\" Double");&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; sw.WriteLine("Col18=\"Tendency\" TEXT");&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; sw.WriteLine("Col19=\"Humidity\" Double");  &lt;p&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File.SetAttributes(schemaIni, File.GetAttributes(schemaIni) | FileAttributes.Hidden);&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; #endregion&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; DataTable dt = SchemaMap.GetDataTable();&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; dt.TableName = "Forecast";  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder query = new StringBuilder();&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; query.AppendFormat("SELECT * FROM [{0}]", string.Format("{0}#csv", Path.GetFileNameWithoutExtension(this.WeatherCsvFileName).ToLower()));  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataTable tmpDt = new DataTable();&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; using (OleDbConnection connection = new OleDbConnection(string.Format(CONNECT_STR, Path.GetDirectoryName(WeatherCsvFileName))))&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connection.Open();  &lt;p&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; using (OleDbCommand cmd = new OleDbCommand(query.ToString(), connection))&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; {&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (OleDbDataAdapter adapter = new OleDbDataAdapter(cmd))&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;&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;&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;&amp;nbsp; //adapter.FillSchema(tmpDt, SchemaType.Source);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adapter.Fill(tmpDt);&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcessData(tmpDt, dt);  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return dt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void ProcessData(DataTable source, DataTable dt)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (DataRow row in source.Rows)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataRow newRow = dt.NewRow();  &lt;p&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; newRow["Code"] = row["Code"];&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; newRow["SkyCode"] = row["SkyCode"];&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; newRow["Temp"] = row["Temp"];&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; dt.Rows.Add(newRow);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DataSchema GetDefaultDataSchema()&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataTable dt = new DataTable("WeatherData");  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataColumn dc = new DataColumn("Code", typeof(int));&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; dc.AllowDBNull = false;&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; dc.Unique = true;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dt.Columns.Add(dc);  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dt.Columns.Add("SkyCode", typeof(int));&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; dt.Columns.Add("Temp", typeof(double));&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; return new DataSchema(dt);  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string GetMappedSourceColumn(string name)&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Utility.GetMappedSourceColumn(SchemaMap, Side, name);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public List&amp;lt;ProviderParameter&amp;gt; GetInitializationParameters()&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;ProviderParameter&amp;gt; parameters = new List&amp;lt;ProviderParameter&amp;gt;();  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parameters.Add(new ProviderParameter("WeatherCsvFileName", this.WeatherCsvFileName));  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return parameters;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Initialize(DataSchema schema, DataSchemaSide side)&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.SchemaMap = schema;&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; this.Side = side;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Initialize(List&amp;lt;ProviderParameter&amp;gt; parameters)&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (ProviderParameter p in parameters)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (p.Name)&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; {&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "WeatherCsvFileName":&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.WeatherCsvFileName = p.Value;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&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;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public IDataSourceWriter GetWriter()&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;} &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 28 Aug 2008 16:52:48 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/08/billing-tracking-system-with-exchange-and-sharepoint</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Billing Tracking System with Exchange and SharePoint</title>
      <description>&lt;p&gt;As an owner of a small IT business I am always looking for ways to better manage my time &amp;amp; billing tracking. I also want to track almost real-time how much time my other staff have used against budget. Exchange provides an easy way for every one to record their time as Calendar entries by using the &lt;span style="TEXT-DECORATION: underline"&gt;Location&lt;/span&gt; to store a Job reference code and set the Category to &lt;span style="TEXT-DECORATION: underline"&gt;Work Hours&lt;/span&gt;. So no matter where everybody is working they can update their exchange calendar with their times and description and I can then synchronise the data into a SQL Database and summarise the Data in SharePoint.&lt;/p&gt;
&lt;p&gt;Below is a Screenshot showing the Job Status in SharePoint and the Jobs that are currently active. These Jobs can be editied in SharePoint and synchronised back to SQL Server with Data Sync.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/3c60f8cc-a97f-45cd-b897-66115ad8b15a" style="DISPLAY: inline"&gt;&lt;img alt="Billing-1" border="0" class="at-xid-6a00d8357f1fe369e200e553d4cae68833 image-full " src="http://www.simego.com/Blog/Attachment/01832774-87b6-49fe-b90d-43ab89e5bd69" title="Billing-1" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Requirements&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exchange Server 2007 User Accounts 
&lt;li&gt;SharePoint Server 2007 (WSS) 
&lt;li&gt;SQL Server Express 2005 
&lt;li&gt;Data Synchronisation Studio &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;1) Configure Data Synchronisation Studio to download Billing Entries from Exchange Calendars into SQL Server.&lt;/p&gt;
&lt;p&gt;The ExchangeGroupCalendarDataSourceReader custom provider can read values from multiple exchange mailbox calendars and takes a single xml configuration file for it&amp;#39;s settings.&lt;/p&gt;
&lt;p&gt;&lt;span style="TEXT-DECORATION: underline"&gt;Example Xml File&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;Exchange&amp;gt; &lt;br /&gt;&amp;#160; &amp;lt;Server&amp;gt;&lt;a href="https://myserver/exchange"&gt;https://myserver/exchange&lt;/a&gt;&amp;lt;/Server&amp;gt; &lt;br /&gt;&amp;#160; &amp;lt;Username&amp;gt;user@simego.com&amp;lt;/Username&amp;gt; &lt;br /&gt;&amp;#160; &amp;lt;Password&amp;gt;&amp;lt;/Password&amp;gt; &lt;br /&gt;&amp;#160; &amp;lt;Domain&amp;gt;&amp;lt;/Domain&amp;gt; &lt;br /&gt;&amp;#160; &amp;lt;FormsAuthentication&amp;gt;True&amp;lt;/FormsAuthentication&amp;gt; &lt;br /&gt;&amp;#160; &amp;lt;Calendar&amp;gt;#SERVER#/#MAILBOX#/Calendar&amp;lt;/Calendar&amp;gt; &lt;br /&gt;&amp;#160; &amp;lt;DaysBackToReturn&amp;gt;90&amp;lt;/DaysBackToReturn&amp;gt; &lt;br /&gt;&amp;#160; &amp;lt;Category&amp;gt;Work Hours&amp;lt;/Category&amp;gt; &lt;br /&gt;&amp;#160; &amp;lt;MailBoxes&amp;gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MailBox&amp;gt;user1@simego.com&amp;lt;/MailBox&amp;gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MailBox&amp;gt;user2@simego.com&amp;lt;/MailBox&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; &amp;lt;/MailBoxes&amp;gt; &lt;br /&gt;&amp;lt;/Exchange&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Crack open Data Sync and connect to the Exchange Store with the configuration xml file and create a SQL destination table called &lt;span style="TEXT-DECORATION: underline"&gt;Billing&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;2) Add a Table to SQL Server to list the JOB Codes we have in the System&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;CREATE TABLE [dbo].[Job] ( &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [DSID] uniqueidentifier DEFAULT(newid()) NOT NULL, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Code] nvarchar(20) NOT NULL, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Company] nvarchar(255) NOT NULL, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Name] nvarchar(255) NOT NULL, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Quote] int DEFAULT(0) NOT NULL, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Active] int DEFAULT(0) NOT NULL &lt;br /&gt;)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;3) Create a View in SQL to show the calculated totals&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;CREATE VIEW Billing_Stats &lt;br /&gt;AS &lt;br /&gt;SELECT Location AS Code, Job.Company, Job.Name, Job.Quote, SUM(Duration)/60/60 AS Total &lt;br /&gt;FROM [dbo].[Billing] &lt;br /&gt;INNER JOIN Job ON Job.Code = Billing.Location &lt;br /&gt;GROUP BY Location, Job.Company, Job.Name, Job.Quote, Job.Active &lt;br /&gt;HAVING Job.Active = 0&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;4) Configure Data Sync to Synchronise the JOB Codes Table to a SharePoint List&lt;/p&gt;
&lt;p&gt;5) Configure Data Sync to Synchronise the Calculated Totals View to a SharePoint List&lt;/p&gt;
&lt;p&gt;This new Exchange Data Provider is currently in private beta with a few clients if you would like to know more please contact sales[at]simego.com.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 07 Aug 2008 22:29:32 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/08/data-sync-and-ms-exchange-provider</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync and MS Exchange Provider</title>
      <description>&lt;p&gt;Were currently working on an Exchange Provider for Data Sync that will allow you Synchronize/Publish data from Exchange Calendars/Task Lists/Contact Lists to any other Data Source that supports writing such as SharePoint and SQL.&lt;/p&gt;
&lt;p&gt;If you have a project that could use this functionality then please get in touch.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 06 Aug 2008 15:47:06 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/07/sync-ad-users-to-sharepoint---2-way</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Sync AD Users to SharePoint - 2 Way</title>
      <description>&lt;P&gt;So some of you have requested support to provide 2-Way Synchronization of AD Users between a SharePoint List and Active Directory. The good news is that the AD Provider for Data &lt;A href="http://www.simego.com/DataSync_Studio.aspx"&gt;Synchronization Studio&lt;/A&gt; now supports this. &lt;/P&gt;
&lt;P&gt;So you can effectively publish your AD Users to an Intranet Site to create a "Staff List" or "Telephone List" and then from this you can now allow your staff to update the personal information stored in the AD themselves by just simply editing the records in SharePoint. Then when the Synchronization occurs all changes are applied to the AD. There are a few limitations you can't create new AD Users this way and you can't delete users from the AD and certain properties are not updateable such as Member-Of etc.&lt;/P&gt;
&lt;P&gt;This is part of release 1.0.48 and is available now from the &lt;A href="http://www.simego.com/Download.aspx"&gt;download page&lt;/A&gt;.&lt;/P&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 30 Jul 2008 15:04:33 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/06/data-synchronisation-studio---updated</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Synchronisation Studio - Updated</title>
      <description>&lt;p&gt;Just released an update to Data Synchronisation Studio (1.0.45) to allow you to create a SQL Table from an existing SharePoint list. This enables you to easily export your SharePoint data to a SQL Server database and synchronise any changes with the Sync Service. If you use SQL Server Reporting Services and would like to also use SharePoint data in your reports then this is a great solution.&lt;/p&gt;  &lt;p&gt;Download from &lt;a href="http://www.simego.com/downloads/DataSync_Studio_Setup_Beta.exe"&gt;here&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 06 Jun 2008 15:24:15 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/05/moss-bdc-design-studio-20---updated</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC Design Studio 2.0 - Updated</title>
      <description>&lt;p&gt;Just released an update (version 2.0.5)&amp;#0160;to the web for MOSS BDC Design Studio 2.0 this release fixes an issue with database connection details being in lower case which MOSS SP1 did not like.&lt;/p&gt;
&lt;p&gt;Download from &lt;a href="http://www.simego.com/downloads/MOSS_BDC_Studio_Setup_Beta.exe"&gt;Here&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sat, 31 May 2008 15:47:15 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/05/2-way-list-sync-sql-server-sharepoint</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>2-Way List Sync SQL Server &lt;-&gt; SharePoint</title>
      <description>&lt;p&gt;&lt;a href="http://www.simego.com/DataSync_Studio.aspx"&gt;&lt;font color="#333333"&gt;Data Synchronization Studio&lt;/font&gt;&lt;/a&gt; supports 2 Way Synchronisation of data between SQL Server and SharePoint if you follow a couple of guidelines.&lt;/p&gt;
&lt;p&gt;The main thing to consider is to use a GUID (uniqueidentifier) as the Primary Key (Unique Constraint) and if you call this column &lt;strong&gt;DSID&lt;/strong&gt; then the Mapping will be easier.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Step 1&lt;/span&gt; is to create a Table in your database that follows this schema like below.&lt;/p&gt;
&lt;p&gt;CREATE TABLE [dbo].[ProductList] (&lt;br /&gt;&amp;#0160;&amp;#0160;&amp;#0160; &lt;strong&gt;[DSID] uniqueidentifier DEFAULT(newid())&lt;/strong&gt; NOT NULL,&lt;br /&gt;&amp;#0160;&amp;#0160;&amp;#0160; [CompanyName] nvarchar(40) NOT NULL,&lt;br /&gt;&amp;#0160;&amp;#0160;&amp;#0160; [ProductName] nvarchar(40) NOT NULL,&lt;br /&gt;&amp;#0160;&amp;#0160;&amp;#0160; [CategoryName] nvarchar(15) NOT NULL,&lt;br /&gt;&amp;#0160;&amp;#0160;&amp;#0160; [QuantityPerUnit] nvarchar(50) NULL,&lt;br /&gt;&amp;#0160;&amp;#0160;&amp;#0160; [UnitPrice] decimal(18, 0) DEFAULT(0) NULL,&lt;br /&gt;&amp;#0160;&amp;#0160;&amp;#0160; [UnitsInStock] smallint DEFAULT(0) NULL,&lt;br /&gt;&amp;#0160;&amp;#0160;&amp;#0160; [UnitsOnOrder] smallint DEFAULT(0) NULL&lt;br /&gt;)&lt;br /&gt;GO&lt;br /&gt;ALTER TABLE [dbo].[ProductList] ADD CONSTRAINT [PK_ProductList_2FE911D7] PRIMARY KEY CLUSTERED ([DSID] ASC) &lt;br /&gt;GO 
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Step 2&lt;/span&gt; is to fill your table with the Data you would like to Synchronize.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Step 3&lt;/span&gt; You will then need to fire up &lt;a href="http://www.simego.com/DataSync_Studio.aspx"&gt;&lt;font color="#333333"&gt;Data Synchronization Studio&lt;/font&gt;&lt;/a&gt; and create a List in SharePoint that will map to this table this should look something like the picture below. &lt;/p&gt;
&lt;p&gt;&lt;a class="warning-localfile" href="file:///C:/Users/Sean/AppData/Roaming/Windows%20Live%20Writer/PostSupportingFiles/0d7f86cf-6d54-4ceb-93a2-e61aeba24355/DataSync-1[2].png"&gt;&lt;/a&gt;&lt;a href="/Blog/Attachment/9851950e-cbce-433b-b865-4f3aa7f8416a" style="FLOAT: left"&gt;&lt;img alt="DataSync-1" class="at-xid-6a00d8357f1fe369e200e5526eca218834 " src="http://www.simego.com/Blog/Attachment/5fe2240e-72fe-47d3-861f-00a3cb06be05" style="MARGIN: 0px 5px 5px 0px" /&gt;&lt;/a&gt; &amp;#0160;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Important: You should have a Column DSID mapped to a SharePoint column DSID of type GUID and it should be marked as the Unique Column.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;#0160;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&amp;#0160;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Step&amp;#0160;4&lt;/span&gt;&amp;#0160;Modify the Project File (*.dsprj) to support 2-way sync by default the 2-way sync is disabled to prevent accidental deletion of data. &lt;/p&gt;
&lt;p&gt;Open the *.dsprj file in your favourite text editor (notepad.exe) and look for the Xml Element &lt;span style="text-decoration: underline;"&gt;Project&lt;/span&gt; you should see an Attribute called &lt;span style="text-decoration: underline;"&gt;SyncOption&lt;/span&gt; change this value to be &lt;strong&gt;SyncAandB.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So the Project Element should look like this.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;Project Name=&amp;quot;&amp;quot; Version=&amp;quot;&amp;quot; SyncOption=&amp;quot;SyncAandB&amp;quot;&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can now drop the project file into the Synchronization Service project folder (C:\Windows\DataSyncProjects) and start the service. Now you can make changes in both SQL Server and SharePoint and the change will be replicated in each system.&lt;/p&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 21 May 2008 20:35:57 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/05/combobox-dropdo</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>ComboBox / DropDownList for Silverlight 2.0</title>
      <description>&lt;p&gt;After playing around with Silverlight 2.0 which is pretty cool BTW. I noticed that there is no ComboBox control yet. So I thought it can't be that hard to get something working so here's how I done it.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;The finished ComboBox in Silverlight&lt;/strong&gt; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/Blog/Attachment/aff925e6-310b-4e5e-b2f2-a3985dbc79da"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="117" alt="ComboBox" src="http://www.simego.com/Blog/Attachment/ec9e41d0-e4d2-42c7-a1eb-bdddf6662e27" width="121" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;The XAML&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;(Note: I am using a graphic for the DropDown icon you could draw it but I didn't have time to try that!)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;UserControl x:Class=&amp;quot;SilverlightApplication1.ComboBox&amp;quot;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlns=&amp;quot;&lt;a href="http://schemas.microsoft.com/client/2007""&gt;http://schemas.microsoft.com/client/2007&amp;quot;&lt;/a&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlns:x=&amp;quot;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml""&gt;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/a&gt;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;StackPanel MouseLeftButtonDown=&amp;quot;StackPanel_MouseLeftButtonDown&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;StackPanel Orientation=&amp;quot;Horizontal&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TextBox x:Name=&amp;quot;MyTextBox&amp;quot; Height=&amp;quot;18&amp;quot; FontSize=&amp;quot;10&amp;quot; Text=&amp;quot;ListBox&amp;quot; MinWidth=&amp;quot;100&amp;quot;&amp;gt;&amp;lt;/TextBox&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Image Stretch=&amp;quot;Fill&amp;quot; Source=&amp;quot;dropdown.jpg&amp;quot; Width=&amp;quot;10&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/StackPanel&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ListBox x:Name=&amp;quot;MyControl&amp;quot; MaxHeight=&amp;quot;100&amp;quot; Visibility=&amp;quot;Collapsed&amp;quot; SelectionChanged=&amp;quot;MyControl_SelectionChanged&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ListBox.ItemTemplate&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;DataTemplate&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TextBlock FontSize=&amp;quot;10&amp;quot; Text=&amp;quot;{Binding}&amp;quot; /&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/DataTemplate&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ListBox.ItemTemplate&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ListBox&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/StackPanel&amp;gt;    &lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;The Code Behind&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;using System.Windows;   &lt;br /&gt;using System.Windows.Controls;    &lt;br /&gt;using System.Windows.Input; &lt;/p&gt;  &lt;p&gt;namespace SilverlightApplication1   &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public partial class ComboBox : UserControl    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public ListBox TheList { get { return MyControl; } } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public ComboBox()   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; { &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (MyControl.Visibility == Visibility.Visible)   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyControl.Visibility = Visibility.Collapsed;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyControl.Visibility = Visibility.Visible;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private void MyControl_SelectionChanged(object sender, SelectionChangedEventArgs e)   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyTextBox.Text = MyControl.SelectedItem.ToString();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Then on your main Silverlight Page just add something like this... (After you add the namespace right!)&lt;/p&gt;  &lt;p&gt;&amp;lt;MyCtrls:ComboBox x:Name=&amp;quot;xyz&amp;quot; Canvas.Left=&amp;quot;400&amp;quot; Canvas.Top=&amp;quot;50&amp;quot;&amp;gt;&amp;lt;/MyCtrls:ComboBox&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now there is certainly room for improvement but this shows how easy it is to create your own controls in Silverlight.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 08 May 2008 20:36:22 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/03/synchronise-act</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Synchronise Active Directory User Details to SharePoint (WSS)</title>
      <description>&lt;p&gt;By using the Custom Active Directory Users Data Source for &lt;strong&gt;Data Sync Studio&lt;/strong&gt; you can synchronise user details from Active Directory to a SharePoint List in either WSS or MOSS 2007.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;First Start up &lt;strong&gt;Data Sync Studio&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/336dca0f-4524-4400-a7ff-5080f3b5407a"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="CropperCapture[2]" src="http://www.simego.com/Blog/Attachment/cdf70eaf-50c0-45ad-ab99-8b5a1e957426" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Then choose the Connect to Data Source Link on the Left Panel&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/2c5307d4-058b-4c72-aee9-85e4e84c7e69"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="CropperCapture[3]" src="http://www.simego.com/Blog/Attachment/3d23429b-e8cd-4621-8cf2-e2e4170696da" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now pick 'Custom Source' and check that you are using the &lt;em&gt;ActiveDirectoryUsersDataSourceReader&lt;/em&gt; then enter the details for your Active Directory in this example I am using the AD on the Microsoft Demo CRM VPC&lt;em&gt; litwareinc.com&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/07d7e208-7a47-4403-82ad-e9a60d39f6a5"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="CropperCapture[4]" src="http://www.simego.com/Blog/Attachment/34b62796-bd68-4fbd-b804-11f9955e8874" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now the Schema is displayed on the left we now want to create a SharePoint list to import the Users details.&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/8a4b44ed-b186-4d82-a8b9-d2e25db90e27"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="CropperCapture[5]" src="http://www.simego.com/Blog/Attachment/07f1378f-f735-4e35-a973-1bda5598cf5d" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Go to the Tools Menu and Choose 'Create SharePoint List' this will start the List Wizard.&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/d2762c29-b0c4-4f87-960e-3bfa0768c99f"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="CropperCapture[6]" src="http://www.simego.com/Blog/Attachment/604c3c56-31b0-4c24-a39c-1d10bd981e8e" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Choose the SharePoint Site to Create the List&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/04b56b4e-3e6d-48e0-bbc8-903cbad0a1ef"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="CropperCapture[7]" src="http://www.simego.com/Blog/Attachment/ee38e81b-c1dd-4c8e-b1c5-d96db8b49f65" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Give the List a Name and pick the Column to display as the Title Field in SharePoint&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/288cb89d-e566-4373-87c6-b5d09cd7d504"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="CropperCapture[8]" src="http://www.simego.com/Blog/Attachment/1cd68ddc-cb68-40da-b327-655b27947fb4" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now both sides are Mapped in Data Sync Studio&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/62dc00dc-8b20-4ed6-b52a-6954fba27556"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="CropperCapture[9]" src="http://www.simego.com/Blog/Attachment/7b80cfbc-1bbb-4674-af64-6f3540356f15" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Click the 'Compare A-B' button in the Toolbar to find the changes.&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/ac3269cd-6223-4454-b1d7-3af8de614542"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="CropperCapture[10]" src="http://www.simego.com/Blog/Attachment/c7389ef1-0145-449b-8178-8a84ef0620df" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Then Click the Synchronise Button to push the User Details into the SharePoint List&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/9cd7596d-1ab1-423c-b9db-441c6d0b12dc"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="CropperCapture[11]" src="http://www.simego.com/Blog/Attachment/80b79427-097b-4550-8281-555c2a22ccbc" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now your Details are available in SharePoint and you can use the SharePoint Search to look up Employees and find there phone numbers etc.&lt;/p&gt; &lt;p&gt;&lt;a href="/Blog/Attachment/418d18ea-c112-4cdd-9f44-cf40e303db2e"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="212" alt="CropperCapture[12]" src="http://www.simego.com/Blog/Attachment/b9587e34-f753-4f44-b1ff-7e862357c8c0" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Once you have the saved the Project file you can use the Synchronisation Windows Service&amp;nbsp; (part of Data Sync Studio) to keep the list in Sync with your Active Directory.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/downloads/datasync_studio_setup_beta.exe"&gt;Download Data Sync Studio&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sun, 30 Mar 2008 14:05:26 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/03/data-sync-stu-1</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Studio (Beta) Update</title>
      <description>&lt;p&gt;Hi,&lt;/p&gt; &lt;p&gt;I have just uploaded a new beta release of Data Sync Studio to the site to enable full reliable 2-way sync of data between a SharePoint list and another Data Source. There is one requirement of your source data to have a unique GUID column this is used to identify the row on both sides and therefore you can add rows to both the source and destination at the same time and they still sync.&lt;/p&gt; &lt;p&gt;The quickest way to get this setup working is to create a Table in your database with a column called &lt;strong&gt;DSID&lt;/strong&gt; of type uniqueidentifier and set it to be the PrimaryKey. Then just connect to the source system with DS Studio and go to &lt;em&gt;Tools -&amp;gt; Create SharePoint List&lt;/em&gt; to create the List and then the Map will be configured just right!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/downloads/DataSync_Studio_Setup_Beta.exe"&gt;Download Data Sync Studio&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 27 Mar 2008 21:21:27 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/03/moss-bdc-desi-1</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC Design Studio 2.0 (Beta)</title>
      <description>&lt;p&gt;A &lt;em&gt;BETA&lt;/em&gt; release of &lt;strong&gt;MOSS BDC Design Studio&lt;/strong&gt; version 2.0 is now available for download this new release adds support for different database systems.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SQL Server  &lt;li&gt;Oracle  &lt;li&gt;OLEDB Data Sources  &lt;li&gt;ODBC Data Sources (including MySQL)  &lt;li&gt;Web Services&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;There are also several bug fixes and refinements to the automatic BDC method generation (better handling of generated input parameters) along with improved connection defaults (auto-sense connection type based on user connection) created from the initial connection.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simego.com/downloads/MOSS_BDC_Studio_Setup_Beta.exe"&gt;MOSS BDC Design Studio 2.0 Download&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sun, 23 Mar 2008 13:01:10 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/03/data-sync-studi</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Sync Studio (Beta)</title>
      <description>&lt;p&gt;Data Sync Studio for SharePoint has reached an initial milestone in the project where it is available for public download and trial.&lt;/p&gt; &lt;p&gt;This release adds support for the following data sources&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SQL Server 2005+&lt;/li&gt; &lt;li&gt;SharePoint Server 2007 ( MOSS &amp;amp; WSS )&lt;/li&gt; &lt;li&gt;Oracle 9+&lt;/li&gt; &lt;li&gt;MySQL 4.0+&lt;/li&gt; &lt;li&gt;Custom Data Sources&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Each Data Source can Synchronise between each other i.e. Oracle to MySQL, MySQL to SharePoint, Oracle to SharePoint, MySql to SQL Server you get the idea.&lt;/p&gt; &lt;p&gt;Also you can create your own Data Providers with Visual Studio 2005/2008 to plug in virtually any Data Source you like and there is a Sample Project for reading Excel files within the Install Directory.&lt;/p&gt; &lt;p&gt;Here's a few scenarios where you might think of using Data Sync Studio&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Publish SharePoint Lists to SQL Server Tables for Reporting Services&lt;/li&gt; &lt;li&gt;Publish SQL Server Tables/Views to SharePoint for Excel Services or KPI's&lt;/li&gt; &lt;li&gt;Publish Application Configuration Data to SharePoint to allow for Access Control.&lt;/li&gt; &lt;li&gt;Publish SharePoint List Data to Oracle for Crystal Reports&lt;/li&gt; &lt;li&gt;With a Custom Provider Publish CRM data to SharePoint&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://www.simego.com/downloads/DataSync_Studio_Setup_Beta.exe"&gt;Download Data Sync Studio&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 21 Mar 2008 15:02:19 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/03/moss-bdc-design</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC Design Stuido 2.0</title>
      <description>&lt;p&gt;MOSS BDC Design Studio 2.0 is nearly ready for release so check back here soon for news of the release. In this release we are supporting all database connectivity options i.e. SQL Server, Oracle, OLEDB, ODBC and Web Services. This update will be FREE to all existing customers and still only 199USD for all new customers.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 10 Mar 2008 14:42:36 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/02/create-fancy-fl</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Create Fancy Flash Charts on SharePoint</title>
      <description>&lt;p&gt;To add fancy charts to SharePoint pages driven by data from either SharePoint, BDC or some other source is actually very easy.&lt;/p&gt;
&lt;p&gt;You will need some good Flash Charts I recommend starting with &lt;a href="http://www.fusioncharts.com/free/"&gt;FusionFreeCharts&lt;/a&gt; &lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;&lt;a href="/Blog/Attachment/4ab227ce-3a79-4c8f-a621-f09104d6e980"&gt;&lt;img title="Chartdemo" height="89" alt="Chartdemo" src="http://www.simego.com/Blog/Attachment/cb407f5a-b286-40a7-9d90-cd3384c23991" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; - Create a SharePoint Docment Library to hold the Flash SWF Files and upload them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt; - Create a Web Part to Generate the Xml Data For the Flash Chart&lt;/p&gt;
&lt;p&gt;Using Visual Studio 2005 and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=3E1DCCCD-1CCA-433A-BB4D-97B96BF7AB63&amp;amp;displaylang=en"&gt;SharePoint Extensions&lt;/a&gt; Create a New WebPart and generate the Xml for the Chart in the Render Method.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/181a7b0a-4df7-4884-b882-75222592bed2"&gt;Download ChartData.zip&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt; - Create a Web Page with SharePoint Designer to output the Xml Data to the Chart&lt;/p&gt;
&lt;p&gt;This page should have next to no content i.e. no HTML Markup it would look something like this...&lt;/p&gt;
&lt;p&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix=&amp;quot;CD&amp;quot; Namespace=&amp;quot;ChartDataProvider&amp;quot; Assembly=&amp;quot;ChartData, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5&amp;quot; %&amp;gt;&lt;br /&gt;&amp;lt;CD:ChartDataProvider runat=&amp;quot;server&amp;quot; id=&amp;quot;ChartData1&amp;quot; __WebPartId=&amp;quot;{BFE5A1BD-85F0-4E13-8756-6B223ECEBF33}&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt; - Add a Content Editor Web Part to a Page and Configure the Flash Chart.&lt;/p&gt;
&lt;p&gt;Edit the Source of the WebPart to be something like this...&lt;/p&gt;
&lt;p&gt;&amp;lt;object classid=&amp;quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&amp;quot; codebase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;400&amp;quot; &amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;param name=&amp;quot;movie&amp;quot; value=&amp;quot;FlashCharts/FCF_MSColumn3D.swf&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;param name=&amp;quot;FlashVars&amp;quot; value=&amp;quot;&amp;amp;dataURL=ChartData.aspx&amp;amp;chartWidth=600&amp;amp;chartHeight=400&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;param name=&amp;quot;quality&amp;quot; value=&amp;quot;high&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;embed src=&amp;quot;FlashCharts/FCF_MSColumn3D.swf&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;400&amp;quot; flashVars=&amp;quot;&amp;amp;dataURL=ChartData.aspx&amp;amp;chartWidth=600&amp;amp;chartHeight=400&amp;quot; quality=&amp;quot;high&amp;quot; type=&amp;quot;application/x-shockwave-flash&amp;quot; pluginspage=&amp;quot;&lt;a href="http://www.macromedia.com/go/getflashplayer"&gt;http://www.macromedia.com/go/getflashplayer&lt;/a&gt;&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/object&amp;gt;&lt;/p&gt;
&lt;p&gt;That's it real fancy charts in SharePoint you could do the same with Silverlight but I don't know of any free good Chart Controls.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 21 Feb 2008 16:38:34 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/02/manage-ssis-con</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Manage SSIS Configurations in SharePoint with DataSync Studio</title>
      <description>&lt;p&gt;DataSync Studio allows you to publish SQL Tables to SharePoint and keep them in sync with each other. So while I was working on a SSIS Project I thought it would be really cool to manage the Configuration Settings in SharePoint.&lt;/p&gt;
&lt;p&gt;So the first thing is to use Data Sync Studio to Connect the SQL Table to SharePoint and define the mapping between the List Columns.&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;&lt;a href="/Blog/Attachment/f5c08d15-25fc-4a65-ba6a-704c0b837f1c"&gt;&lt;img title="Datasyncssis1" height="73" alt="Datasyncssis1" src="http://www.simego.com/Blog/Attachment/7c835dee-736c-4de0-8abe-19e4de5d76dc" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Then configure the List Synchronisation Service and get it running, next just save the Data Sync Project file into the Sync Service Monitor Directory and your done.&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;&lt;a href="/Blog/Attachment/1fd0d024-2332-41f5-a917-acba977bd5a7"&gt;&lt;img title="Datasyncssis2" height="103" alt="Datasyncssis2" src="http://www.simego.com/Blog/Attachment/7a5cf475-046b-43ef-b1e7-dec2fe53ee54" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Now it's really easy for me to create SharePoint views for each of the SSIS Configurations that I have i.e. 'DEV', 'UAT', 'LIVE' and I can also enable Version Control and Configure who has access to update the items. Now I don't need to create an application to edit the settings or give someone instructions on how to use SQL Management Studio.&lt;/p&gt;
&lt;p&gt;To be part of the BETA Program for DataSync Studio please drop me a line at sales[at]simego.com&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 13 Feb 2008 12:03:26 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/01/datasync-studio</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>DataSync Studio for SharePoint List Sync</title>
      <description>&lt;p&gt;Soon to be available is a solution that can easily import data from a SQL Source into your SharePoint Lists and allow you to keep both sources of data in Sync with each other.&lt;/p&gt;
&lt;p&gt;All you need to is point the tool at your SQL Table and then either create a List from that or Map the fields to an existing List.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Screenshot&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/75a0bf2c-4bf8-47fb-8ff9-42090425d712"&gt;&lt;img title="Datasync" height="94" alt="Datasync" src="http://www.simego.com/Blog/Attachment/a65f43c8-10c4-477a-a9b0-aa772bbdef65" width="150" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For more information please contact sales[at]simego.com&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 28 Jan 2008 12:16:52 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/01/sharepoint-quer</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SharePoint QueryString(URL) Filter WebPart</title>
      <description>&lt;p&gt;WSS only ships with a few basic Web Parts one that I miss from MOSS is the Query String URL Filter Web Part this allows you to easily filter lists of data based on a parameter supplied in the URL. i.e. Filter a List of Invoices based on Client ID. I want to use WSS for more than just holding documents so I thought lets build one.&lt;/p&gt;
&lt;p&gt;To deploy the Web Part solution from the Server run the following command.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;STSADM.EXE -o addsolution -filename FilterWebPart.wsp&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You then need to Deploy the solution from Central Admin Console.&lt;/p&gt;
&lt;p&gt;Now on your site you need to activate the Feature&lt;/p&gt;
&lt;p&gt;&lt;a onclick="window.open(this.href, '_blank', 'width=800,height=144,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="/Blog/Attachment/d06feea0-7602-4fc3-af10-911abfb6972a"&gt;&lt;img title="Feature" height="27" alt="Feature" src="http://www.simego.com/Blog/Attachment/972c073d-ccc2-4d6b-b433-8146ca2d81b4" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Next edit a page and add the &amp;quot;Query String Filter&amp;quot; Web Part&lt;/p&gt;
&lt;p&gt;&lt;a onclick="window.open(this.href, '_blank', 'width=708,height=734,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="/Blog/Attachment/0a6fa729-9ad8-48e7-a559-646cf1b1b5d6"&gt;&lt;img title="Addwebpart" height="155" alt="Addwebpart" src="http://www.simego.com/Blog/Attachment/242b926d-e895-4c47-a2f2-77065e87052b" width="149" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;To Configure the Web Part you need to Choose the name of the URL Parameter that will be passed to your Filtered List i.e. ID or ClientID etc.&lt;/p&gt;
&lt;p&gt;&lt;a onclick="window.open(this.href, '_blank', 'width=244,height=722,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="/Blog/Attachment/e2bb001f-0c05-4114-bca7-fea2a156fc3e"&gt;&lt;img title="Editsettings" height="443" alt="Editsettings" src="http://www.simego.com/Blog/Attachment/a38e2f5a-2fea-4cc9-a2a6-5aa160c43a1c" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now you just need to connect your web parts from a List or Document Library Web Part choose Connections -&amp;gt; Get Filter Values From to connect the parts together.&lt;/p&gt;
&lt;p&gt;Now you should have something working like this.&lt;/p&gt;
&lt;p&gt;&lt;a onclick="window.open(this.href, '_blank', 'width=800,height=378,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="/Blog/Attachment/2006fcb4-b40e-4952-be66-bf6bea759d24"&gt;&lt;img title="Demoscreen" height="70" alt="Demoscreen" src="http://www.simego.com/Blog/Attachment/57742da7-0f42-4bdd-92ea-da3c68687c6a" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Download Web Part from here&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/b4433f0b-3d2f-4cc0-9297-53a3c6fb4438"&gt;Download FilterWebPart.zip (4.1K)&lt;/a&gt; &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sat, 19 Jan 2008 17:33:33 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2008/01/sharepoint-list</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SharePoint List Data Synchronization</title>
      <description>&lt;p&gt;Been looking at an alternative to the BDC which is both easy to set-up whilst compatible with WSS as well as MOSS. &lt;/p&gt;
&lt;p&gt;So building on our SQL Database Differences Technology we have been building a SharePoint (or any other datasource) Synchronization application framework.&lt;/p&gt;
&lt;p&gt;The idea is that you can now leverage all the features of SharePoint to manage your business applications static data or ease the migration from an old application to SharePoint.&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;For Example with this Sync&amp;nbsp; Application you can expose your bespoke applications Leaf Tables in SharePoint and then receive Security, Content Approval, Workflow, Versioning, Auditing etc on your data.&amp;nbsp; &amp;nbsp;i.e. You could maintain a list of Currency Conversion Rates for your application in SharePoint and then ensure only valid users can update the data and see a full log of who updated the values and when.&lt;/p&gt;
&lt;p&gt;The Synchronization is two-way and column level so that if you update a column value in SharePoint then only that Column is updated in the SQL Database and the opposite is also true.&lt;/p&gt;
&lt;p&gt;Were also planning for an Active Directory Adapter for the Synchronization to publish User Accounts/Network Computers etc to WSS to manage a Staff Telephone/Contact list etc.&lt;/p&gt;
&lt;p&gt;If you would like to know more and have a project which could benefit from this technology then please drop me a line at sales[at]simego.com &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 15 Jan 2008 22:08:18 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/12/moss-bdc-design</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC Design Studio Version 1.1 Released</title>
      <description>&lt;p&gt;We are pleased to announce the release of an updated version of our &lt;a href="http://www.simego.com/default.aspx#MOSS"&gt;MOSS BDC Design Tool&lt;/a&gt;. This latest update adds the following features :-&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Wizards for Creating Entities &lt;/li&gt;
&lt;li&gt;Support for Creating User Defined Actions &lt;/li&gt;
&lt;li&gt;Updated User Interface with Docking Windows &lt;/li&gt;
&lt;li&gt;Improved Method Auto-generation &lt;/li&gt;
&lt;li&gt;Create BDC Connection to virtually any data source (Progress, Navision, DB2, Oracle and more...) via SQL Server Linked Servers and Entity Creation from SQL Statements&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;This is a FREE update to all existing customers and new customers can download a FREE 14-Day Trial version from the Web Site.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/download.aspx"&gt;Download MOSS BDC Design Studio&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 14 Dec 2007 12:36:26 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/11/data-compare---</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Data Compare - SQL Admin Studio</title>
      <description>&lt;p&gt;Coming soon is Data Compare for SQL Admin Studio if you would like to try out this great new feature you can download the latest &lt;em&gt;BETA&lt;/em&gt; of SQL Admin Studio from &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/downloads/sql_tools_setup_beta.exe"&gt;http://www.simego.com/downloads/sql_tools_setup_beta.exe&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;If you notice any bugs or have any suggestions on how it works then please drop me a line at support[at]simego.com&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 14 Nov 2007 22:09:10 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/sql-tools-runni</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SQL Tools Running on Windows 64 Bit</title>
      <description>&lt;p&gt;Whilst most features have been working just fine under Windows 64 Bit some features mainly export and import between Access, Excel and CSV do not. This is because Microsoft do not ship a 64 Bit version of the Jet database driver.&lt;/p&gt;
&lt;p&gt;The latest beta version 3.0.53 now forces 32 Bit mode to ensure full compatibility on 64 Bit Windows.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/download.aspx"&gt;download from here&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;To force an .NET Application to run in the 32 Bit environment on 64 Bit Windows run the CorFlags.exe Application from the .NET SDK.&lt;/p&gt;
&lt;p&gt;i.e. &lt;em&gt;&lt;strong&gt;corflags.exe /32BIT+ myapp.exe &lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 26 Oct 2007 19:25:03 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/automate-testin</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Automate Testing of Database Change Scripts</title>
      <description>&lt;p&gt;As part of your build process you can now use the Nant Tasks of &lt;a href="http://www.simego.com/"&gt;SQL Admin Studio&lt;/a&gt; to automate a process similar to this.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Backup the Test Database &lt;/li&gt;
&lt;li&gt;Generate the Change Script from the Current Development Database and the Test database &lt;/li&gt;
&lt;li&gt;Apply the Change Script &lt;/li&gt;
&lt;li&gt;Run NUnit Tests if you like &lt;/li&gt;
&lt;li&gt;Restore the Test Database back to it's original state&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;So in this example I have been working on changes in Northwind2 and now I want to automate the process of creating and testing my updates for the Northwind database.&lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;project name=&amp;quot;Test Database Release&amp;quot; default=&amp;quot;Test&amp;quot; xmlns=&amp;quot;&lt;a href="http://simego.com/nant.xsd"&gt;http://simego.com/nant.xsd&lt;/a&gt;&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;loadtasks assembly=&amp;quot;C:\Program Files\Simego\SQL Tools\Simego.SQLTools.Tasks.dll&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;target name=&amp;quot;Test&amp;quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;sqlbackupdatabase&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServer=&amp;quot;.\SQLEXPRESS&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcDatabaseName=&amp;quot;Northwind&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; backupSetOption=&amp;quot;OVERWRITE&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; fileName=&amp;quot;C:\Temp\Database.bck&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; backupName=&amp;quot;Northwind Backup&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;sqlscriptdatabasedifference&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServer=&amp;quot;.\SQLEXPRESS&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcDatabaseName=&amp;quot;Northwind2&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcObjects=&amp;quot;*&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; dstServer=&amp;quot;.\SQLEXPRESS&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; dstDatabaseName=&amp;quot;Northwind&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; fileName=&amp;quot;C:\Temp\Database-Differences.sql&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;sqlexecute&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServer=&amp;quot;.\SQLEXPRESS&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcDatabaseName=&amp;quot;Northwind&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; fileName=&amp;quot;C:\Temp\Database-Differences.sql&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;sqlrestoredatabase&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServer=&amp;quot;.\SQLEXPRESS&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcDatabaseName=&amp;quot;Northwind&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; fileName=&amp;quot;C:\Temp\Database.bck&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 18 Oct 2007 20:46:47 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/enable-visual-s</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Enable Visual Studio 2005 Nant Build File Design Integration</title>
      <description>&lt;p&gt;The first step is to generate an Xml XSD Schema file that will be used to enable intellisense in Visual Studio. Run the following Nant Build Script to generate the schema file and copy the file to the Visual Studio 2005 Schema Directory.&lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;project name=&amp;quot;Build Schema&amp;quot; default=&amp;quot;build&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;lt;loadtasks assembly=&amp;quot;C:\Program Files\Simego\SQL Tools\Simego.SQLTools.Tasks.dll&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;lt;target name=&amp;quot;build&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;nantschema output=&amp;quot;Nant.xsd&amp;quot; target-ns=&amp;quot;&lt;a href="http://simego.com/nant.xsd%22/"&gt;http://simego.com/nant.xsd&amp;quot;/&lt;/a&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;copy file=&amp;quot;Nant.xsd&amp;quot; todir=&amp;quot;C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/p&gt;
&lt;p&gt;Then to enable intellisense in Visual Studio open the build file as Xml in Visual Studio and add the namespace to the project element like this.&lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;project name=&amp;quot;Build Schema&amp;quot; default=&amp;quot;build&amp;quot; &lt;strong&gt;xmlns=&amp;quot;&lt;/strong&gt;&lt;a href="http://simego.com/nant.xsd"&gt;&lt;strong&gt;http://simego.com/nant.xsd&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;quot;&lt;/strong&gt; &amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;lt;loadtasks assembly=&amp;quot;C:\Program Files\Simego\SQL Tools\Simego.SQLTools.Tasks.dll&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;lt;target name=&amp;quot;build&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;nantschema output=&amp;quot;Nant.xsd&amp;quot; target-ns=&amp;quot;&lt;a href="http://simego.com/nant.xsd%22/"&gt;http://simego.com/nant.xsd&amp;quot;/&lt;/a&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;copy file=&amp;quot;Nant.xsd&amp;quot; todir=&amp;quot;C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 17 Oct 2007 10:11:31 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/more-nant-tasks</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>More Nant Tasks Added to SQL Admin Studio</title>
      <description>&lt;p&gt;Just added tasks for Backup &amp;amp; Restore to the Task Library in &lt;a href="http://www.simego.com/"&gt;SQL Admin Studio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This makes it really easy to copy a database with backup &amp;amp; restore. The restore task will also automatically remap the database physical files so you can just backup the database and restore it as a new database by changing the name.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;For Example&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;project name=&amp;quot;Copy Database&amp;quot; default=&amp;quot;copy&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;loadtasks assembly=&amp;quot;C:\Program Files\Simego\SQL Tools\Simego.SQLTools.Tasks.dll&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;target name=&amp;quot;copy&amp;quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;sqlbackupdatabase&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServer=&amp;quot;.\SQLEXPRESS&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServerNetworkLibrary=&amp;quot;DBNMPNTW&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcDatabaseName=&amp;quot;Northwind&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServerUsername=&amp;quot;sa&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServerPassword=&amp;quot;&lt;a href="mailto:pass@word1"&gt;pass@word1&lt;/a&gt;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; backupSetOption=&amp;quot;APPEND&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; fileName=&amp;quot;C:\Temp\Database.bck&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; backupName=&amp;quot;Northwind Backup&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;sqlrestoredatabase&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServer=&amp;quot;.\SQLEXPRESS&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServerNetworkLibrary=&amp;quot;DBNMPNTW&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcDatabaseName=&amp;quot;Northwind2&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServerUsername=&amp;quot;sa&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; srcServerPassword=&amp;quot;&lt;a href="mailto:pass@word1"&gt;pass@word1&lt;/a&gt;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; fileName=&amp;quot;C:\Temp\Database.bck&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 16 Oct 2007 19:45:40 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/using-sql-admin</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using SQL Admin Studio Nant Tasks to Copy Database Tables Data</title>
      <description>&lt;p&gt;This Nant Script Sample shows how to use the Nant Tasks within SQL Admin Studio to :-&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Create a Table based on a Table in a different database&lt;/li&gt;
&lt;li&gt;Import Data into that New Table from a different database and server.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;project name=&amp;quot;Copy Northwind Data&amp;quot; default=&amp;quot;CopyData&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;property name=&amp;quot;networkLib&amp;quot; value=&amp;quot;DBMSSOCN&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;property name=&amp;quot;srcServerName&amp;quot; value=&amp;quot;.\SQLEXPRESS&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;property name=&amp;quot;srcDatabaseName&amp;quot; value=&amp;quot;Northwind&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;property name=&amp;quot;dstServerName&amp;quot; value=&amp;quot;.\SQLEXPRESS&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;property name=&amp;quot;dstDatabaseName&amp;quot; value=&amp;quot;Northwind2&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;loadtasks assembly=&amp;quot;C:\Program Files\Simego\SQL Tools\Simego.SQLTools.Tasks.dll&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;target name=&amp;quot;CopyData&amp;quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;sqlcopytableschema&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;srcServer=&amp;quot;${srcServerName}&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;srcServerNetworkLibrary=&amp;quot;${networkLib}&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;srcDatabaseName=&amp;quot;${srcDatabaseName}&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;srcTable=&amp;quot;[dbo].[Categories]&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;dstServer=&amp;quot;${dstServerName}&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;dstDatabaseName=&amp;quot;${dstDatabaseName}&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;dstTable=&amp;quot;[dbo].[Categories]&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;sqlcopydata&lt;br /&gt;&amp;nbsp; &amp;nbsp;srcServer=&amp;quot;${srcServerName}&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;srcServerNetworkLibrary=&amp;quot;${networkLib}&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;srcDatabaseName=&amp;quot;${srcDatabaseName}&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;srcTable=&amp;quot;[dbo].[Categories]&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;dstServer=&amp;quot;${dstServerName}&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;dstDatabaseName=&amp;quot;${dstDatabaseName}&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;dstTable=&amp;quot;[dbo].[Categories]&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;dstDeleteTable=&amp;quot;true&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 16 Oct 2007 15:06:17 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/sql-admin-studi</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SQL Admin Studio - Now Shipping with Nant Tasks</title>
      <description>&lt;p&gt;The latest &lt;em&gt;Beta&lt;/em&gt; &lt;a href="http://www.simego.com/"&gt;SQL Admin Studio&lt;/a&gt; now includes several Nant Build Tasks for Creating Tables, Copying Data between Servers and Scripting Database Differences. This allows you to create Nant Build Scripts that can download content from remote hosted SQL Databases i.e. DiscountAsp.Net and import into a local database for backup or development etc.&lt;/p&gt;
&lt;p&gt;I will be posting a few guides on how to use these Nant Build Tasks over the next few days, however if you can't wait then please download the latest build from &lt;a href="http://www.simego.com/sql_tools_setup_beta.exe"&gt;http://www.simego.com/sql_tools_setup_beta.exe&lt;/a&gt; and check out the documentation in the the Nant Tasks Guide.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 16 Oct 2007 11:40:29 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/sql-server-2008</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SQL Server 2008 CTP and SQL Admin Studio</title>
      <description>&lt;p&gt;Early Testing shows that &lt;a href="http://www.simego.com"&gt;SQL Admin Studio&lt;/a&gt; works just fine with the CTP of SQL Server 2008 so now you can use SQL Admin Studio for SQL2000, 2005 and 2008.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 15 Oct 2007 09:51:04 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/manage-database</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Manage Database Releases with SQL Admin Studio</title>
      <description>&lt;p&gt;How many times have you come to the end of a milestone in your project and need to create a Database Schema Change Script? If you have been really good then you would have very carefully recorded each database change you made in an update script ready to go. However what do you do about all the other developers in your team are they just as reliable? What will happen if you miss something? How many hours will you waste hunting down some bug that returns the stock answer ‘Works on my machine’.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com"&gt;SQL Admin Studio&lt;/a&gt; to the rescue – No longer do you need to track each database change just generate a Database Schema Difference Script between your development and staging databases. The update scripts will even preserve data if you have re-ordered columns in your tables. &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 12 Oct 2007 17:00:16 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/new-beta-of-sql</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>New BETA of SQL Admin Studio</title>
      <description>&lt;p&gt;I have been busy adding new features to &lt;a href="http://www.simego.com"&gt;SQL Admin Studio&lt;/a&gt; lately and now have a new BETA available&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Support for Synonyms&lt;/li&gt;
&lt;li&gt;Support either &lt;a href="http://www.winmerge.org"&gt;WinMerge&lt;/a&gt; or &lt;a href="http://tortoisesvn.net/"&gt;TortoiseMerge&lt;/a&gt; for viewing Database Object Differences&lt;/li&gt;
&lt;li&gt;Updated Column Text Editor (ALT+V or F3 to view/update Text columns in new Window)&lt;/li&gt;
&lt;li&gt;Database Differences includes SYNONYMs&lt;/li&gt;
&lt;li&gt;Script Database includes SYNONYMs&lt;/li&gt;
&lt;li&gt;View Server Log Files&lt;/li&gt;
&lt;li&gt;Bug Fix updating Columns of type XML&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;To download this update &lt;a href="http://www.simego.com/downloads/sql_tools_setup_beta.exe"&gt;http://www.simego.com/downloads/sql_tools_setup_beta.exe&lt;/a&gt; 
&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 12 Oct 2007 12:50:49 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/comapre-sql-dat</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Compare SQL Database Schema Tool</title>
      <description>&lt;p&gt;A &lt;strong&gt;FREE&lt;/strong&gt; tool to quickly and easily compare 2 database schema's and identify missing or changed objects.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Supports&lt;/u&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Tables &lt;/li&gt;
&lt;li&gt;Table Columns &amp;amp; Data Types &lt;/li&gt;
&lt;li&gt;Views &lt;/li&gt;
&lt;li&gt;Stored Procedures &lt;/li&gt;
&lt;li&gt;Functions&lt;/li&gt;&lt;/ul&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;&lt;a href="/Blog/Attachment/0ab6e4ca-6fb3-4df5-bdb0-263454d6e705"&gt;&lt;img title="Comparedb" height="70" alt="Comparedb" src="http://www.simego.com/Blog/Attachment/7a669483-7a5e-48d1-9851-c8d1c5a98881" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/downloads/comparedb.zip"&gt;Download Compare Database Tool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To install just download and unzip the files then run then &lt;em&gt;CompareDB.exe&lt;/em&gt; application.&lt;/p&gt;&lt;/blockquote&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 02 Oct 2007 11:37:31 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/10/script-database</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Script Database Schema Tool</title>
      <description>&lt;p&gt;A &lt;strong&gt;FREE&lt;/strong&gt; Tool to quickly and easily script your SQL Server database Schema.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Supports&lt;/u&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Tables&lt;/li&gt;
&lt;li&gt;Views&lt;/li&gt;
&lt;li&gt;Stored Procedures&lt;/li&gt;
&lt;li&gt;Functions&lt;/li&gt;&lt;/ul&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;&lt;a onclick="window.open(this.href, '_blank', 'width=769,height=382,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="/Blog/Attachment/85588f0a-3000-445a-a7a7-937b2c442fa4"&gt;&lt;img title="Scriptdb" height="74" alt="Scriptdb" src="http://www.simego.com/Blog/Attachment/5301e5cf-70d8-40d3-9ad8-ff63f395d891" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/downloads/scriptdb.zip"&gt;Download Script Database Tool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To install just download and unzip the files then run then &lt;em&gt;ScriptDB.exe&lt;/em&gt; application.&lt;/p&gt;&lt;/blockquote&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 02 Oct 2007 11:33:01 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/09/bulk-uploading-</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Bulk Uploading Files to SharePoint</title>
      <description>&lt;p&gt;It always struck me that bulk uploading GB's of Documents to SharePoint should be easier that it appears to be I am sure there are many solutions out there but today I decided to write my own. Well in-fact it's not too tricky all you need is a windows service to monitor a File Drop directory and any files or folders get eaten by the service as it uploads them to SharePoint. To upload the files you should implement the FrontPage Extensions API with this you can also handle the Check In/Out and set any meta data at the same time.&amp;nbsp; One gotcha is that I can't get the FrontPage extensions to create a folder in SharePoint so I resorted to using the SharePoint Web Services for that. &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Mon, 10 Sep 2007 19:03:57 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/08/synchronising-f</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Synchronising Favourites</title>
      <description>&lt;p&gt;If your anything like me and have so many machines all over the place it can be hard to keep everything in sync. Recently we have started using Groove here at Contract5 to synchronise documents across machines and into MOSS. You can also configure Groove to synchronise existing folders and this works really well for your favourites... Cool Eh? &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 29 Aug 2007 21:01:16 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/08/windows-messeng</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Windows Messenger cannot sign-in</title>
      <description>&lt;p&gt;This has been driving me crazy! I have 2 DELL C521 Machines that I use in my office one with Virtual Server running and the other Vista and for some time I have be unable to get Windows Live Messenger to sign-in after a Driver Update from Microsoft killed my Wireless adapter. I thought it was because I was using one of those Ethernet over your home power lines so I dug up the garden and put in a direct cable but oh no. So next I thought lets buy some new network cards I wanted 1Gpbs LAN anyway but guess what still no luck. Then I eventually found the solution on the web via Google...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;netsh int tcp set global autotuninglevel=disabled &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So why didn't I think of that ... it's so obvious now.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 29 Aug 2007 20:51:36 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/08/moss-bdc-design</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC Design Studio - Updated</title>
      <description>&lt;p&gt;Today I have released an update to &lt;a href="http://www.simego.com/MOSS_BDC_Design_Studio.aspx"&gt;MOSS BDC Design Studio&lt;/a&gt; this release version 1.0.19 improves on the support for different authentication modes within database systems. You can now easily configure either &lt;strong&gt;PassThrough&lt;/strong&gt;, &lt;strong&gt;RevertToSelf&lt;/strong&gt;, &lt;strong&gt;Database Credentials&lt;/strong&gt; or &lt;strong&gt;Single Sign On&lt;/strong&gt; directly from the properties dialog. This release also adds Search/Replace to the Xml Output to allow for easier direct editing of the Xml by hand.&lt;/p&gt;
&lt;p&gt;Screen shot showing Database Credentials&lt;/p&gt;
&lt;p&gt;&lt;a onclick="window.open(this.href, '_blank', 'width=441,height=302,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="/Blog/Attachment/8e4ab9af-e82c-4a2b-94bd-e27449f068a6"&gt;&lt;img title="Bdcdbconnections" height="102" alt="Bdcdbconnections" src="http://www.simego.com/Blog/Attachment/aefee207-bbae-4f5f-b18e-01e6349639ad" width="149" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sun, 05 Aug 2007 13:32:19 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/08/moss-bdc-design</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC Design Studio - Updated</title>
      <description>&lt;p&gt;Minor Update to &lt;a href="http://www.simego.com/MOSS_BDC_Design_Studio.aspx"&gt;MOSS BDC Design Studio&lt;/a&gt; released today this version 1.0.20 fixes a few minor bugs and improves on the ability to auto-detect filters and columns from stored procedures.&lt;/p&gt;
&lt;p&gt;This is a FREE upgrade for all customers and can be downloaded from the web site now &lt;a href="http://www.simego.com/Download.aspx"&gt;Download&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sun, 05 Aug 2007 13:32:19 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/07/remove-the-time</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Remove the Time Element from DateTime in SQL Server</title>
      <description>&lt;p&gt;Today a customer of &lt;a href="http://www.simego.com/default.aspx"&gt;SQL Admin Studio&lt;/a&gt; asked how can I remove the Time Element of a DateTime Column or GetDate() function call.&lt;/p&gt;
&lt;p&gt;Simple: Just like this...&lt;/p&gt;
&lt;p&gt;DECLARE @Today datetime&lt;br /&gt;SET @Today = cast(Floor(cast(GETDATE() AS float)) AS datetime) &lt;/p&gt;
&lt;p&gt;SELECT @Today&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 10 Jul 2007 09:30:31 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/07/sample---creati</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Sample - Creating a Single Sign On (SSO) Provider for MOSS BDC</title>
      <description>&lt;p&gt;When working with the Business Data Catalog you will find that using PassThrough or RevertToSelf authentication does not work because of the Double Hop issue of passing credentials to other servers. So the recommendation is to use the Single Sign On Service to authenticate. &lt;/p&gt;
&lt;p&gt;This sample is based on the sample in the MOSS SDK but is completed so that it works this will show how you can write your own provider which can be simpler than setting up the default SSO. You will still need to store the credentials in some secure location but you should get the idea.&lt;/p&gt;
&lt;p&gt;To install the provider you will need to compile the assembly with Visual Studio and copy it into the GAC the easiest way to do this is to just drag in into the &lt;u&gt;C:\Windows\Assembly&lt;/u&gt; folder.&lt;/p&gt;
&lt;p&gt;You will also need to modify the connection details of your Application Definition file to look something like this.&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;&amp;lt;LobSystemInstance Name=&amp;quot;Test&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;Properties&amp;gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;Property Name=&amp;quot;AuthenticationMode&amp;quot; Type=&amp;quot;System.String&amp;quot;&amp;gt;WindowsCredentials&amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;lt;Property Name=&amp;quot;SsoApplicationId&amp;quot; Type=&amp;quot;System.String&amp;quot;&amp;gt;&lt;strong&gt;Test2&lt;/strong&gt;&amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;lt;Property Name=&amp;quot;SsoProviderImplementation&amp;quot; Type=&amp;quot;System.String&amp;quot;&amp;gt;&lt;strong&gt;Contract5.SingleSignOn.SSOProvider, Contract5.SingleSignOn, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f8a51aa7d82e214d&lt;/strong&gt;&amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;lt;Property Name=&amp;quot;DatabaseAccessProvider&amp;quot; Type=&amp;quot;Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAccessProvider&amp;quot;&amp;gt;SqlServer&amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;lt;Property Name=&amp;quot;RdbConnection Data Source&amp;quot; Type=&amp;quot;System.String&amp;quot;&amp;gt;SERVER1&amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;lt;Property Name=&amp;quot;RdbConnection Initial Catalog&amp;quot; Type=&amp;quot;System.String&amp;quot;&amp;gt;Test2&amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;lt;Property Name=&amp;quot;RdbConnection Integrated Security&amp;quot; Type=&amp;quot;System.String&amp;quot;&amp;gt;SSPI&amp;lt;/Property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/Properties&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/LobSystemInstance&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;&lt;a href="http://www.simego.com/default.aspx#MOSS"&gt;MOSS BDC Studio&lt;/a&gt; is driven by a template so you could update the template file to include the new SSO settings. Look at the Template files in the Installation directory for more detail.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/8ee2b4c3-fbd4-4914-b1fb-2ddc3b1494aa"&gt;Download Sample&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sun, 08 Jul 2007 15:04:03 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/07/moss-bdc-design</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC Design Studio - USB Drive Edition</title>
      <description>&lt;p&gt;I have just released a version of &lt;a href="http://www.simego.com/default.aspx#MOSS"&gt;MOSS BDC Design Studio&lt;/a&gt; that can be copied onto a standard USB Drive and run directly from the drive. This option is ideal for SharePoint Consultants that need to use this tool at different client sites without the need to install the software directly onto the client machine.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 06 Jul 2007 11:44:57 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/07/systemtransacti</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>System.Transactions, SQLHelper and MSDTC</title>
      <description>&lt;p&gt;The new TransactionScope class in .NET 2.0 is great but if you use it with the standard SQLHelper class then you will find that your SQL Transactions are escalated to MSDTC unless you take some precautions.&lt;/p&gt;
&lt;p&gt;Generally you will use SQLHelper to Execute some SQL Command and this function will create it's own connection run the command and then close the database connection. However as soon as you do this twice within a TransactionScope you will now get a MSDTC transaction which really should be avoided if your only working with a single database.&lt;/p&gt;
&lt;p&gt;What is needed is to run each database command on the same SQL Connection this way the transaction is not escalated to a MSDTC transaction. So you need to build a new 'ConnectionManager' class that will track subscribers and manage the connection. To do this you will need to maintain a list of subscribers as WeakReferences in a Collection&amp;nbsp; (or Generic List&amp;lt;WeakReference&amp;gt; ) then on the first instance you will open the database connection and on subsequent instance calls you will return the same connection. Then as the objects are Disposed you will remove the WeakReference from the Subscribers collection until it reaches Zero then Close the database connection. Do not store the Subscriber Collection or Database Connection in a static variable or you will be asking for trouble when it comes to multiple threads instead use ThreadLocalStorage to manage the Connection Lifetime.&lt;/p&gt;
&lt;p&gt;Example Usage of TransactionScope and ConnectionManager&lt;/p&gt;
&lt;p&gt;//Starts the Transaction&lt;br /&gt;using(TransactionScope = new TransactionScope()) {&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;//Ensures that all Database Calls in this Thread use the same connection until this &lt;br /&gt;//object is Disposed&lt;br /&gt;using(ConnectionManager cm = new ConnectionManager(this.ConnectionString)) {&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;//Now Run your Business Logic Methods.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;}&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 04 Jul 2007 21:49:09 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/06/moss-bdc-design</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC Design Studio - Stored Procedures Part II</title>
      <description>&lt;p&gt;&lt;a href="http://www.simego.com/default.aspx#MOSS"&gt;MOSS BDC Design Studio&lt;/a&gt; now has full drag &amp;amp; drop support for designing BDC Xml with &lt;strong&gt;Stored Procedures&lt;/strong&gt; in-fact all you have to do is drag the Stored Procedure from the Database Schema Window onto the Design Surface and Give the Entity a Name and your done! You can even specify what procedures map to Finder, SpecificFinder and IDEnumerator and all the input parameters, return columns etc will be created automatically.&lt;/p&gt;
&lt;p&gt;This is now in version 1.0.15 which is ready to download now.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sun, 24 Jun 2007 14:58:20 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/06/sql_tools_for_u</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SQL Tools - for USB Key</title>
      <description>&lt;p&gt;Today I have released a new version of my &lt;strong&gt;SQL Tools&lt;/strong&gt; Suite that includes SQL Admin Studio, SQL Import Studio and SQL Backup &amp;amp; Restore that will run from a USB Key and will not install any files onto the local machine. This is ideal for Consultants that may be required to work on many different sites and installing the application locally may not be possible.&lt;/p&gt;
&lt;p&gt;To install copy the files in the Zip archive to your USB Key and then run each program and go through the activation process to install a license key for your USB Drive.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Simego.SQLTools.Explorer.exe&lt;/li&gt;
&lt;li&gt;Simego.SQLImport.exe&lt;/li&gt;
&lt;li&gt;Simego.Backup.Wizard.exe&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Now when you plug your USB Key into another machine you will not need to re-activate the products.&lt;/p&gt;
&lt;p&gt;All registered customers can &lt;a href="http://www.simego.com/downloads/SQL_Tools_For_USBDrive.zip"&gt;download&lt;/a&gt; this version now.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 20 Jun 2007 19:46:06 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/06/using_stored_pr</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Using Stored Procedures with MOSS BDC Design Studio</title>
      <description>&lt;p&gt;So you want to use Stored Procedures to return your data then eh? Well no problem &lt;a href="http://www.simego.com/default.aspx#MOSS"&gt;MOSS BDC Design Studio&lt;/a&gt; can do just that all you need do is use the &lt;u&gt;Create Entity from SQL&lt;/u&gt; function which allows you to create an entity from any SQL Command i.e. Stored Procedures, SQL that join's multiple tables, Linked Servers (Ah! Navision, Oracle etc) etc.&lt;/p&gt;
&lt;p&gt;View the step by step &lt;a href="http://www.simego.co.uk/Walkthroughs.aspx"&gt;Walkthough&lt;/a&gt; on my Website.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 20 Jun 2007 13:53:11 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/06/moss_bdc_web_se</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC - Web Service Walkthrough</title>
      <description>&lt;p&gt;I have posted a new walkthrough on my Web Site that shows how to connect the sample Northwind Web Service to MOSS via the BDC.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/walkthroughs.aspx"&gt;http://www.simego.com/walkthroughs.aspx&lt;/a&gt; &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sat, 16 Jun 2007 16:36:23 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/06/automate_script</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Automate Scripting your Database with SQL Admin Stuido</title>
      <description>&lt;p&gt;So you want to easily script your database as part of your development life cycle? With the latest build 3.0.30 of &lt;a href="http://www.simego.com/default.aspx"&gt;SQL Admin Studio&lt;/a&gt; you can now Script the database from the command line.&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;u&gt;&lt;span face="Calibri"&gt;Script Database&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;Simego.SQLTools.Explorer.exe &lt;strong&gt;-action&lt;/strong&gt; scriptdatabase &lt;strong&gt;-server&lt;/strong&gt; dev1 &lt;strong&gt;-database&lt;/strong&gt; northwind &lt;strong&gt;-outfile&lt;/strong&gt; &amp;quot;C:\Northwind.sql&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;u&gt;&lt;span face="Calibri"&gt;Script Database Differences&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;Simego.SQLTools.Explorer.exe &lt;strong&gt;-action&lt;/strong&gt; comparedatabase &lt;strong&gt;-sourceserver&lt;/strong&gt; dev1 &lt;strong&gt;-sourcedatabase&lt;/strong&gt; northwind &lt;strong&gt;-server&lt;/strong&gt; dev1 &lt;strong&gt;-database&lt;/strong&gt; test1 &lt;strong&gt;-outfile&lt;/strong&gt; &amp;quot;C:\Northwind_Compare.sql&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;u&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;u&gt;&lt;span face="Calibri"&gt;&lt;br /&gt;&lt;br /&gt;Run Template&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;Simego.SQLTools.Explorer.exe &lt;strong&gt;-action&lt;/strong&gt; runtemplate &lt;strong&gt;-template&lt;/strong&gt; &amp;quot;procedure for INSERT&amp;quot; &lt;strong&gt;-server&lt;/strong&gt; dev1 &lt;strong&gt;-database&lt;/strong&gt; Northwind&amp;nbsp; &lt;strong&gt;-outfile&lt;/strong&gt; &amp;quot;C:\Northwind_Template.sql&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;&lt;br /&gt;&lt;br /&gt;With run template you can also pass&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt"&gt;&lt;span face="Calibri"&gt;-table &lt;em&gt;the table to pass to the template&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt"&gt;&lt;span face="Calibri"&gt;-view &lt;em&gt;the view to pass to the template&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt"&gt;&lt;span face="Calibri"&gt;-procedure &lt;em&gt;the procedure to pass to the template&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/downloads/sql_tools_setup_beta.exe"&gt;Download Latest Build&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 14 Jun 2007 11:01:00 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/06/advanced_templa</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Advanced Templates with SQL Admin Studio</title>
      <description>&lt;p&gt;A Client was writing their own templates for &lt;a href="http://www.simego.com/default.aspx"&gt;SQL Admin Studio&lt;/a&gt; and asked if it was possible to build a Template that could ultimately generate the entire data access layer for their database project. Generally the templates execute against a single database object but with a little work it is possible for a template to call other templates you just need to compile each template before you call it. I had to move a few things around and create a few helper functions in &lt;a href="http://www.simego.com/default.aspx"&gt;SQL Admin Studio&lt;/a&gt; so for this to work you will need the latest beta release version 3.0.29 from &lt;a href="http://www.simego.com/downloads/sql_tools_setup_beta.exe"&gt;http://www.simego.com/downloads/sql_tools_setup_beta.exe&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;To Compile a Template you need to call the TemplateCompiler and pass the Template filename&lt;/p&gt;
&lt;p&gt;i.e. &lt;em&gt;StreamWriterTemplateBase tableTemplate = TemplateCompiler.CompileTemplate(Path.Combine(TemplateCompiler.TemplateDirectory, @&amp;quot;MsSqlServer\SqlTable\C#\Entity Object C#.tpl&amp;quot;));&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Then to Execute a Compiled Template you need to Call it’s RenderTemplate method.&lt;/p&gt;
&lt;p&gt;i.e. &lt;em&gt;tableTemplate.RenderTemplate(outputFileName, Database, T, null, null);&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The sample Data Access Layer script will Create Entity C# Objects for each Table in your database and Create a Single Database.sql script file with all the SELECT/INSERT/UPDATE/DELETE Stored Procedures for each Table in the Database.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/5eef7d7c-60a2-462b-a5e0-9d60b5f62632"&gt;Download Sample Template (0.9K)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To install the Template into &lt;a href="http://www.simego.com/default.aspx"&gt;SQL Admin Studio&lt;/a&gt; copy the Template file from the Zip Archive to your &lt;br /&gt;&lt;em&gt;My Documents\My Templates\MsSqlServer\SqlDatabase\C#&lt;/em&gt; folder.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 12 Jun 2007 10:25:16 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/06/moss_bdc_design</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC Design Studio - Updated!</title>
      <description>&lt;p&gt;Today I have released a minor update to my &lt;a href="http://www.simego.com/default.aspx#MOSS"&gt;MOSS BDC Design Studio&lt;/a&gt; to improve the Web Services support. &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;You can now see more information in the Schema Explorer window Method Input Parameters, Return Types and Entity Property data types.&lt;/li&gt;
&lt;li&gt;Fixed an Issue where the Web Service proxy was not created if you had a Web Method that referenced a DataType in System.Data.&lt;/li&gt;
&lt;li&gt;Web Service Proxy is no longer created twice.&lt;/li&gt;&lt;/ul&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Sat, 09 Jun 2007 18:44:34 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/06/create_a_moss_b</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Create a MOSS BDC Application in 2 Hours</title>
      <description>&lt;p&gt;Today I thought now lets just see how long it would take to build a Demo Online Banking Application using Microsoft Office SharePoint Server(MOSS) and the Business Data Catalog(BDC). So I created a sample Banking database and pulled in some data from the Northwind database so I had a few customers to work with. The aim was to provide the following features :-&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Search for Client &lt;/li&gt;
&lt;li&gt;Display Client Details &lt;/li&gt;
&lt;li&gt;Display Client Bank Accounts with Balance Summary &lt;/li&gt;
&lt;li&gt;Drill Down into the Bank Account &lt;/li&gt;
&lt;li&gt;Display Bank Account Details &lt;/li&gt;
&lt;li&gt;Display Transactions for the Account&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;This time I decided I was going to use the SharePoint Designer rather than just web parts so I went to work creating the BDC Entities with &lt;a href="http://www.simego.com/default.aspx#MOSS"&gt;MOSS BDC Design Studio&lt;/a&gt; that took 15 minuites. Then I opened up SharePoint Designer and went to work.&lt;/p&gt;
&lt;p&gt;This is the result.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Client/Customer Search (By Name or Client ID)&lt;/u&gt;&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;&lt;a href="/Blog/Attachment/68e8f326-a4d3-4d6e-8a95-eaaf7dfe9c47"&gt;&lt;img title="Bdc_demo1" height="112" alt="Bdc_demo1" src="http://www.simego.com/Blog/Attachment/d8501ade-a92a-4ac3-9079-8812c3d926e5" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;&lt;u&gt;Client Desktop (Displaying Client Details as Bank Account Summaries)&lt;/u&gt;&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;&lt;a href="/Blog/Attachment/c02c01d8-799d-4073-ba4d-9821d1b0300d"&gt;&lt;img title="Bdc_demo12" height="112" alt="Bdc_demo12" src="http://www.simego.com/Blog/Attachment/d12cee1e-95f4-41d3-9b24-555e662533fa" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;&lt;u&gt;Bank Account (Displaying Bank Account Details and Transactions for the Account)&lt;/u&gt;&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;&lt;a href="/Blog/Attachment/e0846460-34e4-47fe-b5a4-10b8fcb727e2"&gt;&lt;img title="Bdc_demo13" height="112" alt="Bdc_demo13" src="http://www.simego.com/Blog/Attachment/b0756ccc-d0ab-482a-9d9c-82f3adc5ebaa" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;&lt;u&gt;&lt;/u&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;Now how cool is this it literally took me no more than 2 hours start to finish to create a working demo using MOSS and the Business Data Catalog.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Fri, 01 Jun 2007 16:14:13 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/05/moss_bdc_design</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>MOSS BDC Design Studio Updated</title>
      <description>&lt;p&gt;Just updated &lt;a href="http://www.simego.com/download.aspx"&gt;MOSS BDC Design Studio&lt;/a&gt; to resolve an issue with creating entities from SQL or using Stored Procedures. This fix is in version 1.0.8 you can download this from my web site now.&lt;/p&gt;
&lt;p&gt;To Use &lt;u&gt;Stored Procedures&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;1) Create the Entity via the Tools menu &lt;em&gt;'Create Enitiy from SQL'&lt;/em&gt; enter the Stored Procedure with parameters so that it will return i.e GetProducts '%MyProduct%'.&lt;/p&gt;
&lt;p&gt;2) Then edit the Finder Method and Add parameters that match the Stored Procedure input Parameter.&lt;/p&gt;
&lt;p&gt;3) Edit the Finder method Properties and Change the Command Type = StoredProcedure and the CommandText so that it matches the Stored Procedure name.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Thu, 31 May 2007 09:51:56 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/05/walk_through_us</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Walk Through Using MOSS BDC Design Studio</title>
      <description>&lt;p&gt;I have just posted a walk through guide on my website that shows how to use the MOSS BDC Design Studio to connect to the Northwind Product Table and create a Finder method to filter the results by Product Name.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.simego.com/MOSS_BDC_Demo.aspx"&gt;View the article here&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 30 May 2007 12:13:46 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/05/how_to_connect_</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>How to connect to Navision 3.7 with the BDC</title>
      <description>&lt;p&gt;The Business Data Catalog allows us to connect to a variety data sources and expose this data in MOSS with the BDC Web Parts. By using Linked Servers in SQL Server we can easily extend the capabilities to other Database Systems such as DB2, Oracle and even the Navision database.&lt;/p&gt;
&lt;p&gt;To connect to the Navision 3.7 Data Store with the Business Data Catalog you will need to setup a linked server in SQL Server 2005.&lt;/p&gt;
&lt;p&gt;1. Install the C/ODBC Database Driver for Navision on the SQL Server that you plan to use with the BDC.&lt;/p&gt;
&lt;p&gt;2. Define a System ODBC Source for the Connection to the Navision Database on the SQL Server.&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;&lt;a onclick="window.open(this.href, '_blank', 'width=474,height=369,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="/Blog/Attachment/3e47b7c4-a8f3-4cbf-8010-dab0b016bcd2"&gt;&lt;img title="Navisionodbc_4" height="116" alt="Navisionodbc_4" src="http://www.simego.com/Blog/Attachment/57ea6d81-40cc-425e-80de-9d44dfb56574" width="150" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;3. Add a Linked Server to SQL Server&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;EXEC master.dbo.sp_addlinkedserver &lt;br /&gt;&amp;nbsp; &amp;nbsp; @server = N'NAVISION', &lt;br /&gt;&amp;nbsp; &amp;nbsp; @srvproduct=N'NAVISION', &lt;br /&gt;&amp;nbsp; &amp;nbsp; @provider=N'MSDASQL', &lt;br /&gt;&amp;nbsp; &amp;nbsp; @datasrc=N'NAVISION'&lt;br /&gt;GO&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;4. Test the Connection with a suitable query tool such as &lt;a href="http://www.simego.com/default.aspx#SQLADMIN"&gt;SQL Admin Studio&lt;/a&gt;.&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;DBCC TRACEON(8765)&lt;br /&gt;SELECT * FROM OPENQUERY(NAVISION, 'SELECT * FROM Customer')&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;5. Then by using &lt;a href="http://www.simego.com/default.aspx#MOSS"&gt;MOSS BDC Design Studio&lt;/a&gt; you can create Entities for the BDC from SQL Commands i.e. From the Tools Menu -&amp;gt;Create Entity from SQL Command &lt;/p&gt;
&lt;p&gt;Enter the following SQL Command and name it Customers you can then generate the BDC Schema.&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;DBCC TRACEON(8765)&lt;br /&gt;SELECT * FROM OPENQUERY(NAVISION, 'SELECT * FROM Customer')&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;6. Generate the BDC Xml Application Definition and import into the BDC.&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Wed, 30 May 2007 09:00:00 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/05/export_data_to_</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Export Data to Microsoft Excel</title>
      <description>&lt;p&gt;I have had a few customers ask me how I export data to Excel in &lt;a href="http://www.simego.com"&gt;SQL Admin Studio&lt;/a&gt; and the answer is no secret. Under the hood I leverage the Microsoft ODBC Driver for Excel and write directly to that as if it was any SQL Database. &lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/dcf77100-c5f8-4710-822f-3e862471e357"&gt;Download ExcelHelper2.zip (1.3K)&lt;/a&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 29 May 2007 14:39:53 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/05/webservice_samp</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>WebService Sample for MOSS BDC</title>
      <description>&lt;p&gt;This code demonstrates how to simply create a web service that can be exposed via the Business Data Catalog (BDC) in Microsoft SharePoint Portal Server (MOSS).&lt;/p&gt;
&lt;p&gt;This method allows you to integrate virtually any kind of system into MOSS with the BDC alternative methods involve using Linked Servers with SQL Server to connect to other Data sources such as Navision, 4Series AS400, DB2 etc.&lt;/p&gt;
&lt;p&gt;&lt;a href="/Blog/Attachment/3e2d4622-9ddd-46e1-bc81-33499c2964a7"&gt;Download NorthwindService.zip (48.8K)&lt;/a&gt; &lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 29 May 2007 14:20:52 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/05/sql_admin_studi</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>SQL Admin Studio – Updated!</title>
      <description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;Today I have uploaded the latest release of SQL Admin Studio Version 3.0.26 &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;p&gt;&lt;span face="Calibri"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;New Designer for creating Templates (Templates allow you to create custom Code, SQL etc from Database Schema)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Queries now run on a separate thread so they no longer block the UI.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Product Activation changes – You can now activate directly over the internet from the application itself.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;SQL Import Studio is now in the same install image.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;SQL Backup &amp;amp; Restore Wizard is now in the same install image.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;p&gt;&lt;span face="Calibri"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;The latest version is available here &lt;/span&gt;&lt;a href="http://www.simego.com/download.aspx"&gt;&lt;span face="Calibri"&gt;http://www.simego.com/download.aspx&lt;/span&gt;&lt;/a&gt;&lt;span face="Calibri"&gt; &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;p&gt;&lt;span face="Calibri"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;Also Complementary licenses are available for good Blog/Web Site Review Articles.&lt;/span&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 29 May 2007 14:01:00 +0100</pubDate>
    </item>
    <item>
      <link>http://www.simego.com/Blog/2007/05/microsoft_offic</link>
      <author>info@simego.com (Sean Cleaver)</author>
      <title>Microsoft Office SharePoint Server Business Data Catalog Design Tool</title>
      <description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;Today I have released a software tool to simplify the development of MOSS BDC Xml files to connect remote database and web service systems. This tool is currently in Beta and we invite you to try the application and in return for good Blog/Web Site Review articles we will provide complementary licenses for the Full Version. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;&lt;strong&gt;&lt;span style="FONT-SIZE: 12pt"&gt;MOSS Business Data Catalog Design Studio – Version 1.0 &lt;em&gt;Beta&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;&lt;br /&gt;This is the first Beta Release of a tool to simplify creating BDC Schema for the MOSS Business Data Catalog. In the first &lt;em&gt;beta&lt;/em&gt; version the following features are supported.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Connect to SQL Server Database&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Connect to Web Services&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Create multiple Entities from Table&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Create multiple Entities from View&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Create multiple Entities from SQL Command Text&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Create multiple Entities from Object (Web Services)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Add/Edit/Remove Methods (Finder, SpecficFinder, IDEnumerator)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Add/Edit/Remove Method Parameters&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Add/Edit/Remove Method Properties&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Add/Edit/Remove Method Filters&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Add/Edit/Remove Entity Associations&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Save/Open Project Files&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Edit Column Names&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Change Column Order&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Set Title/Key Columns&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div&gt;&lt;span face="Calibri"&gt;Generate BDC Schema&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;&lt;em&gt;Supported OS: Windows XP SP2/Windows Server 2003 SP1/Vista&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;&lt;em&gt;.NET Framework 2.0 Required&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span face="Calibri"&gt;To download the latest beta please go to &lt;a href="http://www.simego.com/"&gt;www.simego.com&lt;/a&gt; &lt;/span&gt;&lt;span face="Calibri"&gt;this version will expire on July 21&lt;sup&gt;st&lt;/sup&gt; 2007.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/p&gt;
</description>
      <source url="http://www.simego.com/Blog">Team Blog</source>
      <pubDate>Tue, 29 May 2007 09:53:13 +0100</pubDate>
    </item>
  </channel>
</rss>