<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Thomas Conté - Microsoft France</title><subtitle type="html">Azure vu du ciel</subtitle><id>http://blogs.msdn.com/tconte/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/tconte/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2007-07-28T17:19:23Z</updated><entry><title>La CTP Novembre de SQL Server 2008 R2 Management Studio pour gérer SQL Azure</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2009/11/12/la-ctp-novembre-de-sql-server-2008-r2-management-studio-pour-g-rer-sql-azure.aspx" /><id>http://blogs.msdn.com/tconte/archive/2009/11/12/la-ctp-novembre-de-sql-server-2008-r2-management-studio-pour-g-rer-sql-azure.aspx</id><published>2009-11-12T18:36:44Z</published><updated>2009-11-12T18:36:44Z</updated><content type="html">&lt;p&gt;Comme indiqué dans un &lt;a href="http://blogs.msdn.com/ssds/archive/2009/11/10/9920168.aspx"&gt;court billet sur le blog de l’équipe SQL Azure&lt;/a&gt;, la CTP Novembre de SQL Server 2008 R2 inclut une version de SQL Server Management Studio &lt;a href="http://msdn.microsoft.com/en-us/library/ee621784.aspx"&gt;supportée pour gérer SQL Azure&lt;/a&gt;. Vous le trouverez dans le &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/R2.aspx"&gt;package complet de 2008 R2 disponible en téléchargement&lt;/a&gt;, ou vous pouvez télécharger directement une version &lt;a href="http://go.microsoft.com/fwlink/?LinkID=168734&amp;amp;clcid=0x409"&gt;32bit&lt;/a&gt; ou &lt;a href="http://go.microsoft.com/fwlink/?LinkID=168735&amp;amp;clcid=0x409"&gt;64bit&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Cette version est complètement supportée pour SQL Azure, donc fini les désagréments du type passer par “New Query” pour se connecter…&lt;/p&gt;  &lt;p&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://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/LaCTPNovembredeSQLServer2008R2Management_11193/image_5.png" width="437" height="255" /&gt; &lt;/p&gt;  &lt;p&gt;Encore un sujet qui sera amplement présenté à la &lt;a href="http://microsoftpdc.com/"&gt;PDC09&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9921506" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="PDC09" scheme="http://blogs.msdn.com/tconte/archive/tags/PDC09/default.aspx" /></entry><entry><title>Résumé des annonces Windows Azure du 5 novembre</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2009/11/10/r-sum-des-annonces-windows-azure-du-5-novembre.aspx" /><id>http://blogs.msdn.com/tconte/archive/2009/11/10/r-sum-des-annonces-windows-azure-du-5-novembre.aspx</id><published>2009-11-10T14:05:00Z</published><updated>2009-11-10T14:05:00Z</updated><content type="html">&lt;P&gt;L’heure de la &lt;A href="http://microsoftpdc.com/" mce_href="http://microsoftpdc.com/"&gt;PDC 2009&lt;/A&gt; approchant à grand pas, les annonces se multiplient autour de la plateforme Windows Azure; voici donc un petit résumé des actualités de ces dernières semaines, qui furent riche en annonces. L’ensemble de ces points sera détaillé lors de la PDC, donc restez à l’écoute!&lt;/P&gt;
&lt;H2&gt;&lt;A href="http://blogs.msdn.com/windowsazure/archive/2009/11/05/accessing-windows-azure-blobs-using-custom-storage-domain-names.aspx" mce_href="http://blogs.msdn.com/windowsazure/archive/2009/11/05/accessing-windows-azure-blobs-using-custom-storage-domain-names.aspx"&gt;Accès aux Blobs Windows Azure via des noms de domaines personnalisés&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;Jusqu’à aujourd’hui, l’accès aux Blobs se faisait via des noms de domaines du type:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;http://&amp;lt;account&amp;gt;.blob.core.windows.net/&amp;lt;container&amp;gt;/&amp;lt;blobname&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Ce qui signifie que ces URL apparaissaient par exemple dans votre code source HTML si vous stockiez des images ou autres contenus dans des conteneurs de Blobs Windows Azure. Grâce aux noms de domaines personnalisés, vous obtiendrez des URL du type:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;http://images.mondomaineamoi.com/&amp;lt;container&amp;gt;/&amp;lt;blobname&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Ce qui est, vous l’avouerez, nettement plus discret et esthétique! Vous pourrez configurer votre nom de domaine personnalisé directement dans le portail Windows Azure, au niveau de votre Storage Account, après être passé par l’inévitable étape de vérification (vous aurez à créer un CNAME dans le domaine déclaré, afin de vérifier que vous êtes bien propriétaire de ce domaine).&lt;/P&gt;
&lt;H2&gt;&lt;A href="http://blogs.msdn.com/windowsazure/archive/2009/11/05/introducing-the-windows-azure-content-delivery-network.aspx" mce_href="http://blogs.msdn.com/windowsazure/archive/2009/11/05/introducing-the-windows-azure-content-delivery-network.aspx"&gt;Lancement du Content Delivery Network (CDN) Windows Azure&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;Le but d’un CDN est d’optimiser le temps de chargement de vos contenus statiques (images par exemple) en les rapprochant au maximum de l’internaute en termes de “distance réseau”. Le CDN Windows Azure vous permet de répliquer et de mettre en cache automatiquement vos contenus, stockés sous forme de Blobs, dans les 18 emplacements activés aujourd’hui dans le monde. Pour bénéficier du CDN, il vous suffit d’activer la nouvelle option disponible au niveau de votre Storage Account. Bien entendu, il est là aussi possible de choisir un nom de domaine personnalisé pour “masquer” les URL Windows Azure.&lt;/P&gt;
&lt;H2&gt;&lt;A href="http://blogs.msdn.com/netservices/archive/2009/11/05/microsoft-net-services-november-ctp-release.aspx" mce_href="http://blogs.msdn.com/netservices/archive/2009/11/05/microsoft-net-services-november-ctp-release.aspx"&gt;Disponibilité de la CTP Novembre 2009 des .NET Services&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;Cette nouvelle CTP des .NET Services (Access Control Service et Service Bus) met à dispositions des évolutions majeures en vue du lancement à la PDC09; notamment, le recentrage d’Access Control Service sur des interfaces de style REST, ainsi que des réaménagements significatifs de l’API du Service Bus.&lt;/P&gt;
&lt;H2&gt;&lt;A href="http://blogs.msdn.com/interoperability/archive/2009/10/28/tasktop-soyatec-microsoft-to-foster-eclipse-and-microsoft-platform-interoperability.aspx" mce_href="http://blogs.msdn.com/interoperability/archive/2009/10/28/tasktop-soyatec-microsoft-to-foster-eclipse-and-microsoft-platform-interoperability.aspx"&gt;Développement PHP et Java pour Windows Azure, intégration avec Eclipse&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;Microsoft a annoncé à la dernière édition de l’&lt;A href="http://www.eclipsecon.org/summiteurope2009/" mce_href="http://www.eclipsecon.org/summiteurope2009/"&gt;Eclipse Summit Europe 2009&lt;/A&gt;, qui s’est tenu en Allemagne du 27 au 29 octobre, le lancement en partenariat avec la société française Soyatec de deux extensions Eclipse spécialement dédiées au développement en environnement Windows Azure:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows Azure Tools for Eclipse for PHP developers: &lt;A href="http://www.windowsazure4e.org/" mce_href="http://www.windowsazure4e.org"&gt;www.windowsazure4e.org&lt;/A&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Ces extensions permettent aux développeurs utilisant Eclipse de développer des projets Web PHP directement déployables dans Windows Azure, via le &lt;A href="http://blogs.msdn.com/windowsazure/archive/2009/03/18/using-3rd-party-programming-languages-via-fastcgi.aspx" mce_href="http://blogs.msdn.com/windowsazure/archive/2009/03/18/using-3rd-party-programming-languages-via-fastcgi.aspx"&gt;support de FastCGI et de PHP annoncés en mars dernier&lt;/A&gt;.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Windows Azure Software Developer Kit (SDK) for Java: &lt;A href="http://www.windowsazure4j.org/" mce_href="http://www.windowsazure4j.org"&gt;www.windowsazure4j.org&lt;/A&gt; &lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Un SDK Java permettant à des appplications client ou serveur développées en Java d’accéder aux services de la plateforme Windows Azure, et notamment la partie Storage (Tables, Blobs et Queues).&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;H2&gt;&lt;A href="http://blogs.msdn.com/windowsazure/archive/2009/08/04/migrating-from-usa-northwest.aspx" mce_href="http://blogs.msdn.com/windowsazure/archive/2009/08/04/migrating-from-usa-northwest.aspx"&gt;Fermeture du centre d’hébergement “USA – Northwest”&lt;/A&gt;&lt;/H2&gt;
&lt;P&gt;Enfin, pour les personnes qui testaient Windows Azure depuis déjà plusieurs mois, l’annonce suivanta datant d’Août dernier a pu être un peu “oubliée”: &lt;A href="http://blogs.msdn.com/windowsazure/archive/2009/08/04/migrating-from-usa-northwest.aspx" mce_href="http://blogs.msdn.com/windowsazure/archive/2009/08/04/migrating-from-usa-northwest.aspx"&gt;le centre d’hébergement “USA – Northwest” a été fermé&lt;/A&gt;, et il faut donc redéployer vos applications, si elles tournaient dans ce centre. Vous pouvez re-créer un service d’hébergement avec le même URL que vous utilisiez au départ; vous pouvez vous reporter à &lt;A href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/1737ced4-0799-47dc-ad1c-d5c567df8816" mce_href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/1737ced4-0799-47dc-ad1c-d5c567df8816"&gt;cette discussion dans les forums Windows Azure&lt;/A&gt; si vous avez des questions additionnelles sur la réutilisation de votre URL d’origine.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9920150" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="PDC09" scheme="http://blogs.msdn.com/tconte/archive/tags/PDC09/default.aspx" /></entry><entry><title>Microsoft acquiert Teamprise pour intégrer TFS en environnement Java</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2009/11/09/microsoft-acquiert-teamprise-pour-int-grer-tfs-en-environnement-java.aspx" /><id>http://blogs.msdn.com/tconte/archive/2009/11/09/microsoft-acquiert-teamprise-pour-int-grer-tfs-en-environnement-java.aspx</id><published>2009-11-09T21:24:56Z</published><updated>2009-11-09T21:24:56Z</updated><content type="html">&lt;p&gt;Pour démarrer sur le thème Interopérabilité, Microsoft a annoncé aujourd’hui l’acquisition des technologies Teamprise auprès de SourceGear, propriétaire de ces composants.&lt;/p&gt;  &lt;p&gt;Les composants Teamprise permettent aux développeurs en environnement Java, qu’ils utilisent Windows, Linux ou Mac OS, d’utiliser un serveur TFS (Team Foundation Server) pour gérer le cycle de développement de leurs applications, comme par exemple le contrôle de code source, la gestion de versions, l’intégration continue, le suivi des tâches, etc.&lt;/p&gt;  &lt;p&gt;Concrètement, les solutions TeamPrise prennent les formes suivantes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Teamprise Plugin pour Eclipse permet d’accéder à TFS depuis Eclipse et autres environnements basés sur Eclipse (Rational Application Developer, BEA Workshop, JBoss Tools, …)&lt;/li&gt;    &lt;li&gt;Teamprise Explorer, une application indépendante, permet d’accéder à TFS pour les populations non-développeurs, comme les graphistes, chefs de projets, etc.&lt;/li&gt;    &lt;li&gt;Teamprise Ligne de Commande, un environnement multiplateforme, permet de construire des scripts pour l’automatisation de tâches ou simplement pour les développeurs préférant la ligne de commande!&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;C’est évidemment une excellente nouvelle pour toutes les organisations qui cherchaient à centraliser l’ensemble de leurs développements dans un environnement unique de type ALM (Application Lifecycle Management) quel que soit l’environnement de développement, .NET ou Java.&lt;/p&gt;  &lt;p&gt;Les technologies Teamprise seront incluses dans la prochaine version de Visual Studio, &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx"&gt;Visual Studio 2010&lt;/a&gt;, en Beta 2 à l’heure où j’écris ce billet, et qui sera disponible en mars 2010.&lt;/p&gt;  &lt;p&gt;Pour plus de détails (en anglais), voir le &lt;a href="http://www.microsoft.com/presspass/press/2009/nov09/11-09TeamprisePR.mspx"&gt;communiqué de presse&lt;/a&gt; et le &lt;a href="http://www.woodwardweb.com/teamprise/a_new_chapter_f.html"&gt;billet sur le blog de Martin Woodward&lt;/a&gt;, ex-Teamprise et maintenant Program Manager chez Microsoft!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9919792" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author></entry><entry><title>Nouveau job, nouveau blog!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2009/11/09/nouveau-job-nouveau-blog.aspx" /><id>http://blogs.msdn.com/tconte/archive/2009/11/09/nouveau-job-nouveau-blog.aspx</id><published>2009-11-09T20:11:00Z</published><updated>2009-11-09T20:11:00Z</updated><content type="html">&lt;P&gt;Etant sur le point de rejoindre les équipes de DPE France en tant qu'Architecte, il est temps pour moi de remettre mon blog au goût du jour! Je vais en effet m'éloigner quelque peu de l'univers SharePoint (sans pour autant l'abandonner complètement!)&amp;nbsp;pour me consacrer à la plateforme applicative Microsoft, notamment sur les sujets &lt;A href="http://www.microsoft.com/windowsazure/" mce_href="http://www.microsoft.com/windowsazure/"&gt;Windows Azure&lt;/A&gt; et &lt;A href="http://www.microsoft.com/interop/" mce_href="http://www.microsoft.com/interop/"&gt;Interopérabilité&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Je suis pour l'instant un pied dans les deux mondes, mais mon univers va basculer sérieusement dans l'Azure dès la semaine prochaine, étant donné que j'aurai le privilège d'assister à la &lt;A href="http://microsoftpdc.com/" mce_href="http://microsoftpdc.com/"&gt;PDC 2009&lt;/A&gt; à Los Angeles, qui va être riche en annonces autour de Windows Azure.&lt;/P&gt;
&lt;P&gt;Je vous donne donc rendez-vous sur ce blog dès le 17 novembre pour les premiers retours sur la Keynote, qui verra se succéder &lt;A href="http://www.microsoft.com/presspass/exec/ozzie/" mce_href="http://www.microsoft.com/presspass/exec/ozzie/"&gt;Ray Ozzie&lt;/A&gt;, &lt;A href="http://www.microsoft.com/presspass/exec/bobmuglia/" mce_href="http://www.microsoft.com/presspass/exec/bobmuglia/"&gt;Bob Muglia&lt;/A&gt;, &lt;A href="http://www.microsoft.com/presspass/exec/kurtd/" mce_href="http://www.microsoft.com/presspass/exec/kurtd/"&gt;Kurt DelBene&lt;/A&gt; et bien entendu &lt;A href="http://www.microsoft.com/presspass/exec/guthrie/" mce_href="http://www.microsoft.com/presspass/exec/guthrie/"&gt;Scott Guthrie&lt;/A&gt; pour les principales annonces autour du futur de la plateforme Microsoft!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9919745" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="PDC09" scheme="http://blogs.msdn.com/tconte/archive/tags/PDC09/default.aspx" /></entry><entry><title>AJAX SharePoint picture gallery using Highslide</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2009/04/01/ajax-sharepoint-picture-gallery-using-highslide.aspx" /><id>http://blogs.msdn.com/tconte/archive/2009/04/01/ajax-sharepoint-picture-gallery-using-highslide.aspx</id><published>2009-04-01T16:46:17Z</published><updated>2009-04-01T16:46:17Z</updated><content type="html">&lt;p&gt;Do you like &lt;a href="http://highslide.com/"&gt;Highslide&lt;/a&gt;? It’s a pretty neat JavaScript library that allows you to create AJAX thumbnail viewers and pop-up image galleries. It’s a really easy way to add some Web 2.0 flair to your site instead of displaying boring thumbnails.&lt;/p&gt;  &lt;p&gt;Now, SharePoint has an embedded “This week in pictures” Web Part but it’s pretty boring. There are a lot of Silverlight options out there, but I think &lt;a href="http://highslide.com/"&gt;Highslide&lt;/a&gt; is much simpler to implement… You don’t need to install any code on the server, you can do everything using SharePoint Designer!&lt;/p&gt;  &lt;p&gt;The trick is of course to use the Swiss Army knife of SharePoint Web Parts: the Data View! The idea is to point a Data View to a standard SharePoint picture library, and then tweak the XSLT in order to display the markup for Highslide.&lt;/p&gt;  &lt;p&gt;First, you need to &lt;a href="http://highslide.com/download.php"&gt;download Highslide&lt;/a&gt; and install it on your SharePoint. Just use SharePoint Designer to drop the “highslide” directory in any document library. In this example, I used my My Site as a sandbox, so I copied Highslide to the “My Pages” library.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/AJAXSharePointpicturegalleryusingHighsli_D6EF/image_2.png"&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://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/AJAXSharePointpicturegalleryusingHighsli_D6EF/image_thumb.png" width="661" height="363" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then, you need to reference the library in your Master Page or your custom ASPX page. If you are working in a custom ASPX page, insert the code below into the “PlaceHolderAdditionalPageHead” placeholder. If you are working in a Master Page, just insert the code in the page header.&lt;/p&gt;  &lt;pre class="brush: xml;"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/sites/tconte/My%20Pages/highslide/highslide-with-gallery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;/sites/tconte/My%20Pages/highslide/highslide.css&amp;quot; /&amp;gt;&lt;/pre&gt;

