<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://didierdanse.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">didierdanse.net - Les news Developpement</title><subtitle type="html" /><id>http://didierdanse.net/blogs/dev/atom.aspx</id><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/default.aspx" /><link rel="self" type="application/atom+xml" href="http://didierdanse.net/blogs/dev/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2008-06-18T15:01:12Z</updated><entry><title>Microsoft TechDays France du 10 au 12 février 2009 à Paris (évènement gratuit)</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2009/01/03/microsoft-techdays-france-du-10-au-12-f-233-vrier-2009-224-paris-233-v-232-nement-gratuit.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2009/01/03/microsoft-techdays-france-du-10-au-12-f-233-vrier-2009-224-paris-233-v-232-nement-gratuit.aspx</id><published>2009-01-03T18:33:37Z</published><updated>2009-01-03T18:33:37Z</updated><content type="html">&lt;p&gt;&lt;em&gt;23 parcours thématiques, 300 conférences techniques, plus de 140 partenaires experts Microsoft autour de 5 grands thèmes :&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Découvertes&lt;/strong&gt;         &lt;br /&gt;Windows 7, Windows Azure, SaaS, Cloud Computing… &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Architecture et Développement&lt;/strong&gt;         &lt;br /&gt;Windows Live, SOA, Visual Studio, .NET, Silverlight, Design, Biztalk… &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Infrastructure et socle applicatif de l&amp;#39;entreprise numérique&lt;/strong&gt;         &lt;br /&gt;SQL Server, Windows Server, Virtualisation, Microsoft Desktop Optimization Pack, High Performance Computing, Small Business Server, Enterprise Business Server, Sécurité, ERP… &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Efficacité individuelle et collective&lt;/strong&gt;         &lt;br /&gt;Poste de travail, Communications Unifiées, Recherche en entreprise, Microsoft PerformancePoint, SharePoint, Office Communications Server, CRM… &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Enjeux&lt;/strong&gt;         &lt;br /&gt;Sécurité, Interopérabilité, Accessibilité, Education, Recherche, Programme de licences...&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Site officiel: &lt;a title="http://www.microsoft.com/france/mstechdays/" href="http://www.microsoft.com/france/mstechdays/"&gt;http://www.microsoft.com/france/mstechdays/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Inscriptions: &lt;a title="http://galilee.microsoft.fr/TechDays2009/Default.aspx" href="http://galilee.microsoft.fr/TechDays2009/Default.aspx"&gt;http://galilee.microsoft.fr/TechDays2009/Default.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=196" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Visual Studio" scheme="http://didierdanse.net/blogs/dev/archive/tags/Visual+Studio/default.aspx" /><category term="Sharepoint" scheme="http://didierdanse.net/blogs/dev/archive/tags/Sharepoint/default.aspx" /><category term="Vista" scheme="http://didierdanse.net/blogs/dev/archive/tags/Vista/default.aspx" /><category term="Microsoft" scheme="http://didierdanse.net/blogs/dev/archive/tags/Microsoft/default.aspx" /><category term="TechDays" scheme="http://didierdanse.net/blogs/dev/archive/tags/TechDays/default.aspx" /><category term="LINQ" scheme="http://didierdanse.net/blogs/dev/archive/tags/LINQ/default.aspx" /><category term=".NET" scheme="http://didierdanse.net/blogs/dev/archive/tags/.NET/default.aspx" /><category term="Team System" scheme="http://didierdanse.net/blogs/dev/archive/tags/Team+System/default.aspx" /><category term="Windows Server" scheme="http://didierdanse.net/blogs/dev/archive/tags/Windows+Server/default.aspx" /><category term="Evenement" scheme="http://didierdanse.net/blogs/dev/archive/tags/Evenement/default.aspx" /><category term="French/Français" scheme="http://didierdanse.net/blogs/dev/archive/tags/French_2F00_Fran_E700_ais/default.aspx" /></entry><entry><title>SharePoint: Un Web Service intermédiaire pour réaliser des appels à GetListItems de Lists.asmx depuis InfoPath</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2009/01/02/sharepoint-un-web-service-interm-233-diaire-pour-r-233-aliser-des-appels-224-getlistitems-de-lists-asmx-depuis-infopath.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2009/01/02/sharepoint-un-web-service-interm-233-diaire-pour-r-233-aliser-des-appels-224-getlistitems-de-lists-asmx-depuis-infopath.aspx</id><published>2009-01-02T21:18:28Z</published><updated>2009-01-02T21:18:28Z</updated><content type="html">&lt;p&gt;Lors d&amp;#39;un appel au Web Service Lists.asmx et plus exactement à la méthode GetListItems, il est souvent nécessaire de passer des paramètres de types XML. Ces paramètres sont mal interprétés, rendant ainsi l&amp;#39;utilisation du Web Service difficile voire impossible.&lt;/p&gt;  &lt;p&gt;Les paramètres XML sont indiqués dans InfoPath sous la forme d&amp;#39;une chaîne de caractères (ceci dit de l&amp;#39;XML, ce n&amp;#39;est jamais que des caractères qui respectent des règles prédéfinies). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/image_66C38C70.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="427" alt="image" src="http://didierdanse.net/blogs/dev/image_thumb_432C7F7A.png" width="635" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;C&amp;#39;est cette chaîne qui, une fois encodée pour être envoyée, n&amp;#39;est plus compréhensible par le Web Service.&lt;/p&gt;  &lt;p&gt;Une fois le problème repéré, des tests montrent que l&amp;#39;appel du Web Service depuis une application .NET se fait sans aucun souci. Sur base de ces informations, une solution s&amp;#39;offre à nous: utiliser un Web Service (écrit en .NET) que l&amp;#39;on déploie au sein de SharePoint afin de générer le message à envoyer de manière correcte.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    &amp;lt;WebMethod()&amp;gt; _
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetListItems(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; listName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; viewID &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; query &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; viewFields &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; rowLimit &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; queryOptions &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; webID &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; XmlNode
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; service &lt;span class="kwrd"&gt;As&lt;/span&gt; SharePointListsWS.Lists = GetWebServiceInstance(webID)

        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; queryElement &lt;span class="kwrd"&gt;As&lt;/span&gt; XmlNode = CreateNode(&lt;span class="str"&gt;&amp;quot;Query&amp;quot;&lt;/span&gt;, query)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; viewFieldsElement &lt;span class="kwrd"&gt;As&lt;/span&gt; XmlNode = CreateNode(&lt;span class="str"&gt;&amp;quot;ViewFields&amp;quot;&lt;/span&gt;, viewFields)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; queryOptionsElement &lt;span class="kwrd"&gt;As&lt;/span&gt; XmlNode = CreateNode(&lt;span class="str"&gt;&amp;quot;QueryOptions&amp;quot;&lt;/span&gt;, queryOptions)

        &lt;span class="kwrd"&gt;Return&lt;/span&gt; service.GetListItems(listName, viewID, queryElement, viewFieldsElement, rowLimit, queryOptionsElement, webID)

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetWebServiceInstance(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; webID &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; SharePointListsWS.Lists
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; service &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SharePointListsWS.Lists
        service.Credentials = System.Net.CredentialCache.DefaultCredentials

        service.Url = SPContext.Current.Web.Url + &lt;span class="str"&gt;&amp;quot;/_vti_bin/Lists.asmx&amp;quot;&lt;/span&gt;

        &lt;span class="kwrd"&gt;Return&lt;/span&gt; service
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; CreateNode(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; name &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; innerXml &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; document &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; XmlDocument
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; node &lt;span class="kwrd"&gt;As&lt;/span&gt; XmlNode = document.CreateElement(name)
        node.InnerXml = innerXml
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; node
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;

&lt;p&gt;Ce Web Service, après avoir générer du XML valide et compréhensible, passe les paramètres au Web Service Lists.asmx qui, cette fois, pourra interpréter les paramètres en entrée. Les valeurs retournées par celui-ci sont quant à elle directement renvoyées vers le client appelant. &lt;/p&gt;

&lt;p&gt;Ce qu&amp;#39;il vous faut donc savoir pour réaliser ce Web Service intermédiaire:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Comment écrire un Web Service; &lt;/li&gt;

  &lt;li&gt;Comment permettre de l&amp;#39;intégrer dans SharePoint; &lt;/li&gt;

  &lt;li&gt;Comment le déployer dans SharePoint. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Il existe de nombreux articles discutant de chacun des points. Pour simplifier la vie aux personnes qui ne souhaitent pas trop de temps, je vous joins un fichier zippé comprenant l&amp;#39;ensemble des fichiers nécessaires pour installer un tel Web Service: &lt;a title="Download" href="http://didierdanse.net/files/folders/193/download.aspx"&gt;Téléchargement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La procédure se résume donc par: &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Dézippez le fichier; &lt;/li&gt;

  &lt;li&gt;Appuyez sur install.bat. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Attention! La version actuelle de ce package fait que le fichier spdisco.aspx existant sur le serveur est remplacé par celui présent dans le package. Il est par ailleurs supprimé lors d&amp;#39;un retract de la solution. Faites un backup préalablement. &lt;/strong&gt;&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=194" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Sharepoint" scheme="http://didierdanse.net/blogs/dev/archive/tags/Sharepoint/default.aspx" /><category term="Web Service" scheme="http://didierdanse.net/blogs/dev/archive/tags/Web+Service/default.aspx" /><category term="French/Français" scheme="http://didierdanse.net/blogs/dev/archive/tags/French_2F00_Fran_E700_ais/default.aspx" /><category term="InfoPath" scheme="http://didierdanse.net/blogs/dev/archive/tags/InfoPath/default.aspx" /></entry><entry><title>SharePoint: Spécifier l'utilisateur utilisé dans l'historique d'un workflow</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/12/04/sharepoint-sp-233-cifier-l-utilisateur-utilis-233-dans-l-historique-d-un-workflow.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/12/04/sharepoint-sp-233-cifier-l-utilisateur-utilis-233-dans-l-historique-d-un-workflow.aspx</id><published>2008-12-04T21:12:13Z</published><updated>2008-12-04T21:12:13Z</updated><content type="html">&lt;p&gt;Cette question m&amp;#39;est revenue plusieurs fois déjà. Ainsi, je prends quelques minutes pour mettre la réponse par écrit.&lt;/p&gt; &lt;p&gt;Dans l&amp;#39;historique d&amp;#39;un workflow, vous retrouvez des valeurs &amp;quot;System Account&amp;quot; à chaque ligne. &lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/3e7db49e9cae_BE9B/workflow_userid_ko_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="150" alt="workflow_userid_ko" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/3e7db49e9cae_BE9B/workflow_userid_ko_thumb.jpg" width="553" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Cette information est ainsi peu utile et il serait bien plus intéressant d&amp;#39;indiquer l&amp;#39;utilisateur qui a provoqué une action de laquelle résulte l&amp;#39;élément présent dans l&amp;#39;historique. &lt;/p&gt; &lt;p&gt;Pour cela, voici rapidement la procédure:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Dans le code de votre workflow, si vous n&amp;#39;avez pas suivi l&amp;#39;un des différents articles du net, rajoutez la première ligne (afin de récupérer l&amp;#39;élément courant) du code ci-dessous en global ainsi que la seconde ligne (qui serait la variable dans laquelle on stocke l&amp;#39;ID du user courant de type entier) dans tous les cas:&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;VB:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; workflowProperties &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties ()
&lt;span class="kwrd"&gt;Public&lt;/span&gt; CurrentUserId &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = -1&lt;/pre&gt;
&lt;p&gt;C#:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties workflowProperties = 
      &lt;span class="kwrd"&gt;new&lt;/span&gt; Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties ();
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; CurrentUserId = -1;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Si ce n&amp;#39;est déjà fait, ajoutez une activité &lt;em&gt;Code&lt;/em&gt; avant l&amp;#39;activité &lt;em&gt;LogToHistoryListActivity&lt;/em&gt;. Dans cette activité, ajoutez les lignes suivantes qui permettent de récupérer l&amp;#39;ID de l&amp;#39;utilisateur au sein de SharePoint:&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;VB:&lt;/p&gt;&lt;pre class="csharpcode"&gt;CurrentUserId = workflowProperties.Item(&lt;span class="str"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;).ToString().Substring( _
       0, workflowProperties.Item(&lt;span class="str"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;).ToString().IndexOf(&lt;span class="str"&gt;&amp;quot;;#&amp;quot;&lt;/span&gt;))&lt;/pre&gt;
&lt;p&gt;C#:&lt;/p&gt;&lt;pre class="csharpcode"&gt;CurrentUserId = workflowProperties.Item(&lt;span class="str"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;).ToString().Substring(
       0, workflowProperties.Item(&lt;span class="str"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;).ToString().IndexOf(&lt;span class="str"&gt;&amp;quot;;#&amp;quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les activités d&amp;#39;un Workflow sont constituées d&amp;#39;un ensemble de propriétés qu&amp;#39;il est possible (voire nécessaire) de spécifier. C&amp;#39;est également le cas pour la &lt;em&gt;LogToHistoryListActivity. &lt;/em&gt;Au delà des propriétés explicites telles que &lt;em&gt;HistoryDescription&lt;/em&gt; que vous avez certainement déjà remplis (sans quoi, il serait dur d&amp;#39;avoir des logs...), il existe la propriété &lt;em&gt;UserId&lt;/em&gt;. C&amp;#39;est cette propriété qui indique l&amp;#39;utilisateur à afficher dans l&amp;#39;historique. Elle requiert une valeur entière qui correspond à ... vous l&amp;#39;aurez compris, la valeur que nous avons récupéré dans le point précédent. Ainsi, il ne reste plus qu&amp;#39;à cliquer sur le bouton &amp;quot;...&amp;quot; et de sélectionner la variable :&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="211" alt="userid_1" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/3e7db49e9cae_BE9B/userid_1_thumb.jpg" width="318" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/3e7db49e9cae_BE9B/userid_2_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="413" alt="userid_2" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/3e7db49e9cae_BE9B/userid_2_thumb.jpg" width="513" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/3e7db49e9cae_BE9B/userid_3_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="247" alt="userid_3" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/3e7db49e9cae_BE9B/userid_3_thumb.jpg" width="320" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dernière étape: déployez votre workflow et vérifiez! Désormais l&amp;#39;utilisateur affiché est bien le bon&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/3e7db49e9cae_BE9B/workflow_userid_ok_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="108" alt="workflow_userid_ok" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/3e7db49e9cae_BE9B/workflow_userid_ok_thumb.jpg" width="553" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=176" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Visual Studio" scheme="http://didierdanse.net/blogs/dev/archive/tags/Visual+Studio/default.aspx" /><category term="Sharepoint" scheme="http://didierdanse.net/blogs/dev/archive/tags/Sharepoint/default.aspx" /><category term=".NET" scheme="http://didierdanse.net/blogs/dev/archive/tags/.NET/default.aspx" /><category term="Workflow" scheme="http://didierdanse.net/blogs/dev/archive/tags/Workflow/default.aspx" /></entry><entry><title>Le Service Pack 2 de Vista en beta, c'est pour cette semaine!</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/12/01/le-service-pack-2-de-vista-en-beta-c-est-pour-cette-semaine.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/12/01/le-service-pack-2-de-vista-en-beta-c-est-pour-cette-semaine.aspx</id><published>2008-12-01T19:39:00Z</published><updated>2008-12-01T19:39:00Z</updated><content type="html">&lt;p&gt;Alors qu&amp;#39;il y a un an presque jour pour jour je vous annonçais la venue du SP1 de Vista, voici désormais le SP2 en beta!&lt;/p&gt;
&lt;p&gt;Comme pour son prédécesseur, il corrige certes quelques bugs, failles de sécurité et autres incohérences qui persisteraient après le SP1 mais il ajoute de nouvelles fonctionnalités / possibilités. &lt;/p&gt;
&lt;p&gt;Pour le télécharger, il vous faudra attendre le:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2 décembre pour les abonnés MSDN et Technet;&lt;/li&gt;
&lt;li&gt;4 décembre en téléchargement publique sur MSDN et Technet.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Les nouveautés les plus importantes de ce Service Pack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support de types d&amp;#39;hardware émergeants:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Support du Bluethoot 2.1;&lt;/li&gt;
&lt;li&gt;Possibilité d&amp;#39;enregistrer des données sur des supports Blue-Ray;&lt;/li&gt;
&lt;li&gt;...;&lt;/li&gt;&lt;/ul&gt;
&lt;li&gt;Amélioration de l&amp;#39;administration;&lt;/li&gt;
&lt;li&gt;Amélioration des performances:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Windows Search 4 qui améliore les performances d&amp;#39;indexation et améliore la qualité des résultats;&lt;/li&gt;
&lt;li&gt;Diminution des ressources nécessaires pour les gadgets de la toolbar;&lt;/li&gt;
&lt;li&gt;Hyper-V.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;p&gt;Des améliorations concernant la compatibilité entre des logiciels tels que ZoneAlarm et Vista sont présentes. Par ailleurs, Microsoft annonce que toute application qu&amp;#39;il n&amp;#39;y aura pas de régression de la compatibilité lors du passage au SP2 (heureusement ceci dit...).&lt;/p&gt;
&lt;p&gt;On notera aussi qu&amp;#39;un outil pour nettoyer les fichiers devenus obsolètes après l&amp;#39;installation du SP2 est fourni. &lt;/p&gt;
&lt;p&gt;N&amp;#39;hésitez pas à poster vos feedbacks à ce sujet et n&amp;#39;oubliez pas, il s&amp;#39;agit d&amp;#39;une version beta, il n&amp;#39;est pas conseillé de l&amp;#39;installation pour une installation en &amp;quot;production&amp;quot;.&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=175" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Vista" scheme="http://didierdanse.net/blogs/dev/archive/tags/Vista/default.aspx" /><category term="Windows Server" scheme="http://didierdanse.net/blogs/dev/archive/tags/Windows+Server/default.aspx" /></entry><entry><title>SharePoint: des uploads lents avec IE6? Pourquoi?</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/11/30/sharepoint-des-uploads-lents-avec-ie6-pourquoi.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/11/30/sharepoint-des-uploads-lents-avec-ie6-pourquoi.aspx</id><published>2008-11-30T12:37:17Z</published><updated>2008-11-30T12:37:17Z</updated><content type="html">&lt;p&gt;Alors que l&amp;#39;envoi de fichier via WebDAV (c&amp;#39;est-&amp;#224;-dire &amp;#224; l&amp;#39;aide de la vue Explorateur) se passe efficacement, l&amp;#39;envoi de fichiers via l&amp;#39;interface web dans SharePoint s&amp;#39;av&amp;#232;re tr&amp;#232;s lent?&lt;/p&gt;  &lt;p&gt;Si vous disposez d&amp;#39;Internet Explorer 6 sur les pcs depuis lesquels l&amp;#39;upload est lent, ne cherchez plus le pourquoi! Si ce n&amp;#39;est pas le cas, il s&amp;#39;agit juste d&amp;#39;une piste &amp;#224; suivre.&lt;/p&gt;  &lt;p&gt;La cause est simple: Internet Explorer 6 utilise une cl&amp;#233; de registre qui indique la taille du buffer &amp;#224; utiliser pour l&amp;#39;envoi des fichiers. La taille par d&amp;#233;faut pose probl&amp;#232;me d&amp;#232;s lors que vous faites l&amp;#39;upload d&amp;#39;un fichier de plus de 2Mo. Apr&amp;#232;s quelques secondes, l&amp;#39;upload semble s&amp;#39;arr&amp;#234;ter (et pour preuve, vous pouvez monitorer la charge r&amp;#233;seau au travers de l&amp;#39;information &amp;quot;Total Bytes/sec&amp;quot;) et un timeout intervient d&amp;#232;s lors.&lt;/p&gt;  &lt;p&gt;Internet Explorer 7 ne souffre pas de ce param&amp;#232;tre puisque la valeur de la cl&amp;#233; s&amp;#39;est vue modifi&amp;#233;e.&lt;/p&gt;  &lt;p&gt;Vous trouverez la proc&amp;#233;dure pour mettre &amp;#224; jour le param&amp;#232;tre: &lt;a title="http://support.microsoft.com/kb/329781/en-us" href="http://support.microsoft.com/kb/329781/en-us"&gt;http://support.microsoft.com/kb/329781/en-us&lt;/a&gt;&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=174" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Sharepoint" scheme="http://didierdanse.net/blogs/dev/archive/tags/Sharepoint/default.aspx" /><category term="Internet Explorer" scheme="http://didierdanse.net/blogs/dev/archive/tags/Internet+Explorer/default.aspx" /></entry><entry><title>SharePoint: Récupérer la taille d'un Item</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/11/23/sharepoint-r-233-cup-233-rer-la-taille-d-un-item.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/11/23/sharepoint-r-233-cup-233-rer-la-taille-d-un-item.aspx</id><published>2008-11-23T13:18:03Z</published><updated>2008-11-23T13:18:03Z</updated><content type="html">&lt;p&gt;On fera le calcul en utilisant deux fonctions:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;GetAttachmentsTotalSize&lt;/strong&gt;: renvoie la taille totale occup&amp;#233;e par les fichiers attach&amp;#233;s &amp;#224; l&amp;#39;item;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;GetItemSize&lt;/strong&gt;: renvoie la taille total des fichiers attach&amp;#233;s &amp;#224; laquelle on y ajoute la taille du contenu inclus dans les diff&amp;#233;rents champs.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;GetAttachmentsTotalSize&lt;/strong&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetAttachmentsTotalSize(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; item &lt;span class="kwrd"&gt;as&lt;/span&gt; SPListItem) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; size &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = 0

        &lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; filename &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; &lt;span class="kwrd"&gt;In&lt;/span&gt; item.Attachments
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; file &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = item.Web.GetFileAsString( _ 
                item.Attachments.UrlPrefix + filename)
            size = size + file.Length
        &lt;span class="kwrd"&gt;Next&lt;/span&gt;

        &lt;span class="kwrd"&gt;Return&lt;/span&gt; size
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;GetItemSize&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetItemSize(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; item &lt;span class="kwrd"&gt;as&lt;/span&gt; SPListItem) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; size &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = GetAttachmentsTotalSize()

        &lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; field &lt;span class="kwrd"&gt;As&lt;/span&gt; SPField &lt;span class="kwrd"&gt;In&lt;/span&gt; item.Fields
            &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; (item(field.Id) &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                size = size + item(field.Id).ToString().Length
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;

        &lt;span class="kwrd"&gt;Next&lt;/span&gt;

        &lt;span class="kwrd"&gt;Return&lt;/span&gt; size
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Bon calcul!&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=172" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Sharepoint" scheme="http://didierdanse.net/blogs/dev/archive/tags/Sharepoint/default.aspx" /></entry><entry><title>SharePoint: Attention aux champs users après une migration avec la Content Migration API</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/10/20/sharepoint-attention-aux-champs-users-apr-232-s-une-migration-avec-la-content-migration-api.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/10/20/sharepoint-attention-aux-champs-users-apr-232-s-une-migration-avec-la-content-migration-api.aspx</id><published>2008-10-20T19:54:23Z</published><updated>2008-10-20T19:54:23Z</updated><content type="html">&lt;p&gt;&lt;em&gt;[&lt;a href="http://didierdanse.net/blogs/dev_en/archive/2008/10/20/sharepoint-be-aware-of-group-filtering-in-people-field-with-moving-sites-using-content-migration-api.aspx"&gt;English version&lt;/a&gt;]&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Si dans vos listes vous utilisez un champ &lt;em&gt;user&lt;/em&gt; qui filtre les utilisateurs possibles sur base d&amp;#39;un groupe SharePoint et que vous avez l&amp;#39;intention de migrer votre application d&amp;#39;un environnement &amp;#224; un autre via la Content Migration API, ce post est pour vous!&lt;/p&gt;  &lt;p&gt;Tout d&amp;#39;abord, un rapide rappel sur la mani&amp;#232;re de filtrer les users sur base d&amp;#39;un groupe:&lt;/p&gt;  &lt;p&gt;Dans la d&amp;#233;finition de la liste, cliquez sur le nom de la colonne &lt;em&gt;user&lt;/em&gt;. Une fois dans la fen&amp;#234;tre de propri&amp;#233;t&amp;#233;s, il suffit de s&amp;#233;lectionner le groupe utilis&amp;#233; pour filtrer les users.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointAttentionauxchampsusersaprsune_13B4E/02_thumb%5B1%5D_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="94" alt="02_thumb[1]" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointAttentionauxchampsusersaprsune_13B4E/02_thumb%5B1%5D_thumb.jpg" width="321" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Comment cela se passe-t-il en interne? L&amp;#39;identifiant du groupe s&amp;#233;lectionn&amp;#233; est stock&amp;#233; dans une propri&amp;#233;t&amp;#233; du champ. Il s&amp;#39;agit de SPFieldUser.SelectionGroup qui re&amp;#231;oit et renvoie un entier comme en atteste MSDN: &lt;a title="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfielduser.selectiongroup.aspx" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfielduser.selectiongroup.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfielduser.selectiongroup.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Cet identifiant (424 dans notre exemple) est celui pr&amp;#233;sent dans l&amp;#39;url lorsque vous modifiez les membres du groupe.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointAttentionauxchampsusersaprsune_13B4E/01_thumb%5B2%5D_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="158" alt="01_thumb[2]" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointAttentionauxchampsusersaprsune_13B4E/01_thumb%5B2%5D_thumb.jpg" width="644" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Jusque l&amp;#224;, pas de probl&amp;#232;me. &lt;/p&gt;  &lt;p&gt;L&amp;#224; o&amp;#249; peut survenir un probl&amp;#232;me, c&amp;#39;est lorsque, via STSADM (stsadm -o export) ou un outil (SP RAD Studio par exemple) utilisant la Content Migration API, nous exportons ce site et ensuite l&amp;#39;importons dans un autre environnement. Et l&amp;#224;, surprise! Il s&amp;#39;av&amp;#232;re que le groupe s&amp;#233;lectionn&amp;#233; pour le filtre ne correspond pas &amp;#224; ce que nous attendions. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointAttentionauxchampsusersaprsune_13B4E/03_thumb%5B12%5D_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="158" alt="03_thumb[12]" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointAttentionauxchampsusersaprsune_13B4E/03_thumb%5B12%5D_thumb.jpg" width="644" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Que s&amp;#39;est-il pass&amp;#233;? La r&amp;#233;ponse est simple. Seul un identifiant sous forme d&amp;#39;entier est utilis&amp;#233; comme nous l&amp;#39;avons vu. En regardant le package g&amp;#233;n&amp;#233;r&amp;#233; par une op&amp;#233;ration d&amp;#39;export, on pourrait penser que l&amp;#39;import ne posera aucun probl&amp;#232;me puisque l&amp;#39;on retrouve&amp;#160; &lt;em&gt;&amp;lt;Group Id=&amp;quot;424&amp;quot; Name=&amp;quot;GroupName&amp;quot; [...]&amp;gt;&lt;/em&gt; dans le fichier &lt;em&gt;UserGroup.xml&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Cependant, lors de l&amp;#39;import, pour peu que l&amp;#39;identifiant soit d&amp;#233;j&amp;#224; utilis&amp;#233;, le groupe import&amp;#233; recevra un nouvel ID. Malheureusement, l&amp;#39;ID utilis&amp;#233; par le champ user n&amp;#39;est quant &amp;#224; lui pas modifi&amp;#233;. Et c&amp;#39;est ainsi que l&amp;#39;on se retrouve avec un filtre sur un groupe non souhait&amp;#233;!&lt;/p&gt;  &lt;p&gt;Ainsi, il nous sera n&amp;#233;cessaire de modifier manuellement ce filtre apr&amp;#232;s la migration. Pour cela, il suffit de passer par l&amp;#39;interface web... si nous en avons le droit. Dans le cas contraire, une solution possible est d&amp;#39;utiliser des extensions STSADM. C&amp;#39;est cette solution que j&amp;#39;ai mis en place afin de r&amp;#233;aliser toutes les op&amp;#233;rations d&amp;#39;une traite. &lt;/p&gt;  &lt;p&gt;Cette op&amp;#233;ration prend en param&amp;#232;tre le nom d&amp;#39;un groupe SharePoint (et non pas sans identifiant puisqu&amp;#39;on ne le conna&amp;#238;t pas &amp;#224; l&amp;#39;avance dans notre sc&amp;#233;nario). &lt;/p&gt;  &lt;p&gt;&lt;em&gt;stsadm -o setfieldproperties -url &amp;lt;SiteUrl&amp;gt; -list &amp;lt;Listname&amp;gt; -field &amp;lt;Fieldname&amp;gt; -userfieldgroupfilter &amp;lt;GroupName&amp;gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Cette extension fait partie des extensions &lt;em&gt;Migration extensions&lt;/em&gt; pr&amp;#233;sentes sur CodePlex (&lt;a href="http://www.codeplex.com/migrationstsadmext"&gt;http://www.codeplex.com/migrationstsadmext&lt;/a&gt;).&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=159" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Sharepoint" scheme="http://didierdanse.net/blogs/dev/archive/tags/Sharepoint/default.aspx" /><category term="STSADM" scheme="http://didierdanse.net/blogs/dev/archive/tags/STSADM/default.aspx" /><category term="Content Migration API" scheme="http://didierdanse.net/blogs/dev/archive/tags/Content+Migration+API/default.aspx" /></entry><entry><title>Roadshow MSDN: Comment Silverlight 2 et WPF peuvent procurer de riches expériences client aux utilisateurs - Liège, 15 Octobre</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/09/30/roadshow-msdn-comment-silverlight-2-et-wpf-peuvent-procurer-de-riches-exp-233-riences-client-aux-utilisateurs-li-232-ge-15-octobre.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/09/30/roadshow-msdn-comment-silverlight-2-et-wpf-peuvent-procurer-de-riches-exp-233-riences-client-aux-utilisateurs-li-232-ge-15-octobre.aspx</id><published>2008-09-30T18:38:00Z</published><updated>2008-09-30T18:38:00Z</updated><content type="html">&lt;p&gt;Des sessions techniques dans la r&amp;#233;gion li&amp;#233;geoise, cela est suffisamment rare pour &amp;#234;tre signal&amp;#233;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Aujourd&amp;#8217;***, les d&amp;#233;veloppeurs qui construisent de nouvelles applications veillent tout particuli&amp;#232;rement &amp;#224; ce qu&amp;#8217;elles procurent une riche exp&amp;#233;rience client aux utilisateurs. En effet, ceux-ci sont de plus en plus familiaris&amp;#233;s avec des applications (web) capables de r&amp;#233;agir de fa&amp;#231;on logique et d&amp;#8217;interagir d&amp;#8217;avantage avec eux en tenant compte de leurs actions.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;u&gt;Rejoignez-nous&lt;/u&gt; au RIA Roadshow et restez &amp;#224; l&amp;#39;&amp;#233;coute des derni&amp;#232;res innovations. Vous y apprendrez comment d&amp;#233;velopper de riches applications pouvant &amp;#234;tre d&amp;#233;ploy&amp;#233;es sur le web et au-del&amp;#224; de ce que vous pouvez habituellement faire avec une application bas&amp;#233;e sur un navigateur&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Cette session abordera 4 sujets principaux: &lt;/em&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;em&gt;Les nouvelles fonctionnalit&amp;#233;s de ASP.NET AJAX&lt;/em&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;&lt;em&gt;Comment utiliser les Windows Live Tools for Visual Studio&lt;/em&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;&lt;em&gt;Comment construire une application Silverlight 2 qui fait appel aux services &amp;#224; distance, &amp;#224; l&amp;#8217;inter-liaison des donn&amp;#233;es (data binding), &amp;#224; la cr&amp;#233;ation de gabarits et styles (templating &amp;amp; styling) et cela, aussi bien avec Visual Studio 2008 qu&amp;#8217;avec Expression Blend 2.5&lt;/em&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;&lt;em&gt;Windows Presentation Foundation et le .NET Client Profile&lt;/em&gt;&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;Inscriptions: &lt;a title="http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032390486&amp;amp;%3bCulture=fr-BE" href="http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032390486&amp;amp;%3bCulture=fr-BE"&gt;http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032390486&amp;amp;%3bCulture=fr-BE&lt;/a&gt;&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=157" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Web browsers" scheme="http://didierdanse.net/blogs/dev/archive/tags/Web+browsers/default.aspx" /><category term=".NET" scheme="http://didierdanse.net/blogs/dev/archive/tags/.NET/default.aspx" /><category term="WPF" scheme="http://didierdanse.net/blogs/dev/archive/tags/WPF/default.aspx" /><category term="Silverlight" scheme="http://didierdanse.net/blogs/dev/archive/tags/Silverlight/default.aspx" /></entry><entry><title>TechDays '08 à Luxembourg: 30 septembre 2008 à Mondorf-les-Bains, Luxembourg et c'est gratuit!</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/09/06/techdays-08-224-luxembourg-30-septembre-2008-224-mondorf-les-bains-luxembourg-et-c-est-gratuit.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/09/06/techdays-08-224-luxembourg-30-septembre-2008-224-mondorf-les-bains-luxembourg-et-c-est-gratuit.aspx</id><published>2008-09-06T11:20:00Z</published><updated>2008-09-06T11:20:00Z</updated><content type="html">&lt;p&gt;C&amp;#39;est au tour du Luxembourg d&amp;#39;héberger les TechDays &amp;#39;08. Avec 6 sessions pour les développeurs et 3 orientées IT Pro, ces TechDays ont pour but d&amp;#39;avoir un large aperçu des nouveautés de .NET et du Service Pack associé ainsi que sur la virtualisation, un des sujets de discussion les plus en vogue actuellement.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est gratuit et le nombre de places est limité donc inscrivez-vous au plus vite!&lt;/p&gt;
&lt;p&gt;Agenda complet: &lt;a title="http://www.microsoft.com/belux/techdays08/agenda.aspx" href="http://www.microsoft.com/belux/techdays08/agenda.aspx"&gt;http://www.microsoft.com/belux/techdays08/agenda.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Inscription: &lt;a title="http://www.microsoft.com/belux/techdays08/inscrivez.aspx" href="http://www.microsoft.com/belux/techdays08/inscrivez.aspx"&gt;http://www.microsoft.com/belux/techdays08/inscrivez.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=152" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Visual Studio 2008" scheme="http://didierdanse.net/blogs/dev/archive/tags/Visual+Studio+2008/default.aspx" /><category term="TechDays" scheme="http://didierdanse.net/blogs/dev/archive/tags/TechDays/default.aspx" /><category term="Microsoft Belux" scheme="http://didierdanse.net/blogs/dev/archive/tags/Microsoft+Belux/default.aspx" /><category term="LINQ" scheme="http://didierdanse.net/blogs/dev/archive/tags/LINQ/default.aspx" /><category term="Windows Server" scheme="http://didierdanse.net/blogs/dev/archive/tags/Windows+Server/default.aspx" /><category term="Evenement" scheme="http://didierdanse.net/blogs/dev/archive/tags/Evenement/default.aspx" /></entry><entry><title>ASP.NET AJAX: Tous mes UpdatePanels sont raffraîchis lors d'un retour serveur alors que seul un UpdatePanel ne devrait l'être, pourquoi?</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/09/02/asp-net-ajax-tous-mes-updatepanels-sont-raffra-238-chis-lors-d-un-retour-serveur-alors-que-seul-un-updatepanel-ne-devrait-l-234-tre-pourquoi.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/09/02/asp-net-ajax-tous-mes-updatepanels-sont-raffra-238-chis-lors-d-un-retour-serveur-alors-que-seul-un-updatepanel-ne-devrait-l-234-tre-pourquoi.aspx</id><published>2008-09-02T18:47:32Z</published><updated>2008-09-02T18:47:32Z</updated><content type="html">&lt;p&gt;Dans la continuit&amp;#233; des questions / r&amp;#233;ponses sur ASP.NET AJAX (1.0 ou 3.5, peu importe dans ce cas), voici la r&amp;#233;ponse &amp;#224; une petite question relativement simple mais que tout d&amp;#233;veloppeur d&amp;#233;butant avec ASP.NET AJAX rencontrera certainement.&lt;/p&gt;  &lt;p&gt;Imaginons une page contenant les &amp;#233;l&amp;#233;ments suivants:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Deux update panels; &lt;/li&gt;    &lt;li&gt;Un timer; &lt;/li&gt;    &lt;li&gt;Un bouton et un label dans chacun des update panels. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ceci donne une page de ce type (sans aucun chichi et ne respectant aucunement les conventions de nommage habituelles): &lt;/p&gt;  &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/ASP.NETAJAXUntimerattachun_11EA9/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="244" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/ASP.NETAJAXUntimerattachun_11EA9/image_thumb.png" width="189" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Un seul trigger est associ&amp;#233; &amp;#224; l&amp;#39;UpdatePanel1. Celui-ci a pour but de r&amp;#233;aliser un retour serveur asynchrone lorsque Timer1 lance l&amp;#39;&amp;#233;v&amp;#232;nement &lt;em&gt;Tick&lt;/em&gt;, ce qui donne:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:UpdatePanel&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;UpdatePanel1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Triggers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:AsyncPostBackTrigger&lt;/span&gt; &lt;span class="attr"&gt;ControlID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Timer1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;EventName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Tick&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Triggers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;        
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Label1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Label&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Button1_Click&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Button&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:UpdatePanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Aucun trigger n&amp;#39;est associ&amp;#233; &amp;#224; l&amp;#39;UpdatePanel2 et pourtant, les deux updatepanels sont rafraichis lors de ce fameux retour asynchrone. &lt;/p&gt;

&lt;p&gt;Ceci se justifie par le fait que, &lt;strong&gt;par d&amp;#233;faut, la propri&amp;#233;t&amp;#233; &lt;em&gt;UpdateMode&lt;/em&gt; des objets &lt;em&gt;UpdatePanel&lt;/em&gt; a la valeur &lt;em&gt;Always&lt;/em&gt;&lt;/strong&gt;. Ainsi, quelque soit l&amp;#39;&amp;#233;l&amp;#233;ment qui a effectu&amp;#233; le retour serveur, les &lt;em&gt;UpdatePanel&lt;/em&gt; sont raffra&amp;#238;chis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Afin de mieux contr&amp;#244;ler le rechargement des UpdatePanel, il suffit de mettre la propri&amp;#233;t&amp;#233; &lt;em&gt;UpdateMode&lt;/em&gt; &amp;#224; la valeur &lt;em&gt;Conditional&lt;/em&gt;&lt;/strong&gt;. D&amp;#232;s lors seul les retours serveurs effectu&amp;#233;s et pr&amp;#233;sents dans les triggers auront pour effet de recharger le contenu de notre UpdatePanel.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:UpdatePanel&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;UpdatePanel1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot; &lt;strong&gt;UpdateMode=&amp;quot;Conditional&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Triggers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:AsyncPostBackTrigger&lt;/span&gt; &lt;span class="attr"&gt;ControlID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Timer1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;EventName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Tick&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Triggers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;        
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Label1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Label&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Button1_Click&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Button&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:UpdatePanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Pour rappel, vous pouvez retrouver une &lt;a title="http://didierdanse.net/files/folders/articles/entry58.aspx" href="http://didierdanse.net/files/folders/articles/entry58.aspx"&gt;Introduction &amp;#224; ASP.NET AJAX&lt;/a&gt; sur ce m&amp;#234;me site. &lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=151" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="ASP.NET" scheme="http://didierdanse.net/blogs/dev/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>ASP.NET AJAX 1.0: Sys is undefined, pourquoi et comment le corriger?</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/09/01/asp-net-ajax-1-0-sys-is-undefined-pourquoi-et-comment-le-corriger.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/09/01/asp-net-ajax-1-0-sys-is-undefined-pourquoi-et-comment-le-corriger.aspx</id><published>2008-09-01T19:19:14Z</published><updated>2008-09-01T19:19:14Z</updated><content type="html">&lt;p&gt;Certes, c&amp;#39;est loin d&amp;#39;être un problème récent mais étant récemment retombé sur le problème, je me décide enfin à écrire la solution... Je sais que cela servira au moins à une personne :-)&lt;/p&gt; &lt;p&gt;Après avoir installé les extensions ASP.NET AJAX 1.0 sur un poste dans le but de réaliser des développements avec Visual Studio 2008, on pourrait s&amp;#39;attendre à trouver le template de projet &amp;quot;ASP.NET AJAX Enabled Web Application&amp;quot;. Il n&amp;#39;en est pourtant rien comme en atteste la capture d&amp;#39;écran suivante:&lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/ASP.0Sysisundefinedpourquoietcommentleco_12143/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="264" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/ASP.0Sysisundefinedpourquoietcommentleco_12143/image_thumb.png" width="634" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Puisque nous n&amp;#39;avons guère le choix, choisissons le template ASP.NET Web Application. Rapidement, nous pouvons remarquer que les composants &amp;quot;de base&amp;quot; de ASP.NET AJAX Extensions sont bel et bien présents dans la toolbox. Parfait! &lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/ASP.0Sysisundefinedpourquoietcommentleco_12143/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="228" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/ASP.0Sysisundefinedpourquoietcommentleco_12143/image_thumb_1.png" width="205" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Il ne nous reste donc plus à les utiliser à l&amp;#39;aide d&amp;#39;un drag and drop, tout ce qu&amp;#39;il y a de plus classique. &lt;/p&gt; &lt;p&gt;Si on observe le web.config (le plus simple étant de garder le web.config ouvert dans Visual Studio, vous serez immédiatement averti des changements), on peut voir que quelques lignes ont été ajoutées dans le web.config:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;assemblies&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;System.Web.Extensions, Version=1.0.61025.0, &lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;assemblies&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Dès lors, on pourrait se dire que tout va bien et que Visual Studio a fait le travail pour nous. Mais après exécuté la page, l&amp;#39;erreur &lt;em&gt;&amp;#39;Sys&amp;#39; is undefined&lt;/em&gt; apparaît dans le browser.&lt;/p&gt;
&lt;p&gt;Pourquoi? La réponse est simple... On retrouve&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;/ScriptResource.axd?d=xyz&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;/ScriptResource.axd?d=abc&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;dans la source HTML. Or si on vérifie ce que génére ce fichier, on remarque que celui-ci n&amp;#39;est pas disponible. Cela est dû au fait que le serveur ne sait pas comment interpréter les .axd. C&amp;#39;est pour cela qu&amp;#39;il est nécessaire d&amp;#39;ajouter les lignes suivantes dans le web.config et ce entre &lt;em&gt;&amp;lt;system.web&amp;gt;&lt;/em&gt; et &lt;em&gt;&amp;lt;/system.web&amp;gt;&lt;/em&gt;:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;httpHandlers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;verb&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;GET&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ScriptResource.axd&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;System.Web.Handlers.ScriptResourceHandler&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;validate&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;httpHandlers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Désormais, il ne nous reste plus qu&amp;#39;à laisser exploser notre imagination.&lt;/p&gt;
&lt;p&gt;Le web.config minimal:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;connectionStrings&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.web&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;httpHandlers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;verb&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;GET&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ScriptResource.axd&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;System.Web.Handlers.ScriptResourceHandler&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;validate&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;httpHandlers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;compilation&lt;/span&gt; &lt;span class="attr"&gt;debug&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;assemblies&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;assemblies&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;        
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;compilation&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;authentication&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Windows&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.web&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Notez que vous pouvez trouver un web.config complet à l&amp;#39;adresse suivante: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025&lt;/em&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=148" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Sharepoint" scheme="http://didierdanse.net/blogs/dev/archive/tags/Sharepoint/default.aspx" /><category term="Internet Explorer" scheme="http://didierdanse.net/blogs/dev/archive/tags/Internet+Explorer/default.aspx" /><category term="Visual Studio 2008" scheme="http://didierdanse.net/blogs/dev/archive/tags/Visual+Studio+2008/default.aspx" /><category term="ASP.NET" scheme="http://didierdanse.net/blogs/dev/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>SharePoint: Introduction à la Content Migration API</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/08/10/sharepoint-introduction-224-la-content-migration-api.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/08/10/sharepoint-introduction-224-la-content-migration-api.aspx</id><published>2008-08-10T09:48:38Z</published><updated>2008-08-10T09:48:38Z</updated><content type="html">&lt;p&gt;La Content Migration API, voilà une librairie importante de SharePoint et qui s&amp;#39;avère souvent trop peu connue. Comprendre cette API permet de réaliser des opérations de transfert de données d&amp;#39;un environnement SharePoint à un autre et de ce manière efficace. C&amp;#39;est pour cette raison que j&amp;#39;ai décidé de publier un ensemble de posts à ce sujet afin de montrer ce qu&amp;#39;il est possible de faire grâce à cette librairie. Mais commençons par le début et voyons ce qu&amp;#39;est cette API.  &lt;p&gt;&lt;strong&gt;Qu&amp;#39;est ce que la content migration API?&lt;/strong&gt;  &lt;p&gt;La Content Migration API permet d&amp;#39;effecuter le &lt;strong&gt;transfert de données d&amp;#39;un site SharePoint&lt;/strong&gt;. Ce transfert peut s&amp;#39;effectuer entre des environnements connectés (éventuellement le même environnement) ou entre des énvironnements totalement déconnectés.&amp;nbsp; &lt;p&gt;Qu&amp;#39;entend-t-on par le terme &lt;em&gt;données&lt;/em&gt;? En fait tout (ou presque) ce qu&amp;#39;il est possible de définir via l&amp;#39;interface web de SharePoint, à savoir:  &lt;ul&gt; &lt;li&gt;Listes  &lt;li&gt;Eléments de liste (lists items) &lt;li&gt;Web Parts  &lt;li&gt;Page customisées &lt;li&gt;Pages maîtres (master pages) &lt;li&gt;Types de contenu (content types) &lt;li&gt;CSS  &lt;li&gt;Page layouts  &lt;li&gt;Colonnes de sites  &lt;li&gt;Images référencées dans des pages &lt;li&gt;... &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Ne font pas partie des données qui peuvent être transportées par la Content Migration API et définis via l&amp;#39;interface web de SharePoint:  &lt;ul&gt; &lt;li&gt;Alertes  &lt;li&gt;Statuts Check in/Check out  &lt;li&gt;Eléments de la corbeille  &lt;li&gt;Statuts des Workflows  &lt;li&gt;Logs des modifications&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;On notera également que les éléments suivants ne sont également pas pris en compte lors de l&amp;#39;export:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Features  &lt;li&gt;Workflows personnalisés  &lt;li&gt;Solutions&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;La raison pour laquelle les features et les workflows personnalisés ne peuvent être exportés est qu&amp;#39;ils se trouvent dans le système de fichiers et non pas dans la base de données comme pour les autres éléments. Si on devait résumer ceci, on dirait que tout ce qui résulte d&amp;#39;un développement ou d&amp;#39;une customisation (ajouter une liste n&amp;#39;est pas pour moi une customisation ;-) ), et donc déployable via les &lt;strong&gt;solutions, doivent être déployés en suivant les principes courants&lt;/strong&gt;, en utilisant par exemple STSADM.&lt;/p&gt; &lt;p&gt;Le transfert de données d&amp;#39;un site à l&amp;#39;autre se fait en trois étapes:  &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Export&lt;/strong&gt;: Choix des éléments à exporter et génération d&amp;#39;un ensemble de fichiers contenant les données;  &lt;li&gt;&lt;strong&gt;Transport&lt;/strong&gt;: Les fichiers générés doivent être placés afin d&amp;#39;être accessibles lors d&amp;#39;opérations vers l&amp;#39;environnement cible. Le transport peut se faire par n&amp;#39;importe quel moyen (FTP, clé USB, ...) puisqu&amp;#39;il s&amp;#39;agit de simples fichiers;  &lt;li&gt;&lt;strong&gt;Import&lt;/strong&gt;: Sur base des fichiers générés et mis à disposition, l&amp;#39;import peut se faire dans l&amp;#39;environnement cible.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Les fichiers intermédiaires étant basés sur &lt;strong&gt;une structure de fichiers connue&lt;/strong&gt; (voir &lt;a href="http://msdn.microsoft.com/library/bb249989.aspx"&gt;Content Migration XML Schema Reference&lt;/a&gt;), il est possible de générer ces fichiers de données depuis une application tierce et ce afin de faciliter l&amp;#39;import d&amp;#39;information provenant d&amp;#39;un autre système d&amp;#39;information.  &lt;p&gt;&lt;strong&gt;Par quelles fonctionnalités SharePoint utilise-t-il la C.M. API?&lt;/strong&gt;  &lt;p&gt;Il ne s&amp;#39;agit pas d&amp;#39;une liste exhaustive loin de là mais un aperçu des fonctionnalités utilisées régulièrement et pour lesquelles on ne soupçone pas toujours l&amp;#39;utilisation de l&amp;#39;API.  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Copier / Déplacer depuis les menus de gestion du contenu et de structure&lt;/em&gt;&lt;/strong&gt;&amp;nbsp; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="102" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;Pour faire simple, quelles sont les opérations qui sont effectuées lorsque l&amp;#39;on veut copier un site? On pourrait penser qu&amp;#39;il y a une boucle pour réaliser une copie du site source vers le site cible (la copie devant se faire dans le même site collection, le site source et le site destination sont d&amp;#39;office connectés entre eux) mais il n&amp;#39;en est rien. Il s&amp;#39;agit de la suite d&amp;#39;actions désormais si bien connue:  &lt;ul&gt; &lt;li&gt;Export: vers le système de fichiers local;  &lt;li&gt;(Transport: non nécessaire dans ce cas puisque la cible et la destination se trouve sur le même serveur; ) &lt;li&gt;Import: vers un nouveau site SharePoint.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;On notera que lors de la copie d&amp;#39;un site vers un autre à l&amp;#39;aide de cette fonctionnalité, la sécurité du site n&amp;#39;est pas dupliquée. Nous comprendrons pourquoi très bientôt. N&amp;#39;oubliez donc pas de réappliquer vos règles de sécurité.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;STSADM&lt;/em&gt;&lt;/strong&gt;  &lt;p&gt;STSADM, que certains nomment &lt;em&gt;Super admin tool&lt;/em&gt;, est un outil utilisable en ligne de commande fourni avec SharePoint qui permet d&amp;#39;effectuer un ensemble considérable d&amp;#39;opérations autour de SharePoint. Si vous ne connaissez pas encore les possibilités (et les limites) de cet outil, foncez sur votre moteur de recherche préféré et faites une petite recherche à ce sujet... en attendant que je poste à ce sujet :))  &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_6.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="484" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_thumb_2.png" width="504" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;Comme à l&amp;#39;accoutumée, comment peut-on copier des données d&amp;#39;un site à l&amp;#39;autre à l&amp;#39;aide de STSADM? En suivant nos éternelles trois étapes bien entendu:  &lt;ul&gt; &lt;li&gt;Export: du site source vers un fichier (compressé dans l&amp;#39;exemple ci-dessous)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt;stsadm -o export -url &lt;/em&gt;&lt;a href="http://monserveur"&gt;&lt;em&gt;&lt;a href="http://monserveur/monsitesource"&gt;http://monserveur&lt;/em&gt;&lt;/a&gt;&lt;em&gt;/monsitesource&lt;/a&gt; -filename &amp;quot;c:\un repertoire\content.cmp&amp;quot;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Un rapide aperçu des options liées à la sélection des éléments à exporter de cette fonctionnalité de STSADM:&lt;/p&gt; &lt;p&gt;&lt;em&gt;stsadm.exe -o export&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -url &amp;lt;URL du site à exporter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -filename &amp;lt;Chemin vers le fichier ou le répertoire intermédiaire&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [-includeusersecurity]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [-versions &amp;lt;1-4&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 - Dernière version majeure des fichiers et des list items (valeur par défaut)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 - Version courante, qu&amp;#39;elle soit mineure ou majeure&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 - Dernière version majeure et dernière version mineure des fichiers et des lists items&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 - Toutes les versions]&lt;/em&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Au vu des propriétés, on se rend rapidement compte qu&amp;#39;il n&amp;#39;est possible d&amp;#39;exporter que des sites complets.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Transport des fichiers: A vous de choisir ce qui vous convient le mieux. Tous les chemins mènent au serveur de destination ;-);  &lt;li&gt;Import: d&amp;#39;un fichier (compressé dans l&amp;#39;exemple ci-dessous) vers le site cible&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt;stsadm -o import -url &lt;a href="http://monserveur/monsitecible"&gt;http://monserveur/monsitecible&lt;/a&gt; -filename &amp;quot;c:\un repertoire\content.cmp&amp;quot;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Un petit tour du côté des options liées à la manière d&amp;#39;importer les éléments:&lt;/p&gt; &lt;p&gt;&lt;em&gt;stsadm.exe -o import&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -url &amp;lt;URL du site dans lequel importer les données&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -filename &amp;lt;Chemin vers le fichier ou le répertoire intermédiaire&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [-includeusersecurity]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [-updateversions &amp;lt;1-3&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 - Ajoute de nouvelles versions au fichier (valeur par défaut)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 - Remplace le fichier et ses versions (suppression avant insertion)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 - Ignore le fichier si il est déjà existant sur la destination]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;On notera qu&amp;#39;il existe d&amp;#39;autres propriétés/options liées aux fichiers générés (compression ou non, ...) qui sont certes importantes mais sont moins parlantes que celles qui nous intéresse ici. &lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Web Services&lt;/strong&gt;&lt;/em&gt;  &lt;p&gt;Le WebService &lt;em&gt;Sites&lt;/em&gt;, disponible à l&amp;#39;adresse &lt;a href="http://&amp;lt;Site&amp;gt;/_vti_bin/Sites.asmx"&gt;http://&amp;lt;Site&amp;gt;/_vti_bin/Sites.asmx&lt;/a&gt;, permet d&amp;#39;effectuer des exports et des imports de données. Comme pour &lt;em&gt;STSADM&lt;/em&gt;, le niveau le plus bas qu&amp;#39;il est possible d&amp;#39;exporter est le site. &lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_8.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="142" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_thumb_3.png" width="237" border="0" /&gt;&lt;/a&gt;&amp;nbsp; &lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_10.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="142" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_thumb_4.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Gestion de contenu web&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Le Web Content Management, que l&amp;#39;on retrouve au travers des &lt;em&gt;publishing sites&lt;/em&gt; suit la même procédure en ce qui concerne la publication d&amp;#39;information sur un site particulier. La source et la destination étant directement connecté, il n&amp;#39;y a ainsi que les opérations d&amp;#39;export et d&amp;#39;import qui sont effectuées. L&amp;#39;export se fait sur un&amp;nbsp; sous-ensemble de données, à savoir uniquement celles-qui doivent être publiées. Cette opération de filtre des données à exporter se nomme l&amp;#39;export sélectif. &lt;p&gt;&lt;strong&gt;Pourquoi utiliser la Content Migration API?&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Export sélectif&lt;/em&gt;&lt;/strong&gt;  &lt;p&gt;Que ce soit les web services ou STSADM, il n&amp;#39;est pas possible, nous l&amp;#39;avons vu, de réaliser un export de données d&amp;#39;un niveau plus bas que le site. Ce n&amp;#39;est cependant qu&amp;#39;une limite de l&amp;#39;outil et non pas de la Content Migration API puisque dans le cas du Web Content Management, l&amp;#39;API est utilisée pour exporter un sous-ensemble de données. Ainsi, seuls les éléments de liste qui ont été ajoutés ou mis à jour depuis une date donnée sont exportées afin de permettre une réplication d&amp;#39;un site à un autre.  &lt;p&gt;Utilisant la même API, nous pouvons effectuer la même opération et sélectionner les éléments à exporter. Nous verrons dans un prochain post que cela peut avoir plusieurs utilités. Bien entendu, les premiers intérêts que l&amp;#39;on peut trouver sont la publication d&amp;#39;éléments et la réplication de données d&amp;#39;un site vers un autre.  &lt;p&gt;Dans un prochain post, nous verrons comment effectuer un export sélectif du point de vue développement. Nous nous rendrons rapidement compte qu&amp;#39;il est aisé d&amp;#39;implémenter sa propre logique pour la sélection des données.  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Maintien des identifiants des éléments d&amp;#39;un site&lt;/em&gt;&lt;/strong&gt;  &lt;p&gt;Dans certains cas, il est important de préserver les identifiants d&amp;#39;un site à l&amp;#39;autre. On retrouve cette nécessité lors d&amp;#39;un export sélectif (pour savoir quel élément mettre à jour) mais aussi si un webpart référence une liste via son identifiant, il est nécessaire de retrouver le même identifiant pour cette dite liste.  &lt;p&gt;Nous verrons que dans certains cas, le maintien des identifiants n&amp;#39;est pas nécessaire et que pire que ça, cela peut poser parfois des problèmes. Effectivement, toutes les données sont stockées en base de données. Le GUID (identifiant unique) est utilisé comme clé primaire au sein de cette base. Le principe d&amp;#39;une clé primaire est d&amp;#39;interdire les doublons. Or que se passe-t-il si vous importez un package vers deux sites différents en maintenant les identifiants? Vous dupliquez les identifiants.  &lt;p&gt;&lt;strong&gt;Les packages de migration de données&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;De quoi est composé un package de migration de données?&lt;/em&gt;&lt;/strong&gt;  &lt;p&gt;Pour qu&amp;#39;une migration de données soit effective, il est nécessaire que tous les éléments nécessaires soient présents sur le serveur source. Un package de migration de données contient donc, en plus des données proprement dit, un ensemble de fichiers dans lesquels sont stockés les informations sur les éléments requis ou encore ceux à importer (groupes et utilisateurs pour la partie sécurité par exemple).  &lt;p&gt;Succintement, le package est formé des fichiers suivants:  &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_4.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="187" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_thumb_1.png" width="381" border="0" /&gt;&lt;/a&gt;  &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Manifest.xml: &lt;/strong&gt;est le fichier de base lors de toute migration;  &lt;li&gt;&lt;strong&gt;Requirements.xml:&lt;/strong&gt; contient la liste des éléments requis par le contenu à migrer. La vérification de l&amp;#39;existence de ces ressources se fait préalablement à toute migration de données;  &lt;li&gt;&lt;strong&gt;ExportSettings.xml:&lt;/strong&gt; contient la logique utilisée lors de l&amp;#39;export pour vérifier que tous les éléments attendus dans le package soient présents;  &lt;li&gt;&lt;strong&gt;RootObjectMap.xml:&lt;/strong&gt; contient l&amp;#39;élément de plus haut niveau à importer;  &lt;li&gt;&lt;strong&gt;SystemData.xml: &lt;/strong&gt;utilisé principalement lorsque l&amp;#39;on maintient les identifiants, il contient l&amp;#39;ensemble des éléments installés et requis sur le serveur. En cas d&amp;#39;absence de l&amp;#39;un ou plusieurs de ces éléments arrêtent l&amp;#39;import; &lt;li&gt;&lt;strong&gt;UserGroup.xml:&lt;/strong&gt; contient les informations provenant du site d&amp;#39;origine concernant les utilisateurs et les groupes SharePoint utilisés dans le site;  &lt;li&gt;&lt;strong&gt;LookupListMap.xml:&lt;/strong&gt; contient les liens entre items liés (c&amp;#39;est à dire utilisés dans les champs lookup);  &lt;li&gt;&lt;strong&gt;ViewFormsList.xml:&lt;/strong&gt; contient la liste des Web Parts en indiquant si il s&amp;#39;agit de vues ou de formulaires;  &lt;li&gt;&lt;strong&gt;fichiers .dat:&lt;/strong&gt; contiennent les données proprements dites.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Il existe un outil très utile pour parcourir le Content Migration Package Explorer: &lt;a title="http://blogs.msdn.com/ronalus/archive/2007/10/02/content-migration-package-explorer.aspx" href="http://blogs.msdn.com/ronalus/archive/2007/10/02/content-migration-package-explorer.aspx"&gt;http://blogs.msdn.com/ronalus/archive/2007/10/02/content-migration-package-explorer.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_12.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="181" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SharePointIntroductionlaContentMigration_D5B6/image_thumb_5.png" width="490" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Sous quel format peut être le package?&lt;/em&gt;&lt;/strong&gt;  &lt;p&gt;Deux possibilités s&amp;#39;offrent à nous pour stocker l&amp;#39;ensemble des fichiers précédemment cité:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Fichier Compressé: théoriquement avec une extension .cmp, il s&amp;#39;agit de l&amp;#39;option par défaut lors d&amp;#39;un export;  &lt;li&gt;Répertoire: les fichiers sont situés dans un répertoire unique. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Le premier a l&amp;#39;avantage de rassembler tous les fichiers nécessaires au sein d&amp;#39;un seul et même fichier, qui plus est, compressé. L&amp;#39;inconvénient est que cette compression est couteuse en temps et nécessite de disposer sur disque de deux fois la taille du package. Notez que pour de gros packages, une erreur peut survenir durant la compression, arrêtant l&amp;#39;export en cours.&lt;/p&gt; &lt;p&gt;Dans le second cas, il est important de faire attention à bien transférer tous les fichiers d&amp;#39;un environnement source vers l&amp;#39;environnement cible.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Peut-on modifier un package de migration de données?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Bien entendu! Comme nous l&amp;#39;avons vu précédemment la référence au sujet de la syntaxe de ces fichiers est fournie. Nous verrons d&amp;#39;ailleurs comment utiliser la Content Migration API (et surtout comment modifier les fichiers intermédiaire) il est possible d&amp;#39;effectuer des opérations qui ne sont pas possibles Out-of-the-box, par exemple passer d&amp;#39;un template en français à un template en anglais et inversément. &lt;/p&gt; &lt;p&gt;Pour faciliter les modifications, il est conseillé d&amp;#39;utiliser des fichiers non compressés.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Désormais, nous avons une connaissance suffisante de la Content Migration API afin de passer à la réalisation d&amp;#39;exemples concrets.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Dans un prochain post, je présenterai au travers d&amp;#39;un poste le développement d&amp;#39;une application permettant d&amp;#39;effectuer des exports ainsi que des imports de sites ou d&amp;#39;un ensemble quelconque d&amp;#39;informations provenant de sites SharePoint. Nous verrons également comment utiliser la C.M. API pour permettre de changer le parent d&amp;#39;un élément exporté. &lt;/p&gt; &lt;p&gt;Plus tard, nous verrons également comment réaliser des exports incrémentals de données, utilisés lors de la réplication par exemple.&lt;/p&gt; &lt;p&gt;Enfin, après voir vu comment développer des outils utilisant ces fonctionnalités nous verrons comment les utiliser à bon escient pour réaliser des opérations qui pourraient s&amp;#39;avèrer complexes sans ceux-ci.&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=135" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Sharepoint" scheme="http://didierdanse.net/blogs/dev/archive/tags/Sharepoint/default.aspx" /></entry><entry><title>Sql Server: Impossibilité de passer d'une version à l'autre ou de le désinstaller. Que faire?</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/07/31/sql-server-impossibilit-233-de-passer-d-une-version-224-l-autre-ou-de-le-d-233-sinstaller-que-faire.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/07/31/sql-server-impossibilit-233-de-passer-d-une-version-224-l-autre-ou-de-le-d-233-sinstaller-que-faire.aspx</id><published>2008-07-31T12:17:11Z</published><updated>2008-07-31T12:17:11Z</updated><content type="html">&lt;p&gt;L&amp;#39;installation de Sql Server, que ce soit dans le but d&amp;#39;installer SharePoint ou non, est une opération relativement simple et relativement rares sont les problèmes qui peuvent survenir. &lt;/p&gt; &lt;p&gt;L&amp;#39;ajout de composants, la mise à jour de notre Sql Server ou encore la désinstallation d&amp;#39;un Sql Server (et oui... cela est parfois nécessaire à des fins de nettoyage avant réutilisation d&amp;#39;un serveur) n&amp;#39;amène que peu de difficultées supplémentaires. Il &lt;em&gt;suffit&lt;/em&gt; de suivre les indications (en utilisant l&amp;#39;argument SKUUPGRADE=1 comme indiqué dans l&amp;#39;article &lt;a href="http://didierdanse.net/blogs/dev/archive/2008/07/29/sql-server-passer-de-la-version-express-224-une-version-standard-enterprise.aspx" target="_blank"&gt;Sql Server: Passer de la version Express à une version Standard/Enterprise&lt;/a&gt;) et d&amp;#39;être patient (oui je sais, je me répète).&lt;/p&gt; &lt;p&gt;Cependant, j&amp;#39;ai malheureusement rencontré un problème pas ou peu documenté. L&amp;#39;erreur obtenue est:&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;The setup has encountered an unexpected error while Setting Internal Properties. The error is: Fatal error during installation.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;En l&amp;#39;absence d&amp;#39;un message d&amp;#39;erreur explicite, une petite lecture des logs permet de découvrir un peu plus de détails:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;GetServiceUserGroup failed for OFFICESERVERS, 5 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error Code: 0x80070534 (1332) &lt;br /&gt;Windows Error Text: No mapping between account names and security IDs was done.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Après lecture et recherche dans l&amp;#39;historique de l&amp;#39;installation de la machine, il s&amp;#39;avère que l&amp;#39;erreur est dûe au fait que Sql Server utilise des comptes locaux temporaires dont le SID n&amp;#39;existe plus suite à un changement de nom de la machine (Voir &lt;a href="http://didierdanse.net/blogs/dev/archive/2008/05/13/renommer-un-serveur-et-un-sharepoint-install-233-en-standalone.aspx" target="_blank"&gt;Renommer un serveur et un SharePoint installé en standalone&lt;/a&gt;). &lt;/p&gt; &lt;p&gt;Effectivement, l&amp;#39;outil NewSID a effectué la mise à jour de tous les SID qu&amp;#39;il a pu identifier. &lt;/p&gt; &lt;p&gt;Pour rappel, le &amp;quot;Computer Security Identifier&amp;quot; ou &amp;quot;Identificateur de Sécurité&amp;quot; permet d&amp;#39;identifier un ordinateur (plus précisément le système d&amp;#39;exploitation qui y est installé). Ce SID est créé et assigné dès les premières phases de l&amp;#39;installation du Windows. &lt;/p&gt; &lt;p&gt;Pour la même raison, cette erreur peut survenir après avoir placé une machine dans un réseau d&amp;#39;entreprise.&lt;/p&gt; &lt;p&gt;La correction est simple pour peu qu&amp;#39;on ait accès à la base de registre. Pour cela, dans le menu &lt;em&gt;Démarrer&lt;/em&gt; (&lt;em&gt;Start&lt;/em&gt;), dans la zone &lt;em&gt;Exécuter&lt;/em&gt; (&lt;em&gt;Run&lt;/em&gt;) indiquez &lt;em&gt;regedit&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Identifiez les hierarchies suivantes en remplacant X par 1, 2, ... n où n est le nombre d&amp;#39;instances déjà présentes:&lt;em&gt; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\Setup&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Deux clés de registres s&amp;#39;y trouvent :&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SQLGroup  &lt;li&gt;FTSGroup &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerImpossibilitderaliserunupgradeo_137C1/groups%20dans%20registry%20pour%20install%20sql%20server_4.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="409" alt="groups dans registry pour install sql server" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerImpossibilitderaliserunupgradeo_137C1/groups%20dans%20registry%20pour%20install%20sql%20server_thumb_1.jpg" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Supprimer ces clés de registre permet de réinitialiser les comptes.&lt;/p&gt; &lt;p&gt;Redémarrez le programme d&amp;#39;installation ou de mise à jour de Sql Server. Vous ne devriez désormais plus recevoir cette erreur.&lt;/p&gt; &lt;p&gt;Selon mes recherches sur Internet, il semble que deux autres groupes peuvent être présents dans les clés de registre et nécessitent une suppression:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;AGTGroup  &lt;li&gt;ASGroup &lt;/li&gt;&lt;/ul&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=134" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Sql Server" scheme="http://didierdanse.net/blogs/dev/archive/tags/Sql+Server/default.aspx" /></entry><entry><title>Sql Server: Passer de la version Express à une version Standard/Enterprise</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/07/29/sql-server-passer-de-la-version-express-224-une-version-standard-enterprise.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/07/29/sql-server-passer-de-la-version-express-224-une-version-standard-enterprise.aspx</id><published>2008-07-29T20:12:30Z</published><updated>2008-07-29T20:12:30Z</updated><content type="html">&lt;p&gt;Sql Server Express convient parfaitement pour une utilisation lors de développement ou de projets persos. Certaines limitations peuvent cependant être insuffisantes pour des développements nécessitant plus de composants ou d&amp;#39;espace de stockage.&lt;/p&gt; &lt;p&gt;Réalisant principalement des développements principalement dans un environnement SharePoint, ce post a pour origine un besoin lié à SharePoint qui, par défaut, inclut l&amp;#39;installation d&amp;#39;un Sql Server express. Cependant, ceci s&amp;#39;applique à d&amp;#39;autres environnements basés sur Sql Server.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Mettre à jour Sql Server&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Après avoir mis le cd ou le DVD contenant la version cible de Sql Server, lancez, en ligne de commande, le programme d&amp;#39;installation à l&amp;#39;aide de &lt;em&gt;setup.exe SKUUPGRADE=1&lt;/em&gt; (respectez la casse)&lt;/p&gt; &lt;p&gt;Après avoir accepté les termes de la licence, un peu de patiente et quelques clics à la sauce &lt;em&gt;Next Next Next&lt;/em&gt;, vous pouvez enfin choisir les composants de Sql Server que vous souhaitez mettre à jour. &lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="447" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_thumb.png" width="490" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Comme indiqué, cliquez sur &lt;em&gt;Advanced&lt;/em&gt; pour accéder à plus d&amp;#39;options. Bien entendu, vous n&amp;#39;êtes aucunement obligé de passer par cette étape mais cela est tout de même fortement conseillé afin d&amp;#39;être certain d&amp;#39;installer tout ce que vous souhaitez et uniquement ce que vous souhaitez.&lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="446" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_thumb_2.png" width="490" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Sélectionnez le nom de l&amp;#39;instance (la mise à jour se fait instance par instance. Il vous faudra donc réaliser l&amp;#39;opération plusieurs fois si vous avez plusieurs instances à mettre à jour). Dans le cas de SharePoint, vous pouvez indiquer &amp;quot;OFFICESERVERS&amp;quot; dans &lt;em&gt;Named instance&lt;/em&gt; ou encore passer par le bouton &lt;em&gt;Installed instances&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/InstalledInstances_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="446" alt="InstalledInstances" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/InstalledInstances_thumb.jpg" width="489" border="0" /&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;Sélectionnez les éléments que vous souhaitez mettre à jour ou installer pour l&amp;#39;instance sélectionnée. &lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/existingcomponents_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="445" alt="existingcomponents" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/existingcomponents_thumb.jpg" width="490" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Pensez à cocher les composants à mettre à jour...&lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="446" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_thumb_3.png" width="490" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Il suffit dès lors de suivre les instructions et d&amp;#39;être patient.&lt;/p&gt; &lt;p&gt;Les écrans suivants dépenderont des composants mis à jour ou installés. Par exemple, l&amp;#39;écran pour le compte à utiliser pour Reporting Services:&lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_10.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="222" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_thumb_4.png" width="244" border="0" /&gt;&lt;/a&gt;&amp;nbsp; &lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_12.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="223" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_thumb_5.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Ensuite un rapport des actions qui vont être effectuées apparait:&lt;/p&gt; &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_14.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="222" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/SqlServerPasserdelaversionExpressunevers_10D4A/image_thumb_6.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;A nouveau, un seul mot d&amp;#39;ordre après avoir cliqué sur &lt;em&gt;Install&lt;/em&gt; : la patience! &lt;/p&gt; &lt;p&gt;Attention, si vous avez renommé votre machine entre la première installation et la mise à jour d&amp;#39;une instance, il est nécessaire d&amp;#39;effectuer quelques petites opérations comme indiqué dans le post suivant: à suivre...&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=133" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Sql Server" scheme="http://didierdanse.net/blogs/dev/archive/tags/Sql+Server/default.aspx" /></entry><entry><title>IE Dev Toolbar ne fonctionne pas, que faire?</title><link rel="alternate" type="text/html" href="http://didierdanse.net/blogs/dev/archive/2008/06/18/ie-dev-toolbar-ne-fonctionne-pas-que-faire.aspx" /><id>http://didierdanse.net/blogs/dev/archive/2008/06/18/ie-dev-toolbar-ne-fonctionne-pas-que-faire.aspx</id><published>2008-06-18T19:01:12Z</published><updated>2008-06-18T19:01:12Z</updated><content type="html">&lt;p&gt;Bien que depuis peu il soit possible de réaliser des développements SharePoint sous Vista, souvent, les développeurs utilisent une machine virtuelle contenant Windows Server 2003 et l&amp;#39;Internet Explorer installé par défaut. &lt;/p&gt;  &lt;p&gt;L&amp;#39;extension IE Dev Toolbar peut être utile dès lors que l&amp;#39;on manipule le DOM de la page web (encore plus utile si on couple l&amp;#39;utilisation de cette extension avec l&amp;#39;utilisation du debugger JavaScript de Visual Studio 2008). Mais après avoir installé cette extension et redémarré Internet Explorer, nous sommes rapidement heureux de pouvoir démarrer cette toolbar. Et là, surprise puisque rien n&amp;#39;est présent dans ce toolbar. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/IEDevToolbarnefonctionnepasquefaire_7652/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="211" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/IEDevToolbarnefonctionnepasquefaire_7652/image_thumb_1.png" width="222" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Effectivement, l&amp;#39;extension n&amp;#39;est, par défaut, pas autorisée à accéder au contenu de la page web. Effectivement, l&amp;#39;accès à Internet depuis un serveur n&amp;#39;est pas conseillée. Les options sont ainsi sélectionnées en ce sens.&lt;/p&gt;  &lt;p&gt;Pour autoriser l&amp;#39;accès à la page web par IE Dev Toolbar, rendez-vous dans les options Internet de Internet Explorer. Ensuite cocher l&amp;#39;option &amp;quot;Enable third-party browser extensions&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/IEDevToolbarnefonctionnepasquefaire_7652/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="170" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/IEDevToolbarnefonctionnepasquefaire_7652/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Redémarrez Internet Explorer et là... bingo!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://didierdanse.net/blogs/dev/WindowsLiveWriter/IEDevToolbarnefonctionnepasquefaire_7652/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="172" alt="image" src="http://didierdanse.net/blogs/dev/WindowsLiveWriter/IEDevToolbarnefonctionnepasquefaire_7652/image_thumb_2.png" width="239" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Sur des O.S. &amp;quot;clients&amp;quot; (Windows XP, Windows Vista, ...), aucun souci puisque cette option est, à l&amp;#39;installation, activée.&lt;/p&gt;&lt;img src="http://didierdanse.net/aggbug.aspx?PostID=132" width="1" height="1"&gt;</content><author><name>Didier Danse</name><uri>http://didierdanse.net/members/Didier-Danse.aspx</uri></author><category term="Web browsers" scheme="http://didierdanse.net/blogs/dev/archive/tags/Web+browsers/default.aspx" /></entry></feed>