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

<channel>
	<title>DotMim</title>
	<atom:link href="http://www.dotmim.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.dotmim.com</link>
	<description>Select * from Mim</description>
	<lastBuildDate>Thu, 07 Feb 2013 14:18:53 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.1</generator>
		<item>
		<title>New Life, New Blog</title>
		<link>http://www.dotmim.com/2013/02/07/new-life-new-blog/</link>
		<comments>http://www.dotmim.com/2013/02/07/new-life-new-blog/#comments</comments>
		<pubDate>Thu, 07 Feb 2013 14:18:53 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sans Catégorie]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/?p=996</guid>
		<description><![CDATA[Bonjour à tous !
Je migre vers MSDN. Et oui, je viens d&#8217;intégrer la division DPE de Microsoft France, vous me retrouverez donc à l&#8217;adresse :
http://blogs.msdn.com/b/mim/
A tout de suite  
Seb
]]></description>
			<content:encoded><![CDATA[<p>Bonjour à tous !</p>
<p>Je migre vers MSDN. Et oui, je viens d&rsquo;intégrer la division DPE de Microsoft France, vous me retrouverez donc à l&rsquo;adresse :</p>
<p><a href="http://blogs.msdn.com/b/mim/">http://blogs.msdn.com/b/mim/</a></p>
<p>A tout de suite <img src='http://www.dotmim.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Seb</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2013/02/07/new-life-new-blog/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows 8 WinRT SQLite</title>
		<link>http://www.dotmim.com/2012/09/14/windows-8-winrt-sqlite/</link>
		<comments>http://www.dotmim.com/2012/09/14/windows-8-winrt-sqlite/#comments</comments>
		<pubDate>Fri, 14 Sep 2012 08:52:49 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[WinRT]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/?p=966</guid>
		<description><![CDATA[Depuis Windows 8 Preview, nous avons accès à une base de données déployable et interne, facile d’accès directement dans votre package WinRT.
On aurait pu s’attendre à voir débarquer SQL Server Compact, mais c’est bien SQLite qui sera supporté et accessible dans Windows 8.
Nous allons voir ici  [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis Windows 8 Preview, nous avons accès à une base de données déployable et interne, facile d’accès directement dans votre package WinRT.</p>
<p>On aurait pu s’attendre à voir débarquer SQL Server Compact, mais c’est bien SQLite qui sera supporté et accessible dans Windows 8.</p>
<p>Nous allons voir ici comment installer et travailler avec ce petit moteur de base de données extrêmement connu dans le monde du web notamment.</p>
<h2>Installation</h2>
<p>Cette première partie d’installation est inspirée d’un article écrit par <a href="http://timheuer.com/blog/">Tim Heuer</a>, que vous pouvez retrouver sur son blog, <a href="http://timheuer.com/blog/archive/2012/08/07/updated-how-to-using-sqlite-from-windows-store-apps.aspx">in english in the text</a> <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/09/wlEmoticon-smile.png" alt="Sourire" /></p>
<p>L’installation de SQLite se fait directement depuis le menu TOOLS de Visual Studio et le sous-menu Extensions And Updates.</p>
<p>Par ce biais, vous aurez accès plus tard directement aux mises à jour de SQLite, sans avoir à vous en préoccuper. Deuxième chose, ce package est capable de correctement cibler votre configuration, que ce soit x86, x64 ou ARM.</p>
<table width="400" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="400"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/Tools1.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="Tools" src="http://www.dotmim.com/wp-content/uploads/2012/09/Tools_thumb1.png" alt="Tools" width="212" height="244" border="0" /></a></td>
</tr>
</tbody>
</table>
<p>Faites une recherche sur SQLite, vous devriez trouver facilement l&rsquo;extension, qui s’installe via VSIX :</p>
<table width="400" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="133"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/ExtensionsAndUpdates.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="ExtensionsAndUpdates" src="http://www.dotmim.com/wp-content/uploads/2012/09/ExtensionsAndUpdates_thumb.png" alt="ExtensionsAndUpdates" width="244" height="170" border="0" /></a></td>
<td valign="top" width="133"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/VSIX-Installer.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="VSIX Installer" src="http://www.dotmim.com/wp-content/uploads/2012/09/VSIX-Installer_thumb.png" alt="VSIX Installer" width="244" height="198" border="0" /></a></td>
<td valign="top" width="133"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/VSIX-Installer-2.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="VSIX Installer 2" src="http://www.dotmim.com/wp-content/uploads/2012/09/VSIX-Installer-2_thumb.png" alt="VSIX Installer 2" width="244" height="195" border="0" /></a></td>
</tr>
</tbody>
</table>
<p>Il ne reste plus qu’à :</p>
<ul>
<li>Créer un projet de type Windows Store (XAML C# dans mon cas)</li>
<li>Référencer l’assembly SQLite</li>
<li>Référencer le C++ runtime. (Obligatoire si la machine cible ne le possède pas, trés rare, et qui potentiellement vous ferait échouer la validation de votre apps)</li>
</ul>
<p>&nbsp;</p>
<table width="400" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="400"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/AddReference1.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="AddReference" src="http://www.dotmim.com/wp-content/uploads/2012/09/AddReference_thumb1.png" alt="AddReference" width="644" height="275" border="0" /></a></td>
</tr>
</tbody>
</table>
<p>Avant d’aller plus loin, si vous lancez la compilation de votre projet, vous risquez fortement d’avoir deux erreurs, pour le moins explicite:</p>
<table width="400" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="400"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/ErrorBuildOnAnyCpu1.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="ErrorBuildOnAnyCpu" src="http://www.dotmim.com/wp-content/uploads/2012/09/ErrorBuildOnAnyCpu_thumb1.png" alt="ErrorBuildOnAnyCpu" width="644" height="85" border="0" /></a></td>
</tr>
</tbody>
</table>
<p>Autant SQLite va savoir déployer la bonne dll suivant votre configuration, autant il vous faudra quand même avoir en target la bonne version (x86, x64 ou ARM)</p>
<p>Exit donc la configuration si pratique ANY CPU. Dommage …</p>
<h3>Où en sommes nous ?</h3>
<p>Nous avons installé SQLite, tout du moins le moteur et la runtime, compatible avec WinRT.</p>
<p>Il nous faut maintenant un Framework d’accès à SQLite. Il en existe plusieurs et j’ai choisi pour l’instant d’utiliser un projet Github, accessible via NuGet : <a href="https://github.com/praeclarum/sqlite-net">sqlite-net</a>.</p>
<p>(Je surveille de prés aussi le projet <a href="http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki">Sytem.Data.SQlite</a> for WinRT. Il semble en bonne voie, je vous en reparle plus tard)</p>
<p>L’installation de sqlite-net est simple, elle vous rajoute 2 classes <strong>SQLite.cs</strong>, et <strong>SQLiteAsync.cs</strong></p>
<p>N’hésitez pas d’ailleurs à y jeter un coup d’œil, c’est une mine d’informations.</p>
<table width="400" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="200"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/addSQLiteNetReference.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="addSQLiteNetReference" src="http://www.dotmim.com/wp-content/uploads/2012/09/addSQLiteNetReference_thumb.png" alt="addSQLiteNetReference" width="478" height="244" border="0" /></a></td>
<td valign="top" width="200"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/sqliteclasses.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="sqliteclasses" src="http://www.dotmim.com/wp-content/uploads/2012/09/sqliteclasses_thumb.png" alt="sqliteclasses" width="212" height="244" border="0" /></a></td>
</tr>
</tbody>
</table>
<p>A partir de là, votre environnement de travail est prêt et vous pouvez commencer la partie la plus intéressante : votre code <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/09/wlEmoticon-smile.png" alt="Sourire" /></p>
<h1>Connexion</h1>
<p>Il faut savoir qu’ouvrir une connexion à SQLite crée un lien avec votre base de données locale mais aussi, crée la dite base de données si celle ci n’existe pas !</p>
<p>Pour créer une base de données SQLite, il vous faut cependant bien “placer” le fichier sqlite au bon endroit, soit le Windows Local Folder du package.</p>
<p>Voici un code minimaliste d’ouvertur de connexion (et donc de création de la base locale)</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="rem">// Open a new Connection to SQLite.</span>
<span class="kwrd">using</span> (var connection = <span class="kwrd">new</span> SQLite.SQLiteConnection(dbPath))
{}</pre>
<p>&nbsp;</p>
</div>
<blockquote><p>Note : J’ai eu quelques soucis avec cette méthode, notamment si vous avez un caractère unicode dans le chemin d’accès de votre package.</p>
<p>Par exemple, mon compte utilisateur contenant un accent, “Sébastien”, cette méthode d’ouverture ne fonctionne pas !</p>
<p>Je vous conseille donc de passer par la surcharge du constructeur, qui elle, fonctionne <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/09/wlEmoticon-smile.png" alt="Sourire" /></p></blockquote>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="rem">// Open a new Connection to SQLite.</span>
<span class="kwrd">using</span> (var connection = <span class="kwrd">new</span> SQLite.SQLiteConnection(dbPath, SQLite.SQLiteOpenFlags.Create | SQLite.SQLiteOpenFlags.ReadWrite))
{}</pre>
<p>&nbsp;</p>
</div>
<p>A partir de là, votre base de données est créée. Certes elle est vide pour le moment <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/09/wlEmoticon-smile.png" alt="Sourire" /></p>
<h1>Outil d’administration</h1>
<p>Pour ouvrir une base de données sqlite et l’administrer, il existe une multitude de produits. Je vous conseille <a href="http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index">SQLite Spy</a> qui est loin d’être le plus complet, mais qui est celui qui semble le plus léger et surtout qui fonctionne a peu prés correctement avec la dernière version de SQLite (si vous avez mieux, je suis preneur <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/09/wlEmoticon-smile.png" alt="Sourire" />)</p>
<p>&nbsp;</p>
<table width="400" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="400"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/image.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/09/image_thumb.png" alt="image" width="644" height="425" border="0" /></a></td>
</tr>
</tbody>
</table>
<p>Notre base de données se trouve dans le répertoire où sont stockées les packages Windows 8. (AppData / Local / Packages / ID Package / LocalState)</p>
<p>Dans mon exemple, il se trouve ici :</p>
<table width="400" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="400"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/image1.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/09/image_thumb1.png" alt="image" width="644" height="71" border="0" /></a></td>
</tr>
</tbody>
</table>
<h1>Travailler avec des tables SQLite</h1>
<p>Pour faire simple dans cette première présentation, nous allons via <a href="http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index">SQLite Spy</a>, créer une table <strong>Client</strong> et tenter de la requêter depuis notre application WinRT.</p>
<table width="400" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="400"><a href="http://www.dotmim.com/wp-content/uploads/2012/09/image2.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/09/image_thumb2.png" alt="image" width="644" height="330" border="0" /></a></td>
</tr>
</tbody>
</table>
<blockquote><p>Note : Nous verrons plus tard que sqlite-net contient des outils de mapping permettant de directement créer une table à partir d’une entité. Mais pour le moment, continuons avec les bases…</p></blockquote>
<h1>Requête de sélection non paramétrée</h1>
<p>Une fois la connexion ouverte, il suffit de :</p>
<ul>
<li>Construire une requête</li>
<li>Préparer la commande (qui renvoie un IntPtr que nous appelerons SQLite3Statement)</li>
<li>Parcourir l’ensemble des lignes retournées</li>
<li>Récupérer les valeurs</li>
<li>Finaliser la commande</li>
</ul>
<div id="codeSnippetWrapper" class="csharpcode-wrapper" style="height: 244px; width: 97.5%;">
<pre id="codeSnippet" class="csharpcode" style="height: 229px; width: 97.61%;">List&lt;Client&gt; lstClients = <span class="kwrd">new</span> List&lt;Client&gt;();

<span class="rem">// Open a new Connection to SQLite.</span>
<span class="kwrd">using</span> (var connection = <span class="kwrd">new</span> SQLite.SQLiteConnection(dbPath, SQLite.SQLiteOpenFlags.Create | SQLite.SQLiteOpenFlags.ReadWrite))
{

    <span class="kwrd">const</span> <span class="kwrd">string</span> querySelect = <span class="str">"Select * from Client"</span>;

    Sqlite3Statement stmt = Sqlite3Statement.Zero;
    <span class="kwrd">try</span>
    {
        <span class="rem">// Prepare command</span>
        stmt = SQLite3.Prepare2(connection.Handle, querySelect);

        <span class="rem">// While row is available</span>
        <span class="kwrd">while</span> (SQLite3.Step(stmt) == SQLite3.Result.Row)
        {
            Client client = <span class="kwrd">new</span> Client();

            <span class="rem">// Get values</span>
            client.ClientId = SQLite3.ColumnInt(stmt, 0);
            client.FirstName = SQLite3.ColumnString(stmt, 1);
            client.LastName = SQLite3.ColumnString(stmt, 2);
            client.CreationDate = DateTime.Parse(SQLite3.ColumnString(stmt, 3));
            client.Age = SQLite3.ColumnInt(stmt, 4);

            lstClients.Add(client);

        }
    }
    <span class="kwrd">catch</span> (SQLiteException ex)
    {
        Debug.WriteLine(ex.Message);
    }
    <span class="kwrd">finally</span>
    {
        <span class="rem">// Finalize statement</span>
        SQLite3.Finalize(stmt);
    }
}</pre>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<h1>Requête de sélection non paramétrée</h1>
<p>Le passage de paramètre est relativement classique avec</p>
<p>D’une part la construction de la requête prenant un paramètre, représenté par un point d’interrogation :</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">Select</span> * <span class="kwrd">from</span> Client <span class="kwrd">where</span> LastName = ?</pre>
<p>&nbsp;</p>
</div>
<p>D’autre part un mécanisme de Bind de paramètre coté code (le paramètre étant repéré via son index, attention à ce détail)</p>
<blockquote><p>Attention : Index de base 1 !!!!</p></blockquote>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="rem">// Bind parameter</span>
 SQLite3.BindText(stmt, 1, lastName, -1, <span class="kwrd">new</span> IntPtr(-1));
 SQLite3.BindInt(stmt, 2, 12);
 SQLite3.BindDouble(stmt, 3, (<span class="kwrd">double</span>)12);
 SQLite3.BindNull(stmt, 4);</pre>
<p>&nbsp;</p>
</div>
<p>sqlite-net apporte une méthode globable, plus simple à utiliser et qui prend en compte tous les types de données classiques:</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode">SQLiteCommand.BindParameter(stmt, 1, lastName, <span class="kwrd">false</span>);</pre>
<p>&nbsp;</p>
</div>
<p>Le code de récupération des clients par le nom devient du coup :</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode">List&lt;Client&gt; lstClients = <span class="kwrd">new</span> List&lt;Client&gt;();

<span class="rem">// Open a new Connection to SQLite.</span>
<span class="kwrd">using</span> (var connection = <span class="kwrd">new</span> SQLite.SQLiteConnection(dbPath, SQLite.SQLiteOpenFlags.Create | SQLite.SQLiteOpenFlags.ReadWrite))
{
    <span class="kwrd">const</span> <span class="kwrd">string</span> querySelect = <span class="str">"Select * from Client where LastName = ?"</span>;

    Sqlite3Statement stmt = Sqlite3Statement.Zero;
    <span class="kwrd">try</span>
    {
        <span class="rem">// Prepare command</span>
        stmt = SQLite3.Prepare2(connection.Handle, querySelect);

        <span class="rem">// Bind parameter</span>
        SQLiteCommand.BindParameter(stmt, 1, lastName, connection.StoreDateTimeAsTicks);

    
        <span class="rem">// While row is available</span>
        <span class="kwrd">while</span> (SQLite3.Step(stmt) == SQLite3.Result.Row)
        {
            Client client = <span class="kwrd">new</span> Client();

            <span class="rem">// Get values</span>
            client.ClientId = SQLite3.ColumnInt(stmt, 0);
            client.FirstName = SQLite3.ColumnString(stmt, 1);
            client.LastName = SQLite3.ColumnString(stmt, 2);
            <span class="kwrd">string</span> date = SQLite3.ColumnString(stmt, 3);
            client.CreationDate = String.IsNullOrEmpty(date) ? (DateTime?)<span class="kwrd">null</span> : DateTime.Parse(date);
            client.Age = SQLite3.ColumnInt(stmt, 4);

            lstClients.Add(client);
        }
    }
    <span class="kwrd">catch</span> (SQLiteException ex)
    {
        Debug.WriteLine(ex.Message);
    }
    <span class="kwrd">finally</span>
    {
        <span class="rem">// Finalize statement</span>
        SQLite3.Finalize(stmt);
    }
}</pre>
<p>&nbsp;</p>
</div>
<p>Dans une prochaine partie, nous verrons plus longuement les particularités de SQLite dans WinRT, un peu de mapping OR et quelques astuces relatives aux performances <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/09/wlEmoticon-smile.png" alt="Sourire" /></p>
<p>Happy coding avec SQLite et WinRT !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/09/14/windows-8-winrt-sqlite/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Rank, Pivot, CTE, EAV</title>
		<link>http://www.dotmim.com/2012/08/09/rank-pivot-cte-eav/</link>
		<comments>http://www.dotmim.com/2012/08/09/rank-pivot-cte-eav/#comments</comments>
		<pubDate>Thu, 09 Aug 2012 15:15:30 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sans Catégorie]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/?p=944</guid>
		<description><![CDATA[Aujourd’hui, je veux pouvoir extraire des données d’une table EAV (Entity Attribute Value), les mettre à plat, et en plus prendre la données la plus récente, chaque attribut étant historisé.
Voici la structure de la table :

Et voici un jeu de données 

On note que le client 1 possède un attribut  [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd’hui, je veux pouvoir extraire des données d’une table EAV (Entity Attribute Value), les mettre à plat, et en plus prendre la données la plus récente, chaque attribut étant historisé.</p>
<p>Voici la structure de la table :</p>
<p><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image7.png" width="619" height="227" /></p>
<p>Et voici un jeu de données </p>
<p><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image8.png" width="653" height="193" /></p>
<p>On note que le client 1 possède un attribut 1001 qui représente sa taille.</p>
<p>Il possède deux fois l’attribut 1000 qui représente le poids, mais à des dates différentes.</p>
<p>Le résultat qu’on souhaite obtenir est l’ensemble de nos clients, avec sur chaque ligne, le poids et la taille, de date la plus récente.</p>
<p>Pour notre client 1, nous devons avoir une ligne du genre :</p>
<p><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image9.png" width="494" height="79" /></p>
<p>Pour ce faire, nous allons utiliser :</p>
<p><strong><a href="http://msdn.microsoft.com/en-us/library/ms176102.aspx">La fonction RANK</a></strong> : elle nous permettra de ne retenir que les données de RANK 1 partitionnées sur le ClientID et sur le DateCreation</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">Select</span> ClientId, AttributId,  Valeur,<br />       RANK() <span class="kwrd">over</span>(Partition <span class="kwrd">by</span> ClientId, AttributId <span class="kwrd">Order</span> <span class="kwrd">By</span> DateCreation <span class="kwrd">Desc</span> ) R<br /><span class="kwrd">From</span> Client<br /></pre>
<p></div>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/08/image10.png"><u><font color="#db5104"></font></u><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image_thumb4.png" width="542" height="170" /></a>Grâce à ce rank, nous avons bien les données qui nous intéressent, au rang 1 pour chaque attribut de chaque client</p>
<p><strong><a href="http://msdn.microsoft.com/en-us/library/ms190766(v=SQL.105).aspx">Une Common Table Expression</a></strong> : Elle nous permettra de récupérer de la requête RANK uniquement les RANK = 1</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">With</span> C (ClientId, AttributId, Valeur, <span class="kwrd">Position</span>) <span class="kwrd">as</span><br />(<br />    <span class="kwrd">Select</span>    ClientId, AttributId,  Valeur, <br />            RANK() <span class="kwrd">over</span>(Partition <span class="kwrd">by</span> ClientId, AttributId <span class="kwrd">Order</span> <span class="kwrd">By</span> DateCreation <span class="kwrd">Desc</span> ) <br />    <span class="kwrd">From</span> Client<br />    <span class="kwrd">Where</span> ExpId = 1<br />)<br /><span class="kwrd">Select</span> * <span class="kwrd">from</span> C <span class="kwrd">where</span> <span class="kwrd">Position</span> = 1</pre>
<p></div>
<p><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image11.png" width="446" height="152" /></p>
<p>Exit donc les données dont le RANK est supérieur à 1</p>
<p><strong><a href="http://msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx">La fonction PIVOT</a></strong> : Pour mettre tout ça en ligne. Petite astuce, le Pivot demandant un agrégat, on va utiliser le Max de la valeur. Celle ci étant unique, le tour est joué !</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">With</span> C (ClientId, AttributId, Valeur, <span class="kwrd">Position</span>) <span class="kwrd">as</span><br />(<br />    <span class="kwrd">Select</span>    ClientId, AttributId,  Valeur, <br />            RANK() <span class="kwrd">over</span>(Partition <span class="kwrd">by</span> ClientId, AttributId <span class="kwrd">Order</span> <span class="kwrd">By</span> DateCreation <span class="kwrd">Desc</span> ) <br />    <span class="kwrd">From</span> Client<br />)<br /><span class="kwrd">Select</span> ClientId, [1000] <span class="kwrd">as</span> Poids, [1001] <span class="kwrd">as</span> Taille<br /><span class="kwrd">From</span> C Pivot (<span class="kwrd">Max</span>(Valeur) <span class="kwrd">for</span> AttributId <span class="kwrd">in</span> ([1000], [1001])) <span class="kwrd">as</span> PV<br /><span class="kwrd">Where</span> PV.<span class="kwrd">Position</span> = 1 </pre>
<p></div>
<p><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image12.png" width="404" height="112" /></p>
<p>Et voilà, vous avez bien, en lignes, les données les plus récentes d’une table EAV historisée <img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/08/wlEmoticon-smile1.png" /></p>
<p>Evidemment, vous pouvez aussi vous passer de ce genre de tables, en utilisant les <a href="http://www.dotmim.com/2010/12/01/sql-server-2008-sparses-columns/">Sparses Columns</a> bien sûr !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/08/09/rank-pivot-cte-eav/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SSAS Dimensions, Multiple Foreign Keys</title>
		<link>http://www.dotmim.com/2012/08/08/ssas-dimensions-multiple-foreign-keys/</link>
		<comments>http://www.dotmim.com/2012/08/08/ssas-dimensions-multiple-foreign-keys/#comments</comments>
		<pubDate>Wed, 08 Aug 2012 09:06:12 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sans Catégorie]]></category>
		<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/?p=925</guid>
		<description><![CDATA[Je viens de passer une demie journée à essayer de comprendre ce que je considère comme un bug de SSAS.
Je n’ai pas réussi à résoudre mon problème, mais du moins, j’ai trouvé un contournement.
Voici d’abord le problème :
J’ai une dimension, disons DimClient. Chaque client est lié à 3 groupes, disons  [...]]]></description>
			<content:encoded><![CDATA[<p>Je viens de passer une demie journée à essayer de comprendre ce que je considère comme un bug de SSAS.</p>
<p>Je n’ai pas réussi à résoudre mon problème, mais du moins, j’ai trouvé un contournement.</p>
<p>Voici d’abord le problème :</p>
<p>J’ai une dimension, disons <strong>DimClient</strong>. Chaque client est lié à 3 groupes, disons <strong>DimGroup</strong>.</p>
<p>Nous avons donc dans la table DimClient, 3 foreign keys différentes, vers la table DimGroup.</p>
<p>Chaque client a :</p>
<ul>
<li>1 groupe d’origine (<strong>OriginGroupId</strong>)</li>
<li>1 groupe précédent (<strong>LastGroupId</strong>)</li>
<li>1 groupe actuel (<strong>ActualGroupId</strong>)</li>
</ul>
<p>Voici une représentation de ma Data Source View dans le designer :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image.png" alt="image" width="552" height="427" border="0" /></p>
<p>Ce que je fais maintenant n’est pas conceptuellement le plus efficace en terme de design de dimensions, mais le principe étant de mettre le focus sur le bug que j’ai rencontré.</p>
<p>Dans ma dimension <strong>DimClient</strong>, j’ai donc décidé de créer <strong>3 hiérarchies</strong>, contenant chacun le groupe adéquate.</p>
<ul>
<li>Une hiérarchie Origin</li>
<li>Une hiérarchie Last</li>
<li>Une hiérarchie Actual</li>
</ul>
<p>Voici encore une copie d’écran de ma dimension :</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/08/image1.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image_thumb.png" alt="image" width="644" height="330" border="0" /></a></p>
<p>Pour que chaque client sache faire le lien sur chaque catégorie, il est aussi nécessaire de créer les relations de mes hiérarchies.</p>
<p>C’est ce que je fais dans l’onglet adéquate, en voici la représentation :</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/08/image2.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image_thumb1.png" alt="image" width="667" height="249" border="0" /></a></p>
<p>Ok à partir de là, je lance le process de ma dimension, pour vérifier les résultats. Et là, c’est le drame !</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image3.png" alt="image" width="639" height="484" border="0" /></p>
<p>Voici les requêtes qu’il exécute :</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/08/image4.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image_thumb2.png" alt="image" width="644" height="427" border="0" /></a></p>
<p>On remarque tout de suite qu’il y a un <strong>ENORME</strong> soucis sur la requête <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/08/wlEmoticon-smile.png" alt="Sourire" /></p>
<p>J’ai essayé toutes les manipulations possibles, en passant par les incantations vaudous, le dénie, la colère et les menaces, rien y fait. Le résultat est faux et archi faux.</p>
<p>&nbsp;</p>
<h2>La solution de contournement</h2>
<p>&nbsp;</p>
<p>Et voir même la solution idéale, beaucoup plus conceptuellement adéquate.</p>
<p>En y regardant de plus prés, j’ai créé des hiérarchies de groupe dans une dimension client. Ce qui est possible mais pas élégant.</p>
<p>Pour envisager quelque chose de plus propre, on peut passer par des dimensions de type “<strong>Role Playing</strong>” qui ont pour but de se mapper à chaque groupe de mon client.</p>
<p>Tout d’abord je vire les hiérarchies de ma dimension client, et je ne laisse que les clés externes (que je met en visible = false au minimum)</p>
<p>Ensuite, il va donc falloir ajouter 3 dimensions à la structure du cube, chacune d’entre elles étant nommée correctement.</p>
<ol>
<li><strong>Origin Group</strong></li>
<li><strong>Last Group</strong></li>
<li><strong>Actual Group</strong></li>
</ol>
<p>&nbsp;</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image5.png" alt="image" width="386" height="599" border="0" /></p>
<p>Rajouter ensuite chacune des relations qui lie le Groupe à la table de fait par la référence Client Groupe</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/08/image6.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/08/image_thumb3.png" alt="image" width="644" height="206" border="0" /></a></p>
<p>Voilà, vous avez un cube qui fonctionne, et qui est correctement architecturé.</p>
<p>Il n’en reste pas moins que SSAS ne gère pas bien les multiples clés externes dans une dimension, et que cela reste pour moi un bon vieux Bug  <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/08/wlEmoticon-smile.png" alt="Sourire" /></p>
<p>Bon cube !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/08/08/ssas-dimensions-multiple-foreign-keys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSAS Default Language</title>
		<link>http://www.dotmim.com/2012/07/30/ssas-default-language/</link>
		<comments>http://www.dotmim.com/2012/07/30/ssas-default-language/#comments</comments>
		<pubDate>Mon, 30 Jul 2012 09:48:46 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/?p=905</guid>
		<description><![CDATA[Petite astuce du Jour : Comment “forcer” le langage d’une requête MDX dans un cube SSAS qui gère plusieurs langues ?
L’idée c’est d’avoir par exemple les résultats en anglais quelque soit la culture de mon poste.
Voici une requête MDX exécutée par défaut sur mon cube SSAS :

Select
{
    ( 
      [...]]]></description>
			<content:encoded><![CDATA[<p>Petite astuce du Jour : Comment “forcer” le langage d’une requête MDX dans un cube SSAS qui gère plusieurs langues ?</p>
<p>L’idée c’est d’avoir par exemple les résultats en anglais quelque soit la culture de mon poste.</p>
<p>Voici une requête MDX exécutée par défaut sur mon cube SSAS :</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode">Select
{
    ( 
        [Delivery Date].[Calendar].[Calendar Year].&amp;[2007],
        [Customer].[Customer Geography].[Country].&amp;[Australia]
    )
    , 
    ( 
        [Delivery Date].[Calendar].[Calendar Year].&amp;[2008],
        [Customer].[Customer Geography].[Country].&amp;[Australia]
    ) 
    
} on 0,
{
    [Product].[Product Categories].[Category] 
} on 1
From [Adventure Works]</pre>
<p>&nbsp;</p>
</div>
<p>Le résultat est traduit en français, car mon PC, bien qu’installé avec un OS anglais, a été configuré avec une culture FR :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image37.png" alt="image" width="657" height="561" border="0" /></p>
<p>Vous remarquerez que les colonnes sont bien traduites en Français alors que les valeurs de mes 2 tuples composant mon set sont en $</p>
<p>Je veux donc avoir “tout en anglais”.</p>
<p>Une des solutions, sans modifier le cube, est de spécifier la localisation dans la chaine de connexion:</p>
<p>Si vous passez par SSMS, il vous suffit de rajouter le paramètre sur l’onglet option :</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image38.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb21.png" alt="image" width="644" height="448" border="0" /></a></p>
<p>Une fois la requête ré exécutée, vous trouverez bien vos colonnes correctement traduites <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile2.png" alt="Sourire" /></p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image39.png" alt="image" width="639" height="592" border="0" /></p>
<p>Et voilà pour une méthode simple et efficace pour tester votre localisation !!</p>
<p>Si vous cherchez votre Locale ID (LCID) voici un tableau de récapitulation :</p>
<p><a title="http://msdn.microsoft.com/en-us/goglobal/bb964664" href="http://msdn.microsoft.com/en-us/goglobal/bb964664">http://msdn.microsoft.com/en-us/goglobal/bb964664</a></p>
<p>Bon MDX !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/07/30/ssas-default-language/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Stored Procedure SSIS DataFlow ControlFlow</title>
		<link>http://www.dotmim.com/2012/07/26/stored-procedure-ssis-dataflow-controlflow/</link>
		<comments>http://www.dotmim.com/2012/07/26/stored-procedure-ssis-dataflow-controlflow/#comments</comments>
		<pubDate>Thu, 26 Jul 2012 13:27:21 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/?p=889</guid>
		<description><![CDATA[Aujourd’hui, un petit article pour expliquer comment travailler avec une procédure stockée en entrée d’un flux SSIS.
L’idée ici est de présenter 3 façons différentes de récupérer les données renvoyées par une procédure stockée.

La première se base sur l’utilisation de cette source dans un  [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd’hui, un petit article pour expliquer comment travailler avec une procédure stockée en entrée d’un flux SSIS.</p>
<p>L’idée ici est de présenter 3 façons différentes de récupérer les données renvoyées par une procédure stockée.</p>
<ol>
<li>La première se base sur l’utilisation de cette source dans un <strong>DataFlow</strong></li>
<li>La deuxième sur un le <strong>ControlFlow</strong> avec itération</li>
<li>La troisième sur l’utilisation d’un <strong>DataTable</strong> en mémoire qu’on va pouvoir réutiliser partout <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile1.png" alt="Sourire" /></li>
</ol>
<p>&nbsp;</p>
<h2>DataFlow</h2>
<p>&nbsp;</p>
<p>Première solution, la plus simple à mon sens. Traiter la procédure stockée en tant que source de données dans un <strong>DataFlow</strong> :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image23.png" alt="image" width="275" height="279" border="0" /></p>
<p>Dans le <strong>DataFlow</strong>, j’utilise un composant source avec connexion <strong>Ole DB</strong>.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image51.png" alt="image" width="349" height="261" border="0" /></p>
<p>Attention à la configuration de votre source de données. Le passage de paramètres (pour <strong>Ole DB</strong>) se passe comme suit :</p>
<ol>
<li>Le paramètre dans l’appel de la procédure stockée se fait à l’aide du point d’interrogation</li>
<li>Le mapping des paramètres s’effectue avec le nom du paramètre attendu par la procédure stockée.</li>
</ol>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image91.png" alt="image" width="644" height="308" border="0" /></p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image26.png" alt="image" width="590" height="573" border="0" /></p>
<p>Voilà, première méthode simple et efficace <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile1.png" alt="Sourire" /></p>
<p>&nbsp;</p>
<h2>ControlFlow, Execute Task SQL, Foreach Enumerator</h2>
<p>&nbsp;</p>
<p>L’idée ici est de se placer au niveau du <strong>Control Flow</strong> et de passer par une tache <strong>Execute Task SQL</strong>.</p>
<p>Attention, le principe est le même que l’Ole DB source du <strong>DataFlow</strong> excepté le mapping des paramètres !</p>
<ol>
<li>Le paramètre dans l’appel de la procédure stockée se fait à l’aide du point d’interrogation</li>
<li>Le mapping des paramètres s’effectue avec l’indice (de base 0) du paramètre !</li>
</ol>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image27.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb12.png" alt="image" width="532" height="484" border="0" /></a></p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image28.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb13.png" alt="image" width="532" height="484" border="0" /></a></p>
<p>Tiens d’ailleurs, pour informations, voici le lien qui spécifie Comment paramétrer cette tache SUIVANT le type de CONNEXION (Ole DB, ADO, ADO.NET, ODBC) :</p>
<p><a title="http://msdn.microsoft.com/en-us/library/cc280502.aspx" href="http://msdn.microsoft.com/en-us/library/cc280502.aspx">http://msdn.microsoft.com/en-us/library/cc280502.aspx</a></p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image29.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb14.png" alt="image" width="644" height="121" border="0" /></a></p>
<p>(Oui je sais, c’est très très moche, mais c’est comme ça ! <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile1.png" alt="Sourire" />)</p>
<p>A partir de là, on stock le résultat dans une variable Object dans l’onglet <strong>ResultSet</strong>.</p>
<p>Pour information, l’objet stocké est en réalité un <strong>ADODBRecordset</strong>. Ceci nous servira dans une prochaine méthode.</p>
<p>De là, on peut facilement itérer sur chaque ligne, via la container <strong>Foreach</strong> :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image281.png" alt="image" width="390" height="484" border="0" /></p>
<p>Le container Foreach est configuré via le Foreach ADO Enumerator :</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image31.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb16.png" alt="image" width="525" height="484" border="0" /></a></p>
<p>Vous pouvez de là mapper chaque colonne dans une variable temporaire et traiter chaque ligne comme bon vous semble <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile1.png" alt="Sourire" /></p>
<p>&nbsp;</p>
<h2>Control Flow, Execute Task SQL, DataTable</h2>
<p>&nbsp;</p>
<p>A partir de la solution précédente, au lieu d’itérer sur chaque ligne, on peut tout simple récupérer le <strong>ADODBRecordset</strong> de notre variable objet et remplir une <strong>DataTable</strong>, déconnectée, en mémoire.</p>
<p>Pour se faire, il suffit de créer un script qui va remplir la DataTable :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image361.png" alt="image" width="569" height="484" border="0" /></p>
<p>Pour le contenu et paramétrage du Scipt SQL Task, voir la méthode précédente</p>
<p>Voici le contenu du script component qui lui est chargé de remplir la DataTable:</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre class="csharpcode"><span class="rem">/// &lt;summary&gt;</span>
<span class="rem">/// This method is called when this script task executes in the control flow.</span>
<span class="rem">/// Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.</span>
<span class="rem">/// To open Help, press F1.</span>
<span class="rem">/// &lt;/summary&gt;</span>
<span class="kwrd">public</span> <span class="kwrd">void</span> Main()
{
    <span class="rem">// TODO: Add your code here</span>
     DataTable dtRows = <span class="kwrd">new</span>DataTable();</pre>
<p>OleDbDataAdapter adapt = <span class="kwrd">new</span> OleDbDataAdapter();<br />
adapt.Fill(dtRows, Dts.Variables[<span class="str">"User::StoredResults"</span>].Value);</p>
<p>Dts.TaskResult = (<span class="kwrd">int</span>)ScriptResults.Success;<br />
}</p>
<p>&nbsp;</p>
</div>
<p>Simple !</p>
<p>Cet exemple, un peu plus complexe me permet pourtant de simplifier et d’améliorer les performances globales de mon package, dans un scénario précis : La réutilisation du jeu de résultat dans le package global.</p>
<p>A supposer que le résultat de cette procédure stockée soit utilisée à plusieurs endroits, j’ai rempli une Table en mémoire que je peux réutiliser partout dans mon package sans pour autant ré exécuter ma procédure stockée.</p>
<p>D’ailleurs voici la méthode pour utiliser votre source <strong>DataTable</strong> en mémoire dans un <strong>DataFlow</strong> :</p>
<p>Tout d’abord, utilisez un <strong>script component</strong> en tant que <strong>source</strong> :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image33.png" alt="image" width="644" height="344" border="0" /></p>
<p>Ensuite configurez à la main; les colonnes de sorties :</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image34.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb18.png" alt="image" width="523" height="484" border="0" /></a></p>
<p>Et enfin dans le script, générez le flux de sortie. N’oubliez pas de bien passer votre variable globale contenant la DataTable <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile1.png" alt="Sourire" /></p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image35.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb19.png" alt="image" width="523" height="484" border="0" /></a></p>
<p>Voici le script de construction des lignes:</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> CreateNewOutputRows()
 {
     DataTable dt = Variables.ProductDataTable <span class="kwrd">as</span> DataTable;
     <span class="kwrd">foreach</span> (DataRow dr <span class="kwrd">in</span> dt.Rows)
     {
Output0Buffer.AddRow();</pre>
<p><span class="kwrd">if</span> (dr[<span class="str">"BOMLevel"</span>] == System.DBNull.Value)<br />
Output0Buffer.BOMLevel_IsNull = <span class="kwrd">true</span>;<br />
<span class="kwrd">else</span><br />
Output0Buffer.BOMLevel = (<span class="kwrd">short</span>)dr[<span class="str">"BOMLevel"</span>];</p>
<p><span class="kwrd">if</span> (dr[<span class="str">"ComponentDesc"</span>] == System.DBNull.Value)<br />
Output0Buffer.ComponentDesc_IsNull = <span class="kwrd">true</span>;<br />
<span class="kwrd">else</span><br />
Output0Buffer.ComponentDesc = (String)dr[<span class="str">"ComponentDesc"</span>];</p>
<p><span class="kwrd">if</span> (dr[<span class="str">"ComponentID"</span>] == System.DBNull.Value)<br />
Output0Buffer.ComponentID_IsNull = <span class="kwrd">true</span>;<br />
<span class="kwrd">else</span><br />
Output0Buffer.ComponentID = (<span class="kwrd">int</span>)dr[<span class="str">"ComponentID"</span>];</p>
<p><span class="kwrd">if</span> (dr[<span class="str">"ListPrice"</span>] == System.DBNull.Value)<br />
Output0Buffer.ListPrice_IsNull = <span class="kwrd">true</span>;<br />
<span class="kwrd">else</span><br />
Output0Buffer.ListPrice = (<span class="kwrd">decimal</span>)dr[<span class="str">"ListPrice"</span>];</p>
<p><span class="kwrd">if</span> (dr[<span class="str">"ProductAssemblyID"</span>] == System.DBNull.Value)<br />
Output0Buffer.ProductAssemblyID_IsNull = <span class="kwrd">true</span>;<br />
<span class="kwrd">else</span><br />
Output0Buffer.ProductAssemblyID = (<span class="kwrd">int</span>)dr[<span class="str">"ProductAssemblyID"</span>];</p>
<p><span class="kwrd">if</span> (dr[<span class="str">"RecursionLevel"</span>] == System.DBNull.Value)<br />
Output0Buffer.RecursionLevel_IsNull = <span class="kwrd">true</span>;<br />
<span class="kwrd">else</span><br />
Output0Buffer.RecursionLevel = (<span class="kwrd">int</span>)dr[<span class="str">"RecursionLevel"</span>];</p>
<p><span class="kwrd">if</span> (dr[<span class="str">"StandardCost"</span>] == System.DBNull.Value)<br />
Output0Buffer.StandardCost_IsNull = <span class="kwrd">true</span>;<br />
<span class="kwrd">else</span><br />
Output0Buffer.StandardCost = (<span class="kwrd">decimal</span>)dr[<span class="str">"StandardCost"</span>];</p>
<p><span class="kwrd">if</span> (dr[<span class="str">"TotalQuantity"</span>] == System.DBNull.Value)<br />
Output0Buffer.TotalQuantity_IsNull = <span class="kwrd">true</span>;<br />
<span class="kwrd">else</span><br />
Output0Buffer.TotalQuantity = (<span class="kwrd">decimal</span>)dr[<span class="str">"TotalQuantity"</span>];</p>
<p>}</p>
<p>&nbsp;</p>
</div>
<p>Note pour les puristes du code, qui vont objecter qu’une forme concaténée du if aurait été plus élégante et judicieuse (ou qui trouve que vérifier une valeur <strong>True</strong> pour ensuite affecter à <strong>True</strong> une autre valeur est une hérésie <img class="wlEmoticon wlEmoticon-winkingsmile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-winkingsmile.png" alt="Clignement d'œil" />)</p>
<p>Il est impossible d’affecter <strong>False</strong> à la propriété VAR_IsNull. Exemple sur la propriété TotalQuantity :</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">bool</span> TotalQuantity_IsNull
 {
     set
     {
         <span class="kwrd">if</span> (<span class="kwrd">value</span>)
         {
             SetNull(3);
         }
         <span class="kwrd">else</span>
         {
             <span class="kwrd">throw</span> <span class="kwrd">new</span> InvalidOperationException(<span class="str">"IsNull property cannot be set to False. Assign a value to the column instead."</span>);
         }
     }
 }</pre>
<p>&nbsp;</p>
</div>
<p>Voilà j’y suis pour rien, ne taper pas le messager <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile1.png" alt="Sourire" /></p>
<p>Bref, l’exécution du composant fonctionne et vous pouvez par la suite utiliser votre flux comme bon vous semble !</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image36.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb20.png" alt="image" width="644" height="363" border="0" /></a></p>
<p>(Presque) Simple !</p>
<p>Les sources du projet contiennent les 3 méthodes dans un package.</p>
<p>Ces sources sont utilisées sur SQL SERVER SSIS 2012 et la base de données AdventureWorks.</p>
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="398">
<p align="left"><img class="alignleft" style="float: left; display: inline;" title="Fichier joint" src="http://www.dotmim.com/wp-includes/images/crystal/archive.png" alt="" width="25" height="28" align="left" /><a href="http://www.dotmim.com/SiteFiles/StoredProcedure.zip">SSIS StoredProcedure.zip</a></p>
</td>
</tr>
</tbody>
</table>
<p>Bon traitement SSIS !!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/07/26/stored-procedure-ssis-dataflow-controlflow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Master Data Services 2012 and SharePoint Workflow &#8211; Part 2</title>
		<link>http://www.dotmim.com/2012/07/17/master-data-services-2012-and-sharepoint-workflow-part-2/</link>
		<comments>http://www.dotmim.com/2012/07/17/master-data-services-2012-and-sharepoint-workflow-part-2/#comments</comments>
		<pubDate>Tue, 17 Jul 2012 13:47:13 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[MDS]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/?p=836</guid>
		<description><![CDATA[Dans la première partie, nous avons vu comment régler le problème des Workflows SharePoint qui ne sont pas déclenchés depuis Master Data Services 2012 (re sic, mais ça vous l’avez vu dans le premier Post)
Dans ce deuxième post, je vais m’attacher à vous expliquer comment créer un WorkFlow dans  [...]]]></description>
			<content:encoded><![CDATA[<p>Dans <a href="http://www.dotmim.com/2012/07/16/master-data-services-2012-and-sharepoint-workflow-part1/">la première partie</a>, nous avons vu comment régler le problème des Workflows SharePoint qui ne sont pas déclenchés depuis Master Data Services 2012 (re sic, mais ça vous l’avez vu dans le premier Post)</p>
<p>Dans ce deuxième post, je vais m’attacher à vous expliquer comment créer un WorkFlow dans SharePoint, le lancer depuis MDS, et surtout, pouvoir le débuguer <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile.png" alt="Sourire" /></p>
<p>Vous trouverez les sources à la fin du Post.</p>
<p>&nbsp;</p>
<p>Le Workflow a créer est relativement simple :</p>
<p>Nous avons un produit dans notre solution de MDM, et lorsque ce produit est créé, un WorkFlow est déclenché coté SharePoint pour valider la création de ce produit</p>
<p>Il passe donc par plusieurs états :</p>
<p style="text-align: center;"><strong><span style="text-decoration: underline;">Nouveau –&gt; Validé par le Service achat –&gt; Validé par le service Production </span></strong></p>
<p>A chaque phase de validation, un <strong><span style="text-decoration: underline;">Rejet</span></strong> peut avoir lieu.</p>
<p>Chaque phase de validation va générer une tache pour chaque responsable de service.</p>
<p>Je suis en phase de développement il est donc important de pouvoir débuguer le tout !</p>
<p>&nbsp;</p>
<h3>La solution</h3>
<p>Pour ce faire, je vais créer deux projets Visual Studio:</p>
<ol>
<li>Le premier projet contient <strong>l’Extender SharePoint MDS</strong> appelé par le service Windows MDS</li>
<li>Le deuxième projet contient <strong>le projet SharePoint Workflow</strong> hébergé dans SharePoint</li>
</ol>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image5.png" alt="image" width="352" height="318" border="0" /></p>
<h3></h3>
<h3>Le projet Extender Sharepoint Workflow</h3>
<p>L’idée ici c’est de lancer le service Windows MDS en mode debug. Pour ce faire c’est tout simple, il suffit de lancer l’exe avec l’argument <strong>–console</strong>. Il suffit donc de paramétrer le projet pour lancer cet exécutable :</p>
<p>Pour rappel, chez moi c’est &laquo;&nbsp;<em>C:\Program Files\Microsoft SQL Server\110\Master Data Services\WebApplication\bin\Microsoft.MasterDataServices.Workflow.exe</em>&nbsp;&raquo;</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image6.png" alt="image" width="644" height="239" border="0" /></p>
<p>Lorsque le service est lancé il charge les extenders définis dans son <strong>web.config (Microsoft.MasterDataServices.Workflow.exe.config)</strong>.</p>
<p>Il faut donc le modifier en conséquence pour qu’il charge notre extender.</p>
<p>Voici le fichier config modifié :</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode">&lt;?xml version=<span class="str">"1.0"</span> encoding=<span class="str">"utf-8"</span> ?&gt;
&lt;configuration&gt;
    &lt;configSections&gt;
        bla bla bla ...        
    &lt;/configSections&gt;
    &lt;applicationSettings&gt;
        &lt;Microsoft.MasterDataServices.Workflow.Properties.Settings&gt;
            &lt;setting name=<span class="str">"ConnectionString"</span> serializeAs=<span class="str">"String"</span>&gt;
                &lt;<span class="kwrd">value</span>&gt;Server=.\POWERPIVOT;Database=MDS;Integrated Security=<span class="kwrd">true</span>&lt;/<span class="kwrd">value</span>&gt;
            &lt;/setting&gt;
            &lt;setting name=<span class="str">"WorkflowTypeExtenders"</span> serializeAs=<span class="str">"String"</span>&gt;
                &lt;<span class="kwrd">value</span>&gt;SPWF=SharePoint.WorkflowExtender.SharePointWorkflowExtender, 
                       SharePoint.WorkflowExtender
                &lt;/<span class="kwrd">value</span>&gt;
            &lt;/setting&gt;
        &lt;/Microsoft.MasterDataServices.Workflow.Properties.Settings&gt;
    &lt;/applicationSettings&gt;
&lt;/configuration&gt;</pre>
<p>&nbsp;</p>
</div>
<p>Les extenders doivent être soit dans le GAC, soit dans le répertoire. En mode Debug, on va juste déployer directement dans le répertoire du service MDS.</p>
<p>Pour rappel, chez moi il se situe sur “<em>C:\Program Files\Microsoft SQL Server\110\Master Data Services\WebApplication\bin</em>”</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image7.png" alt="image" width="595" height="189" border="0" /></p>
<p>A partir de là, notre Service MDS est capable non seulement de lancer un Workflow SharePoint mais en plus on peut débuguer notre Extender (au cas où, on sait jamais <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile.png" alt="Sourire" />)</p>
<p>Au lancement de notre projet, on a bien le chargement de notre extender :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image8.png" alt="image" width="667" height="331" border="0" /></p>
<p>Ok, Next step configuration de MDS et création du Workflow.</p>
<p>&nbsp;</p>
<h3>Configuration Master Data Services 2012</h3>
<p>&nbsp;</p>
<p>Ici dans l’idée, je pars du principe que vous connaissez un tantinet MDS et que vous avez par exemple charger un référentiel (Produit ou autre, peu importe)</p>
<p>Nous allons :</p>
<ul>
<li>Créer une entité ApprovalStatus qui contiendra les attributs classiques (Nom, Code)</li>
<li>Créer les membres de cette entité correspondant aux états d’approbation:
<ul>
<li>Nouveau</li>
<li>En cours d’approbation</li>
<li>Approuvé</li>
<li>Rejeté</li>
</ul>
</li>
</ul>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image9.png" alt="image" width="543" height="254" border="0" /></p>
<p>&nbsp;</p>
<p>Alors certains diront que oui, on peut demander à ce que l’état en cours d’approbation soit délayé en deux états  ( En cours d’approbation au service achat et En cours d’approbation au service production).</p>
<p>Le débat est ouvert concernant ce point particulier, mais de mon point de vue, un MDM ne doit pas géré un état intermédiaire. Il est là pour dire si une donnée est validée… ou pas.</p>
<p>Ces états, c’est à SharePoint qu’en revient la responsabilité.</p>
<p>Bref, il suffit ensuite d’appliquer cette entité comme Attribut de notre produit et surtout y appliquer le tracking du changement !</p>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image10.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb3.png" alt="image" width="329" height="184" border="0" /></a><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image11.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb4.png" alt="image" width="274" height="184" border="0" /></a></p>
<p align="center"><em>Cliquez sur les images pour voir la taille originale</em></p>
<p>&nbsp;</p>
<p>Nous allons ensuite créer deux règles métiers :</p>
<ol>
<li>Lors de la création d’un produit, le statut doit être <strong>Nouveau</strong>.</li>
<li>Lorsque le statut d’un produit change et qu’il est égal à Nouveau, je lance le WorkFlow SharePoint.</li>
</ol>
<p>&nbsp;</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image12.png" alt="image" width="644" height="174" border="0" /></p>
<p>&nbsp;</p>
<p>Voici la copie d’écran de la règle métier permettant de lancer le WorkFlow SharePoint :</p>
<p>&nbsp;</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image13.png" alt="image" width="368" height="484" border="0" /></p>
<p>&nbsp;</p>
<p>Ce qui est important ici, ce sont les paramètres :</p>
<ol>
<li>Type de flux : SPWF : ça c’est standard, et ça permet d’identifier le bon extender</li>
<li>Site du flux : Site sharepoint, classique, n’oubliez pas le “/” en fin d’url</li>
<li>le nom du flux de travail : Ca c’est important : il faut absolument mettre le bon nom du Workflow SharePoint. Vous pouvez le retrouver de deux manières:
<ul>
<li>Le nom est la concaténation du projet Visual Studio et de la classe Workflow qu’il contient, séparé par un “ – “</li>
<li>Une fois déployé dans SharePoint, dans l’onglet WorkFlows Site, vous retrouvez le nom des WorkFlows.</li>
</ul>
</li>
</ol>
<p>&nbsp;</p>
<p>Une fois la règle métier validée, lors de la création d’un produit, qui prend donc le status Nouveau, le WorkFlow est lancé, et nous avons bien un retour dans Visual Studio :</p>
<p>&nbsp;</p>
<p align="center"><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image14.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb5.png" alt="image" width="644" height="372" border="0" /></a><em>Cliquez sur l’image pour voir la taille originale</em></p>
<p align="left">Jusque là, il nous manque toujours le WorkFlow a développer et à déployer dans SharePoint <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile.png" alt="Sourire" /></p>
<h3 align="left">Le projet WorkFlow SharePoint</h3>
<p align="left"><em><span style="font-family: Aparajita;">Oh mon dieu, je fais du SharePoint et en plus j’en écris un article, mais où va le monde …</span></em></p>
<p align="left">L’idée ici est de dédier tout le process de validation de notre Produit dans SharePoint via les taches WorkFlow.</p>
<p align="left">J’ai poussé un peu le vice à vouloir rapatrier et afficher les informations de notre Produit dans la tache.</p>
<p align="left">Il a donc fallu customiser le formulaire pour faire apparaitre une liste déroulante permettant de définir de valeurs de status d’un produit (je ne l’ai fait ici que pour le status, mais on peut imaginer afficher tous les champs de notre produit issu de MDS)</p>
<p align="center"><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image15.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb6.png" alt="image" width="319" height="244" border="0" /></a><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image16.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb7.png" alt="image" width="216" height="244" border="0" /></a></p>
<p align="center"><em>Cliquez sur les images pour voir la taille originale</em></p>
<p>&nbsp;</p>
<p>Le projet WorkFlow Visual Studio est assez classique dans l’esprit, n’oubliez pas de bien créer un projet SharePoint à la base :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image17.png" alt="image" width="644" height="363" border="0" /></p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image18.png" alt="image" width="644" height="363" border="0" /></p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image19.png" alt="image" width="644" height="441" border="0" /></p>
<p>Mes deux taches à créer sont relativement simple, la première étant un peu particulière:</p>
<ol>
<li>Elle récupère les informations du flux entrant provenant de MDS (enfin de l’extender qui l’appelle)</li>
<li>Elle crée une tache SharePoint</li>
<li>Elle récupère, grâce à l’objet workflowProperties le champs ApprovalStatus (souvenez vous le champs custom que j’ai crée dans ma liste SharePoint) et lui affecte un nouveau status</li>
</ol>
<p>&nbsp;</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">void</span> createFirstTask_MethodInvoking(<span class="kwrd">object</span> sender, EventArgs ea)
{
    <span class="rem">// Récupérer le XML de MDS</span>

    <span class="kwrd">if</span> (workflowProperties.InitiationData != <span class="kwrd">null</span>)
    {
        var doc = XDocument.Parse(workflowProperties.InitiationData);
        <span class="rem">//Console.WriteLine(dataElement.OuterXml); </span>
        <span class="kwrd">try</span>
        {        <span class="rem">//parse the XML documet into a semi-structured object </span>
            var externalAction =
                (from e <span class="kwrd">in</span> doc.Elements()
                 select <span class="kwrd">new</span>
                 {
                     Type = (<span class="kwrd">string</span>)e.Element(<span class="str">"Type"</span>),
                     SendData = (<span class="kwrd">string</span>)e.Element(<span class="str">"SendData"</span>),
                     Action_ID = (<span class="kwrd">string</span>)e.Element(<span class="str">"Action_ID"</span>),
                     Server = (<span class="kwrd">string</span>)e.Element(<span class="str">"Server_URL"</span>),
                     Model_ID = (<span class="kwrd">int</span>)e.Element(<span class="str">"Model_ID"</span>),
                     Model_Name = (<span class="kwrd">string</span>)e.Element(<span class="str">"Model_Name"</span>),
                     Entity_ID = (<span class="kwrd">int</span>)e.Element(<span class="str">"Entity_ID"</span>),
                     Entity_Name = (<span class="kwrd">string</span>)e.Element(<span class="str">"Entity_Name"</span>),
                     Version_ID = (<span class="kwrd">int</span>)e.Element(<span class="str">"Version_ID"</span>),
                     Member_ID = (<span class="kwrd">int</span>)e.Element(<span class="str">"Member_ID"</span>),
                     MemberData = <span class="kwrd">new</span>
                     {
                         Name = (<span class="kwrd">string</span>)e.Element(<span class="str">"MemberData"</span>).Element(<span class="str">"Name"</span>),
                         Code = (<span class="kwrd">string</span>)e.Element(<span class="str">"MemberData"</span>).Element(<span class="str">"Code"</span>),
                         Attributes = e.Element(<span class="str">"MemberData"</span>).Elements().ToDictionary(ae =&gt; ae.Name, ae =&gt; ae.Value)
                     }
                 }
                 ).Single();
            var member = externalAction.MemberData;

            <span class="rem">// Créer la première tache</span>
            CreateFirstTask.TaskId = Guid.NewGuid();
            CreateFirstTask.TaskProperties = <span class="kwrd">new</span> SPWorkflowTaskProperties();

            CreateFirstTask.TaskProperties.AssignedTo = <span class="str">"DOTMIM\\spertus"</span>;
            CreateFirstTask.TaskProperties.DueDate = DateTime.Now.AddDays(1);
            CreateFirstTask.TaskProperties.Title = <span class="str">"Nouveau produit "</span> + member.Name;
            CreateFirstTask.TaskProperties.Description = <span class="str">"Un nouveau produit a été créé : "</span> + member.Name + <span class="str">" Approbation service achat en cours."</span>;

            productName = member.Name;

            <span class="rem">// Status d'approbation étant un custom field, je récupère son GUID</span>
            approvalField = workflowProperties.TaskList.Fields[<span class="str">"Approval Status"</span>].Id;

            <span class="rem">// Affectation du flag à Awaiting Status</span>
            CreateFirstTask.TaskProperties.ExtendedProperties.Add(approvalField, AwaitingStatus);
            firsTaskStatus = AwaitingStatus;

            CreateFirstTask.TaskProperties.PercentComplete = 0.5f;

        }
        <span class="kwrd">catch</span> (Exception)
        {
            <span class="kwrd">throw</span>;
        }
    }
}</pre>
<p>&nbsp;</p>
</div>
<p>La deuxième tache est dans la même veine, créant une tache pour le service production :</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">void</span> createSecondTask_MethodInvoking(<span class="kwrd">object</span> sender, EventArgs e)
 {

     <span class="rem">// Créer la première tache</span>
     CreateSecondTask.TaskId = Guid.NewGuid();
     CreateSecondTask.TaskProperties = <span class="kwrd">new</span> SPWorkflowTaskProperties();

     CreateSecondTask.TaskProperties.AssignedTo = <span class="str">"DOTMIM\\spertus"</span>;
     CreateSecondTask.TaskProperties.DueDate = DateTime.Now.AddDays(1);
     CreateSecondTask.TaskProperties.Title = <span class="str">"Approbation service production Produit "</span> + productName + <span class="str">""</span>;
     CreateSecondTask.TaskProperties.Description = <span class="str">"Le produit : "</span> + productName + <span class="str">" est approuvé par le service achat. Approbation service production."</span>;

     <span class="rem">// Status d'approbation étant un custom field, je récupère son GUID</span>
     approvalField = workflowProperties.TaskList.Fields[<span class="str">"Approval Status"</span>].Id;

     <span class="rem">// Affectation du flag à NEW</span>
     CreateSecondTask.TaskProperties.ExtendedProperties.Add(approvalField, AwaitingStatus);

     CreateSecondTask.TaskProperties.PercentComplete = 0.5f;
 }</pre>
<p>&nbsp;</p>
</div>
<p>Chacune des taches va venir enrichir la liste des taches des utilisateurs concernés (bon dans mon exemple, je fais office des deux services, debug oblige <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile.png" alt="Sourire" />)</p>
<p align="center"><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image20.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb8.png" alt="image" width="644" height="171" border="0" /></a><em>Cliquez sur l’image pour voir la taille originale</em></p>
<p>Et le débugage dans tout ça !?</p>
<h3>Débuguer ce Workflow à toutes les étapes.</h3>
<p>Il faut bien prendre conscience du mécanisme de fonctionnement de notre ensemble:</p>
<ol>
<li>Le Workflow est déclenché par un service Windows qui va appelé via les api SharePoint la création d’une tache (la Première tache) C’est donc bien le service Windows qui est le processus porteur et sur lequel on doit s’attacher pour débuguer</li>
<li>Une fois la tache créée, il va falloir attendre qu’un utilisateur valide sa tache, dans SharePoint, pour déclencher la suite (et donc dans notre cas, la création d’une seconde tache). A partir de là, c’est le processus porteur de SharePoint (w3wp.exe) qui devient le processus porteur et c’est sur lui qu’il va falloir s’attacher !</li>
</ol>
<p>En résumé, si vous voulez débuguer <strong>TOUTES</strong> les étapes du WorkFlow, vous devez vous attacher à :</p>
<ol>
<li>Microsoft.MasterDataServices.Workflow.exe</li>
<li>w3wp.exe</li>
</ol>
<p>Dans Visual Studio, rien de plus simple : Vous vous attachez à TOUS les processus w3wp.exe + Microsoft.MasterDataServices.Workflow.exe:</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image21.png" alt="image" width="644" height="434" border="0" /></p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/07/image22.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image_thumb9.png" alt="image" width="644" height="208" border="0" /></a></p>
<p>Et à partir de là, vous ne devriez plus avoir de problèmes pour débuguer votre WorkFlow MDS dans SharePoint (et qui plus est en version SQL SERVER 2012 <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-smile.png" alt="Sourire" />)</p>
<p>Voici la solution complète, au format Visual Studio, qui contient</p>
<ol>
<li>L&rsquo;Extender SharePoint Pour Master Data Services 2012</li>
<li>Le projet WorkFlow SharePoint 2010 à déployer</li>
</ol>
<p>&nbsp;</p>
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="398">
<p align="left"><img class="alignleft" style="float: left; display: inline;" title="Fichier joint" src="http://www.dotmim.com/wp-includes/images/crystal/archive.png" alt="" width="25" height="28" align="left" /><a href="http://www.dotmim.com/wp-content/uploads/2012/07/SharePointMDSWorkFlow.zip">SharePointMDSWorkFlow</a></p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Bon WorkFlow, Bon MDS, Bref … bon courage !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/07/17/master-data-services-2012-and-sharepoint-workflow-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Master Data Services 2012 and SharePoint Workflow &#8211; Part 1</title>
		<link>http://www.dotmim.com/2012/07/16/master-data-services-2012-and-sharepoint-workflow-part1/</link>
		<comments>http://www.dotmim.com/2012/07/16/master-data-services-2012-and-sharepoint-workflow-part1/#comments</comments>
		<pubDate>Mon, 16 Jul 2012 13:47:35 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[MDS]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/?p=786</guid>
		<description><![CDATA[Peut être certains d’entre vous ont tenté de créer une solution à base de Master Data Services 2012 (MDS) couplé avec un Workflow de type SharePoint 2010.
Normalement, tout ceci est “by design” intégré dans MDS, l’appel du Workflow SharePoint étant déclenché par un service Windows MDS (que vous  [...]]]></description>
			<content:encoded><![CDATA[<p>Peut être certains d’entre vous ont tenté de créer une solution à base de Master Data Services 2012 (MDS) couplé avec un Workflow de type SharePoint 2010.</p>
<p>Normalement, tout ceci est “by design” intégré dans MDS, l’appel du Workflow SharePoint étant déclenché par un service Windows MDS (que vous avez au préalable installé)</p>
<p>Dans votre éditeur Business Rules, vous n’avez normalement qu’à renseigner l’adresse de votre site SharePoint et MDS doit (enfin devrait) s’occuper du reste :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image3.png" alt="image" width="270" height="280" border="0" /></p>
<p>Manque de bol, la version 2012 de ce fameux service subit une régression de son fonctionnement (sic !)</p>
<p>En bref, pour la faire court, en 2008 R2 le lancement du Workflow SharePoint fonctionne bien, en 2012, le lancement du workflow SharePoint … n’existe plus !</p>
<p>Du coup, si vous tentez de lancer votre WorkFlow, voici ce qui risque de vous arrivez (en Debug via le lancement du service windows en mode –Console) :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="70012" src="http://www.dotmim.com/wp-content/uploads/2012/07/700121.jpg" alt="70012" width="808" height="143" border="0" /></p>
<p><strong><span style="text-decoration: underline;">“Could Not Dispatch Due To Missing Extender : SPWF”</span></strong></p>
<p>Ah ben ça marche de suite moins bien dis donc !</p>
<p>J’ai donc décider de réflecter le code du service Windows <strong>Microsoft.MasterDataServices.Workflow.Exe</strong> (version 2008 R2 et 2012) et on peut voir ça :</p>
<p><strong><span style="text-decoration: underline;">Version 2008</span></strong></p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">bool</span> DispatchExternalActions()
    {
        <span class="rem">// Nothing interesting here</span></pre>
<p><span class="kwrd">while</span> (!WorkflowService.stopEvent.WaitOne(0))</p>
<p>{</p>
<p>SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();</p>
<p><span class="kwrd">while</span> (sqlDataReader.Read())</p>
<p>{</p>
<p>SqlXml sqlXml = sqlDataReader.GetSqlXml(0);</p>
<p>@<span class="kwrd">value</span>.InnerXml = sqlXml.Value;</p>
<p><span class="kwrd">foreach</span> (XmlNode childNode <span class="kwrd">in</span> @<span class="kwrd">value</span>.ChildNodes)</p>
<p>{</p>
<p><span class="kwrd">string</span> upperInvariant = childNode[<span class="str">"Type"</span>].InnerText.ToUpperInvariant();</p>
<p><span class="kwrd">string</span> innerText = childNode[<span class="str">"Server_URL"</span>].InnerText;</p>
<p><span class="kwrd">string</span> str = childNode[<span class="str">"Action_ID"</span>].InnerText;</p>
<p><span class="kwrd">object</span>[] objArray = <span class="kwrd">new</span> <span class="kwrd">object</span>[3];</p>
<p>DateTime now = DateTime.Now;</p>
<p>objArray[0] = now.ToString();</p>
<p>objArray[1] = str;</p>
<p>objArray[2] = innerText;</p>
<p>Program.WriteLine(<span class="kwrd">string</span>.Format(CultureInfo.InvariantCulture, <span class="str">&laquo;&nbsp;[{0}] Workflow {1} on {2}&nbsp;&raquo;</span>, objArray));</p>
<p><span class="kwrd">try</span></p>
<p>{</p>
<p><span class="kwrd">if</span> (upperInvariant == <span class="str">&laquo;&nbsp;SPWF&nbsp;&raquo;</span>)</p>
<p>{</p>
<p>WorkflowService.DispatchSPWorkflow(innerText, str, childNode, strs);</p>
<p>}</p>
<p><span class="kwrd">else</span></p>
<p>{</p>
<p>IWorkflowTypeExtender workflowTypeExtender = <span class="kwrd">null</span>;</p>
<p><span class="kwrd">if</span> (WorkflowService.extenders != <span class="kwrd">null</span>)</p>
<p>{</p>
<p>WorkflowService.extenders.TryGetValue(upperInvariant, <span class="kwrd">out</span> workflowTypeExtender);</p>
<p>}</p>
<p><span class="kwrd">if</span> (workflowTypeExtender == <span class="kwrd">null</span>)</p>
<p>{</p>
<p>Program.WriteLine(<span class="kwrd">string</span>.Concat(<span class="str">&laquo;&nbsp;Could not dispatch due to missing extender: &laquo;&nbsp;</span>, upperInvariant));</p>
<p>}</p>
<p><span class="kwrd">else</span></p>
<p>{</p>
<p>Program.WriteLine(<span class="kwrd">string</span>.Concat(<span class="str">&laquo;&nbsp;Dispatching using extender: &laquo;&nbsp;</span>, upperInvariant));</p>
<p>workflowTypeExtender.StartWorkflow(upperInvariant, (XmlElement)childNode);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p><span class="kwrd">catch</span> (Exception exception1)</p>
<p>{</p>
<p>Exception exception = exception1;</p>
<p><span class="kwrd">object</span>[] str1 = <span class="kwrd">new</span> <span class="kwrd">object</span>[1];</p>
<p>str1[0] = exception.ToString();</p>
<p>Program.WriteLine(<span class="kwrd">string</span>.Format(CultureInfo.InvariantCulture, <span class="str">&laquo;&nbsp;Error starting workflow:\n{0}\n&nbsp;&raquo;</span>, str1));</p>
<p>ExceptionInspector.RethrowCriticalException(exception);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>sqlDataReader.Close();</p>
<p>sqlDataReader.Dispose();</p>
<p>}</p>
<p><span class="kwrd">return</span> <span class="kwrd">false</span>;</p>
<p>&nbsp;</p>
</div>
<p><strong><span style="text-decoration: underline;">Version 2012</span></strong></p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">try</span>
  {
      IWorkflowTypeExtender workflowTypeExtender = <span class="kwrd">null</span>;
      <span class="kwrd">if</span> (WorkflowService.ExtenderCache != <span class="kwrd">null</span>)
      {
          WorkflowService.ExtenderCache.TryGetValue(upperInvariant, <span class="kwrd">out</span> workflowTypeExtender);
      }
      <span class="kwrd">if</span> (workflowTypeExtender == <span class="kwrd">null</span>)
      {
          <span class="kwrd">object</span>[] objArray = <span class="kwrd">new</span> <span class="kwrd">object</span>[1];
          objArray[0] = upperInvariant;
          Program.WriteLine(<span class="kwrd">string</span>.Format(CultureInfo.InvariantCulture, <span class="str">"Could not dispatch due to missing extender: {0}"</span>, objArray), EventLogEntryType.Error);
      }
      <span class="kwrd">else</span>
      {
          <span class="kwrd">object</span>[] objArray1 = <span class="kwrd">new</span> <span class="kwrd">object</span>[1];
          objArray1[0] = upperInvariant;
          Program.WriteLine(<span class="kwrd">string</span>.Format(CultureInfo.InvariantCulture, <span class="str">"Dispatching using extender: {0}"</span>, objArray1), EventLogEntryType.Information);
          workflowTypeExtender.StartWorkflow(upperInvariant, (XmlElement)childNode);
      }
  }
  <span class="kwrd">catch</span> (Exception exception1)
  {
      Exception exception = exception1;
      <span class="kwrd">object</span>[] objArray2 = <span class="kwrd">new</span> <span class="kwrd">object</span>[1];
      objArray2[0] = exception;
      Program.WriteLine(<span class="kwrd">string</span>.Format(CultureInfo.InvariantCulture, <span class="str">"Error starting workflow:\n{0}\n"</span>, objArray2), EventLogEntryType.Error);
      WorkflowService.RethrowCriticalException(exception);</pre>
<p>&nbsp;</p>
</div>
<p>Remarquez comme le version 2008 fait bien appel à un Dispatcher particulier si le paramètre est SPWF, alors que la version 2012, non.</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">if</span> (upperInvariant == <span class="str">"SPWF"</span>)
{
    WorkflowService.DispatchSPWorkflow(innerText, str, childNode, strs);
}</pre>
<p>&nbsp;</p>
</div>
<p>Alors de deux choses l’une : Soit Microsoft s’est un peu fourvoyé sur ce coup là <img class="wlEmoticon wlEmoticon-surprisedsmile" src="http://www.dotmim.com/wp-content/uploads/2012/07/wlEmoticon-surprisedsmile.png" alt="Surpris" /> Soit ils ont décidé que tous les appels externes de MDS doivent être fait par le système d’extender (why not hein)</p>
<p>Du coup dans notre cas, j’ai développé l’extender qui va bien pour résoudre la solution. (Code source complet en attachement du post)</p>
<p>Voici la classe, qui implémente <strong>IWorkflowTypeExtender</strong> et qui, via ses réféences vers SharePoint, lance un Workflow avec les paramètres qui vont bien :</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<pre class="csharpcode"><span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Globalization;
<span class="kwrd">using</span> System.Linq;
<span class="kwrd">using</span> System.Text;
<span class="kwrd">using</span> System.Threading.Tasks;
<span class="kwrd">using</span> System.Xml;
<span class="kwrd">using</span> System.Xml.Linq;
<span class="kwrd">using</span>Microsoft.MasterDataServices.WorkflowTypeExtender;</pre>
<p><span class="kwrd">namespace</span> Sharepoint.WorkflowExtender</p>
<p>{</p>
<p><span class="kwrd">public</span> <span class="kwrd">class</span> SPWorkflow : IWorkflowTypeExtender</p>
<p>{</p>
<p><span class="kwrd">public</span> <span class="kwrd">void</span> StartWorkflow(<span class="kwrd">string</span> workflowType, System.Xml.XmlElement dataElement)</p>
<p>{</p>
<p>var doc = XDocument.Parse(dataElement.OuterXml);</p>
<p>Dictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt; strs = <span class="kwrd">new</span> Dictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt;();</p>
<p><span class="kwrd">try</span></p>
<p>{</p>
<p>var externalAction =</p>
<p>(</p>
<p>from e <span class="kwrd">in</span> doc.Elements()</p>
<p>select <span class="kwrd">new</span></p>
<p>{</p>
<p>Type = (<span class="kwrd">string</span>)e.Element(<span class="str">&laquo;&nbsp;Type&nbsp;&raquo;</span>),</p>
<p>SendData = (<span class="kwrd">string</span>)e.Element(<span class="str">&laquo;&nbsp;SendData&nbsp;&raquo;</span>),</p>
<p>Action_ID = (<span class="kwrd">string</span>)e.Element(<span class="str">&laquo;&nbsp;Action_ID&nbsp;&raquo;</span>),</p>
<p>Server = (<span class="kwrd">string</span>)e.Element(<span class="str">&laquo;&nbsp;Server_URL&nbsp;&raquo;</span>),</p>
<p>Model_ID = (<span class="kwrd">int</span>)e.Element(<span class="str">&laquo;&nbsp;Model_ID&nbsp;&raquo;</span>),</p>
<p>Model_Name = (<span class="kwrd">string</span>)e.Element(<span class="str">&laquo;&nbsp;Model_Name&nbsp;&raquo;</span>),</p>
<p>Entity_ID = (<span class="kwrd">int</span>)e.Element(<span class="str">&laquo;&nbsp;Entity_ID&nbsp;&raquo;</span>),</p>
<p>Entity_Name = (<span class="kwrd">string</span>)e.Element(<span class="str">&laquo;&nbsp;Entity_Name&nbsp;&raquo;</span>),</p>
<p>Version_ID = (<span class="kwrd">int</span>)e.Element(<span class="str">&laquo;&nbsp;Version_ID&nbsp;&raquo;</span>),</p>
<p>Member_ID = (<span class="kwrd">int</span>)e.Element(<span class="str">&laquo;&nbsp;Member_ID&nbsp;&raquo;</span>),</p>
<p>MemberData = <span class="kwrd">new</span></p>
<p>{</p>
<p>Name = (<span class="kwrd">string</span>)e.Element(<span class="str">&laquo;&nbsp;MemberData&nbsp;&raquo;</span>).Element(<span class="str">&laquo;&nbsp;Name&nbsp;&raquo;</span>),</p>
<p>Code = (<span class="kwrd">string</span>)e.Element(<span class="str">&laquo;&nbsp;MemberData&nbsp;&raquo;</span>).Element(<span class="str">&laquo;&nbsp;Code&nbsp;&raquo;</span>),</p>
<p>Attributes = e.Element(<span class="str">&laquo;&nbsp;MemberData&nbsp;&raquo;</span>).Elements().ToDictionary(ae =&gt; ae.Name, ae =&gt; ae.Value)</p>
<p>}</p>
<p>}</p>
<p>).Single();</p>
<p>var member = externalAction.MemberData;</p>
<p>DispatchSPWorkflow(externalAction.Server, externalAction.Action_ID, dataElement, strs);</p>
<p>}</p>
<p><span class="kwrd">catch</span> (Exception)</p>
<p>{</p>
<p><span class="kwrd">throw</span>;</p>
<p>}</p>
<p>}</p>
<p><span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> DispatchSPWorkflow(<span class="kwrd">string</span> serverUrl, <span class="kwrd">string</span> workflowName, XmlNode dataElement,</p>
<p>Dictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt; sites)</p>
<p>{</p>
<p>SPSite sPSite;</p>
<p>SPWorkflowAssociation sPWorkflowAssociation;</p>
<p><span class="kwrd">object</span> obj = <span class="kwrd">null</span>;</p>
<p><span class="kwrd">if</span> (sites.TryGetValue(serverUrl, <span class="kwrd">out</span> obj))</p>
<p>{</p>
<p>sPSite = (SPSite)obj;</p>
<p>}</p>
<p><span class="kwrd">else</span></p>
<p>{</p>
<p>sPSite = <span class="kwrd">new</span> SPSite(serverUrl);</p>
<p>sites[serverUrl] = sPSite;</p>
<p>}</p>
<p>SPWeb sPWeb = sPSite.OpenWeb();</p>
<p>SPWorkflowManager workflowManager = sPSite.WorkflowManager;</p>
<p>sPWeb.WorkflowAssociations.UpdateAssociationsToLatestVersion();</p>
<p><span class="kwrd">foreach</span> (SPWorkflowAssociation workflowAssociation <span class="kwrd">in</span> sPWeb.WorkflowAssociations)</p>
<p>{</p>
<p><span class="kwrd">if</span> (!(workflowAssociation.Name == workflowName) || !workflowAssociation.AllowManual)</p>
<p>{</p>
<p><span class="kwrd">continue</span>;</p>
<p>}</p>
<p>sPWorkflowAssociation = workflowAssociation;</p>
<p><span class="kwrd">break</span>;</p>
<p>}</p>
<p><span class="kwrd">if</span> (sPWorkflowAssociation != <span class="kwrd">null</span>)</p>
<p>{</p>
<p>workflowManager.StartWorkflow(<span class="kwrd">null</span>, sPWorkflowAssociation, dataElement.OuterXml, 1);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>&nbsp;</p>
</div>
<p>Cette assembly est à déployer dans le répertoire <span style="text-decoration: underline;">Program Files\Microsoft SQL Server\110\Master Data Services\WebApplication\bin </span>au coté de l’assembly WorkflowTypeExtender, comme le montre la copie d’écran suivante :</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="http://www.dotmim.com/wp-content/uploads/2012/07/image4.png" alt="image" width="804" height="165" border="0" /></p>
<p>A partir de là, votre Workflow SharePoint devrait se lancer sans trop de problèmes !</p>
<p>Le projet C# :</p>
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="398">
<p align="left"><img class="alignleft" style="float: left; display: inline;" title="Fichier joint" src="http://www.dotmim.com/wp-includes/images/crystal/archive.png" alt="" width="25" height="28" align="left" /><a href="http://www.dotmim.com/wp-content/uploads/2012/07/SharePoint.WorkflowExtender.zip">SharePoint.WorkflowExtender.zip</a></p>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/07/16/master-data-services-2012-and-sharepoint-workflow-part1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SQL SERVER Codeplex Samples</title>
		<link>http://www.dotmim.com/2012/04/04/sql-server-codeplex-samples/</link>
		<comments>http://www.dotmim.com/2012/04/04/sql-server-codeplex-samples/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 08:07:52 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sans Catégorie]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2012/04/04/sql-server-codeplex-samples/</guid>
		<description><![CDATA[La page codeplex SQL SERVER fait peau neuve !
Avec un effet métro des plus réussis, vous êtes maintenant beaucoup plus facilement redirigé vers les versions des bases de démos correspondant à l’édition que vous cherchez !
A noter l’apparition des samples BI pour SQL SERVER 2012 

Bon téléchargement  [...]]]></description>
			<content:encoded><![CDATA[<p>La page codeplex SQL SERVER fait peau neuve !</p>
<p>Avec un effet <a href="http://en.wikipedia.org/wiki/Metro_(design_language)" target="_blank">métro</a> des plus réussis, vous êtes maintenant beaucoup plus facilement redirigé vers les versions des bases de démos correspondant à l’édition que vous cherchez !</p>
<p>A noter l’apparition des samples BI pour SQL SERVER 2012 <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/04/wlEmoticon-smile2.png" /></p>
<p><a href="http://msftdbprodsamples.codeplex.com/" target="_blank"><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.dotmim.com/wp-content/uploads/2012/04/image6.png" width="570" height="523" /></a></p>
<p>Bon téléchargement !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/04/04/sql-server-codeplex-samples/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Persisted Column, Date et Convert</title>
		<link>http://www.dotmim.com/2012/04/03/persisted-column-date-et-convert/</link>
		<comments>http://www.dotmim.com/2012/04/03/persisted-column-date-et-convert/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 09:26:04 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sans Catégorie]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2012/04/03/persisted-column-date-et-convert/</guid>
		<description><![CDATA[Si vous tentez de créer une colonne calculée et persistée avec notamment un champe Date (que vous souhaitez convertir en chaine de caractères) vous risquez de rencontrer un problème. Voici un exemple.
Soit la table :

Et la définition donc de la chaine ConcatString, colonne calculée, que l’on veut  [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous tentez de créer une colonne calculée et persistée avec notamment un champe Date (que vous souhaitez convertir en chaine de caractères) vous risquez de rencontrer un problème. Voici un exemple.</p>
<p>Soit la table :</p>
<p><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.dotmim.com/wp-content/uploads/2012/04/image.png" width="393" height="147" /></p>
<p>Et la définition donc de la chaine ConcatString, colonne calculée, que l’on veut persistée :</p>
<p><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.dotmim.com/wp-content/uploads/2012/04/image4.png" width="644" height="50" /></p>
<p>Lors de la sauvegarde, vous avez une vieille erreur qui implique que la définition est non déterministe :</p>
<p><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.dotmim.com/wp-content/uploads/2012/04/image2.png" width="522" height="302" /></p>
<p><font size="1"><em>&lsquo;Client&rsquo; table       <br />- Unable to modify table.&#160; <br />Computed column &lsquo;ConcatString&rsquo; in table &lsquo;Client&rsquo; cannot be persisted because the column is non-deterministic.</em></font></p>
<p>Le problème ne vient pas de la colonne Date, mais plutôt de la fonction Convert, qui elle est non déterministe <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/04/wlEmoticon-smile1.png" /></p>
<p>Pour persister cette colonne, pensez à spécifier un format valide (par exemple 112 ou 127) ce qui donne:</p>
<p><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.dotmim.com/wp-content/uploads/2012/04/image5.png" width="644" height="49" /></p>
<p>Et là, plus de soucis pour persister la colonne (et accessoirement y mettre un index si nécessaire <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Clignement d&#39;œil" src="http://www.dotmim.com/wp-content/uploads/2012/04/wlEmoticon-winkingsmile.png" />)</p>
<p>Attention, tous les formats ne sont pas déterministes, un petit tour sur la BOL peut aider pour déterminer (héhé) le bon type : <a title="http://msdn.microsoft.com/en-us/library/ms187928.aspx" href="http://msdn.microsoft.com/en-us/library/ms187928.aspx">http://msdn.microsoft.com/en-us/library/ms187928.aspx</a></p>
<p>Bon déterminisme et persistage à vous ! (hum pas sûr que ce soit Français-Compliant tout ça <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Rire" src="http://www.dotmim.com/wp-content/uploads/2012/04/wlEmoticon-openmouthedsmile.png" />)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/04/03/persisted-column-date-et-convert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MVP ++</title>
		<link>http://www.dotmim.com/2012/04/03/mvp-2/</link>
		<comments>http://www.dotmim.com/2012/04/03/mvp-2/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 09:14:33 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sans Catégorie]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2012/04/03/mvp-2/</guid>
		<description><![CDATA[
Et Hop, One More Year 
Et voilà, j’en reprends pour un an !    Je viens de recevoir mon renouvèlement MVP, ce qui constitue LA bonne nouvelle de la journée !
Et non, ce n’est toujours pas un poisson d’Avril (et j’ai 3 jours de retard ), mais que voulez vous, j’ai été nommé MVP un 1er Avril et il  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dotmim.com/wp-content/uploads/2011/04/mvp.jpg"><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="mvp" border="0" alt="mvp" src="http://www.dotmim.com/wp-content/uploads/2011/04/mvp_thumb.jpg" width="644" height="124" /></a></p>
<p>Et Hop, One More Year <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.dotmim.com/wp-content/uploads/2011/04/wlEmoticon-smile.png" /></p>
<p>Et voilà, j’en reprends pour un an !    <br />Je viens de recevoir mon renouvèlement <strong>MVP</strong>, ce qui constitue <strong>LA</strong> bonne nouvelle de la journée !</p>
<p>Et non, ce n’est toujours pas un poisson d’Avril (et j’ai 3 jours de retard <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/04/wlEmoticon-smile.png" />), mais que voulez vous, j’ai été nommé <strong>MVP </strong>un 1er Avril et il en sera de même pour mon renouvèlement chaque année <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smilewithtongueout" alt="Smile with tongue out" src="http://www.dotmim.com/wp-content/uploads/2011/04/wlEmoticon-smilewithtongueout.png" /></p>
<p>Pfiouuuuu 5 ans déjà !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/04/03/mvp-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft DevCamps</title>
		<link>http://www.dotmim.com/2012/03/22/microsoft-devcamps/</link>
		<comments>http://www.dotmim.com/2012/03/22/microsoft-devcamps/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 14:47:14 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sans Catégorie]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2012/03/22/microsoft-devcamps/</guid>
		<description><![CDATA[Bewise vous invite au Tour de France Windows 8 Camp :

Développeurs, assistez à une journée de formation      Windows 8, près de chez vous ! 
L’évènement se déroulera sous forme de « Lab », animé par un expert de la société Bewise durant lequel vous pourrez prendre en main Windows 8 et découvrir le  [...]]]></description>
			<content:encoded><![CDATA[<p><b><a href="http://www.bewise.fr">Bewise</a> vous invite au Tour de France Windows 8 Camp :</b></p>
<p><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="devcamp" border="0" alt="devcamp" src="http://www.dotmim.com/wp-content/uploads/2012/03/devcamp.jpg" width="339" height="87" /></p>
<p><strong>Développeurs, assistez à une journée de formation      <br />Windows 8, près de chez vous ! </strong></p>
<p>L’évènement se déroulera sous forme de « Lab », animé par un expert de la société Bewise durant lequel vous pourrez prendre en main Windows 8 et découvrir le développement d’application Metro.    <br />N’oubliez-donc pas votre PC portable, avec les prérequis installés : Windows 8 Consumer Preview et Microsoft Visual Studio 11 Express Beta, que vous pouvez télécharger via ce lien : <a href="http://msdn.microsoft.com/fr-fr/windows/apps">http://msdn.microsoft.com/fr-fr/windows/apps</a>     <br />Grâce à cette journée de formation et de manipulation, apprenez à maitriser de bout en bout le développement d’application METRO pour Windows 8 !     <br />Attention places limitées, vous recevrez une confirmation suite à votre inscription.</p>
<hr align="center" width="120" />
<p><b>Tour de France Windows 8 Camp : Bordeaux</b></p>
<p><strong>Le jeudi 5 avril de 9H00 à 18H00</strong></p>
<p>Hôtel Mercure Bordeaux Aéroport    <br />1, Avenue Charles Lindbergh     <br />33700 MERIGNAC</p>
<p><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032508646&amp;Culture=fr-FR">S&rsquo;inscrire</a></p>
<hr align="center" width="120" />
<p><b>Tour de France Windows 8 Camp : Marseille</b></p>
<p><strong>Le jeudi 19 avril de 08H00 à 18H00</strong></p>
<p><strong></strong>Mercure Marseille centre     <br />1, rue neuve saint martin     <br />13001 Marseille</p>
<p><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032508650&amp;Culture=fr-FR">S&rsquo;inscrire</a></p>
<hr align="center" width="120" />
<p><b><b>Tour de France Windows 8 Camp : Toulouse</b></b></p>
<p><strong>Le jeudi 26 avril de 9H00 à 18H00</strong></p>
<p>Evènement organisé au sein de La Mêlée Numérique <a href="http://www.meleenumerique.com/contenu">http://www.meleenumerique.com/contenu</a></p>
<p>150, rue Pierre Gilles de Gennes    <br />BP 71907     <br />31319 LABEGE CEDEX</p>
<p><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032508652&amp;Culture=fr-FR">S&rsquo;inscrire</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/03/22/microsoft-devcamps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server 2012 RTM</title>
		<link>http://www.dotmim.com/2012/03/07/sql-server-2012-rtm/</link>
		<comments>http://www.dotmim.com/2012/03/07/sql-server-2012-rtm/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 08:25:27 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sans Catégorie]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2012/03/07/sql-server-2012-rtm/</guid>
		<description><![CDATA[
L’information circulait depuis quelques temps, et maintenant c’est fait, SQL SERVER 2012 est RTM !
Rendez vous sur le site officiel, pour connaitre toutes les nouvelles fonctionnalités de la dernière version de votre moteur préféré.
Vous trouverez aussi ici le communiqué officiel.
&#160;
Et biensur  [...]]]></description>
			<content:encoded><![CDATA[<p><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.dotmim.com/wp-content/uploads/2012/03/image.png" width="618" height="425" /></p>
<p>L’information circulait depuis quelques temps, et maintenant c’est fait, <strong>SQL SERVER 2012 est RTM</strong> !</p>
<p>Rendez vous sur le <a href="http://www.microsoft.com/sqlserver/en/us/default.aspx">site officiel</a>, pour connaitre toutes les nouvelles fonctionnalités de la dernière version de votre moteur préféré.</p>
<p>Vous trouverez aussi <a href="http://blogs.technet.com/b/dataplatforminsider/archive/2012/03/06/sql-server-2012-released-to-manufacturing.aspx">ici le communiqué officiel</a>.</p>
<p>&#160;</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 16px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://www.dotmim.com/wp-content/uploads/2012/03/image1.png" width="244" height="126" />Et biensur n’oubliez pas le <a href="http://www.sqlserverlaunch.com/ww/Home">Virtual Launch SQL 2012</a> !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/03/07/sql-server-2012-rtm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interview SQL 2012 et SQL Server Data Sync</title>
		<link>http://www.dotmim.com/2012/02/24/interview-sql-2012-et-sql-server-data-sync/</link>
		<comments>http://www.dotmim.com/2012/02/24/interview-sql-2012-et-sql-server-data-sync/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 19:37:00 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sans Catégorie]]></category>
		<category><![CDATA[Sync Fx]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/?p=745</guid>
		<description><![CDATA[Voilà deux vidéos d’interviews que j’ai réalisées avec Jean Marc Monfort sur le thème SQL SERVER 2012.
Vous retrouverez une première vidéo sur un sujet particulier : Les données non structurées avec SQL SERVER 2012
Puis une deuxième vidéos dont le sujet est : SQL SERVER Data Sync.
Vous avez les  [...]]]></description>
			<content:encoded><![CDATA[<p>Voilà deux vidéos d’interviews que j’ai réalisées avec Jean Marc Monfort sur le thème SQL SERVER 2012.</p>
<p>Vous retrouverez une première vidéo sur un sujet particulier : <a href="http://www.youtube.com/watch?v=1Yglj2WHPgc&amp;feature=youtu.be">Les données non structurées avec SQL SERVER 2012</a></p>
<p>Puis une deuxième vidéos dont le sujet est : <a href="http://www.youtube.com/watch?v=R44Aw5HDAQ0&amp;feature=youtu.be">SQL SERVER Data Sync</a>.</p>
<p>Vous avez les liens direct Youtube, sinon voici les vidéos :</p>
<p><iframe src="http://www.youtube.com/embed/1Yglj2WHPgc" frameborder="0" width="560" height="315"></iframe></p>
<p><iframe src="http://www.youtube.com/embed/R44Aw5HDAQ0" frameborder="0" width="560" height="315"></iframe></p>
<p>Bon alors, je précise tout de suite : NON, je ne suis pas Allongé comme une vieille chaussette sur le fauteuil, c’est juste que j’ai dû me TASSER pour que le cadreur ne me coupe pas la moitié de la tête !! <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-smile1.png" alt="Sourire" /><img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-smile1.png" alt="Sourire" /></p>
<p>Bah oui, suis grand …</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/02/24/interview-sql-2012-et-sql-server-data-sync/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lancement Virtuel de SQL Server 2012</title>
		<link>http://www.dotmim.com/2012/02/24/lancement-virtuel-de-sql-server-2012/</link>
		<comments>http://www.dotmim.com/2012/02/24/lancement-virtuel-de-sql-server-2012/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 17:36:37 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[SQL SERVER 2012]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2012/02/24/lancement-virtuel-de-sql-server-2012/</guid>
		<description><![CDATA[Découvrez la vision de Microsoft sur l’avenir des données !





De la gestion à l’analyse des données, de Big Data au Cloud, assistez à l’évènement mondial de lancement de SQL Server 2012 au cours duquel seront annoncées les dates de sortie et découvrez la vision de Microsoft sur l’avenir des  [...]]]></description>
			<content:encoded><![CDATA[<p><b>Découvrez la vision de Microsoft sur l’avenir des données !</b></p>
<p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="471"><b></b>
<p>De la gestion à l’analyse des données, de Big Data au Cloud, assistez à l’évènement mondial de lancement de SQL Server 2012 au cours duquel <b>seront annoncées les dates de sortie</b> et découvrez la vision de Microsoft sur l’avenir des données !</p>
<p>Le <b>8 mars prochain à 9 heures du matin</b>, SQL Server 2012 se dévoile lors du <b>lancement virtuel </b>en ligne !</p>
<p>Le lancement virtuel rassemble Microsoft, ses partenaires et ses clients pendant une journée, autour de <b>plus de 30 sessions vidéos</b> destinées les décideurs informatiques et les professionnels de l’IT.</p>
</td>
<td width="172">
<p><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="clip_image001" border="0" alt="clip_image001" src="http://www.dotmim.com/wp-content/uploads/2012/02/clip_image001.jpg" width="141" height="146" /></p>
</td>
</tr>
<tr>
<td width="643">
<p>Le lancement virtuel, c’est aussi des centaines de cadeaux à gagner, des dizaines de partenaires à votre écoute et toute la communauté rassemblée pour un évènement unique !</p>
</td>
</tr>
</tbody>
</table>
<p><a href="http://aka.ms/vlefrance"><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="clip_image002" border="0" alt="clip_image002" src="http://www.dotmim.com/wp-content/uploads/2012/02/clip_image002.png" width="244" height="44" /></a><br />
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="536">
<p>&#160;</p>
<p><b>Keynote</b>               <br />Un nouveau monde de données par Ted Kummert (20 mins)               <br />Présentation de SQL Server 2012 par Quentin Clark (40 mins)</p>
</td>
</tr>
<tr>
<td width="269">
<p><b>Sessions techniques</b></p>
</td>
<td width="266">
<p><b>Sessions pour décideurs</b></p>
</td>
</tr>
<tr>
<td width="269">
<p>27 sessions classées par thème </p>
<p>• Applications Critiques</p>
<p>• Business Intelligence</p>
<p>• Cloud Privé et Public</p>
<p>Session Oracle              <br />Pourquoi choisir SQL Server plutôt qu’Oracle ?</p>
</td>
<td width="266">
<p>Comment analyser ses données avec SQL Server 2012 (20 mins)</p>
<p>Etude de marché sur              <br />SQL Server 2012 (20 mins)               <br />Forrester Research</p>
<p>Témoignage Client (20 mins)              <br />Klout exploite Big Data avec               <br />SQL Server 2012 !</p>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/02/24/lancement-virtuel-de-sql-server-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Techdays 2012 : Mes sessions</title>
		<link>http://www.dotmim.com/2012/02/16/techdays-2012-mes-sessions/</link>
		<comments>http://www.dotmim.com/2012/02/16/techdays-2012-mes-sessions/#comments</comments>
		<pubDate>Thu, 16 Feb 2012 14:21:53 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[TechDays 2012]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/?p=724</guid>
		<description><![CDATA[Bonjour à tous,
Les Techdays 2012 c’est fini pour cette année.
Ce fut un excellent cru, je n’ai pas encore les chiffres mais je pense qu’on va encore faire péter un score.
De ce que j’ai vu, les sessions étaient exceptionnellement bien pleines les 2 premiers jours, tout du moins toutes celles  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dotmim.com/wp-content/uploads/2012/02/image.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 20px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://www.dotmim.com/wp-content/uploads/2012/02/image_thumb.png" width="288" height="359" /></a>Bonjour à tous,</p>
<p>Les <a href="http://www.microsoft.com/france/mstechdays">Techdays 2012</a> c’est fini pour cette année.</p>
<p>Ce fut un excellent cru, je n’ai pas encore les chiffres mais je pense qu’on va encore faire péter un score.</p>
<p>De ce que j’ai vu, les sessions étaient exceptionnellement bien pleines les 2 premiers jours, tout du moins toutes celles auxquelles j’ai participées / animées.</p>
<p>Bon le 3ème jour, la fatigue se fait sentir <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-smile.png" /> et les salles se remplissaient moins vite. </p>
<p>J’ai d’ailleurs eu la chance d’animer la dernière session du dernier jour au dernier créneau en Amphi bleu (soit le plus grand amphi après l’amphi plénière) et nous étions AU BAS MOT …. 20 (WOOOOOT !!) Et encore je compte pas la régie <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Rire" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-openmouthedsmile.png" />&#160;</p>
<p>Bref bref, je parle je parle, mais sans plus attendre (et en attendant les web casts) voici les Powerpoints et les démos de mes 5 sessions :</p>
<h3>De A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData </h3>
<p>J’ai eu la chance d’animer cette session avec <a href="http://blogs.msdn.com/b/stephe/">Stéphanie Hertrich</a> qui proposait une journée complète autour d’une application à concevoir de l’architecture à la livraison finale.</p>
<p>Vous trouverez d’ailleurs sur son blog <a href="http://blogs.msdn.com/b/stephe/archive/2012/02/08/techdays-2012-les-slides-du-parcours-de-a-224-z-sont-en-ligne.aspx">l’ensemble des slides</a> de tout son parcours (avec les miens donc)</p>
<p>Cette session aborde 2 aspects liés à la couche de données : </p>
<ul>
<li>Le stockage et l&rsquo;accès aux données côté serveur avec l’utilisation d’EF 4.3 Code First </li>
<li>La publication des données sous forme de service pour les rendre disponibles aux applications clientes grâce à <a href="http://www.odata.org/">ODATA</a> et <a href="http://msdn.microsoft.com/fr-fr/library/cc668792.aspx">WCF Data Services</a> </li>
</ul>
<p align="center"><iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; padding-right: 0px; padding-top: 0px" title="Preview" height="327" marginheight="0" src="https://r.office.microsoft.com/r/rlidPowerPointEmbed?p1=1&amp;p2=1&amp;p3=SDC67AEF270FEEB070!413&amp;p4=&amp;ak=!AFuF_6I5iOkEYEA&amp;kip=1&amp;authkey=!AFuF_6I5iOkEYEA" frameborder="0" width="402" marginwidth="0" scrolling="no"></iframe></p>
<p>Et les démos associées : <a href="http://www.dotmim.com/SiteFiles/Techdays/2012/TD2012_EF43_OData.zip">Techdays 2012 EF 4.3 Odata</a></p>
<h3>Publication des données publiques (Open Data), WCF Data Services, OData </h3>
<p>Session encore une fois axée sur le partage d’informations, que j’ai co-animée avec Sébastien Brasseur et Philippe Béraud.</p>
<p>Ici on parle plus <a href="http://fr.wikipedia.org/wiki/Donn%C3%A9es_ouvertes">d’Open Data</a> et je suis intervenu sur la mise en place d’un serveur WCF Data Services.</p>
<p>Ici ce qui a été techniquement sympa c’est que je vous propose dans les démos d’aborder quelques nouveautés apportées par les spécifications <a href="http://blogs.msdn.com/b/writingdata_services/archive/2011/03/09/march-2011-ctp-of-wcf-data-services-for-odata-v3-is-live.aspx">OData V3</a> et déjà implémentées (bon pas toutes, c’est vrai) dans <a href="http://blogs.msdn.com/b/astoriateam/archive/2011/10/13/announcing-wcf-data-services-oct-2011-ctp-for-net-4-and-silverlight-4.aspx">WCF Data Services</a>. </p>
<p>Vous trouverez dans les démos l’utilisation du <a href="http://www.odata.org/blog/2011/10/14/geospatial-properties">type géographique</a> ou encore du <a href="http://www.odata.org/blog/2011/10/14/vocabularies-in-odata">système d’annotation</a> :</p>
<p align="center"><iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; padding-right: 0px; padding-top: 0px" title="Preview" height="327" marginheight="0" src="https://r.office.microsoft.com/r/rlidPowerPointEmbed?p1=1&amp;p2=1&amp;p3=SDC67AEF270FEEB070!411&amp;p4=&amp;ak=!AE8pha4ePmW-ak4&amp;kip=1&amp;authkey=!AE8pha4ePmW-ak4" frameborder="0" width="402" marginwidth="0" scrolling="no"></iframe></p>
<p align="left">Et les démos associées : <a href="http://www.dotmim.com/SiteFiles/Techdays/2012/WCFDS.zip">Open Data et OData</a></p>
<h3 align="left">SQL Azure Data Sync ou comment synchroniser vos données avec le Cloud</h3>
<p align="left">La session où vraiment je me suis lâché <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-smile.png" /> </p>
<p align="left">Dernière session, dernier jour, les gens qui sont là sont “encore” motivés, alors on va envoyer du bon code bien lourd <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Rire" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-openmouthedsmile.png" /></p>
<p align="left">Bon j’en ai vu un ou deux dormir au fond ! (mais on leur en voudra pas, ambiance feutrée, amphi bleu tout ça tout ça …)</p>
<p align="left">Et donc sans plus attendre :</p>
<p align="center"><iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; padding-right: 0px; padding-top: 0px" title="Preview" height="327" marginheight="0" src="https://r.office.microsoft.com/r/rlidPowerPointEmbed?p1=1&amp;p2=1&amp;p3=SDC67AEF270FEEB070!412&amp;p4=&amp;ak=!AAoeSh6VL4NLkQM&amp;kip=1&amp;authkey=!AAoeSh6VL4NLkQM" frameborder="0" width="402" marginwidth="0" scrolling="no"></iframe></p>
<p align="left">Et les démos qui vont avec bien sûr : <a href="http://www.dotmim.com/SiteFiles/Techdays/2012/Sync Data.zip">SQL Azure Sync Data et Sync Framework</a></p>
<h3 align="left">Utilisation avancée de la base de donnée locale SQL CE dans Windows Phone 7.5</h3>
<p align="left">Bon là faut bien être clair, j’ai sorti “accompagné” mon pote <a href="http://benoitlaut.net/">Ben</a> <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-smile.png" /> Il a fait une super session sur le sujet où je suis juste intervenu pour répondre à quelques questions et passer une démo de synchronisation de données avec WP7.&#160; </p>
<p align="left">On parle ici de SQL Server CE pour WP7, de Linq to SQL for Mango ou encore de Code First !</p>
<p align="center"><iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; padding-right: 0px; padding-top: 0px" title="Preview" height="327" marginheight="0" src="https://r.office.microsoft.com/r/rlidPowerPointEmbed?p1=1&amp;p2=1&amp;p3=SDC67AEF270FEEB070!524&amp;p4=&amp;ak=!AOuOELcw9fkmqg0&amp;kip=1&amp;authkey=!AOuOELcw9fkmqg0" frameborder="0" width="402" marginwidth="0" scrolling="no"></iframe></p>
<p align="left">Pour les démos, je laisse <a href="http://benoitlaut.net/">Benoit</a> les relayer. Quant à moi je vous propose la démo de synchronisation de WP7 avec l’utilisation de la toolkit Sync Framework V4 : <a href="http://www.dotmim.com/SiteFiles/Techdays/2012/Synchronisation WP7.zip">WP7 Synchronisation Sync FX 4</a></p>
<p align="left">Pour la petite note “humour inside” : J’ai préparé cette démo… 30 minutes avant la session, car on pensait qu’on aurait pas assez de choses à dire !! L’erreur !!! j’ai même pas eu le temps de la jouer jusqu’au bout <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Rire" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-openmouthedsmile.png" /></p>
<h3 align="left">Les Experts SQL Server </h3>
<p align="left">Voici le résumé (tiré du site des techdays) de la session</p>
<p align="left">“<em>Au cours de cette session, vous n&rsquo;aurez qu&rsquo;un seul but : coller les experts Microsoft sur SQL Server 2012 ! Nous avons réuni pour vous tous les experts du domaine pour répondre à vos questions, venez nombreux</em> !”</p>
<p align="left">Et oui nous étions tous sur scènes pour répondre à vos questions ! Donc pas de slides ni démos <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-smile.png" /></p>
<p align="left">Et bien on peut dire que vous avez des questions d’un sacré niveau !! Nous avons tous été surpris par la pertinence des questions et la connaissance de chacun d’entre vous. Comme quoi SQL Server devient une plateforme vraiment ancrée (enfin tout du moins chez les personnes ayant assistées à la session <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Clignement d&#39;œil" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-winkingsmile.png" />)</p>
<p align="left">Sinon j’ai une photo de <a href="http://blog.pgeiger.net/">Philippe Geiger</a> à vous proposer, juste pour vous montrer le beau monde qu’il y avait !</p>
<p align="left"><a href="http://blog.pgeiger.net/2012/02/15/retour-des-techdays-2012/"><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" border="0" src="http://phgeiger.files.wordpress.com/2012/02/dsc02034.jpg?w=595&amp;h=446" width="595" height="446" /></a></p>
<p align="left">Vous aurez bien entendu reconnu la <a href="http://blogs.technet.com/b/dcaro/">tête qui dépasse</a> ? <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-smile.png" /></p>
<p align="left">Voilà voilà !</p>
<p align="left">Un bon Techdays 2012 pour ma part, la tête dans le guidon durant 3 jours complets !</p>
<p align="left">Et comme chaque année, on dit qu’on y reviendra pas et chaque année on remet ça ! Alors à l’année prochaine <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Clignement d&#39;œil" src="http://www.dotmim.com/wp-content/uploads/2012/02/wlEmoticon-winkingsmile.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/02/16/techdays-2012-mes-sessions/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sql Server 2012 pour Mars</title>
		<link>http://www.dotmim.com/2012/01/24/sql-server-2012-pour-mars/</link>
		<comments>http://www.dotmim.com/2012/01/24/sql-server-2012-pour-mars/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 08:07:41 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[SQL SERVER 2012]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2012/01/24/sql-server-2012-pour-mars/</guid>
		<description><![CDATA[L&#8217;annonce : http://www.zdnet.com/blog/microsoft/microsofts-sql-server-2012-to-launch-on-march-7/11718
]]></description>
			<content:encoded><![CDATA[<p>L&rsquo;annonce : <a href="http://www.zdnet.com/blog/microsoft/microsofts-sql-server-2012-to-launch-on-march-7/11718">http://www.zdnet.com/blog/microsoft/microsofts-sql-server-2012-to-launch-on-march-7/11718</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/01/24/sql-server-2012-pour-mars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Like Underscore</title>
		<link>http://www.dotmim.com/2012/01/11/like-underscore/</link>
		<comments>http://www.dotmim.com/2012/01/11/like-underscore/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 15:53:41 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[Transact SQL]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2012/01/11/like-underscore/</guid>
		<description><![CDATA[Petite astuce aujourd’hui, si vous utilisez des requêtes Like et que vous avez un underscore dans le terme recherché.
Mettre un undescore dans une recherche signifie :
“Toutes chaines comportant à cet endroit là, n’importe quel caractères”
Ce qui donne :

Notez que j’ai toutes les lignes contenant  [...]]]></description>
			<content:encoded><![CDATA[<p>Petite astuce aujourd’hui, si vous utilisez des requêtes Like et que vous avez un underscore dans le terme recherché.</p>
<p>Mettre un undescore dans une recherche signifie :</p>
<p>“Toutes chaines comportant à cet endroit là, n’importe quel caractères”</p>
<p>Ce qui donne :</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/01/image.png"><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.dotmim.com/wp-content/uploads/2012/01/image_thumb.png" width="294" height="348" /></a></p>
<p>Notez que j’ai toutes les lignes contenant 79 “quelque chose” (79_3 mais aussi 790_2, 791_2 etc….)</p>
<p>Hors dans mon cas, je souhaite que mon “_” soit pris non pas comme un caractère spécial, mais comme un un “simple” caractère.</p>
<p>A ce moment là, remplacez le “_” par “[_]” <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/01/wlEmoticon-smile.png" /></p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/01/image1.png"><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.dotmim.com/wp-content/uploads/2012/01/image_thumb1.png" width="299" height="217" /></a></p>
<p>Et voilà je n’ai plus que 4 lignes !</p>
<p>Autre méthode : Utilisez le mot clé ESCAPE qui va spécifier que le caractère après celui désigné comme ESCAPE, ne doit pas être pris en compte comme un caractère spécial :</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2012/01/image2.png"><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.dotmim.com/wp-content/uploads/2012/01/image_thumb2.png" width="348" height="252" /></a></p>
<p>Et voilou,</p>
<p>/LIKE ! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="http://www.dotmim.com/wp-content/uploads/2012/01/wlEmoticon-smile.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2012/01/11/like-underscore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vid&#233;os Journ&#233;es SQL SERVER 2012</title>
		<link>http://www.dotmim.com/2011/12/23/vidos-journes-sql-server-2012/</link>
		<comments>http://www.dotmim.com/2011/12/23/vidos-journes-sql-server-2012/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 10:30:33 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[Journées SQL SERVER 2012]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/12/23/vidos-journes-sql-server-2012/</guid>
		<description><![CDATA[Bonjour à tous;
Les journées SQL SERVER 2012, qui ont eu lieu dans les locaux de Microsoft à PARIS, sont terminés et l’ensemble des webcasts des sessions sont en ligne.
Malheureusement, comme dans tout monde non parfait, les webcasts n’ont pas TOUS été bien catégorisés sur le site ShowCase  [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour à tous;</p>
<p>Les journées SQL SERVER 2012, qui ont eu lieu dans les locaux de Microsoft à PARIS, sont terminés et l’ensemble des webcasts des sessions sont en ligne.</p>
<p>Malheureusement, comme dans tout monde non parfait, les webcasts n’ont pas TOUS été bien catégorisés sur le site ShowCase Microsoft. Ok, Evidemment la mienne est perdue dans une catégorie où elle n’a rien à faire bien sûr <img class="wlEmoticon wlEmoticon-sadsmile" src="http://www.dotmim.com/wp-content/uploads/2011/12/wlEmoticon-sadsmile.png" alt="Triste" /></p>
<p>Bref…</p>
<p>Si vous voulez voir TOUTES les vidéos de la journée SQL SERVER, le mieux est de directement faire une recherche sur les mots clé “Journées Sql Server”.</p>
<p>Voici le lien direct de l’ensemble des vidéos : <a title="http://www.microsoft.com/fr-fr/showcase/Search.aspx?phrase=journ%c3%a9es+sql+server" href="http://www.microsoft.com/fr-fr/showcase/Search.aspx?phrase=journ%c3%a9es+sql+server">http://www.microsoft.com/fr-fr/showcase/Search.aspx?phrase=journ%c3%a9es+sql+server</a></p>
<p>Voici le lien direct de ma vidéo : <a title="http://www.microsoft.com/fr-fr/showcase/details.aspx?uuid=9a331e1f-4ab8-4e6d-82e6-2790debac36e" href="http://www.microsoft.com/fr-fr/showcase/details.aspx?uuid=9a331e1f-4ab8-4e6d-82e6-2790debac36e">http://www.microsoft.com/fr-fr/showcase/details.aspx?uuid=9a331e1f-4ab8-4e6d-82e6-2790debac36e</a></p>
<p>Et pour les pressés, la vidéo directement <img class="wlEmoticon wlEmoticon-smile" src="http://www.dotmim.com/wp-content/uploads/2011/12/wlEmoticon-smile.png" alt="Sourire" /> :</p>
<div style="width: 640px; height: 360px;">
<object width="640" height="360" classid="clsid:dfeaf541-f3e1-4c24-acac-99c30715084a"><param name="source" value="http://www.microsoft.com/global/fr-fr/showcase/RichMedia/player-fr.xap" /><param name="enableHtmlAccess" value="true" /><param name="background" value="#FF000000" /><param name="allowHtmlPopupwindow" value="true" /><param name="minRuntimeVersion" value="4.0.50401.0" /><param name="autoUpgrade" value="true" /><param name="initParams" value="Culture=fr-FR,Uuid=9a331e1f-4ab8-4e6d-82e6-2790debac36e,Autoplay=false,MarketingOverlayText=Visiter le site Web de cette vidéo,ShowMarketingOverlay=true,MiscControls=FullScreen;Detached,ShowMenu=True,Tabs=Embed;Email;Share;Info,VideoUrl=http://www.microsoft.com/fr-fr/showcase/details.aspx?uuid=9a331e1f-4ab8-4e6d-82e6-2790debac36e,Mode=Player" /><param name="src" value="data:application/x-silverlight-2," /><embed width="640" height="360" type="application/x-silverlight-2" src="data:application/x-silverlight-2," source="http://www.microsoft.com/global/fr-fr/showcase/RichMedia/player-fr.xap" enableHtmlAccess="true" background="#FF000000" allowHtmlPopupwindow="true" minRuntimeVersion="4.0.50401.0" autoUpgrade="true" initParams="Culture=fr-FR,Uuid=9a331e1f-4ab8-4e6d-82e6-2790debac36e,Autoplay=false,MarketingOverlayText=Visiter le site Web de cette vidéo,ShowMarketingOverlay=true,MiscControls=FullScreen;Detached,ShowMenu=True,Tabs=Embed;Email;Share;Info,VideoUrl=http://www.microsoft.com/fr-fr/showcase/details.aspx?uuid=9a331e1f-4ab8-4e6d-82e6-2790debac36e,Mode=Player" /><br />
</object></div>
<p>&nbsp;</p>
<p>Voilà bon visionnage !!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/12/23/vidos-journes-sql-server-2012/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Les Journ&#233;es SQL SERVER 2012</title>
		<link>http://www.dotmim.com/2011/11/18/les-journes-sql-server-2012/</link>
		<comments>http://www.dotmim.com/2011/11/18/les-journes-sql-server-2012/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 08:24:57 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[Journées SQL SERVER 2012]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/11/18/les-journes-sql-server-2012/</guid>
		<description><![CDATA[Les inscriptions sont ouvertes aux Journées SQL Server 2012 (édition 2011, ok je vous l’accorde !)
 

Rejoignez la communauté des professionnels SQL Server !
Les experts francophones de SQL Server, les MVP (Most Valuable Professionnal) et les MCM (Microsoft Certified Master) se réunissent à Paris  [...]]]></description>
			<content:encoded><![CDATA[<h4>Les inscriptions sont ouvertes aux Journées SQL Server 2012 <font style="font-weight: normal">(</font><font style="font-weight: normal">édition 2011, ok je vous l’accorde !)</font></h4>
<p> <small></small>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="clip_image002" border="0" alt="clip_image002" src="http://djeepy1.files.wordpress.com/2011/10/clip_image002.png?w=435&amp;h=161" width="435" height="161" /></p>
<p><b>Rejoignez la communauté des professionnels SQL Server !</b></p>
<p><img title="clip_image006" border="0" alt="clip_image006" align="right" src="http://djeepy1.files.wordpress.com/2011/10/clip_image0061.jpg?w=41&amp;h=64" width="41" height="64" /><a href="http://www.guss.fr/accueil/les-journ%C3%A9es-sql-server/speakers.aspx">Les experts francophones de SQL Server</a>, les <b>MVP</b> (Most Valuable Professionnal) et les <b>MCM</b> (Microsoft Certified Master) se réunissent à Paris pour 2 jours de conférences entièrement gratuits.</p>
<p>Vous pourrez découvrir les nouvelles fonctionnalités de <b>SQL Server 2012</b> mais aussi assister à des sessions sur des sujets pointus au travers d’un parcours consacré au <b>moteur</b> de base de données, d’un autre consacré à la <b>Business Intelligence</b> et enfin un parcours dédié aux <b>appliances SQL Server</b>.</p>
<p>Au total, ce ne sont pas moins de <b><a href="http://www.guss.fr/accueil/les-journ%C3%A9es-sql-server/agenda.aspx">23 sessions</a></b> qui vous attendent sur <b><i>AlwaysOn, Power View, SSIS Server, les index colonnes, SQL Server Data Tools, SQL Azure, BISM, les performances, la sécurité</i></b>, etc.</p>
<p><b><a href="http://les-journees-sql-server.guss.fr">Inscrivez-vous dès maintenant</a></b><b> </b><b></b></p>
<p>Cet événement est organisé par la <b>communauté SQL</b> : le groupe des utilisateurs francophones (<b>GUSS</b>) et les <b>MVP</b>, avec l’appui et la participation de <b>Microsoft</b> et du sponsor Platinum : <b>HP</b></p>
<p><b></b></p>
<p><a href="http://www.guss.fr"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="image" border="0" alt="image" src="http://djeepy1.files.wordpress.com/2011/10/image13.png?w=121&amp;h=55" width="121" height="55" /></a> <a href="http://djeepy1.files.wordpress.com/2011/10/clip_image008.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="clip_image008" border="0" alt="clip_image008" src="http://djeepy1.files.wordpress.com/2011/10/clip_image008_thumb.jpg?w=169&amp;h=70" width="169" height="70" /></a> <a href="http://djeepy1.files.wordpress.com/2011/10/clip_image010.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="clip_image010" border="0" alt="clip_image010" src="http://djeepy1.files.wordpress.com/2011/10/clip_image010_thumb.jpg?w=64&amp;h=64" width="64" height="64" /></a></p>
<p>Tout au long des journées, vous pourrez également poser toutes vos questions à <i>l’espace rencontre</i> à <b>nos différents sponsors </b>éditeurs, presse ou SSII. Les speakers sont également à votre disposition.</p>
<p><i></i></p>
<p align="center"><em></em></p>
<p align="center">Cet événement aura lieu les </p>
<p align="center"><b>12 et 13 décembre      <br /></b>au     <br /><b>Centre de conférences Microsoft</b></p>
<p align="center">41 quai du Président Roosevelt    <br />Issy-les-Moulineaux</p>
<p align="center"><a href="http://sqlpass.org"><img title="clip_image012" border="0" hspace="12" alt="clip_image012" align="left" src="http://djeepy1.files.wordpress.com/2011/10/clip_image0121.jpg?w=79&amp;h=109" width="79" height="109" /></a></p>
<p align="center">GUSS est affilié au PASS (Professional Association for SQL Server), leader des communautés SQL Server à travers le monde. Nous les remercions pour leur soutien dans l’organisation de cet événement.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/11/18/les-journes-sql-server-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Restore FileListOnly From Disk</title>
		<link>http://www.dotmim.com/2011/10/10/restore-filelistonly-from-disk/</link>
		<comments>http://www.dotmim.com/2011/10/10/restore-filelistonly-from-disk/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 13:09:48 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sql Server]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/10/10/restore-filelistonly-from-disk/</guid>
		<description><![CDATA[J’ai récemment eu un exercice à effectuer sur la machine d’un collègue
“J’ai un backup, mais je n’ai que visual studio installé, pas de Sql Server Management Studio ni rien et faut restorer la base de données”
Ok, donc :

Pas de SSMS c’est noté
Obligation de faire un MOVE des fichiers du backup
Pas  [...]]]></description>
			<content:encoded><![CDATA[<p>J’ai récemment eu un exercice à effectuer sur la machine d’un collègue</p>
<p>“J’ai un backup, mais je n’ai que visual studio installé, pas de Sql Server Management Studio ni rien et faut restorer la base de données”</p>
<p>Ok, donc :</p>
<ol>
<li>Pas de SSMS c’est noté</li>
<li>Obligation de faire un MOVE des fichiers du backup</li>
<li>Pas de connaissance des fichiers logiques contenus dans le backup</li>
</ol>
<p>Pour lancer la restauration, il me faut pouvoir exécuter du script SQL. Je décide donc de partir sur du SqlCMD</p>
<p>Il me faut connaitre la liste des fichiers à restaurer contenus dans le backup :</p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">restore</span> filelistonly  <span style="color: #0000ff">from</span> <span style="color: #0000ff">disk</span> = <span style="color: #006080">'C:\tmp\AdventureWorks2008R2.bak'</span></pre>
<p><!--CRLF--></div>
</div>
<p>Ce qui donne en sqlcmd <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.dotmim.com/wp-content/uploads/2011/10/wlEmoticon-smile.png" /></p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2011/10/sqlcmd.gif"><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="sqlcmd" border="0" alt="sqlcmd" src="http://www.dotmim.com/wp-content/uploads/2011/10/sqlcmd_thumb.gif" width="370" height="484" /></a></p>
<p>Bien maintenant que j’ai récupéré les fichiers logiques, y’a plus qu’à éxécuter la phase de restauration:</p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">RESTORE</span> <span style="color: #0000ff">DATABASE</span> [AdventureWorks2008R2] </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>     <span style="color: #0000ff">FROM</span>  <span style="color: #0000ff">DISK</span> = N<span style="color: #006080">'C:\Tmp\AdventureWorks2008R2.bak'</span> <span style="color: #0000ff">WITH</span>  <span style="color: #0000ff">FILE</span> = 1,  </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>     MOVE N<span style="color: #006080">'AdventureWorks2008R2_Data'</span> <span style="color: #0000ff">TO</span> N<span style="color: #006080">'C:\DATA\AdventureWorks2008R2_Data.mdf'</span>,  </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>     MOVE N<span style="color: #006080">'AdventureWorks2008R2_Log'</span> <span style="color: #0000ff">TO</span> N<span style="color: #006080">'C:\DATA\AdventureWorks2008R2_Log.ldf'</span>,  </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>     MOVE N<span style="color: #006080">'FileStreamDocuments2008R2'</span> <span style="color: #0000ff">TO</span> N<span style="color: #006080">'C:\DATA\Documents2008R2'</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span> <span style="color: #0000ff">GO</span></pre>
<p><!--CRLF--></div>
</div>
<p>Et ce qui donne en SQL CMD :</p>
<p><a href="http://www.dotmim.com/wp-content/uploads/2011/10/image.png"><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.dotmim.com/wp-content/uploads/2011/10/image_thumb.png" width="504" height="219" /></a></p>
<p>Et voilà une base restaurée convenablement <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.dotmim.com/wp-content/uploads/2011/10/wlEmoticon-smile.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/10/10/restore-filelistonly-from-disk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL SERVER 2008 : Migrer vers une table supportant un HierarchyId</title>
		<link>http://www.dotmim.com/2011/09/29/sql-server-2008-migrer-vers-une-table-supportant-un-hierarchyid/</link>
		<comments>http://www.dotmim.com/2011/09/29/sql-server-2008-migrer-vers-une-table-supportant-un-hierarchyid/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 09:17:57 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[HierarchyID]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/09/29/sql-server-2008-migrer-vers-une-table-supportant-un-hierarchyid/</guid>
		<description><![CDATA[Il existe pas mal d’articles sur le nouveau type CLR HierarchyID. Voici quelques pointeurs d’ailleurs :

http://msdn.microsoft.com/fr-fr/library/bb677290.aspx 
http://www.techheadbrothers.com/Articles.aspx/type-hierarchyid-sql-server-2008 
http://www.scribd.com/doc/43289630/Le-Type-Hierarchy-Id  [...]]]></description>
			<content:encoded><![CDATA[<p>Il existe pas mal d’articles sur le nouveau type CLR HierarchyID. Voici quelques pointeurs d’ailleurs :</p>
<ul>
<li><a title="http://msdn.microsoft.com/fr-fr/library/bb677290.aspx" href="http://msdn.microsoft.com/fr-fr/library/bb677290.aspx">http://msdn.microsoft.com/fr-fr/library/bb677290.aspx</a> </li>
<li><a title="http://www.techheadbrothers.com/Articles.aspx/type-hierarchyid-sql-server-2008" href="http://www.techheadbrothers.com/Articles.aspx/type-hierarchyid-sql-server-2008">http://www.techheadbrothers.com/Articles.aspx/type-hierarchyid-sql-server-2008</a> </li>
<li><a title="http://www.scribd.com/doc/43289630/Le-Type-Hierarchy-Id" href="http://www.scribd.com/doc/43289630/Le-Type-Hierarchy-Id">http://www.scribd.com/doc/43289630/Le-Type-Hierarchy-Id</a> </li>
</ul>
<p>Par contre, il y a peu d’informations sur la façon de faire pour migrer une table contenant par exemple un Identifiant et son parent (EmployeeID et ManagerID) vers une table supportant un type HierarchyID.</p>
<p>J’ai trouvé quelques essais, qui se sont trouvés être … faux (c’est balot !!)</p>
<p>Le principe finalement, c’est de “construire” Le hierarchyID à partir des données de la table d’origine.</p>
<p>On va éviter de passer par des curseurs, trop lent, et on va utiliser 2 choses:</p>
<ol>
<li>Le <strong>Row_Number()</strong> qui va nous être utile pour numéroter chaque filleul d’un manager : Supposons que j’ai un manager avec 4 filleuls, je veux que chaque filleul soit noté de 1 à 4 </li>
<li>Deux <strong>CTE</strong> : la première va nous permettre de faire le calcul précédent. La deuxième va créer le hierarchyID pour chaque employé (recursivement) grace aux informations de la première <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.dotmim.com/wp-content/uploads/2011/09/wlEmoticon-smile9.png" /> </li>
</ol>
<p>Du coup on est capable de générer un hierarchyID (correct cette fois ci <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smilewithtongueout" alt="Smile with tongue out" src="http://www.dotmim.com/wp-content/uploads/2011/09/wlEmoticon-smilewithtongueout.png" />) avec … une seule requete :</p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">USE</span> AdventureWorks</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>&#160; </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> <span style="color: #008000">-- Construction d'une table temporarire permettant de </span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> <span style="color: #008000">-- connaitre le numéro de chaque enfant d'un manager</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span> <span style="color: #008000">-- Pour un managerID = 3, on voit qu'il y a 7 enfants par exemple, </span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span> <span style="color: #008000">-- numéroté de 1 à 7</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span> <span style="color: #0000ff">WITH</span> employees (EmployeeID, ManagerID, Num) <span style="color: #0000ff">AS</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span> (</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>     <span style="color: #0000ff">SELECT</span> </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>         EmployeeID, </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>         ManagerID,</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>         ROW_NUMBER() <span style="color: #0000ff">OVER</span> </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span>             (PARTITION <span style="color: #0000ff">BY</span> ManagerID <span style="color: #0000ff">ORDER</span> <span style="color: #0000ff">BY</span> ManagerID) </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span>     <span style="color: #0000ff">FROM</span> HumanResources.Employee</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span> ), </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span> hierarchies(orgnode, EmployeeID) </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span> <span style="color: #0000ff">AS</span> (</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18">  18:</span>     <span style="color: #008000">-- Récupération des managers de plus haut </span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19">  19:</span>     <span style="color: #008000">-- niveau (managerId == null)</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20">  20:</span>     <span style="color: #0000ff">SELECT</span> hierarchyid::GetRoot() <span style="color: #0000ff">AS</span> OrgNode, EmployeeID </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21">  21:</span>     <span style="color: #0000ff">FROM</span> employees <span style="color: #0000ff">AS</span> C </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22">  22:</span>     <span style="color: #0000ff">WHERE</span> ManagerID <span style="color: #0000ff">IS</span> <span style="color: #0000ff">NULL</span> </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum23">  23:</span>     <span style="color: #0000ff">UNION</span> <span style="color: #0000ff">ALL</span> </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum24">  24:</span>     <span style="color: #008000">-- Récursivité sur l'ensemble des filleuls</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum25">  25:</span>     <span style="color: #0000ff">SELECT</span> </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum26">  26:</span>     <span style="color: #008000">-- Construction du hierarchyId</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum27">  27:</span>     <span style="color: #008000">-- On est au niveau inférieur, donc :</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum28">  28:</span>     <span style="color: #008000">-- Concaténation du orgnode du parent </span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum29">  29:</span>     <span style="color: #008000">-- + numéro de l'enfant actuel</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum30">  30:</span>     <span style="color: #0000ff">CAST</span>(p.orgnode.ToString() + </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum31">  31:</span>     <span style="color: #0000ff">CAST</span>(C.Num <span style="color: #0000ff">AS</span> <span style="color: #0000ff">varchar</span>(30)) + <span style="color: #006080">'/'</span> <span style="color: #0000ff">AS</span> hierarchyid), </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum32">  32:</span>     C.EmployeeID</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum33">  33:</span>     <span style="color: #0000ff">FROM</span> employees <span style="color: #0000ff">AS</span> C </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum34">  34:</span>     <span style="color: #0000ff">JOIN</span> hierarchies <span style="color: #0000ff">AS</span> p <span style="color: #0000ff">ON</span> C.ManagerID = P.EmployeeID </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum35">  35:</span> )</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum36">  36:</span> <span style="color: #008000">-- Le select pour vérifier le résultat</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum37">  37:</span> <span style="color: #008000">-- qui pourrait servir à faire un insert ou update</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum38">  38:</span> <span style="color: #008000">-- de la table de destination</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum39">  39:</span> <span style="color: #0000ff">SELECT</span> orgnode.ToString(), * <span style="color: #0000ff">FROM</span> hierarchies</pre>
<p><!--CRLF--></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/09/29/sql-server-2008-migrer-vers-une-table-supportant-un-hierarchyid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WinRT : MVVM</title>
		<link>http://www.dotmim.com/2011/09/23/winrt-mvvm/</link>
		<comments>http://www.dotmim.com/2011/09/23/winrt-mvvm/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 14:04:57 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[WinRT]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/09/23/winrt-mvvm/</guid>
		<description><![CDATA[Il y’a déjà pas mal de développeurs (moi le premier) qui se sont empressés de commencer à développer en WinRT des applications Metro destinés à Windows 8
Pour certains, don’t je fais parti, l’utilisation du pattern MVVM est un plus, une philosophie, une habitude, bref un “must have coding pattern”  [...]]]></description>
			<content:encoded><![CDATA[<p>Il y’a déjà pas mal de développeurs (moi le premier) qui se sont empressés de commencer à développer en WinRT des applications Metro destinés à Windows 8</p>
<p>Pour certains, don’t je fais parti, l’utilisation du pattern <strong>MVVM</strong> est un plus, une philosophie, une habitude, bref un “must have coding pattern” <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.dotmim.com/wp-content/uploads/2011/09/wlEmoticon-smile8.png" /></p>
<p>Pour faire du <strong>MVVM</strong>, j’utilise suivant les projets soit <strong><a href="http://compositewpf.codeplex.com/" target="_blank">PRISM</a></strong> soit <strong><a href="http://galasoft.ch/mvvm/" target="_blank">MVVM light Toolkit</a></strong></p>
<p>En WinRT, aucun portage n’a encore était réalisé de ces 2 frameworks.</p>
<p>Je vous propose donc en téléchargement une version de MVVM Light, migrée vers vers WIN RT, utilisable en C#</p>
<p><strong>Vous pouvez le télécharger ici </strong>: <a title="http://www.dotmim.com/SiteFiles/GalaSoft.MvvmLight.zip" href="http://www.dotmim.com/SiteFiles/GalaSoft.MvvmLight.zip">http://www.dotmim.com/SiteFiles/GalaSoft.MvvmLight.zip</a></p>
<p><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="MvvmLightWinRT" border="0" alt="MvvmLightWinRT" src="http://www.dotmim.com/wp-content/uploads/2011/09/MvvmLightWinRT.png" width="204" height="291" /></p>
<p>Biensur je vous recommande de surveiller le portage qui sera <a href="http://blog.galasoft.ch/archive/2011/09/17/my-thoughts-about-build-windows-8-winrt-xaml-and-silverlight.aspx" target="_blank">suremment développé par Laurent Bugnon</a>, auteur et créateur de MVVM Light.</p>
<p><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.dotmim.com/wp-content/uploads/2011/09/image9.png" width="589" height="99" /></p>
<p>En attendant cette nouvelle version, celle ci pourra toujours vous servir</p>
<p>(<em><u>Note</u> : Code fournit “<strong>AS IS</strong>”, sans <strong>AUCUNE </strong>garantie !!! </em><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.dotmim.com/wp-content/uploads/2011/09/wlEmoticon-smile8.png" />)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/09/23/winrt-mvvm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WinRT : Download Image</title>
		<link>http://www.dotmim.com/2011/09/22/winrt-download-image/</link>
		<comments>http://www.dotmim.com/2011/09/22/winrt-download-image/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 15:54:36 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[WinRT]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/09/22/winrt-download-image/</guid>
		<description><![CDATA[Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :
Une différence de technique pour télécharger un élément (nous prendrons ici une image par exemple)
Dans le cas de WP7, nous utliserons la classe WebClient, et l’appellerons de manière asynchrone (on a pas le choix) et du coté WinRT, on  [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :</strong></p>
<p>Une différence de technique pour télécharger un élément (nous prendrons ici une image par exemple)</p>
<p>Dans le cas de WP7, nous utliserons la classe WebClient, et l’appellerons de manière asynchrone (on a pas le choix) et du coté WinRT, on utilisera le nouveau mot clé “async” et “wait”</p>
<h3>WP7 :</h3>
<blockquote><p>public void GetImage(Uri url)     <br />{      <br />&#160;&#160;&#160; var webClient = new WebClient();</p>
<p>&#160;&#160;&#160; webClient.OpenReadCompleted += WebClientOpenReadCompleted;     <br />&#160;&#160;&#160; webClient.OpenReadAsync(url);      <br />}</p>
<p>void WebClientOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)     <br />{      <br />&#160;&#160;&#160; if (e.Error != null)      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return;</p>
<p>&#160;&#160;&#160; BitmapImage bi = new BitmapImage();     <br />&#160;&#160;&#160; bi.SetSource(e.Result);</p>
<p>&#160;&#160;&#160; image1.Source = bi;     <br />}</p>
</blockquote>
<h3>WinRT :</h3>
<blockquote><p>public async void GetImage(Uri url)     <br />{      <br />&#160;&#160;&#160; HttpClient client = new HttpClient();      <br />&#160;&#160;&#160; HttpResponseMessage response = await client.GetAsync(url);      <br />&#160;&#160;&#160; byte[] img = response.Content.ReadAsByteArray();      <br />&#160;&#160;&#160; InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream();      <br />&#160; <br />&#160;&#160;&#160; DataWriter writer = new DataWriter(stream.GetOutputStreamAt(0));      <br />&#160;&#160;&#160; writer.WriteBytes(img);      <br />&#160; <br />&#160;&#160;&#160; await writer.StoreAsync();      <br />&#160; <br />&#160;&#160;&#160; BitmapImage bi = new BitmapImage();      <br />&#160;&#160;&#160; bi.SetSource(randomAccessStream);</p>
<p>&#160;&#160;&#160; image1.Source = bi;     <br />}</p>
</blockquote>
<p>Autant je trouve sexy l’utilisation des nouvelles directives d’asynchronisme, autant l’utilisation de IMemoryRandomAccessStream et d’un DataWriter, ben… bof hein <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.dotmim.com/wp-content/uploads/2011/09/wlEmoticon-smile7.png" /></p>
<p>Bon Downloading !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/09/22/winrt-download-image/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WinRT : Namespaces</title>
		<link>http://www.dotmim.com/2011/09/22/winrt-namespaces/</link>
		<comments>http://www.dotmim.com/2011/09/22/winrt-namespaces/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 12:54:35 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[WinRT]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/09/22/winrt-namespaces/</guid>
		<description><![CDATA[Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :
Si vous devez déclarer des namespaces en WinRT, sachez que la syntaxe change (heuresement que Visual Studio aide !)
WPF  [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :</strong></p>
<p>Si vous devez déclarer des namespaces en WinRT, sachez que la syntaxe change (heuresement que Visual Studio aide !)</p>
<h3>WPF :</h3>
<blockquote><p>xmlns:conv=&nbsp;&raquo;clr-namespace:TimeTrack.Converters&nbsp;&raquo;<br />
xmlns:mess=&nbsp;&raquo;clr-namespace:Bewise.Phone;assembly=Bewise.Phone&nbsp;&raquo;</p></blockquote>
<h3>WinRT :</h3>
<blockquote><p>xmlns:conv=&nbsp;&raquo;using:TimeTrack.Converters&nbsp;&raquo;<br />
xmlns:mess=&nbsp;&raquo;using:Bewise.Phone&nbsp;&raquo;</p></blockquote>
<p>Deux remarques:</p>
<ol>
<li>Remplacement de clr-namespace par using</li>
<li>Plus d’obligation d’utiliser le nom de l’assembly si vous référencez un namespace provenant d’une autre assembly</li>
</ol>
<p>To be continued ! <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.dotmim.com/wp-content/uploads/2011/09/wlEmoticon-smile6.png" alt="Smile" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/09/22/winrt-namespaces/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WinRT : INotifyPropertyChanged</title>
		<link>http://www.dotmim.com/2011/09/21/winrt-inotifypropertychanged/</link>
		<comments>http://www.dotmim.com/2011/09/21/winrt-inotifypropertychanged/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 11:35:14 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[WinRT]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/09/21/winrt-inotifypropertychanged/</guid>
		<description><![CDATA[Si vous faites du MVVM, et que vous tentez une migration vers WinRT, attention à l’implémentation de INotifyPropertyChanged
La subtilité vient de l’apparition de cette interface dans un autre namespace, lié à l’UI :
Windows.UI.Xaml.Data.INotifyPropertyChanged
D’ailleurs, on le remarque vite, lors  [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous faites du MVVM, et que vous tentez une migration vers WinRT, attention à l’implémentation de <strong>INotifyPropertyChanged</strong></p>
<p>La subtilité vient de l’apparition de cette interface dans un autre namespace, lié à l’UI :</p>
<p><strong>Windows.UI.Xaml.Data.INotifyPropertyChanged</strong></p>
<p>D’ailleurs, on le remarque vite, lors de l’ajout du using :</p>
<p><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.dotmim.com/wp-content/uploads/2011/09/image8.png" width="488" height="214" /></p>
<p>Si vous migrez du code, et que votre <strong>INotifyPropertyChanged</strong> est encore celui de <strong>System.ComponentModel</strong>, et bien aucun de vos contrôles <strong>XAML</strong> ne s’abonnera à cet évènement de votre ViewModel !</p>
<p>Keep The Fight ! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.dotmim.com/wp-content/uploads/2011/09/wlEmoticon-smile5.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/09/21/winrt-inotifypropertychanged/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WinRT : Dependency Properties</title>
		<link>http://www.dotmim.com/2011/09/21/winrt-dependency-properties/</link>
		<comments>http://www.dotmim.com/2011/09/21/winrt-dependency-properties/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 10:01:47 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[WinRT]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/09/21/winrt-dependency-properties/</guid>
		<description><![CDATA[La déclaration en WinRT est différente de WPF / Silverlight. 
Elle différe lors de la phase Register sur l’objet static DependencyProperty.
On note qu’en WPF / SL4, le Register prend un Type (typeof(TOTO)) comme argument, alors qu’en WinRT, il prend une chaine de caractères.
Note : Pour moi, ceci  [...]]]></description>
			<content:encoded><![CDATA[<p>La déclaration en WinRT est différente de WPF / Silverlight. </p>
<p>Elle différe lors de la phase <strong>Register</strong> sur l’objet static <strong>DependencyProperty.</strong></p>
<p>On note qu’en WPF / SL4, le Register prend un Type (typeof(TOTO)) comme argument, alors qu’en WinRT, il prend une chaine de caractères.</p>
<p><em><strong>Note </strong>: Pour moi, ceci est un comportement imputable à la CTP de WinRT, je serai surpris que ce soit encore le cas lors de la RTM. My 2 Cents <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.dotmim.com/wp-content/uploads/2011/09/wlEmoticon-smile4.png"></em></p>
<h3>WPF:</h3>
<blockquote><pre><font face="Segoe UI">public int MatchesCount
{&nbsp;&nbsp;&nbsp;&nbsp; get { return (int)GetValue(MatchesCountProperty); }&nbsp;&nbsp;&nbsp;&nbsp; set { SetValue(MatchesCountProperty, value); }
}
 
public static readonly DependencyProperty MatchesCountProperty =&nbsp;&nbsp;&nbsp;&nbsp; DependencyProperty.Register(</font></pre>
<pre><font face="Segoe UI">              "MatchesCount", </font></pre>
<pre><font face="Segoe UI">             <font size="3"><strong>  <font color="#ff0000">typeof(int),</font>&nbsp;</strong></font></font></pre>
<pre><font face="Segoe UI"><font size="3"><strong>              </strong></font><font color="#ff0000" size="3"><strong> typeof(WidthMatchConverter), <br /></strong></font>               new PropertyMetadata(0));</pre>
<p></font></p></blockquote>
<h3>WinRT:</h3>
<blockquote>
<p>public int MatchesCount<br />{<br />&nbsp;&nbsp;&nbsp; get { return (int)GetValue(MatchesCountProperty); }<br />&nbsp;&nbsp;&nbsp; set { SetValue(MatchesCountProperty, value); }<br />}</p>
<p>public static readonly DependencyProperty MatchesCountProperty =<br />&nbsp;&nbsp;&nbsp; DependencyProperty.Register(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &laquo;&nbsp;MatchesCount&nbsp;&raquo;, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff0000" size="3"><strong> &laquo;&nbsp;Int32&Prime;, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &laquo;&nbsp;WidthMatchConverter&nbsp;&raquo;,</strong></font> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new PropertyMetadata(0));</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/09/21/winrt-dependency-properties/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WinRT : DesignMode</title>
		<link>http://www.dotmim.com/2011/09/21/winrt-designmode/</link>
		<comments>http://www.dotmim.com/2011/09/21/winrt-designmode/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 09:54:06 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[WinRT]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/09/21/winrt-designmode/</guid>
		<description><![CDATA[Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :
Si vous voulez savoir si vous êtes en mode design, par code :
WPF
var prop = DesignerProperties.IsInDesignModeProperty;      &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; _isInDesignMode       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; = (bool)DependencyPropertyDescriptor        [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :</strong></p>
<p>Si vous voulez savoir si vous êtes en mode design, par code :</p>
<p>WPF</p>
<blockquote><p>var prop = DesignerProperties.IsInDesignModeProperty;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; _isInDesignMode       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; = (bool)DependencyPropertyDescriptor       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .FromProperty(prop, typeof(FrameworkElement))       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .Metadata.DefaultValue;</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Just to be sure      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (!_isInDesignMode.Value       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp;&amp; Process.GetCurrentProcess().ProcessName.StartsWith(&quot;devenv&quot;, StringComparison.Ordinal))       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; _isInDesignMode = true;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
</blockquote>
<h3>Silverlight</h3>
<blockquote><p>DesignerProperties.IsInDesignTool;</p>
</blockquote>
<h3>WinRT</h3>
<blockquote><p>Windows.ApplicationModel.DesignMode.DesignModeEnabled;</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/09/21/winrt-designmode/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WinRT : Reflection</title>
		<link>http://www.dotmim.com/2011/09/21/winrt-reflection/</link>
		<comments>http://www.dotmim.com/2011/09/21/winrt-reflection/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 09:53:17 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[WinRT]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/09/21/winrt-reflection/</guid>
		<description><![CDATA[Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :
En WPF, comme en silverlight, accéder par réflection à des métadatas d’objets se fait relativement simplement.
Par exemple, vérifier l’existance d’une propriété dans un type, en WPF, comme en Silverlight :
var myType =  [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :</strong></p>
<p>En WPF, comme en silverlight, accéder par réflection à des métadatas d’objets se fait relativement simplement.</p>
<p>Par exemple, vérifier l’existance d’une propriété dans un type, en <strong>WPF</strong>, comme en <strong>Silverlight</strong> :</p>
<blockquote><p>var myType = this.GetType();</p>
<p>if (!string.IsNullOrEmpty(propertyName) &amp;&amp; myType.GetProperty(propertyName) == null)      <br />&#160;&#160;&#160; throw new ArgumentException(&quot;Property not found&quot;, propertyName);</p>
</blockquote>
<p>En <strong>WinRT</strong>, les choses changent quelque peu. Vous devez passer par la méthode <strong>GetTypeInfo()</strong> qui vous donnera accés à des méthodes <strong>GetDelcared*</strong></p>
<p>Attention <strong>GetTypeInfo()</strong> est une méthode d’extension de <strong>System.Reflection</strong>, n’oubliez pas le Using/ Imports adéquat <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.dotmim.com/wp-content/uploads/2011/09/wlEmoticon-smile3.png" /></p>
<p>Le même exemple que précédemment :</p>
<blockquote><p>var myType = this.GetType();</p>
<p>if (!string.IsNullOrEmpty(propertyName)&#160; <br />&#160;&#160;&#160;&#160; &amp;&amp; myType.GetTypeInfo().GetDeclaredProperty(propertyName) == null)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; throw new ArgumentException(&quot;Property not found&quot;, propertyName);</p>
</blockquote>
<p>Parfois même, la méthode a été remplacée par une propriété.</p>
<p>L’exemple de récupération d’interfaces.</p>
<p>En <strong>WPF / Silverlight</strong>:</p>
<blockquote><p>Type[] interfaces = instanceType.GetInterfaces();</p>
</blockquote>
<p>En <strong>WinRT</strong>:</p>
<blockquote><p>IEnumerable&lt;Type&gt; interfaces = instanceType.GetTypeInfo().ImplementedInterfaces;</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/09/21/winrt-reflection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WinRT : Dispatcher</title>
		<link>http://www.dotmim.com/2011/09/21/winrt-dispatcher/</link>
		<comments>http://www.dotmim.com/2011/09/21/winrt-dispatcher/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 09:52:45 +0000</pubDate>
		<dc:creator>Mimetis</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[WinRT]]></category>

		<guid isPermaLink="false">http://www.dotmim.com/2011/09/21/winrt-dispatcher/</guid>
		<description><![CDATA[Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :
Si vous voulez accéder au dispacther dans votre code (sans être obligatoirement dans une page xaml)
Définition
Première chose notable, le nom de la classe change:
Dans WPF et Silverlight, la classe est : Dispatcher et elle se situe  [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :</strong></p>
<p>Si vous voulez accéder au dispacther dans votre code (sans être obligatoirement dans une page xaml)</p>
<h3>Définition</h3>
<p>Première chose notable, le nom de la classe change:</p>
<p>Dans <strong>WPF et Silverlight</strong>, la classe est : <strong>Dispatcher </strong>et elle se situe dans<strong> System.Windows.Threading      <br /></strong>En <strong>WinRT</strong>, la classe s’appelle : <strong>CoreDispatcher</strong> et elle se situe dans <strong>Windows.UI.Core</strong></p>
<p><u>Dans les exemples suivants, vous trouverez la façon d’appeller le Dispatcher et sa méthode d’invocation qui est différente en WinRT</u></p>
<h3>WPF</h3>
<blockquote><pre>System.Windows.Threading.Dispatcher.CurrentDispatcher d;</pre>
<pre>d.BeginInvoke(action);</pre>
</blockquote>
<h3>&#160;</h3>
<h3>Silverlight</h3>
<blockquote>
<pre>System.Windows.Threading.Deployment.Current.Dispatcher d;</pre>
<pre>d.BeginInvoke(action);</pre>
</blockquote>
<h3>&#160;</h3>
<h3>WinRT</h3>
<p>En WinRT, impossible de passer directement une action, vous êtes contraint de passer par un Invokehandler qui prend en paramètre un objet Context (que je n’utilise pas dans l’exemple suivant):</p>
<blockquote>
<p>InvokedHandler handler = (s, ia) =&gt; action();<br />
    <br />Windows.Current.Dispatcher.InvokeAsync(CoreDispatcherPriority.Normal, handler, null, null); </p>
<p>&#160; </p>
</blockquote>
<p><strong>Note </strong>: J’ai remarqué que souvent, le <strong>Windows.Current</strong> est égal à <strong>Null</strong>…. bug de la CTP ? comportement By Design ? who knows ! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://www.dotmim.com/wp-content/uploads/2011/09/wlEmoticon-winkingsmile.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dotmim.com/2011/09/21/winrt-dispatcher/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