&lt;p&gt;Then, you will add some JavaScript configuration code. You can find &lt;a href="http://highslide.com/index.htm"&gt;many examples&lt;/a&gt; on the Highslide site, but here is what I use. Of course, make sure to change graphicsDir to point to the location where you installed Highslide!&lt;/p&gt;

&lt;pre class="brush: js;"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
    hs.graphicsDir = '/sites/tconte/My%20Pages/highslide/graphics/';
    hs.align = 'center';
    hs.transitions = ['expand', 'crossfade'];
    hs.outlineType = 'rounded-white';
    hs.fadeInOut = true;
    hs.numberPosition = 'caption';
    hs.dimmingOpacity = 0.75;
 
    // Add the controlbar
    if (hs.addSlideshow) hs.addSlideshow({
        //slideshowGroup: 'group1',
        interval: 5000,
        repeat: false,
        useControls: true,
        fixedControls: 'fit',
        overlayOptions: {
            opacity: .75,
            position: 'bottom center',
            hideOnMouseOut: true
        }
    });
&amp;lt;/script&amp;gt;&lt;/pre&gt;

&lt;p&gt;Next, you need to create the Data View Web Part. You will create it in SharePoint Designer: create an empty ASPX page, go to Data View –&amp;gt; Insert Data View, and a new Task Pane will open on the right hand side. It should show all the libraries in your SharePoint site. Select an image library, and select Show Data.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/AJAXSharePointpicturegalleryusingHighsli_D6EF/image_4.png"&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://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/AJAXSharePointpicturegalleryusingHighsli_D6EF/image_thumb_1.png" width="281" height="458" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In the Data Source Details pane that opens, you don’t need to do much because we will write most of the XSLT by hand anyway! Just select one field, like ID, and then do Insert Select Fields as… Multiple Item View. This will insert the basic control and parameters we need to then tweak the Data View by hand.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/AJAXSharePointpicturegalleryusingHighsli_D6EF/image_6.png"&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://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/AJAXSharePointpicturegalleryusingHighsli_D6EF/image_thumb_2.png" width="262" height="256" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, switch directly to Code view! You can have a look at the generated XSLT, it’s pretty simple. All we need to do is generate some really simple HTML that references the magic Highslide classes. Here’s an example:&lt;/p&gt;

&lt;pre class="brush: xml;"&gt;&amp;lt;xsl:stylesheet xmlns:x=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:d=&amp;quot;http://schemas.microsoft.com/sharepoint/dsp&amp;quot; version=&amp;quot;1.0&amp;quot; exclude-result-prefixes=&amp;quot;xsl msxsl ddwrt&amp;quot; xmlns:ddwrt=&amp;quot;http://schemas.microsoft.com/WebParts/v2/DataView/runtime&amp;quot; xmlns:asp=&amp;quot;http://schemas.microsoft.com/ASPNET/20&amp;quot; xmlns:__designer=&amp;quot;http://schemas.microsoft.com/WebParts/v2/DataView/designer&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; xmlns:SharePoint=&amp;quot;Microsoft.SharePoint.WebControls&amp;quot; xmlns:ddwrt2=&amp;quot;urn:frontpage:internal&amp;quot;&amp;gt;
&amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;no&amp;quot;/&amp;gt;
&amp;lt;xsl:decimal-format NaN=&amp;quot;&amp;quot;/&amp;gt;
    &amp;lt;xsl:param name=&amp;quot;dvt_apos&amp;quot;&amp;gt;&amp;amp;apos;&amp;lt;/xsl:param&amp;gt;
    &amp;lt;xsl:variable name=&amp;quot;dvt_1_automode&amp;quot;&amp;gt;0&amp;lt;/xsl:variable&amp;gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;
        &amp;lt;xsl:call-template name=&amp;quot;dvt_1&amp;quot;/&amp;gt;
    &amp;lt;/xsl:template&amp;gt;
    &amp;lt;xsl:template name=&amp;quot;dvt_1&amp;quot;&amp;gt;
        &amp;lt;xsl:call-template name=&amp;quot;dvt_1.body&amp;quot;&amp;gt;
            &amp;lt;xsl:with-param name=&amp;quot;Rows&amp;quot; select=&amp;quot;/dsQueryResponse/Rows/Row[1]&amp;quot; /&amp;gt;
        &amp;lt;/xsl:call-template&amp;gt;
        &amp;lt;div class=&amp;quot;hidden-container&amp;quot;&amp;gt;
        &amp;lt;xsl:call-template name=&amp;quot;dvt_1.body&amp;quot;&amp;gt;
            &amp;lt;xsl:with-param name=&amp;quot;Rows&amp;quot; select=&amp;quot;/dsQueryResponse/Rows/Row[position()&amp;amp;gt;1]&amp;quot; /&amp;gt;
        &amp;lt;/xsl:call-template&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/xsl:template&amp;gt;
    &amp;lt;xsl:template name=&amp;quot;dvt_1.body&amp;quot;&amp;gt;
        &amp;lt;xsl:param name=&amp;quot;Rows&amp;quot; /&amp;gt;
        &amp;lt;xsl:for-each select=&amp;quot;$Rows&amp;quot;&amp;gt;
            &amp;lt;xsl:call-template name=&amp;quot;dvt_1.rowview&amp;quot; /&amp;gt;
        &amp;lt;/xsl:for-each&amp;gt;
    &amp;lt;/xsl:template&amp;gt;
    &amp;lt;xsl:template name=&amp;quot;dvt_1.rowview&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;{@FileRef}&amp;quot; class=&amp;quot;highslide&amp;quot; onclick=&amp;quot;return hs.expand(this)&amp;quot;&amp;gt;&amp;lt;img border=&amp;quot;0&amp;quot; src=&amp;quot;{concat('/',@FileDirRef,'/_t/',substring(@LinkFilenameNoMenu,1,string-length(@LinkFilenameNoMenu)-4),'_',@FileType,'.jpg')}&amp;quot; alt=&amp;quot;{@NameOrTitle}&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;
        &amp;lt;div class=&amp;quot;highslide-caption&amp;quot;&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@NameOrTitle&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/xsl:template&amp;gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;/pre&gt;

&lt;p&gt;Here are a few clues as to what this XSLT does:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;It just displays thumbnails of all the images in the image library&lt;/li&gt;

  &lt;li&gt;The thumbnails are taken from the SharePoint image gallery, using the magic formula:&lt;/li&gt;

  &lt;ul&gt;
    &lt;li&gt;concat('/',@FileDirRef,'/_t/',substring(@LinkFilenameNoMenu,1,string-length(@LinkFilenameNoMenu)-4),'_',@FileType,'.jpg')&lt;/li&gt;

    &lt;li&gt;(XSLT is so obfuscated, it reminds me of Perl regular expressions!)&lt;/li&gt;
  &lt;/ul&gt;

  &lt;li&gt;The first picture is treated separately and becomes the thumbnail for the gallery; the following pictures are enclosed in a specific div that is handled by Highslide.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This should get your mostly started! You may need to perform additional configuration on the Data View, such as filterting or sorting stuff so that you get exactly the pictures you want.&lt;/p&gt;

&lt;p&gt;And of course the final result:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/AJAXSharePointpicturegalleryusingHighsli_D6EF/image_8.png"&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://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/AJAXSharePointpicturegalleryusingHighsli_D6EF/image_thumb_3.png" width="607" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9526674" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="MOSS" scheme="http://blogs.msdn.com/tconte/archive/tags/MOSS/default.aspx" /></entry><entry><title>Import your WordPress data into Oxite</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2008/12/12/import-your-wordpress-data-into-oxite.aspx" /><id>http://blogs.msdn.com/tconte/archive/2008/12/12/import-your-wordpress-data-into-oxite.aspx</id><published>2008-12-12T17:56:00Z</published><updated>2008-12-12T17:56:00Z</updated><content type="html">&lt;P&gt;Have you tried &lt;A href="http://visitmix.com/Lab/Oxite" mce_href="http://visitmix.com/Lab/Oxite"&gt;Oxite&lt;/A&gt; yet? Like what you see? Maybe you have a WordPress blog you would like to migrate to Oxite? I have written a very bare-bones import process that will allow you to import your WordPress data into Oxite. Right now I only handle Posts, but I don’t import categories yet; I’ll try to improve the process in the future.&lt;/P&gt;
&lt;P&gt;Before using the tool, you must export your data from WordPress. In the Admin interface, go to Manage and then Export. This will let you generate an XML file containing all your posts and their categories.&lt;/P&gt;
&lt;P&gt;You will then use this file to import the data into Oxite.&lt;/P&gt;
&lt;P&gt;To install the WordPress import page: download the ZIP file below, and add the files into the OxiteSite project. This will add an ImportWP.aspx page. Run Oxite and load this page. It will present you with an Upload control you can use to send your WordPress XML export.&lt;/P&gt;
&lt;P&gt;If you look at the code you will see it is very simple! The main method to create a Post in Oxite is as follows:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BACKGROUND-COLOR: #f4f4f4"&gt;
&lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   1:&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; Create_Post(&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; title, &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; bodyShort, &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; body, &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; slug)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   2:&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   3:&lt;/SPAN&gt;     IPost post = PostRepository.CreatePost();&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   4:&lt;/SPAN&gt;     &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   5:&lt;/SPAN&gt;     post.Title = title;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   6:&lt;/SPAN&gt;     post.BodyShort = bodyShort;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   7:&lt;/SPAN&gt;     post.Body = body;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   8:&lt;/SPAN&gt;     post.Slug = slug;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;   9:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  10:&lt;/SPAN&gt;     post.CreatorUserID = importUser.ID;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  11:&lt;/SPAN&gt;     post.State = (&lt;SPAN style="COLOR: #0000ff"&gt;byte&lt;/SPAN&gt;)EntityState.Normal;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  12:&lt;/SPAN&gt;     &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  13:&lt;/SPAN&gt;     post.Published = DateTime.Now.ToUniversalTime();&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  14:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  15:&lt;/SPAN&gt;     PostRepository.AddPost(post, &lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  16:&lt;/SPAN&gt;     PostRepository.SubmitChanges();&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  17:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  18:&lt;/SPAN&gt;     AreaRepository.AddPostToArea(post.ID, blogArea.ID);&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  19:&lt;/SPAN&gt;     AreaRepository.SubmitChanges();&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #606060"&gt;  20:&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;One thing you should probably change is the IUser to use to import; by default I will use “Admin”.&lt;/P&gt;
&lt;P&gt;Have fun!&lt;/P&gt;
&lt;P&gt;&lt;IFRAME style="BORDER-RIGHT: #dde5e9 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #dde5e9 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px; BORDER-LEFT: #dde5e9 1px solid; WIDTH: 240px; PADDING-TOP: 0px; BORDER-BOTTOM: #dde5e9 1px solid; HEIGHT: 66px; BACKGROUND-COLOR: #ffffff" marginWidth=0 marginHeight=0 src="http://cid-dbcccc3de233069a.skydrive.live.com/embedrowdetail.aspx/Public/ImportWP.zip" frameBorder=0 scrolling=no mce_src="http://cid-dbcccc3de233069a.skydrive.live.com/embedrowdetail.aspx/Public/ImportWP.zip"&gt;&lt;/IFRAME&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;[update]&lt;/STRONG&gt; After discussing with the Oxite team, I realized I didn't handle properly the Body and BodyShort fields. I will post an update later on with details and a new version of the migration tool!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9202380" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="ASP.NET" scheme="http://blogs.msdn.com/tconte/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Porting the Silverlight Blueprints for SharePoint to Silverlight 2 Beta2</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2008/06/16/porting-the-silverlight-blueprints-for-sharepoint-to-silverlight-2-beta2.aspx" /><link rel="enclosure" type="text/plain" length="13906" href="http://blogs.msdn.com/tconte/attachment/8605922.ashx" /><id>http://blogs.msdn.com/tconte/archive/2008/06/16/porting-the-silverlight-blueprints-for-sharepoint-to-silverlight-2-beta2.aspx</id><published>2008-06-16T19:22:00Z</published><updated>2008-06-16T19:22:00Z</updated><content type="html">&lt;P&gt;The &lt;A href="http://weblogs.asp.net/scottgu/archive/2008/06/06/silverlight-2-beta2-released.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2008/06/06/silverlight-2-beta2-released.aspx"&gt;recently released Beta2 of Silverlight 2&lt;/A&gt; has unfortunately broken the &lt;A href="http://www.ssblueprints.net/sharepoint/" mce_href="http://www.ssblueprints.net/sharepoint/"&gt;Silverlight Blueprints for SharePoint&lt;/A&gt;. The team has announced on their CodePlex site that they will release a new version for Beta2, but in the meantime, here's a summary of what I changed to make the Blueprints run on Beta2.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/PortingtheSilverlightBlueprintsforShareP_1024D/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/PortingtheSilverlightBlueprintsforShareP_1024D/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=484 alt="Yup, running on Beta2" src="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/PortingtheSilverlightBlueprintsforShareP_1024D/image_thumb.png" width=405 border=0 mce_src="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/PortingtheSilverlightBlueprintsforShareP_1024D/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;First, a caveat: I only ported the MediaViewer control, a.k.a. the "Picture Viewer Sample" because that's what I needed. Other samples may require more work!&lt;/P&gt;
&lt;P&gt;The main problem I had when I upgraded to Beta2 is the change to HttpWebRequest behavior: its delegates are now called on a background thread, which means you have to change the way it is used in the current Blueprints code (which was written for Beta1, where HttpWebRequest delegates were called on the main UI thread).&lt;/P&gt;
&lt;P&gt;Thanks to scorb's &lt;A href="http://scorbs.com/2008/04/05/silverlight-http-networking-stack-part-1-site-of-origin-communication/" mce_href="http://scorbs.com/2008/04/05/silverlight-http-networking-stack-part-1-site-of-origin-communication/"&gt;great post on Silverlight HTTP networking&lt;/A&gt;, here's what I changed:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Moved the call to request.BeginGetResponse()&amp;nbsp;from BuildPreviewBar() to the end of RequestCallback(), so that it is called on the background thread&lt;/LI&gt;
&lt;LI&gt;Hacked the ResponseCallback() method so that it calls back to the main UI thread to set up the thumbnails etc. (using System.Threading.SynchronizationContext)&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;And that's about it!&lt;/P&gt;
&lt;P&gt;Attached to this post: the modified source code for Page.xaml.cs in SL.XAML.MediaViewer.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8605922" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="MOSS" scheme="http://blogs.msdn.com/tconte/archive/tags/MOSS/default.aspx" /></entry><entry><title>Customizing Data Views using ASP.NET controls</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2008/04/29/customizing-data-views-using-asp-net-controls.aspx" /><id>http://blogs.msdn.com/tconte/archive/2008/04/29/customizing-data-views-using-asp-net-controls.aspx</id><published>2008-04-29T22:41:00Z</published><updated>2008-04-29T22:41:00Z</updated><content type="html">&lt;P&gt;I recently realized that the SharePoint Data View Web Part framework provided a means to expose standard ASP.NET data sources. This means that anything that can be exposed using a Data View Web Part can also be utilized in an ASP.NET data bound control: Lists, Document Libraries, Databases, RSS feeds, Web Services, etc. This is pretty powerful! In the following screencast, I will show you how you can create a filtered view of a Document Library; the filter is applied using a standard ASP.NET drop-down list, which is bound to a SharePoint Data Source (in this case, exposing a List).&lt;/P&gt;
&lt;P&gt;There is no particular trick involved. All you need to do is go to one of your Data View Data Sources, and select the "Insert Data Source" option. You can then insert any ASP.NET control and bind it to this data source. You can use all of the usual properties, typically in this example, I will set the drop-down list's AutoPostBack property to true, so that the page is automatically refreshed when I select one of the items.&lt;/P&gt;
&lt;P&gt;Another key point is of course how to pass the selected value on to a Data View: you cannot use Web Part connections, since the source control is not a Web Part. But the Data View allows you to define custom input parameters, and the source of such a parameter can be a Control, which is how we connect our drop-down list to the Data View filter.&lt;/P&gt;
&lt;P&gt;This technique allows you to build seriously complex interfaces without a single line of code!&lt;/P&gt;
&lt;P&gt;Here's the embedded Flash version of the screencast. You can also &lt;A href="http://www.screencast.com/t/QB0KJt79X" mce_href="http://www.screencast.com/t/QB0KJt79X"&gt;download the full WMV version&lt;/A&gt; (27 MB).&lt;/P&gt;
&lt;OBJECT height=318 width=400 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&gt;&lt;PARAM NAME="_cx" VALUE="10583"&gt;&lt;PARAM NAME="_cy" VALUE="8414"&gt;&lt;PARAM NAME="FlashVars" VALUE=""&gt;&lt;PARAM NAME="Movie" VALUE="http://content.screencast.com/bootstrap.swf"&gt;&lt;PARAM NAME="Src" VALUE="http://content.screencast.com/bootstrap.swf"&gt;&lt;PARAM NAME="WMode" VALUE="Window"&gt;&lt;PARAM NAME="Play" VALUE="-1"&gt;&lt;PARAM NAME="Loop" VALUE="-1"&gt;&lt;PARAM NAME="Quality" VALUE="High"&gt;&lt;PARAM NAME="SAlign" VALUE=""&gt;&lt;PARAM NAME="Menu" VALUE="-1"&gt;&lt;PARAM NAME="Base" VALUE=""&gt;&lt;PARAM NAME="AllowScriptAccess" VALUE="always"&gt;&lt;PARAM NAME="Scale" VALUE="ShowAll"&gt;&lt;PARAM NAME="DeviceFont" VALUE="0"&gt;&lt;PARAM NAME="EmbedMovie" VALUE="0"&gt;&lt;PARAM NAME="BGColor" VALUE="FFFFFF"&gt;&lt;PARAM NAME="SWRemote" VALUE=""&gt;&lt;PARAM NAME="MovieData" VALUE=""&gt;&lt;PARAM NAME="SeamlessTabbing" VALUE="1"&gt;&lt;PARAM NAME="Profile" VALUE="0"&gt;&lt;PARAM NAME="ProfileAddress" VALUE=""&gt;&lt;PARAM NAME="ProfilePort" VALUE="0"&gt;&lt;PARAM NAME="AllowNetworking" VALUE="all"&gt;&lt;PARAM NAME="AllowFullScreen" VALUE="true"&gt;
         &lt;embed src="http://content.screencast.com/bootstrap.swf" quality="high" bgcolor="#FFFFFF" width="400" height="318" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/media/914c65ee-1a2e-4548-be87-583f1b30adc4_8b6c175d-1d05-47fb-a59e-48c5d7625a6f_static_0_0_Thumbnail.gif&amp;content=http://content.screencast.com/media/3a7b5d74-bc00-4385-81d1-4e114aded7dc_8b6c175d-1d05-47fb-a59e-48c5d7625a6f_static_0_0_DataBound.swf&amp;width=400&amp;height=318" allowFullScreen="true" scale="showall"&gt;&lt;/embed&gt; &lt;/OBJECT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8438916" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author></entry><entry><title>ASP.NET MVC Framework</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2007/12/03/asp-net-mvc-framework.aspx" /><id>http://blogs.msdn.com/tconte/archive/2007/12/03/asp-net-mvc-framework.aspx</id><published>2007-12-03T17:39:00Z</published><updated>2007-12-03T17:39:00Z</updated><content type="html">&lt;P&gt;I am fond of &lt;A href="http://en.wikipedia.org/wiki/Model-view-controller" mce_href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;MVC&lt;/A&gt;. I have done my fair share of Java programming for the Web, and this pattern is nearly ubiquitous in Java-based Web frameworks; I have used &lt;A href="http://struts.apache.org/" mce_href="http://struts.apache.org/"&gt;Struts&lt;/A&gt; quite a bit, and I used it as the basis for the &lt;A href="http://www.pas.net/archives/000129.html" mce_href="http://www.pas.net/archives/000129.html"&gt;2004 Olympic Games&lt;/A&gt; Web site. &lt;A href="http://www.springframework.org/" mce_href="http://www.springframework.org/"&gt;Spring&lt;/A&gt;, &lt;A href="http://www.opensymphony.com/webwork/" mce_href="http://www.opensymphony.com/webwork/"&gt;WebWork&lt;/A&gt;, are other Java MVC frameworks. I find it fascinating that such an old pattern, dating back to the Xerox Smalltalk era (1979, says WikiPedia), is so well suited to developing applications for the Web.&lt;/P&gt;
&lt;P&gt;Microsoft has followed a very different path with its &lt;A href="http://www.asp.net/" mce_href="http://www.asp.net/"&gt;ASP.NET&lt;/A&gt; Web Forms framework. Their goal was not to select and utilize a pattern that would match the actual implementation of the Web, with its HTTP/HTML duality that closely matches the Controller and View layers... The goal was to abstract this implementation completely, and reproduce a programming model that would match their most popular programming environment, Visual Basic.&lt;/P&gt;
&lt;P&gt;In this sense, ASP.NET Web Forms are simply amazing. You can forget completely about HTML forms and HTTP query parameters, hiding input fields to maintain state, etc. Everything is taken care of for you. You can start programming for the Web exactly as you did in VB for Windows applications. It's very clever.&lt;/P&gt;
&lt;P&gt;However, I have always been a little bit uneasy around ASP.NET Web Forms compared to an MVC environment, probably because I don't have a VB background, but rather a pure Web past, i.e. I started writing CGI scripts for NCSA Server way before Apache even existed, and I think my first CGI scripts were written in Unix shell scripts, before I discovered Perl.&lt;/P&gt;
&lt;P&gt;It seems I'm not the only one to find some shortcomings to ASP.NET Web Forms, and MVP Rick Strahl describes his view in detail in this blog entry: &lt;A href="http://www.west-wind.com/weblog/posts/198731.aspx" mce_href="http://www.west-wind.com/weblog/posts/198731.aspx"&gt;What's Ailing ASP.NET Web Forms - Rick Strahl's Web Log&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;This is why I am very interested by the new &lt;A href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx"&gt;ASP.NET MVC Framework&lt;/A&gt; that Scott Guthrie announced in October. I think it looks like a fantastic tool to build complex Web sites, and it will allow ASP.NET developers to use a very mature and well-known architectural pattern for their Web developments. I will try to get my hands on the public preview as soon as it's available, hopefully before the end of the year.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx"&gt;ScottGu's ASP.NET MVC Framework overview Part 1&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx"&gt;ScottGu's ASP.NET MVC Framework overview Part 2&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;(cross-posted to my &lt;A class="" href="http://www.pas.net/archives/000173.html" mce_href="http://www.pas.net/archives/000173.html"&gt;personal blog&lt;/A&gt;)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6645930" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="ASP.NET" scheme="http://blogs.msdn.com/tconte/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>.Net Adventures : 10 awesome Windows Live Writer plugins for developers and bloggers</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2007/10/06/net-adventures-10-awesome-windows-live-writer-plugins-for-developers-and-bloggers.aspx" /><id>http://blogs.msdn.com/tconte/archive/2007/10/06/net-adventures-10-awesome-windows-live-writer-plugins-for-developers-and-bloggers.aspx</id><published>2007-10-06T16:40:03Z</published><updated>2007-10-06T16:40:03Z</updated><content type="html">&lt;p&gt;More cool plug-ins for Windows Live Writer! Blog &amp;amp; prettify your code!&lt;/p&gt; &lt;p&gt;&lt;a href="http://devintelligence.com/blogs/netadventures/archive/2007/10/05/10-plugins-for-windows-live-writer.aspx"&gt;.Net Adventures : 10 awesome Windows Live Writer plugins for developers and bloggers&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5315296" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author></entry><entry><title>Live Search Web Part, Part 2</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2007/10/02/live-search-web-part-part-2.aspx" /><id>http://blogs.msdn.com/tconte/archive/2007/10/02/live-search-web-part-part-2.aspx</id><published>2007-10-02T14:48:00Z</published><updated>2007-10-02T14:48:00Z</updated><content type="html">&lt;P&gt;I realized that it may not be immediately obvious to everybody how you can customize the MOSS Search Center to add the Live Search Web Part I blogged about. It is really very simple.&lt;/P&gt;
&lt;P&gt;The Theory: all you need to do is to create new "Live" tabs on the Search Center (one for Search and one for Results), plus the corresponding "Search" and "Results" pages (all from the Web interface). Don't forget to modify the Search Boxes to point to the corresponding new pages. Then, you just import the attached Web Part on to your Results pages, and it will automatically use the current query and display the results in the Search Center.&lt;/P&gt;
&lt;P&gt;The Practice: here's a quick screencast that shows how to do it: &lt;A href="http://screencast.com/t/CYzcXjXULng" mce_href="http://screencast.com/t/CYzcXjXULng"&gt;configuring the Live Search Web Part&lt;/A&gt; on screencast.com!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5241529" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="MOSS" scheme="http://blogs.msdn.com/tconte/archive/tags/MOSS/default.aspx" /></entry><entry><title>Live Search Web Part</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2007/10/02/live-search-web-part.aspx" /><link rel="enclosure" type="application/octet-stream" length="8542" href="http://blogs.msdn.com/tconte/attachment/5241281.ashx" /><id>http://blogs.msdn.com/tconte/archive/2007/10/02/live-search-web-part.aspx</id><published>2007-10-02T14:14:00Z</published><updated>2007-10-02T14:14:00Z</updated><content type="html">&lt;p&gt;I have pre-configured a Web Part for MOSS that you can just drop on to a Search Center results page. It will run the current query on Live Search and display the results. It is built using SharePoint Designer, the Data Form Web Part, and the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb251794.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/bb251794.aspx"&gt;Live Search SOAP API&lt;/a&gt;. It automatically retrieves the current search keywords from the Query String, and you can also edit a couple of static parameters in the .webpart file.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/LiveSearchWebPart_AA42/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/LiveSearchWebPart_AA42/image_2.png"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/LiveSearchWebPart_AA42/image_thumb.png" style="border-width: 0px;" alt="image" mce_src="http://blogs.msdn.com/blogfiles/tconte/WindowsLiveWriter/LiveSearchWebPart_AA42/image_thumb.png" border="0" height="484" width="573"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Nota bene: the Web Part is contained in the MSN_Search_Service.webpart file attached to this post: 8 KB only, and no code required!&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5241281" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="MOSS" scheme="http://blogs.msdn.com/tconte/archive/tags/MOSS/default.aspx" /></entry><entry><title>Blogging tools</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2007/09/14/blogging-tools.aspx" /><id>http://blogs.msdn.com/tconte/archive/2007/09/14/blogging-tools.aspx</id><published>2007-09-14T15:50:29Z</published><updated>2007-09-14T15:50:29Z</updated><content type="html">&lt;p&gt;In order to write the previous post, I used two tools that make the work much easier:&lt;/p&gt; &lt;p&gt;&lt;a href="http://get.live.com/betas/writer_betas"&gt;Windows Live Writer&lt;/a&gt; is a cool tool from the Live team to help you write blog posts. It automatically detects your Blog APIs (like MetaWeblog) as well as your style sheets, and allows you to write your posts in a real WYSIWYG environment. Much better than all the Web-based blog posting interfaces! Download it via the brand new &lt;a href="http://get.live.com/wl/all"&gt;Windows Live&lt;/a&gt; unified installer!&lt;/p&gt; &lt;p&gt;&lt;a href="http://manoli.net/csharpformat/"&gt;c# code format&lt;/a&gt; is a nice online tool that will format and color-code your C# / VB / *ML source code for posting on the Web. This is how I formatted the code snippets in my previous post. Nice!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4910322" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="Blog" scheme="http://blogs.msdn.com/tconte/archive/tags/Blog/default.aspx" /></entry><entry><title>Batch loading InfoPath Forms in SharePoint 2007</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2007/09/14/batch-loading-infopath-forms-in-sharepoint-2007.aspx" /><id>http://blogs.msdn.com/tconte/archive/2007/09/14/batch-loading-infopath-forms-in-sharepoint-2007.aspx</id><published>2007-09-14T14:59:52Z</published><updated>2007-09-14T14:59:52Z</updated><content type="html">&lt;p&gt;I have recently been asked to batch load a bunch of InfoPath Forms into a SharePoint Server for access via Forms Server. The customer had a database extract, in the form of a CSV file, and they wanted to convert this data into pre-filled forms, and then load the forms into SharePoint Server. They also wanted to apply some specific ACLs on the forms, because they contained some confidential content.&lt;/p&gt; &lt;p&gt;I looked a little bit around for a ready-made solution, but couldn't find an easy way to use CSV data to pre-generate InfoPath Forms &amp;amp; upload them to SharePoint, so I decided to write a little C# program to solve the problem.&lt;/p&gt; &lt;p&gt;Basically, I divided the problem in 3 chunks:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Convert the CSV file into generic XML  &lt;li&gt;Convert the generic XML into proper InfoPath XML using an XSLT  &lt;li&gt;Upload the generated XML file into SharePoint and modify the ACLs programmatically &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;1. Converting the CSV into XML&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I could probably just use Excel's XML capabilities to do this, but I wanted to automate all the steps in a single program. After digging a bit around the Web, I found this simple solution: &lt;a href="http://msdn2.microsoft.com/en-us/library/aa302293.aspx"&gt;XmlCsvReader&lt;/a&gt; on MSDN (and a &lt;a href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=DDE579F1-836A-4562-A3CB-57A7DBBEBAE0"&gt;slightly newer&lt;/a&gt; version on CodePlex). It's an implementation of an XmlReader that reads CSV input and generates an XML stream. It's really nifty and allows you to convert from CSV to XML very simply:&lt;/p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;XmlDocument doc = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();
XmlCsvReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlCsvReader(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;"file:///C:/temp/StatusReportData.csv"&lt;/span&gt;), Encoding.UTF8, doc.NameTable);
reader.FirstRowHasColumnNames = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
doc.Load(reader);&lt;/pre&gt;
&lt;p&gt;I started with this data:&lt;/p&gt;&lt;pre&gt;Date,Project,Prepared By,Manager,E-Mail,Department
1-1-2007,1,Thomas Conté,Harry Cover,tconte@microsoft.com,Finance
2-1-2007,2,Bernard Barnier,Harry Cover,bbarnier@microsoft.com,Finance
3-1-2007,3,Charles Duchemin,Harry Cover,cduchemin@microsoft.com,Finance
4-1-2007,1,Ludovic Cruchot,Harry Cover,lcruchot@microsoft.com,HR
5-1-2007,2,Claude Ratinier,Harry Cover,cratinier@microsoft.com,HR
6-1-2007,3,Jean Durand,Paul Dugenou,jdurand@microsoft.com,HR
7-1-2007,1,Paul Martin,Paul Dugenou,pmartin@microsoft.com,HR
8-1-2007,2,Gaston Lagaffe,Paul Dugenou,glagaffe@microsoft.com,IT
9-1-2007,3,Paul Marcel,Paul Dugenou,pmarcel@microsoft.com,IT
10-1-2007,1,Marcel Paul,Paul Dugenou,mpaul@microsoft.com,IT
&lt;/pre&gt;
&lt;p&gt;And XmlCsvReader generates an XML document that looks like this:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&amp;lt;root&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Date&amp;gt;1-1-2007&amp;lt;/Date&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Project&amp;gt;1&amp;lt;/Project&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Prepared_x0020_By&amp;gt;Thomas Conté&amp;lt;/Prepared_x0020_By&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Manager&amp;gt;Harry Cover&amp;lt;/Manager&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;E-Mail&amp;gt;tconte@microsoft.com&amp;lt;/E-Mail&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Department&amp;gt;Finance&amp;lt;/Department&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/row&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Date&amp;gt;2-1-2007&amp;lt;/Date&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Project&amp;gt;2&amp;lt;/Project&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Prepared_x0020_By&amp;gt;Bernard Barnier&amp;lt;/Prepared_x0020_By&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Manager&amp;gt;Harry Cover&amp;lt;/Manager&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;E-Mail&amp;gt;bbarnier@microsoft.com&amp;lt;/E-Mail&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Department&amp;gt;Finance&amp;lt;/Department&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/row&amp;gt;&lt;br&gt;&amp;lt;/root&amp;gt;&lt;/pre&gt;
&lt;p&gt;The complete document contains one row element for each line in the original CSV file. Now I need to break up this document in chunks, and convert each row element into a properly formatted InfoPath XML document.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;2. Converting the XML into an InfoPath document&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;An InfoPath document, or form, is just a regular XML file, with a couple of XML Processing Instructions that indicate that the XML file is indeed an InfoPath form. These two expressions, that must be present at the top of the XML file, are:&lt;/p&gt;&lt;pre&gt;&amp;lt;?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"&amp;gt;&lt;/pre&gt;
&lt;p&gt;and the mso-infoPathSolution instruction that indicates, among other things, the location of the for template.&lt;/p&gt;
&lt;p&gt;Now, our base data being XML and the target InfoPath document being XML as well, the easiest way to convert from one to the other is of course to use an XSL Transformation (XSLT). This XSLT will simply output the InfoPath XML document, while inserting the data from our generic XML file in the right places. The easiest way to create the XSLT is to start from the target InfoPath XML: use the InfoPath client (or SharePoint Forms Server) to create an empty form. Then open the resulting XML file using your favorite text editor, and copy the whole XML skeleton into the body of your XSLT. The result, including the processing instructions, will look like this:&lt;/p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="UTF-8"&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;xsl:stylesheet&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;xmlns:xsl&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/XSL/Transform"&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;xsl:template&lt;/span&gt; &lt;span class="attr"&gt;match&lt;/span&gt;&lt;span class="kwrd"&gt;="row"&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;xsl:processing-instruction&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="mso-infoPathSolution"&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;xsl:text&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;name="urn:schemas-microsoft-com:office:infopath:Status-Reports:-myXSD-2005-09-22T20-42-56" solutionVersion="1.0.0.3" productVersion="12.0.0.0" PIVersion="1.0.0.0" href="http://w2k3sp2-spdev/SiteDirectory/infopath/Status%20Reports/Forms/template.xsn"&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:text&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;xsl:processing-instruction&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;xsl:processing-instruction&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="mso-application"&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;xsl:text&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;progid="InfoPath.Document" versionProgid="InfoPath.Document.2"&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:text&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;xsl:processing-instruction&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;my:statusReport&lt;/span&gt; &lt;span class="attr"&gt;xmlns:xsi&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt; &lt;span class="attr"&gt;xmlns:xhtml&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt; &lt;span class="attr"&gt;xmlns:my&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-09-22T20:42:56"&lt;/span&gt; &lt;span class="attr"&gt;xmlns:xd&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/office/infopath/2003"&lt;/span&gt; &lt;span class="attr"&gt;xml:lang&lt;/span&gt;&lt;span class="kwrd"&gt;="en-US"&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;my:reportDate&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;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="Date"&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;my:reportDate&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;my:projectName&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;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="Project"&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;my:projectName&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;my:preparedBy&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;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="Prepared_x0020_By"&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;my:preparedBy&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;my:emailAddress&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;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="E-Mail"&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;my:emailAddress&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;my:managerName&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;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="Manager"&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;my:managerName&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;my:departmentName&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;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="Department"&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;my:departmentName&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;my:summary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;my:summary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Note that we insert our original XML file element values into the XSLT output, using xsl:value-of in the right places. Now, all we need to do is to actually apply this XSLT to our XML document:&lt;/p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;            XslCompiledTransform transform = &lt;span class="kwrd"&gt;new&lt;/span&gt; XslCompiledTransform();
            transform.Load(&lt;span class="str"&gt;"CSV2InfoPath.xslt"&lt;/span&gt;);

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (XmlNode n &lt;span class="kwrd"&gt;in&lt;/span&gt; doc.DocumentElement.ChildNodes)
            {
                &lt;span class="kwrd"&gt;string&lt;/span&gt; fileName = n.ChildNodes[2].InnerText + &lt;span class="str"&gt;".xml"&lt;/span&gt;;
                &lt;span class="kwrd"&gt;string&lt;/span&gt; filePath = "C:\\temp\\" + fileName;
                StreamWriter writer = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamWriter(filePath);
                transform.Transform(n, &lt;span class="kwrd"&gt;null&lt;/span&gt;, writer);
                writer.Close();
&lt;/pre&gt;
&lt;p&gt;The key here is the XslCompiledTransform.Transform() method, that actually executes the transformation. Note that we iterate over our document's child nodes (i.e. row elements) and apply the XSLT to each chunk. In this example, the result is written to a temporary file on the disk, so that you can actually test the result by opening it with InfoPath.&lt;/p&gt;
&lt;p&gt;Congratulations, you just converted a CSV data export into a bunch of InfoPath forms!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;3. Upload the forms to SharePoint&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The last part of our little operation is to actually publish the forms to a SharePoint Server, so that employees can open and update the forms using Forms Server (allowing them to complete these tasks using a Web browser, instead of having to edit the form on their desktop with the InfoPath client).&lt;/p&gt;
&lt;p&gt;Since my batch program was intended to run on the SharePoint server itself, I was able to use the SharePoint API directly to upload the form. The code is fairly straightforward:&lt;/p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;                SPWeb web = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite(&lt;span class="str"&gt;"http://w2k3sp2-spdev/SiteDirectory/infopath"&lt;/span&gt;).OpenWeb();

                FileStream fStream = File.OpenRead(filePath);
                &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] contents = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;[fStream.Length];
                fStream.Read(contents, 0, (&lt;span class="kwrd"&gt;int&lt;/span&gt;)fStream.Length);
                fStream.Close();

                web.Files.Add(&lt;span class="str"&gt;"Status%20Reports/"&lt;/span&gt; + fileName, contents);
&lt;/pre&gt;
&lt;p&gt;The last part is a bit more tricky: using SharePoint 2007 new Role Assignment API to automatically apply security settings on the uploaded forms; the idea being, for example, to make sure each form can only be edited by the corresponding employee. The code will look like this:&lt;/p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;                SPFile newFile = web.GetFile(&lt;span class="str"&gt;"Status%20Reports/"&lt;/span&gt; + fileName);
                newFile.Item.BreakRoleInheritance(&lt;span class="kwrd"&gt;false&lt;/span&gt;);
                SPRoleDefinitionCollection roleDefs = web.RoleDefinitions;
                SPRoleAssignmentCollection roleAssignments = newFile.Item.RoleAssignments;
                SPRoleAssignment newAssignment = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPRoleAssignment(&lt;span class="str"&gt;"W2K3SP2-SPDEV\\SPUser"&lt;/span&gt;, &lt;span class="str"&gt;"email@toto.com"&lt;/span&gt;, &lt;span class="str"&gt;"SP User"&lt;/span&gt;, &lt;span class="str"&gt;""&lt;/span&gt;);
                newAssignment.RoleDefinitionBindings.Add(roleDefs[&lt;span class="str"&gt;"Read"&lt;/span&gt;]);
                roleAssignments.Add(newAssignment);
&lt;/pre&gt;
&lt;p&gt;In this code, we first use BreakRoleInheritance() to stop inheriting the ACLs from the library. We then retrieve the current site Role Definitions (i.e. "Read", "Contribute", "Full Control", etc.) We then create a new Role Assignment (for a test user called SPUser), apply the "Read" role to it, and add it to the RoleAssignments collection for the form we just uploaded.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4909459" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="MOSS" scheme="http://blogs.msdn.com/tconte/archive/tags/MOSS/default.aspx" /></entry><entry><title>More waterworks</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/tconte/archive/2007/07/28/more-waterworks.aspx" /><id>http://blogs.msdn.com/tconte/archive/2007/07/28/more-waterworks.aspx</id><published>2007-07-28T19:19:23Z</published><updated>2007-07-28T19:19:23Z</updated><content type="html">&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;
 &lt;a href="http://www.flickr.com/photos/tomconte/928673569/" title="photo sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1199/928673569_f028b43803.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;
 &lt;br /&gt;
 &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;
  &lt;a href="http://www.flickr.com/photos/tomconte/928673569/"&gt;More waterworks&lt;/a&gt;
  &lt;br /&gt;
  Originally uploaded by &lt;a href="http://www.flickr.com/people/tomconte/"&gt;tomconte&lt;/a&gt;
 &lt;/span&gt;
&lt;/div&gt;
In the Seattle Center. It's a beautiful day!
&lt;br clear="all" /&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4103211" width="1" height="1"&gt;</content><author><name>tconte</name><uri>http://blogs.msdn.com/members/tconte.aspx</uri></author><category term="TechReady" scheme="http://blogs.msdn.com/tconte/archive/tags/TechReady/default.aspx" /></entry></feed>