<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://gaelduhamel.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fgaelduhamel.spaces.live.com%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Gael Duhamel - SharePoint et Commerce Server</title><description>Microsoft SharePoint et Commerce Server 2007 Web Log</description><link>http://gaelduhamel.spaces.live.com/</link><language>en-US</language><pubDate>Fri, 26 Sep 2008 15:34:24 GMT</pubDate><lastBuildDate>Fri, 26 Sep 2008 15:34:24 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><live:identity><live:id>-6419680929852795449</live:id><live:alias>gaelduhamel</live:alias></live:identity><image><title>Gael Duhamel - SharePoint et Commerce Server</title><url>http://blufiles.storage.live.com/y1pL8UpmrRZV0U2cPjIXBMcjmhsLzNROqwBQwymQZ6aO0W2oqTMJRuteW3JI4L77bpC</url><link>http://gaelduhamel.spaces.live.com/</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>[SharePoint] Filtrer et récupérer des éléments d’une liste de configuration grâce à Linq et les méthodes d’extensions - UPDATE 25-06-2008</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!810.entry</link><description>&lt;p&gt;-- UPDATE --  &lt;p&gt;J'ai changé ma méthode pour récupérer directement une valeur dans ma liste de configuration. Je faisais un query qui me retournais une collection que je filtrais ensuite pour récupérer ma valeur. Alors qu'il suffisait simplement de le faire directement dans mon query &lt;img alt="smile_nerd" src="http://spaces.live.com/rte/emoticons/smile_nerd.gif"&gt;  &lt;p&gt;-- UPDATE --  &lt;p&gt;Dans mes applications SharePoint, j’utilise très souvent une liste ou je stocke l’ensemble de mes éléments de configuration comme par exemple :  &lt;ul&gt; &lt;li&gt;Email sender pour mes workflows  &lt;li&gt;Sujet d’un email  &lt;li&gt;Corps d’un email  &lt;li&gt;Url d’un WebService  &lt;li&gt;Et bien d’autres choses encore...&lt;/ul&gt; &lt;p&gt;Le gros avantage est que le webmaster du site peut facilement (à ses risques et périls tout de même &lt;img alt="smile_nerd" src="http://spaces.live.com/rte/emoticons/smile_nerd.gif"&gt;) mettre à jour les informations et ceci sans reset de l’application pool ou redémarrage de l’appli web sous IIS dans le cas par exemple de variables stockées dans le web.config.  &lt;p&gt;La structure de ma liste est toute simple :  &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Key&lt;/strong&gt; (le champ title de base renommé);  &lt;li&gt;&lt;strong&gt;Value&lt;/strong&gt; (la valeur à retourner) de type « Multiine of text » en mode Plain Text;  &lt;li&gt;&lt;strong&gt;Category&lt;/strong&gt;, un champ de type « Choice » qui me permet de regrouper mes informations. Par exemple, sur une page, il peut m’arriver d’avoir à récupérer plusieurs valeurs de configuration. Ce regroupement, me permet de les récupérer via un seul CAML Query. Ceci m’évitant donc de faire un query pour chaque élément.&lt;/ul&gt; &lt;p align=center&gt;&lt;a href="http://tw28hg.blu.livefilestore.com/y1pD7zjezS6ax0aZcrN5S5Eq0zmv4qmFkA3yZ1H5yhcnIueOIU99ROJfkGX5oma6WQ9rkIWtb6ZXSViUsvPmXUpww?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=156 alt=image src="http://tw28hg.blu.livefilestore.com/y1pbr1L1dQT-h0gaUxx3FvDGrc1kAGodGb6uMNE0NTCISwYup_Lrg7hvdsCnPinmRiC7z0NfBzLdBkyl7RDZ7fJZ2i_jm009QeR?PARTNER=WRITER" width=610 border=0&gt;&lt;/a&gt;  &lt;p&gt;J’avais donc implémenté une classe qui me permettait de récupérer ces valeurs via un CAML query sur ma liste. Mais suite à un article posté par &lt;a title="Blog: Philippe Sentenac [MVP SharePoint]" href="http://blogs.developpeur.org/phil/default.aspx" target="_blank" rel=tag&gt;Philippe Sentenac&lt;/a&gt; sur les &lt;a title="Blog: SharePoint 2007 : Extension Method (TryGet)" href="http://blogs.developpeur.org/phil/archive/2008/05/15/sharepoint-2007-extension-method-tryget.aspx" target="_blank" rel=tag&gt;méthodes d’extensions&lt;/a&gt;, j’ai décidé de refaire cette classe en utilisant ces &lt;a title="MSDN: Extension Methods (C# Programming Guide)" href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank" rel=tag&gt;extensions&lt;/a&gt; et les nombreuses autres &lt;a title="MSDN: Generics (C# Programming Guide)" href="http://msdn.microsoft.com/en-us/library/512aeb7t.aspx" target="_blank" rel=tag&gt;classes generics&lt;/a&gt; du framework .Net.  &lt;p&gt;Pour commencer, j’ai étendu l’objet &lt;a title="MSDN: SPWeb Class (Microsoft.SharePoint)" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.aspx" target="_blank" rel=tag&gt;SPWeb&lt;/a&gt; pour accéder à notre Liste de configuration (dans mon cas, j’ai aussi besoin d’un paramètre « Category » pour me retourner l’ensemble des valeurs car je ne souhaite pas faire une requête pour chaque entrée). Cette méthode, me retourne une interface générique de type &lt;a title="MSDN: ILookup&amp;lt;(Of &amp;lt;(TKey, TElement&amp;gt;)&amp;gt;) Generic Interface" href="http://msdn.microsoft.com/en-us/library/bb534291.aspx" target="_blank" rel=tag&gt;ILookup &amp;lt; TKey, TElement&amp;gt;&lt;/a&gt;. Cette interface, va me permettre ensuite de récupérer très facilement une entrée de ma configuration : &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; ILookup&amp;lt;String, String&amp;gt; ConfigurationList(&lt;span style="color:#0000ff"&gt;this&lt;/span&gt; SPWeb spWeb, String Category)
{
    SPList spListConfiguration;
    ILookup&amp;lt;String, String&amp;gt; configurationEntries = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;;
    &lt;span style="color:#008000"&gt;// La liste n'est pas accessible aux end users.&lt;/span&gt;
    &lt;span style="color:#008000"&gt;// On doit donc s'y connecter sur le compte admin pour y accéder&lt;/span&gt;
    &lt;span style="color:#008000"&gt;// Optionnel, si vous avez décidé de mettre la liste en lecture pour tout vos utilisateurs&lt;/span&gt;
    SPSecurity.RunWithElevatedPrivileges(&lt;span style="color:#0000ff"&gt;delegate&lt;/span&gt;()
    {
        &lt;span style="color:#0000ff"&gt;using&lt;/span&gt; (SPSite mySite = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; SPSite(spWeb.Site.ID))
        {
            &lt;span style="color:#0000ff"&gt;using&lt;/span&gt; (SPWeb myWeb = mySite.OpenWeb(spWeb.ID))
            {&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je récupère ma liste « Configuration » grâce à la méthode d’extension &lt;a title="Blog: SharePoint 2007 : Extension Method (TryGet)" href="http://blogs.developpeur.org/phil/archive/2008/05/15/sharepoint-2007-extension-method-tryget.aspx" target="_blank" rel=tag&gt;TryGet&lt;/a&gt; de &lt;a title="Blog: Philippe Sentenac [MVP SharePoint]" href="http://blogs.developpeur.org/phil" target="_blank" rel=tag&gt;Philippe&lt;/a&gt; :
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (myWeb.Lists.TryGet(&lt;span style="color:#006080"&gt;&amp;quot;Configuration&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;out&lt;/span&gt; spListConfiguration))
{&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;J’exécute ensuite mon query pour récupérer mes éléments :
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;    SPQuery spQuery = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; SPQuery();
    spQuery.Query = &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;.Format(&amp;lt;Where&amp;gt;&amp;lt;Eq&amp;gt;&amp;lt;FieldRef Name='Category' /&amp;gt;&amp;lt;Value Type='Choice'&amp;gt;{0}&amp;lt;/Value&amp;gt;&amp;lt;/Eq&amp;gt;&amp;lt;/Where&amp;gt;&amp;quot;, Category);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et je stock les résultats dans un document XML Linq (&lt;a title="MSDN: XDocument Class" href="http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.aspx" target="_blank" rel=tag&gt;XDocument&lt;/a&gt;) :
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;XDocument xml = XDocument.Parse(spListConfiguration.GetItems(spQuery).Xml);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je définie mon &lt;a title="MSDN: XNamespace Class" href="http://msdn.microsoft.com/en-us/library/system.xml.linq.xnamespace.aspx" target="_blank" rel=tag&gt;namespace&lt;/a&gt; pour me simplifier la lecture du code :
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;XNamespace z = &lt;span style="color:#006080"&gt;&amp;quot;#RowsetSchema&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je renvoie tout ce flux dans mon interface générique en lui spécifiant : 
&lt;ul&gt;
&lt;li&gt;Ma clé : key =&amp;gt; key.Key; 
&lt;li&gt;Ma valeur à retourner: element =&amp;gt; element.Value; 
&lt;li&gt;Mon comparateur d’égalité : EqualityComparer&amp;lt;String&amp;gt;.Default (ici comme je travaille sur des Strings je n’ai pas besoin d’en définir de particulier, mais si vous souhaitez le personnaliser, il vous suffit d’écrire une classe qui implémente &lt;a title="MSDN: IEqualityComparer&amp;lt;(Of &amp;lt;(T&amp;gt;)&amp;gt;) Generic Interface" href="http://msdn.microsoft.com/en-us/library/ms132151.aspx" target="_blank" rel=tag&gt;IEqualityComparer&amp;lt;T&amp;gt;&lt;/a&gt;. Je donne un exemple à la fin de ce post pour implémenter une version qui ne prend pas en compte la casse de la clé) ;&lt;/ul&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;configurationEntries = (from xmlItems &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; xml.Descendants(z + &lt;span style="color:#006080"&gt;&amp;quot;row&amp;quot;&lt;/span&gt;).ToArray()
    &lt;span style="color:#0000ff"&gt;select&lt;/span&gt; &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; ConfigurationEntry { Key = (&lt;span style="color:#0000ff"&gt;String&lt;/span&gt;)xmlItems.Attribute(&lt;span style="color:#006080"&gt;&amp;quot;ows_Title&amp;quot;&lt;/span&gt;), Value = (&lt;span style="color:#0000ff"&gt;String&lt;/span&gt;)xmlItems.Attribute(&lt;span style="color:#006080"&gt;&amp;quot;ows_Value&amp;quot;&lt;/span&gt;) })
    .ToLookup(key =&amp;gt; key.Key, element =&amp;gt; element.Value, EqualityComparer&amp;lt;&lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&amp;gt;.&lt;span style="color:#0000ff"&gt;Default&lt;/span&gt;);
        });
    }
onfigurationEntries;
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;J’utile cette classe pour stocker ma clé ainsi que la valeur associée dans mon query Linq :
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; ConfigurationEntry
{
    &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt; Key;
    &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt; Value;
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite, il ne me reste plus qu’a écrire la classe qui va me rechercher mon élément dans ma collection (on peut ici choisir de lui donner un objet SPWeb ou d’utiliser le context)
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; sealed &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; Configuration
{
    &lt;span style="color:#0000ff"&gt;private&lt;/span&gt; ILookup&amp;lt;&lt;span style="color:#0000ff"&gt;String&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&amp;gt; configurationValues;
    
    &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; Configuration(SPWeb spWeb, &lt;span style="color:#0000ff"&gt;String&lt;/span&gt; category)
    {
        &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (spWeb == null)
            &lt;span style="color:#0000ff"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span style="color:#006080"&gt;&amp;quot;A SPWeb object cannot be null&amp;quot;&lt;/span&gt;);
        &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;String&lt;/span&gt;.IsNullOrEmpty(category))
            &lt;span style="color:#0000ff"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span style="color:#006080"&gt;&amp;quot;A category cannot be empty&amp;quot;&lt;/span&gt;);

        configurationValues = spWeb.ConfigurationList(category);
    }

    &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; Configuration(&lt;span style="color:#0000ff"&gt;String&lt;/span&gt; category)
    {
        &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (SPContext.Current == null)
            &lt;span style="color:#0000ff"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span style="color:#006080"&gt;&amp;quot;SPContext cannot be null. Please ensure that you're running a SharePoint application&amp;quot;&lt;/span&gt;);
        &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;String&lt;/span&gt;.IsNullOrEmpty(category))
            &lt;span style="color:#0000ff"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span style="color:#006080"&gt;&amp;quot;A category cannot be empty&amp;quot;&lt;/span&gt;);

        configurationValues = SPContext.Current.Web.ConfigurationList(category);
    }

    &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;String&lt;/span&gt; GetEntry(&lt;span style="color:#0000ff"&gt;String&lt;/span&gt; key)
    {
        &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; Convert.ToString(configurationValues[key].FirstOrDefault());
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notez l’utilisation du générique &lt;a title="MSDN:Enumerable..::.FirstOrDefault&amp;lt;(Of &amp;lt;(TSource&amp;gt;)&amp;gt;) Generic Method (IEnumerable&amp;lt;(Of &amp;lt;(TSource&amp;gt;)&amp;gt;))" href="http://msdn.microsoft.com/en-us/library/bb340482.aspx" target="_blank" rel=tag&gt;FirstOrDefault&lt;/a&gt;, qui nous permet ici de nous retourner un String.Empty s’il n’y a pas de valeur à retourner. 
&lt;p&gt;Ensuite, pour l’appel, c’est très simple. Instanciez un objet Configuration et utilisez la méthode GetEntry pour récupérer vos valeurs:
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;Configuration configValues = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; Configuration(spWeb,&lt;span style="color:#006080"&gt;&amp;quot;SSRS&amp;quot;&lt;/span&gt;);
Console.WriteLine(&lt;span style="color:#006080"&gt;&amp;quot;SSRS URL:&amp;quot;&lt;/span&gt; + configValues.GetEntry(&lt;span style="color:#006080"&gt;&amp;quot;SSRSUrl&amp;quot;&lt;/span&gt;));
Console.WriteLine(&lt;span style="color:#006080"&gt;&amp;quot;SSRS Path:&amp;quot;&lt;/span&gt; + configValues.GetEntry(&lt;span style="color:#006080"&gt;&amp;quot;SSRSPath&amp;quot;&lt;/span&gt;));
Console.WriteLine(&lt;span style="color:#006080"&gt;&amp;quot;SSRS WebPartPage:&amp;quot;&lt;/span&gt; + configValues.GetEntry(&lt;span style="color:#006080"&gt;&amp;quot;SSRSWebPartPage&amp;quot;&lt;/span&gt;));&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://blufiles.storage.msn.com/y1pndzJ6u2Pt9iY-zZOqNy4_peOmgDn0GHLFwzEaL_bp2FDR768NQ8XJ9-ELzYL3zfZXzL3_AVib935X-Mq4DN_UuF5XUiYIZ7D?PARTNER=WRITER"&gt;&lt;/a&gt;
&lt;p align=center&gt;&lt;a href="http://blufiles.storage.msn.com/y1pndzJ6u2Pt9g0B0txLatwgRRlSRvAiLXdLSdz7tstYzqbmJlEUpNbO7hI6KJiK02DpiT85-d4AIMWiNTN2m7xjv0-c0T36Sra?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=60 alt=image src="http://blufiles.storage.msn.com/y1pndzJ6u2Pt9iNS1AJX-XFLRGfuG9mfUcFJbwxSK8l5exO7uEniwgCa_6d5CNTF_zMf_-6vrDuYc2QKWpnkjl5ovx0nk_a43d1?PARTNER=WRITER" width=328 border=0&gt;&lt;/a&gt; 
&lt;p&gt;On peut aussi ajouter une variante à notre méthode d’extension ConfigurationList pour récupérer directement la valeur d’une clé dans notre liste :
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;p&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; String ConfigurationList(&lt;span style="color:#0000ff"&gt;this&lt;/span&gt; SPWeb spWeb, String Category, String Key)
{
    SPList spListConfiguration;
    String returnValue = String.Empty;

    SPSecurity.RunWithElevatedPrivileges(&lt;span style="color:#0000ff"&gt;delegate&lt;/span&gt;()
    {
        &lt;span style="color:#0000ff"&gt;using&lt;/span&gt; (SPSite mySite = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; SPSite(spWeb.Site.ID))
        {
            &lt;span style="color:#0000ff"&gt;using&lt;/span&gt; (SPWeb myWeb = mySite.OpenWeb(spWeb.ID))
            {
                &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (myWeb.Lists.TryGet(&lt;span style="color:#006080"&gt;&amp;quot;Configuration&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff"&gt;out&lt;/span&gt; spListConfiguration))
                {
                    &lt;span style="color:#008000"&gt;// Modification du 25 juin 2008&lt;br&gt;                    &lt;/span&gt;&lt;span style="color:#008000"&gt;// J'ai pas fais attention en publiant mon post que cette méthode était stupide&lt;/span&gt;&lt;br&gt;                    &lt;span style="color:#008000"&gt;// En effet, j'utilisais un query qui me retournais une collection que je filtrais ensuite pour retourner ma valeur&lt;/span&gt;&lt;br&gt;                    &lt;span style="color:#008000"&gt;// Alors que je pouvais faire cela dans un seul CAML Query &lt;img alt="smile_nerd" src="http://spaces.live.com/rte/emoticons/smile_nerd.gif"&gt;&lt;/span&gt;&lt;br&gt;                    SPQuery spQuery = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; SPQuery();
                    spQuery.Query = String.Format(&lt;span style="color:#006080"&gt;&amp;quot;&amp;lt;Where&amp;gt;&amp;lt;And&amp;gt;&amp;lt;Eq&amp;gt;&amp;lt;FieldRef Name='Title' /&amp;gt;&amp;lt;Value Type='Text'&amp;gt;{0}&amp;lt;/Value&amp;gt;&amp;lt;/Eq&amp;gt;&amp;lt;Eq&amp;gt;&amp;lt;FieldRef Name='Category' /&amp;gt;&amp;lt;Value Type='Choice'&amp;gt;{1}&amp;lt;/Value&amp;gt;&amp;lt;/Eq&amp;gt;&amp;lt;/And&amp;gt;&amp;lt;/Where&amp;gt;&amp;quot;&lt;/span&gt;, Key, Category);

                    SPListItemCollection items = spListConfiguration.GetItems(spQuery);
                    &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (items != &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;
                        &amp;amp;&amp;amp; items.Count &amp;gt; 0)
                        returnValue = Convert.ToString(items[0][&lt;span style="color:#006080"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;]);&lt;p&gt;                    &lt;span style="color:#008000"&gt;// SPQuery spQuery = new SPQuery();&lt;/span&gt;&lt;br&gt;&lt;span style="color:#008000"&gt;                    // spQuery.Query = String.Format(&amp;quot;&amp;lt;Where&amp;gt;&amp;lt;Eq&amp;gt;&amp;lt;FieldRef Name='Category' /&amp;gt;&amp;lt;Value Type='Choice'&amp;gt;{0}&amp;lt;/Value&amp;gt;&amp;lt;/Eq&amp;gt;&amp;lt;/Where&amp;gt;&amp;quot;, Category);&lt;/span&gt;&lt;br&gt;                    &lt;span style="color:#008000"&gt;// XDocument xml = XDocument.Parse(spListConfiguration.GetItems(spQuery).Xml);&lt;/span&gt;&lt;br&gt;                    &lt;span style="color:#008000"&gt;// XNamespace z = &amp;quot;#RowsetSchema&amp;quot;;&lt;/span&gt;&lt;br&gt;                    &lt;span style="color:#008000"&gt;// configurationEntries = (from xmlItems in xml.Descendants(z + &amp;quot;row&amp;quot;)&lt;/span&gt;&lt;br&gt;                    &lt;span style="color:#008000"&gt;// select new ConfigurationEntry { Key = (String)xmlItems.Attribute(&amp;quot;ows_Title&amp;quot;), Value = (String)xmlItems.Attribute(&amp;quot;ows_Value&amp;quot;) })&lt;/span&gt;&lt;br&gt;                    &lt;span style="color:#008000"&gt;// .ToLookup(key =&amp;gt; key.Key, element =&amp;gt; element.Value, EqualityComparer&amp;lt;String&amp;gt;.Default);&lt;/span&gt;&lt;br&gt;                    &lt;span style="color:#008000"&gt;// returnValue Convert.ToString(configurationEntries[Key].FirstOrDefault());&lt;/span&gt; &lt;p&gt;                }
            }
        }
    });

    &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; returnValue;
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La récupération de votre valeur se faisant comme ceci:
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;Console.WriteLine(&lt;span style="color:#006080"&gt;&amp;quot;SSRS Url:&amp;quot;&lt;/span&gt; + spWeb.ConfigurationList(&lt;span style="color:#006080"&gt;&amp;quot;SSRS&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080"&gt;&amp;quot;SSRSURL&amp;quot;&lt;/span&gt;));&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://blufiles.storage.msn.com/y1pndzJ6u2Pt9jT4MmUM9-0bv3c9obLLD-YUi6pEA_4a_hCwSWsE9bt10sCRChkNfota96UoTh8H6beC3AbgnJpyNh6gptdB8kZ?PARTNER=WRITER"&gt;&lt;/a&gt;
&lt;p align=center&gt;&lt;a href="http://blufiles.storage.msn.com/y1pndzJ6u2Pt9gXxTU9u7XML2tZ89eZ5MXjox4wCjb1pwCqzeqcBZSMPXJCzeryDxy9KwsXWk3zqLS2VYruNp-o0ghkv8p03ugi?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=34 alt=image src="http://blufiles.storage.msn.com/y1pndzJ6u2Pt9iZo_dJ15Tygoe8sBg5w7Dwjaki5_5AG7zlfQNgiWmW23-VPVSp7xwZj01IXC8CDqpAO0MtA89GJ6DMWe5LDerx?PARTNER=WRITER" width=299 border=0&gt;&lt;/a&gt; 
&lt;p&gt;Comme promis, voici ici un exemple de classe qui vous permet de comparer 2 Strings sans distinction de la casse :
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; StringNoCaseSensitive : IEqualityComparer&amp;lt;&lt;span style="color:#0000ff"&gt;String&lt;/span&gt;&amp;gt;
{
    &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;Boolean&lt;/span&gt; Equals(&lt;span style="color:#0000ff"&gt;String&lt;/span&gt; val1, &lt;span style="color:#0000ff"&gt;String&lt;/span&gt; val2)
    {
        &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; (val1.ToLower() == val2.ToLower());
    }
    &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; int GetHashCode(&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; obj)
    {
        &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; obj.ToLower().GetHashCode();
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans l’appel du ILookup,remplacer EqualityComparer&amp;lt;String&amp;gt;.Default par new StringNoCaseSensitive() et le tour est joué...
&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/Linq" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Linq"&gt;Linq&lt;/a&gt;, &lt;a href="http://technorati.com/tag/SharePoint" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SharePoint"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tag/WSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=WSS"&gt;WSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS"&gt;MOSS&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bSharePoint%5d+Filtrer+et+r%c3%a9cup%c3%a9rer+des+%c3%a9l%c3%a9ments+d%e2%80%99une+liste+de+configuration+gr%c3%a2ce+%c3%a0+Linq+et+les+m%c3%a9thodes+d%e2%80%99extensions+-+UPDATE+25-06-2008&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>SharePoint</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!810.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!810.entry</guid><pubDate>Wed, 25 Jun 2008 20:46:53 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!810/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!810.entry#comment</wfw:comment><dcterms:modified>2008-07-01T14:21:03Z</dcterms:modified></item><item><title>[Telerik] Petit bug sur le control RadHtmlField</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!676.entry</link><description>&lt;p&gt;Dans le cadre d’un de mes projets de publication web sous MOSS, j’utilise très souvent le &lt;a title="Telerik: RadControls in SharePoint 2007" href="http://www.telerik.com/products/sharepoint/overview.aspx" rel=tag&gt;RAD editor pour SharePoint&lt;/a&gt; de &lt;a title=Telerik href="http://www.telerik.com/" rel=tag&gt;Telerik&lt;/a&gt;. Il est vraiment très performant et d’une grande facilité d’utilisation.  &lt;p&gt;Mais j’ai détecté un petit bug dans son utilisation lorsque vous souhaitez valider vos pages pour éviter les attaques par &lt;a href="http://fr.wikipedia.org/wiki/Cross_site_scripting"&gt;script injection (XSS)&lt;/a&gt; via l’attribut validateRequest=True. &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;pages&lt;/span&gt;
    &lt;span style="color:#ff0000"&gt;enableSessionState&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;
    &lt;span style="color:#ff0000"&gt;enableViewState&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;
    &lt;span style="color:#ff0000"&gt;enableViewStateMac&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;
    &lt;span style="color:#ff0000"&gt;validateRequest&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;
    &lt;span style="color:#ff0000"&gt;pageParserFilterType&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;Microsoft.SharePoint.ApplicationRuntime.SPPageParserFilter, Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot;&lt;/span&gt;
    &lt;span style="color:#ff0000"&gt;asyncTimeout&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;7&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il y a apparemment un bug sur certaines valeurs attribuées aux Id de ce control. Dans mon cas, j’avais ce control sur ma page :
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;Telerik:RadHtmlField&lt;/span&gt; &lt;span style="color:#ff0000"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;Request&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000"&gt;FieldName&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;Request&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce qui provoquait une erreur de type: 
&lt;p align=center&gt;&lt;a href="http://tw28hg.blu.livefilestore.com/y1pD7zjezS6ax1G1y5rllJ4fnP8dYZhjsZm0pTQSkob2pqIKsHhQIFD9XKKRTlcAfZwiOXChShMzQAMu7A_gwxuxQ?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=317 alt="clip_image002" src="http://tw28hg.blu.livefilestore.com/y1pD7zjezS6ax0mY0DU4EOny-NubjtpkEtjUStXE5x5IPeO_vfX8lifWFVZdxz9YXzR04mDX-NpR6sY4x1fdC7B7w?PARTNER=WRITER" width=606 border=0&gt;&lt;/a&gt;
&lt;p&gt;Un rapide coup d’œil dans l’event viewer me donne un message d’erreur un peu plus explicite : 
&lt;p align=center&gt;&lt;a href="http://tw28hg.blu.livefilestore.com/y1pbr1L1dQT-h2_6-SsRDA5ySA168hoVP7pe1H49fOUgcAYZ4MRAh4ou3sfsA5FXGA_49v-Igp9R8i1hf-AUxjRAeiMyfczUUDn?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=178 alt="clip_image004" src="http://tw28hg.blu.livefilestore.com/y1pbr1L1dQT-h1JlZZyfGrsvOpojO7bmgjCYn6NaQYDjLiXoQmHmJpxGl3_c5ysRFpo5GZ6Xq7btefFpxlSCbjvsk4tUtUxrRTQ?PARTNER=WRITER" width=244 border=0&gt;&lt;/a&gt;
&lt;p&gt;Ce message d’erreur est très explicite, il nous indique que le framework n’a pu trouver la methode validateInput et donc valider l’intégrité d’un control (du au fait du validateRequest à vrai). En effet, dès que je mettais mon attribut validateRequest à faux, ma page s’affichait correctement. Intrigué et surpris par le fait qu’un control ne puisse satisfaire à cette règle élémentaire du framework, j’ai tente de trouver sur le net (et en particulier le forum de telerik) quelques réponses. Mais absolument rien à ce sujet. N’étant pas le seul au monde à utiliser ce control et n’ayant rien trouvé dans mes investigations googleienne, je me suis dit que ca devait venir forcement d’une petite bricole sur ma page. J’ai donc vérifié l’appel à l’assembly dans mes attributs de pages (version, publickeytoken,…) ainsi que quelques propriétés du control (IsValid par exemple). Mais toujours rien… Et en relisant bien mon control, j’ai vu que la valeur de mon id était « Request ». Dans le doute et sans autres solutions, j’ai supprimé cet id en étant sur que ca n’avait aucun impact… et bien si. Détrompez-vous ! Je ne sais pas pour quelle raison, mais chez Telerik si votre id à pour valeur Request et que vous configuré votre application web pour éviter les XSS et bien ca plante… Ce n’est pas un gros problème en soit car il suffit juste de changer la valeur, mais c’est quand même surprenant…
&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/SharePoint" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SharePoint"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Telerik" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Telerik"&gt;Telerik&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Rad+Controls" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Rad+Controls"&gt;Rad controls&lt;/a&gt;, &lt;a href="http://technorati.com/tag/WSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=WSS"&gt;WSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS"&gt;MOSS&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bTelerik%5d+Petit+bug+sur+le+control+RadHtmlField&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>SharePoint</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!676.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!676.entry</guid><pubDate>Tue, 10 Jun 2008 11:03:43 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!676/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!676.entry#comment</wfw:comment><dcterms:modified>2008-06-10T13:20:21Z</dcterms:modified></item><item><title>[SharePoint] Mettre à jour son web.config par l'intermediaire d'un fichier XML de configuration - UPDATED ON 06-JUNE-2008</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!658.entry</link><description>&lt;p&gt;MISE A JOUR DU 06 JUIN 2008&lt;br&gt;Pour contourner ce problème, il suffit en fait d'ajouter l'attribut id sur votre tag d'action: &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;add&lt;/span&gt; &lt;span style="color:#ff0000"&gt;path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;configuration/system.web&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;{45C74BC1-DBA5-489f-A6E9-6932C25F1D97}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;xhtmlConformance&lt;/span&gt; &lt;span style="color:#ff0000"&gt;mode&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;Strict&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ceci évitant la recréation multiple de vos actions. Grand merci à &lt;a title=myPointOfView.Gat href="http://www.sharepointofview.fr/gat" target="_blank" rel=tag&gt;Gaetan Bouveret&lt;/a&gt; pour cet éclaircissement. Comme quoi la communauté SharePoint est plus forte que le SDK &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif"&gt; 
&lt;p&gt;-------------------------------&lt;br&gt;BILLET ORIGINAL 
&lt;p&gt;Je reprend ici un post de &lt;a title=myPointOfView.Gat href="http://www.sharepointofview.fr/gat" target="_blank" rel=tag&gt;Gaetan Bouveret&lt;/a&gt;, au sujet de &lt;a title="Modifier tous les Web.config de vos applications sans code" href="http://www.sharepointofview.fr/gat/archive/2008/05/09/modifier-tous-les-web-config-de-vos-applications-sans-code-1.aspx" target="_blank" rel=tag&gt;la mise à jour du fichier web.config sans ligne de code&lt;/a&gt;. 
&lt;p&gt;Je ne connaissais pas ce système de mise à jour via un flux xml. J'utilisais pour ce genre de déploiement le modèle objet et son &lt;a title="MSDN: SPWebConfigModification Class (Microsoft.SharePoint.Administration)" href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx" target="_blank" rel=tag&gt;SPWebConfigModification&lt;/a&gt;. 
&lt;p&gt;Intéressé par son post, j'ai donc essayé de le mettre en place sur un de mes projets.
&lt;p&gt;J'ai donc ajouté dans un fichier xml (déployé par ma feature dans le répertoire config du 12) cette ligne:
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;add&lt;/span&gt; &lt;span style="color:#ff0000"&gt;path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;configuration/system.web&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;xhtmlConformance&lt;/span&gt; &lt;span style="color:#ff0000"&gt;mode&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;Strict&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour déployer ce fichier dans votre web.config, il vous faut exécuter la commande :
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;stsadm -o copyappbincontent&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Lors de la toute première commande tout marche parfaitement bien, mon noeud est bien ajouté là ou je le voulais.
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;system.web&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
        ....
        &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;xhtmlConformance&lt;/span&gt; &lt;span style="color:#ff0000"&gt;mode&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;Strict&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;system.web&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le problème de cette commande add est qu'elle ne vérifie pas la présence du noeud à ajouter. Ce qui fais que si vous exécutez une nouvelle fois la commande stsadm -o copyappbincontent, ce noeud est ajouté une deuxième fois. Et dans le cas précis de cet exemple, cela fais planter mon application web car le noeud xhtmlConformance doit être unique. 
&lt;p align=center&gt;&lt;a href="http://tw28hg.blu.livefilestore.com/y1pD7zjezS6ax0VY6IerXzAs0kMNuuGAzcMIW3QPIpToJbMzEF5oaBiRWCaULoM_puOgwlRPMabHI1AOFCV6GhTiw?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=205 alt=image src="http://tw28hg.blu.livefilestore.com/y1pbr1L1dQT-h06i-azZD_oJMbI8f6D_w3996uj0IXSX-Jd1NWkTsRndXHUY9bIxDxxDgRP9iqMG8mzzqAT5UaV7S70qG28WfAE?PARTNER=WRITER" width=644 border=0&gt;&lt;/a&gt; 
&lt;p&gt;Pour remédier à cela, j'ai simplement ajouté une commande remove juste avant la commande add:&lt;pre&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;remove&lt;/span&gt; &lt;span&gt;path&lt;/span&gt;&lt;span&gt;=&amp;quot;configuration/system.web/xhtmlConformance&amp;quot;&lt;/span&gt; &lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;




&lt;p&gt;Pour info, la valeur de path est une fonction xpath, vous pouvez donc allez chercher l'élément à supprimer même si les noeuds fils ont le même nom.
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;remove&lt;/span&gt; &lt;span style="color:#ff0000"&gt;path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;configuration/system.web/httpModules/add[@name='Session']&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;add&lt;/span&gt; &lt;span style="color:#ff0000"&gt;path&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;configuration/system.web/httpModules&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;add&lt;/span&gt; &lt;span style="color:#ff0000"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;Session&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&amp;quot;System.Web.SessionState.SessionStateModule&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ps: Attention pour les fermes, le &lt;a title="MSDN: How To: Add Custom Configuration Settings to Extend a Web Application" href="http://msdn.microsoft.com/en-us/library/ms439965.aspx" target="_blank" rel=tag&gt;SDK&lt;/a&gt; stipule bien que cette commande doit être exécutée sur chaque serveur de la ferme.
&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/SharePoint" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SharePoint"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Admin+Configuration" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Admin+Configuration"&gt;Admin et Configuration&lt;/a&gt;, &lt;a href="http://technorati.com/tag/WSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=WSS"&gt;WSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS"&gt;MOSS&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bSharePoint%5d+Mettre+%c3%a0+jour+son+web.config+par+l'intermediaire+d'un+fichier+XML+de+configuration+-+UPDATED+ON+06-JUNE-2008&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>SharePoint</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!658.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!658.entry</guid><pubDate>Fri, 06 Jun 2008 11:08:12 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!658/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!658.entry#comment</wfw:comment><dcterms:modified>2008-06-06T11:08:12Z</dcterms:modified></item><item><title>[SharePoint] SPBuiltInFieldId ou la classe qui vous rend service</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!662.entry</link><description>&lt;p&gt;Dans le cadre d'un développement d'une feature, je suis tombé complètement par hasard sur une classe des plus sympathique! Il s'agit de la classe &lt;a title="MSDN: SPBuiltInFieldId Class (Microsoft.SharePoint)" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spbuiltinfieldid.aspx" target="_blank" rel=tag&gt;SPBuiltInFieldId&lt;/a&gt;. Cette classe vous permet de récupérer les Ids de tous les champs de base de SharePoint. Jugez-en plutot par ce petit screenshot: &lt;p align=center&gt;&lt;a href="http://blufiles.storage.msn.com/y1pzCc75551wSHH0U9Fpvr-Tch1knf1qqjL974Swa3G4Q0VGGVjug8FZNWPTje6CvQiE7rfeZSQkoE?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=201 alt=image src="http://blufiles.storage.msn.com/y1pzCc75551wSHi4HuNFsCt171ALEGbVlE63GcShfg3E-t0Og862YlZeLGe4d5ckkWm6jxSP3gVic0?PARTNER=WRITER" width=333 border=0&gt;&lt;/a&gt;  &lt;p align=left&gt;Par contre, chose des plus étranges, cette classe n'est pas du tout documenté &lt;img alt="smile_omg" src="http://spaces.live.com/rte/emoticons/smile_omg.gif"&gt; dans le SDK). &lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/SharePoint" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SharePoint"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tag/SPBuiltInFieldId" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SPBuiltInFieldId"&gt;SPBuiltInFieldId&lt;/a&gt;, &lt;a href="http://technorati.com/tag/WSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=WSS"&gt;WSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS"&gt;MOSS&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bSharePoint%5d+SPBuiltInFieldId+ou+la+classe+qui+vous+rend+service&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>SharePoint</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!662.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!662.entry</guid><pubDate>Sat, 31 May 2008 18:28:03 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!662/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!662.entry#comment</wfw:comment><dcterms:modified>2008-05-31T18:29:13Z</dcterms:modified></item><item><title>[SharePoint] Custom Field - Variation labels sur CodePlex</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!651.entry</link><description>&lt;p&gt;Je viens de poster sur &lt;a title="CodePlex: Public profile of Gael Duhamel" href="http://www.codeplex.com/site/users/view/GaelDuhamel" target="_blank" rel=tag&gt;CodePlex&lt;/a&gt; un nouveau projet de type &lt;a title="MSDN: Custom Field Types" href="http://msdn2.microsoft.com/en-us/library/ms446361.aspx" target="_blank" rel=tag&gt;champ personnalisé&lt;/a&gt;. Ce champ permet d'afficher la liste des « &lt;a title="MSDN: Customizing and Branding Web Content Management-Enabled SharePoint Sites" href="http://msdn.microsoft.com/en-us/library/aa830817.aspx#Office2007SSBrandingWCMPart3_CreatingSiteVariations" target="_blank" rel=tag&gt;variation labels&lt;/a&gt; » définit pour votre site web.  &lt;p&gt;Bien qu'il soit très facile de faire cela via le model objet de SharePoint (voir l'exemple à la fin de ce billet), il est parfois utile d'avoir un champ personnalisé car celui-ci vous laisse plus de souplesse quant à son utilisation (novice ou non).  &lt;p&gt;Pour commencer, vous devez installer la solution et activer la feature (un guide d'installation et configuration est disponible dans &lt;a title="CodePlex: Release du projetVariation Labels - MOSS Custom fields" href="https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=VariationLabelsCsFld" target="_blank" rel=tag&gt;l'onglet release&lt;/a&gt; du projet)  &lt;p align=center&gt;&lt;a href="http://tw28hg.blu.livefilestore.com/y1pbr1L1dQT-h2T5osCfVBSEviI75v-_yuwksvJrodocGAanEDvDmEnT_tghHx-keK4mbWsUw9cQzDdt5MRwa2fUtjDjTiO74fp?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=55 alt=image src="http://tw28hg.blu.livefilestore.com/y1pbr1L1dQT-h0c21GzJt7y1mJLTnqfOgj6txQcJhHV_y7pVp9xzWBgzXT1fuZGSKVrw-CUqjoiA2KYLQd4IAHQheAKObyOa010?PARTNER=WRITER" width=609 border=0&gt;&lt;/a&gt;  &lt;p&gt; &lt;p&gt;Une fois cela fait, vous pouvez maintenant ajouter votre nouveau type de colonne dans votre liste :  &lt;p align=center&gt;&lt;a href="http://blu1.storage.msn.com/y1pndzJ6u2Pt9hmL1_R2aaGPcPVteWdkPjYOAlorStYmvZ4HV97A_zfym3g3QuIJUEoFzhepHvHr0WB6GnR66vYYLbDXxbDhwSZ?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=506 alt=image src="http://tw28hg.blu.livefilestore.com/y1pbr1L1dQT-h1CuIvvUtXD1uUGBC_xADOJ8HPZOIKKHHomkKNOK1fNT2yu61mEKH0tYjQaiLubZVnWmljZQI5LxBluxvDxIs3r?PARTNER=WRITER" width=609 border=0&gt;&lt;/a&gt;  &lt;p&gt; &lt;p&gt;En mode ajout/modification, une liste déroulante vous permet de sélectionner une des variations installées sur votre serveur de publication MOSS.  &lt;p align=center&gt;&lt;a href="http://tw28hg.blu.livefilestore.com/y1pD7zjezS6ax0QyAa1szTYc073ZOuRepl0YtjdhfTxHWg4pubB8UlznR2l2RPxEtt4Zs9qq4yz1nUz9Iuu-NWn2g?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=235 alt=image src="http://tw28hg.blu.livefilestore.com/y1pD7zjezS6ax0XuZ6SgyFSLCsu4BNq9JAJTbQTknk1nIc867MdfQ_nAiY77RgwNns-Do4l8l-Y8MvfazIQpvx1Uw?PARTNER=WRITER" width=609 border=0&gt;&lt;/a&gt;  &lt;p&gt; &lt;p&gt;Ci-dessous, la liste des variations installées (comme preuve de ma bonne fois &lt;img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif"&gt;) :  &lt;p align=center&gt;&lt;a href="http://tw28hg.blu.livefilestore.com/y1pD7zjezS6ax3gP0WR05QPZO-8Os0YHhtlA_3jF5gnKn6v75b6v6eCTrHK5QpmLXMIAMrgs8n-6IK-EeyDaUgnEA?PARTNER=WRITER"&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://tw28hg.blu.livefilestore.com/y1pD7zjezS6ax3QbkI6yoTw9MhIRPUapvoLVcLj9rfq8TmJNnSaFJrEubOTQ1EQfXb47NFiksDx4mhRaU-z5Zvonw?PARTNER=WRITER" width=609 border=0&gt;&lt;/a&gt;  &lt;p&gt; &lt;p&gt;&lt;strong&gt;Pour ajouter ce type de colonne à une liste via un peu de lignes de code, vous pouvez faire comme ceci:&lt;/strong&gt;  &lt;p&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;&lt;span style="color:#2b91af"&gt;String&lt;/span&gt; languageId = spList.Fields.AddFieldAsXml(&lt;span style="color:#2b91af"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;Field Type=\&amp;quot;VariationLabelsFieldType\&amp;quot; DisplayName=\&amp;quot;{0}\&amp;quot; Name=\&amp;quot;{0}\&amp;quot; Required=\&amp;quot;TRUE\&amp;quot; /&amp;gt;&amp;quot;&lt;/span&gt;, SPGael.&lt;span style="color:#2b91af"&gt;SharedConstants&lt;/span&gt;.LANGUAGECOLUMNNAME));&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;&lt;span style="color:#2b91af"&gt;SPField&lt;/span&gt; language = spListStaticTexts.Fields.GetField(languageId);&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;language.Title = SPGael.&lt;span style="color:#2b91af"&gt;SharedConstants&lt;/span&gt;.LANGUAGECOLUMNNAME;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;language.Update();&lt;/span&gt;  &lt;p&gt;&lt;strong&gt;Pour ajouter un lookup colonne basé sur votre liste de variation, vous pouvez faire comme ceci :&lt;/strong&gt;  &lt;p&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;&lt;span style="color:blue"&gt;using&lt;/span&gt;&lt;span style="color:#2b91af"&gt; &lt;/span&gt;(&lt;span style="color:#2b91af"&gt;SPSite &lt;/span&gt;spSite =&lt;span style="color:#2b91af"&gt; &lt;/span&gt;&lt;span style="color:blue"&gt;new&lt;/span&gt;&lt;span style="color:#2b91af"&gt; SPSite&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;SPContext&lt;/span&gt;.Current.Site.ID))&lt;font color="#2b91af"&gt;&lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;{&lt;br&gt;     &lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;&lt;span style="color:blue"&gt;using&lt;/span&gt;&lt;span style="color:#2b91af"&gt; &lt;/span&gt;(&lt;span style="color:#2b91af"&gt;SPWeb &lt;/span&gt;spWeb = spSite.RootWeb)&lt;font color="#2b91af"&gt;&lt;br&gt;     &lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;{&lt;font color="#2b91af"&gt;&lt;br&gt;          &lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;&lt;span style="color:#2b91af"&gt;String&lt;/span&gt; _VarLabelsListId = spWeb.AllProperties[&lt;span style="color:#a31515"&gt;&amp;quot;_VarLabelsListId&amp;quot;&lt;/span&gt;].ToString();&lt;br&gt;          &lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;&lt;span style="color:#2b91af"&gt;SPList&lt;/span&gt; VariationLabels = spWeb.Lists[&lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Guid&lt;/span&gt;(_VarLabelsListId)];&lt;br&gt;          &lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;&lt;span style="color:#2b91af"&gt;SPList&lt;/span&gt; list = spWeb.Lists[&lt;span style="color:#a31515"&gt;&amp;quot;Static texts configuration list&amp;quot;&lt;/span&gt;];&lt;br&gt;          &lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;&lt;span style="color:#2b91af"&gt;String&lt;/span&gt; sLanguage = list.Fields.AddLookup(&lt;span style="color:#a31515"&gt;&amp;quot;test&amp;quot;&lt;/span&gt;, &lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Guid&lt;/span&gt;(_VarLabelsListId), &lt;span style="color:blue"&gt;true&lt;/span&gt;);&lt;br&gt;          &lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;&lt;span style="color:#2b91af"&gt;SPFieldLookup&lt;/span&gt; language = (&lt;span style="color:#2b91af"&gt;SPFieldLookup&lt;/span&gt;)list.Fields.GetField(sLanguage);&lt;br&gt;          &lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;language.LookupField = VariationLabels.Fields[&lt;span style="color:#a31515"&gt;&amp;quot;Flag Control Display Name&amp;quot;&lt;/span&gt;].InternalName;&lt;br&gt;          &lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;language.Update();&lt;br&gt;     &lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;}&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:courier new"&gt;}&lt;/span&gt;  &lt;p&gt;Rendez-vous donc sur &lt;a title="CodePlex: SharePoint Custom Field - Variation labels" href="http://www.codeplex.com/VariationLabelsCsFld" target="_blank" rel=tag&gt;http://www.codeplex.com/VariationLabelsCsFld&lt;/a&gt; pour télécharger, tester et me remonter les éventuels bogues, évolutions, ou autres…  &lt;p align=center&gt;&lt;a title="CodePlex: SharePoint Custom Field - Variation labels" href="http://www.codeplex.com/VariationLabelsCsFld" target="_blank" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=96 alt="clip_image009" src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9hT1M4dbC0BqgDTVNIJmBWbx8TDt9GmT_I1vRECATe9kkNJjWvxRyx7AQj6s2T1NYYd27NJHYlQd3mBrHO5ZdJ8?PARTNER=WRITER" width=239 border=0&gt;&lt;/a&gt;  &lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/SharePoint" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SharePoint"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Custom+Field" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Custom+Field"&gt;Custom Field&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Variation+Labels" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Variation+Labels"&gt;Variation Labels&lt;/a&gt;, &lt;a href="http://technorati.com/tag/CodePlex" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=CodePlex"&gt;CodePlex&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Feature" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Feature"&gt;Feature&lt;/a&gt;, &lt;a href="http://technorati.com/tag/WSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=WSS"&gt;WSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS"&gt;MOSS&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bSharePoint%5d+Custom+Field+-+Variation+labels+sur+CodePlex&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>SharePoint</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!651.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!651.entry</guid><pubDate>Tue, 27 May 2008 10:16:56 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!651/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!651.entry#comment</wfw:comment><dcterms:modified>2008-05-27T10:16:56Z</dcterms:modified></item><item><title>[Windows Live] Bon anniversaire</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!636.entry</link><description>&lt;p&gt;Cela fait maintenant 11 ans que je suis sur &lt;a href="http://fr.wikipedia.org/wiki/Hotmail" target="_blank"&gt;Hotmail&lt;/a&gt;... Une éternité dans notre monde informatique ou tout évolue tellement vite. Rendez-vous compte, à mes débuts, les modems atteignaient la vitesse stupéfiante de 14400kbs, le &lt;a title="Wikipedia: Javascript" href="http://fr.wikipedia.org/wiki/Javascript" target="_blank" rel=tag&gt;javascript&lt;/a&gt; en était à ses débuts et la bataille faisait rage entre &lt;a title="Wikipedia: Historique Internet Explorer" href="http://fr.wikipedia.org/wiki/Internet_explorer#Historique" target="_blank" rel=tag&gt;Internet Explorer 4.0&lt;/a&gt; et &lt;a title="Wikipedia: Netscape Communicator" href="http://fr.wikipedia.org/wiki/Netscape_Communicator" target="_blank" rel=tag&gt;Netscape Communicator&lt;/a&gt;... 
&lt;p align=center&gt;&lt;a href="http://blufiles.storage.msn.com/y1pzCc75551wSFYPJjaRC4cDK0LtlQ0lm3NjXKIYr3GuXE2wxrVgGN7AYk341-SlzowSmQjNq3tX2U?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=201 alt=image src="http://blufiles.storage.msn.com/y1pzCc75551wSHDCQeqkGG-Lq8bfHghO5U7DLBKJmPVXMcIPLnkWkmKxR8Fp8sIwJJm8BXcueUf3kA?PARTNER=WRITER" width=517 border=0&gt;&lt;/a&gt; 
&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/Windows+Live" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Windows+Live"&gt;Windows Live&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bWindows+Live%5d+Bon+anniversaire&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>Windows</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!636.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!636.entry</guid><pubDate>Wed, 21 May 2008 12:30:13 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!636/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!636.entry#comment</wfw:comment><dcterms:modified>2008-06-19T14:51:53Z</dcterms:modified></item><item><title>[SharePoint] MOSS ROBOTS meta tag</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!631.entry</link><description>&lt;p&gt;Je suis en train de travailler sur un site internet sous MOSS et j’ai pas mal de travail à faire sur le rendu d’une page MOSS, qui n’est absolument pas accessible.  &lt;p&gt;Avant de commencer un projet (aussi bien en développement qu’en conseil), j’aime toujours relire les guidances ou autres proof of concepts, afin d’être certains de choisir la bonne solution. Cela me prend souvent beaucoup de temps, mais je pense qu’en prenant soin de lire ce que les autres acteurs on pu faire, on gagne un temps précieux à ne pas commettre les mêmes erreurs. Donc pour en revenir au sujet, je lisais ce qu’il se faisait en termes de modification du rendu de control SharePoint. Ce que j’ai constaté, c’est qu’en majorité, la plupart des articles propose de réécrire son propre custom control afin d’être sur de bien maitriser le rendu. Dans un de ses excellents articles, &lt;a title="Stefan Goßner's blog" href="http://blogs.technet.com/stefan_gossner/default.aspx" target="_blank" rel=tag&gt;Stefan Goßner&lt;/a&gt; (je vous recommande la lecture de son blog, qui est une véritable mine d’or) proposait de changer le rendu du tag « RobotsMetaTag » par un custom control : &lt;a title="Adjusting the MOSS ROBOTS meta tag for 3rd party search engines" href="http://blogs.technet.com/stefan_gossner/archive/2007/06/19/adjusting-the-robots-meta-tag-for-3rd-party-search-engines.aspx" target="_blank" rel=tag&gt;Adjusting the MOSS ROBOTS meta tag for 3rd party search engines&lt;/a&gt;. Ma question a été, pourquoi ne pas utiliser à la place un control adapter ? Cette solution me paraissait plus « propre », car l’on continue à se baser sur le contrôle de base. Stefan a eu la gentillesse de me répondre et d’approuver ma solution &lt;img alt="smile_nerd" src="http://spaces.live.com/rte/emoticons/smile_nerd.gif"&gt;. Il en a profité par la-même pour écrire un poste à ce sujet : &lt;a title="Adjusting the MOSS ROBOTS meta tag for 3rd party search engines - using a Control Adapter (last update: April 11th)" href="http://blogs.technet.com/stefan_gossner/archive/2008/04/08/adjusting-the-moss-robots-meta-tag-for-3rd-party-search-engines-using-a-control-adapter.aspx" target="_blank" rel=tag&gt;Adjusting the MOSS ROBOTS meta tag for 3rd party search engines - using a Control Adapter (last update: April 11th)&lt;/a&gt;. &lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/Control+Adapter" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Control+Adapter"&gt;Control Adapter&lt;/a&gt;, &lt;a href="http://technorati.com/tag/WSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=WSS"&gt;WSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS"&gt;MOSS&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bSharePoint%5d+MOSS+ROBOTS+meta+tag&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!631.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!631.entry</guid><pubDate>Sun, 18 May 2008 22:42:30 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!631/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!631.entry#comment</wfw:comment><dcterms:modified>2008-05-18T22:42:30Z</dcterms:modified></item><item><title>[SharePoint] Ajouter une langue dans la liste des variations d’un site de publication MOSS (maj le 19 mai 2008)</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!630.entry</link><description>&lt;p&gt;Comme vous le savez, toutes les langues ne possèdent pas encore de localisation propre. Ces langues sont souvent celles dite « minoritaire » comme le sont le flamand, le catalan, le gaélique, le basque, etc… Microsoft, prend toutefois soin à en répertorier le maximum et de créer pour ces langues un &lt;a title="List of Locale ID (LCID) Values as Assigned by Microsoft" href="http://www.microsoft.com/globaldev/reference/lcid-all.mspx" target="_blank" rel=tag&gt;LocaleID&lt;/a&gt; (pour en avoir une liste : &lt;a href="http://www.microsoft.com/globaldev/reference/lcid-all.mspx" target="_blank"&gt;http://www.microsoft.com/globaldev/reference/lcid-all.mspx&lt;/a&gt;) en attendant de leur offrir une vrai « &lt;a title="MSDN: CultureInfo Class" href="http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx" target="_blank" rel=tag&gt;culture&lt;/a&gt; » (vous pouvez en trouver une liste ici : &lt;a href="http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx&lt;/a&gt;) et donc le &lt;a title="Microsoft download: Module linguistique pour Windows SharePoint Services 3.0" href="http://www.microsoft.com/downloads/details.aspx?displaylang=fr&amp;amp;FamilyID=36ee1bf0-652c-4e38-b247-f29b3eefa048" target="_blank" rel=tag&gt;module linguistique&lt;/a&gt; pour SharePoint (les langues disponibles sont ici: &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=fr&amp;amp;FamilyID=36ee1bf0-652c-4e38-b247-f29b3eefa048" target="_blank"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=fr&amp;amp;FamilyID=36ee1bf0-652c-4e38-b247-f29b3eefa048&lt;/a&gt;) qui vous permettra de voir votre SharePoint « parler » flamand &lt;img alt="smile_nerd" src="http://spaces.live.com/rte/emoticons/smile_nerd.gif"&gt;.  &lt;p&gt;Dans mon cas « client », je dois réaliser un site internet public Irlandais basé sur MOSS. Comme vous ne le savez peut-être pas, mais ici en Irlande, tout site public doit être disponible en gaélique et en anglais. Bien qu’il existe une culture pour l’Irlande qui est « En-Ie » (et un LCID 6153), celle-ci ne fait que « gérer » du formatage comme pour le calendrier (jj/mm/aaaa) ou la devise (€) basé sur la langue anglaise. Donc, comme vu un peu plus haut, le gaélique ne possède pas de « culture » (au sens informatique du terme bien sur ^^) et donc encore moins de module linguistique. Ce qui fait donc, qu’il n’est pas « possible » de le trouver par défaut dans la liste des variations disponibles. Pour y remédier, il vous suffit: &lt;ul&gt; &lt;li&gt;d'ajouter dans le fichier xml : RGNLSTNG.XML (qui se trouve ici: C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1033\XML) et d'ajouter une nouvelle ligne au nœud Locales.&lt;/ul&gt; &lt;p align=center&gt;&lt;a href="http://blufiles.storage.msn.com/y1pzCc75551wSECAoUthzitfmG5NpQ3sH9POMRkwaqUzGOUuZMkwd7dRV4gmUcl_WNw0kG3uzp_j3w?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=25 alt=image src="http://blufiles.storage.msn.com/y1pzCc75551wSHTgeLHEE4j5B_C5JlbL5EAwUEBoE0GWSKZGP9zsZRlu9KsXJCJfBZWqoaQsEkEsXQ?PARTNER=WRITER" width=343 border=0&gt;&lt;/a&gt;  &lt;ul&gt; &lt;li&gt;d’éditer ce fichier xml : RGNLDFLT.XML (qui se trouve ici : C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\CONFIG) et d’ajouter une nouvelle ligne au nœud LangIDDefaults. &lt;/ul&gt; &lt;p align=center&gt;&lt;a href="http://tjgbww.blu.livefilestore.com/y1pD7zjezS6ax1FSXcyGNzTSCO3ml9oh9kLT_VEt-1YaW0rbWllLccHN9aDMhEynYLtPY6uAEdyniHqsRi3XL29yw?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=41 alt="clip_image002" src="http://tjgbww.blu.livefilestore.com/y1pbr1L1dQT-h2UZf7I0mAOuxZmpKllryxNTm6l9yuvaEyILq3-LvI0iB2vt-qBKoOWEUeK7seyyaymRp4tIR6QOYd0_ayYjVFb?PARTNER=WRITER" width=644 border=0&gt;&lt;/a&gt; &lt;ul&gt; &lt;ul&gt; &lt;li&gt;Pour décortiquer un peu les attributs (car le moins que l’on puisse dire est que ce n’est absolument pas documenté ! Rien dans le SDK, MSDN ou Technet &lt;img alt="smile_cry" src="http://spaces.live.com/rte/emoticons/smile_cry.gif"&gt;) :  &lt;ul&gt; &lt;li&gt;&lt;a title="List of Locale ID (LCID) Values as Assigned by Microsoft" href="http://www.microsoft.com/globaldev/reference/lcid-all.mspx" target="_blank" rel=tag&gt;lid&lt;/a&gt; : LCID &lt;li&gt;&lt;a title="MSDN: SPCalendarType Enumeration (Microsoft.SharePoint)" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spcalendartype.aspx" target="_blank" rel=tag&gt;caltype&lt;/a&gt; : Type de votre calendrier - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spcalendartype.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spcalendartype.aspx&lt;/a&gt; &lt;li&gt;tzid : Fuseau horaire définit dans le fichier RGNLSTNG.XML (qui se trouve dans le répertoire C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1033\XML\). &lt;li&gt;&lt;a title="MSDN: SPRegionalSettings.Time24 Property (Microsoft.SharePoint)" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spregionalsettings.time24.aspx" target="_blank" rel=tag&gt;time24&lt;/a&gt; : Affichage de l’heure au format 24heure ou 12heure - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spregionalsettings.time24.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spregionalsettings.time24.aspx&lt;/a&gt; &lt;li&gt;&lt;a title="MSDN: CurrencyFieldFormat Enumeration" href="http://msdn.microsoft.com/en-us/library/bb258272.aspx" target="_blank" rel=tag&gt;currencylid&lt;/a&gt; : Devise et son format d’affichage - &lt;a href="http://msdn.microsoft.com/en-us/library/bb258272.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/bb258272.aspx&lt;/a&gt; &lt;li&gt;&lt;a title="MSDN: SPRegionalSettings.IsRightToLeft Property (Microsoft.SharePoint)" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spregionalsettings.isrighttoleft.aspx" target="_blank" rel=tag&gt;isrtl&lt;/a&gt; : Se lit de droite à gauche - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spregionalsettings.isrighttoleft.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spregionalsettings.isrighttoleft.aspx&lt;/a&gt; &lt;li&gt;&lt;a title="MSDN: SPRegionalSettings.IsEastAsia Property (Microsoft.SharePoint)" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spregionalsettings.iseastasia.aspx" target="_blank" rel=tag&gt;iseastasia&lt;/a&gt; : La langue est-elle est-asiatique - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spregionalsettings.iseastasia.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spregionalsettings.iseastasia.aspx&lt;/a&gt; &lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;N’oubliez pas le IISRESET pour prendre en compte votre modification et constater le résultat :  &lt;p align=center&gt;&lt;a href="http://blu1.storage.msn.com/y1pndzJ6u2Pt9gClLvyi48QkPzolPu7vilVgnHkCHcJkWQUifwAT8YN57yiHsN6K7DWJBHoVaEfNnEMbP146dUhZ4ABslziwqfd?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=243 alt="clip_image004" src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9gBcT4zzJBk3V4tllUHJjvwGMb0pLbWcRVGRKCLCsVT61OWXKhrd1LvFNmLbmL7q0bPTXsAQslSrLfDUxeQPu0S?PARTNER=WRITER" width=477 border=0&gt;&lt;/a&gt; &lt;p&gt;Attention: si votre langue ne possède pas sa propre ressource, MOSS ne pourra pas vous rediriger par défaut sur celle-ci. En effet, la redirection ce base sur le &lt;a title="Content Language Headers" href="http://www.apps.ietf.org/rfc/rfc3282.html" target="_blank" rel=tag&gt;HTTP_ACCEPT_LANGUAGE&lt;/a&gt;. &lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/Localization" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Localization"&gt;Localization&lt;/a&gt;,&lt;a href="http://technorati.com/tag/Variation" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Variation"&gt;Variation&lt;/a&gt;, &lt;a href="http://technorati.com/tag/SharePoint" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SharePoint"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS+Publication" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS+Publication"&gt;Site de publication MOSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Langues+Minoritaires" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Langues+Minoritaires"&gt;Langues Minoritaires&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS"&gt;MOSS&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bSharePoint%5d+Ajouter+une+langue+dans+la+liste+des+variations+d%e2%80%99un+site+de+publication+MOSS+(maj+le+19+mai+2008)&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>SharePoint</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!630.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!630.entry</guid><pubDate>Sun, 18 May 2008 20:30:05 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!630/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!630.entry#comment</wfw:comment><dcterms:modified>2008-05-19T09:57:30Z</dcterms:modified></item><item><title>[Linq] Grouper les items renvoyés par un query sur une liste</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!625.entry</link><description>&lt;p&gt;Auparavant, lorsque je voulais regrouper mes valeurs issues d’un query sur une liste. Je devais faire tout un tas de manipulations, comme :&lt;br&gt;-fonction xpath : pour regrouper mes items&lt;br&gt;-sur le regroupement faire des calculs si nécessaire&lt;br&gt;En effet, le &lt;a title="MSDN: SPQuery Class" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.aspx" target="_blank" rel=tag&gt;SPQuery&lt;/a&gt; ou l’utilisation d’une vue (&lt;a title="MSDN: SPView Class" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spview.aspx" target="_blank" rel=tag&gt;SPView&lt;/a&gt;) avec un regroupement, renvoi a chaque fois l’ensemble des éléments de la liste. Grâce à &lt;a title="MSDN: The LINQ Project" href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" target="_blank" rel=tag&gt;Linq&lt;/a&gt;, on peut maintenant récupérer et regrouper très facilement  nos résultats. Comme par exemple, ici je souhaitais avoir une liste unique de catégories présentent dans ma liste : &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#008000"&gt;// Ma liste&lt;/span&gt;
SPList spList = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;;
&lt;span style="color:#0000ff"&gt;try&lt;/span&gt; { spList = SPContext.Current.Site.RootWeb.Lists[&lt;span style="color:#006080"&gt;&amp;quot;MaListe&amp;quot;&lt;/span&gt;]; }
&lt;span style="color:#0000ff"&gt;catch&lt;/span&gt; { }

&lt;span style="color:#008000"&gt;// si null, exception&lt;/span&gt;
&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (spList == &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;) &lt;span style="color:#0000ff"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; NullReferenceException(&lt;span style="color:#006080"&gt;&amp;quot;La liste  n'existe pas&amp;quot;&lt;/span&gt;);

&lt;span style="color:#008000"&gt;// Recuperation du nom interne de la colonne&lt;/span&gt;
&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (!spList.Fields.ContainsField(&lt;span style="color:#006080"&gt;&amp;quot;Categorie&amp;quot;&lt;/span&gt;)) &lt;span style="color:#0000ff"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; NullReferenceException(&lt;span style="color:#006080"&gt;&amp;quot;La colonne categorie n'existe pas&amp;quot;&lt;/span&gt;);
String categoryColumnName = spList.Fields[&lt;span style="color:#006080"&gt;&amp;quot;Categorie&amp;quot;&lt;/span&gt;].InternalName;

&lt;span style="color:#008000"&gt;// Recuperation des categories distinctes triees&lt;/span&gt;
SPQuery spQuery = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; SPQuery();
spQuery.Query = String.Format(&lt;span style="color:#006080"&gt;&amp;quot;&amp;lt;OrderBy&amp;gt;&amp;lt;FieldRef Name='{0}' /&amp;gt;&amp;lt;/OrderBy&amp;gt;&amp;quot;&lt;/span&gt;, categoryColumnName);

&lt;span style="color:#008000"&gt;// Chargement du Xml&lt;/span&gt;
XDocument xml = XDocument.Parse(spList.GetItems(spQuery).Xml);

&lt;span style="color:#008000"&gt;// Ajout du namesplace pour recuperer mes valeurs&lt;/span&gt;
XNamespace z = &lt;span style="color:#006080"&gt;&amp;quot;#RowsetSchema&amp;quot;&lt;/span&gt;;

&lt;span style="color:#008000"&gt;// IMPORTANT: n'oubliez pas de typer votre regroupement&lt;/span&gt;
var groupedCategories = from allcategories &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; xml.Descendants(z + &lt;span style="color:#006080"&gt;&amp;quot;row&amp;quot;&lt;/span&gt;)
     group allcategories by (&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;)allcategories.Attribute(&lt;span style="color:#006080"&gt;&amp;quot;ows_Categorie&amp;quot;&lt;/span&gt;) into distinctCategories
     select distinctCategories;

&lt;span style="color:#008000"&gt;// Ensuite il nous suffit de recuperer le resultat&lt;/span&gt;
&lt;span style="color:#008000"&gt;// Ici en l'ajoutant a un control de type Checkbox list&lt;/span&gt;
&lt;span style="color:#0000ff"&gt;foreach&lt;/span&gt; (var cat &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; groupedCategories)
{
     &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;.cblCategories.Items.Add(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; ListItem((&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;)cat.Key));
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Simple non?
&lt;p&gt;Pour allez un peu plus loin, ou si vous débutez comme moi, allez jeter un oeil sur le blog de &lt;a title="Wriju's BLOG" href="http://blogs.msdn.com/wriju/default.aspx" target="_blank" rel=tag&gt;Wriju&lt;/a&gt;. Il y a d'excellentes choses à lire.
&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/Linq" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Linq"&gt;Linq&lt;/a&gt;, &lt;a href="http://technorati.com/tag/SharePoint" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SharePoint"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tag/SPList" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SPList"&gt;SPList&lt;/a&gt;, &lt;a href="http://technorati.com/tag/SPQuery" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SPQuery"&gt;SPQuery&lt;/a&gt;, &lt;a href="http://technorati.com/tag/WSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=WSS"&gt;WSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS"&gt;MOSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/asp+net+3" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=asp+net+3"&gt;asp.net 3.5&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bLinq%5d+Grouper+les+items+renvoy%c3%a9s+par+un+query+sur+une+liste&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>Linq</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!625.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!625.entry</guid><pubDate>Thu, 15 May 2008 22:13:08 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!625/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!625.entry#comment</wfw:comment><dcterms:modified>2008-05-15T22:28:06Z</dcterms:modified></item><item><title>[SSRS] The report server is not responding. Verify that the report server is running and can be accessed from this computer</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!595.entry</link><description>&lt;p&gt;Lorsque vous souhaitez installer &lt;a title="Microsoft SQL Server Reporting Server 2005" href="http://www.microsoft.com/sql/technologies/reporting/default.mspx" target="_blank" rel=tag&gt;SQL Server Reporting Server 2005 (sp2)&lt;/a&gt; sur une autre instance web que celle par défaut, vous pouvez avoir ce type d’erreur: 
&lt;p&gt;&lt;i&gt;The report server is not responding. Verify that the report server is running and can be accessed from this computer. &lt;/i&gt;
&lt;p&gt;&lt;a href="http://tjgbww.blu.livefilestore.com/y1pD7zjezS6ax08AEG4fkUdCV6TmqIf0cvploWOV_hKlcQSpuvhRYXngn2r2js4FFEdyaZnuUMjCdmwkfldva5Ywg?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=107 alt="clip_image002" src="http://tjgbww.blu.livefilestore.com/y1pbr1L1dQT-h2UsfZQAaTjDK9gMwo9-eKRT77HnOUwuHeMcOWxw1UQDOZauzPFfsaoHLhp35a4kU6kvp7-sCV3E2gK2nDnOeXc?PARTNER=WRITER" width=644 border=0&gt;&lt;/a&gt; 
&lt;p&gt;Pour remédier à cela, il vous suffit d’aller éditer le ficher web.config de l’application web hébergeant le service SSRS. Celui-ci se trouve dans %Program Files%\Microsoft SQL Server\MSSQL.&lt;b&gt;&lt;font color="#ff0000" size=3&gt;x&lt;/font&gt;&lt;/b&gt;\Reporting Services\ReportManager (x correspondant à votre instance SSRS). 
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;UI&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportServerUrl&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportServerUrl&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportServerVirtualDirectory&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;ReportServer&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportServerVirtualDirectory&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportBuilderTrustLevel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;FullTrust&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportBuilderTrustLevel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;UI&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il vous faut : 
&lt;ul&gt;
&lt;li&gt;Remplacer le nœud ReportServerUrl par le nom complet (&lt;a title="WikiPedia: Fully Qualified Domain Name" href="http://en.wikipedia.org/wiki/Fully_qualified_domain_name" target="_blank" rel=tag&gt;fully qualified domain name&lt;/a&gt;,ie FQDN) de votre site SSRS avec l’extention ReportServer 
&lt;li&gt;Supprimer la valeur du nœud ReportServerVirtualDirectory&lt;/ul&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;UI&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportServerUrl&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;http://ssrs.sharepoint.local/ReportServer&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportServerUrl&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportServerVirtualDirectory&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportServerVirtualDirectory&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportBuilderTrustLevel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;FullTrust&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;ReportBuilderTrustLevel&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;UI&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://tjgbww.blu.livefilestore.com/y1pbr1L1dQT-h1uOr0-5TUHpVLag7zDluvz2uxVgLfUExd6lgZgyB19-Waz831-WXXi-2cc01mMOgIC1_Xi9lqoVwBs-7KoDBkl?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=106 alt="clip_image004" src="http://tjgbww.blu.livefilestore.com/y1pbr1L1dQT-h2Sf2P-TMPjv8aXKLWuT7R_yyHlgTp1MnEzqARFBIJMn4dJiYj0u60faW3qWOy7SiR68w6XoAQvUexNX4KiIeaW?PARTNER=WRITER" width=644 border=0&gt;&lt;/a&gt; 
&lt;p&gt;Et voila maintenant votre service SSRS installé sur une autre instance web que celle par défaut. 
&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/SQL+Server+Reporting+Server+2005" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SQL+Server+Reporting+Server+2005"&gt;SQL Server Reporting Server 2005&lt;/a&gt;, &lt;a href="http://technorati.com/tag/SSRS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SSRS"&gt;SSRS&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bSSRS%5d+The+report+server+is+not+responding.+Verify+that+the+report+server+is+running+and+can+be+accessed+from+this+computer&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>SQL Server Reporting Services 2005</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!595.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!595.entry</guid><pubDate>Thu, 17 Apr 2008 14:41:25 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!595/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!595.entry#comment</wfw:comment><dcterms:modified>2008-06-19T14:52:16Z</dcterms:modified></item><item><title>[Accéssibilités] Microsoft SharePoint Briefing in Dublin with HiSoftware</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!573.entry</link><description>&lt;p&gt;Microsoft Ireland organise avec la société &lt;a title=HiSoftware href="http://www.hisoftware.com" target="_blank" rel=tag&gt;HiSoftware&lt;/a&gt; un événement autour des problématiques liés à l'accéssibilité. Cette conférence devrait être des plus intéressante car HiSoftware est la société missionnée par Microsoft pour développer les composants nécessaire pour rendre les sites de publication MOSS accessible aux déficients visuel. Ce projet étant open source, vous pouvez le retrouvez sur &lt;a title=CodePlex href="http://www.codeplex.com" target="_blank" rel=tag&gt;CodePlex&lt;/a&gt; à cette adresse: &lt;a title="CodePlex - Accessibility Kit for SharePoint" href="http://www.codeplex.com/aks" target="_blank" rel=tag&gt;Accessibility Kit for SharePoint&lt;/a&gt;. &lt;p&gt;Ci dessous, le texte officiel de l'invitation: &lt;p&gt;&lt;a href="http://www.hisoftware.com/index.html"&gt;&lt;img height=80 alt="HiSoftware Logo and Link to main page of Web Site" src="http://www.hisoftware.com/images/menu/content_tools_logo.gif" width=203 align=left border=0 longdesc="http://www.hisoftware.com/co/hisoftwarelogo.htm"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;What:&lt;/b&gt; Microsoft SharePoint Briefing - Dublin  &lt;p&gt;&lt;b&gt;Where:&lt;/b&gt; Microsoft EPDC2 Auditorium&lt;b&gt;&lt;br&gt;&lt;/b&gt;South County Business Park&lt;br&gt;Leopardstown Dublin D18, Ireland  &lt;p&gt;&lt;b&gt;When:&lt;/b&gt; Thursday, April 24, 2008, 9:00 to 17:00 GMT, London  &lt;p&gt;&lt;b&gt;Who Should Attend:&lt;/b&gt; IT Professionals.  &lt;p&gt;&lt;b&gt;Summary: &lt;/b&gt;Leveraging the power of Enterprise Microsoft Office SharePoint Server (“MOSS”) to answer and remove the complexity and pain of compliance. This 30 minute Quickcast Webinar is a scenario based exploration of the different ways in which MOSS Enterprise Edition can be used to accelerate decision making, automate compliance and disseminate responsibility for compliance without losing control.  &lt;p&gt;Briefing will include an overview of the pivotal role played by collaboration in the New World of Work, as well as customer accounts on the impact SharePoint has made to their businesses. Furthermore, breakout sessions will give you a choice of tracks delivered by partners, focusing on areas like Enterprise Content Management, Search, Portals &amp;amp; Collaboration and Workflows.  &lt;p&gt;During the partner sessions, HiSoftware’s President &amp;amp; CEO Kurt A. Mueffelmann will discuss the company’s joint development efforts with Microsoft to create a more accessible and compliant SharePoint offering through the Accessibility Kit for SharePoint and Compliance Sheriff for SharePoint.  &lt;p&gt;&lt;b&gt;Registration:&lt;/b&gt; If you would like to attend this event, please register online by visiting: &lt;a href="http://go.microsoft.com/?linkid=8416325"&gt;http://go.microsoft.com/?linkid=8416325&lt;/a&gt;.  &lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/SharePoint" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SharePoint"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tag/HiSofware" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=HiSoftware"&gt;HiSoftware&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Accessibilite" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Accessibilite"&gt;Accessibilité&lt;/a&gt;, &lt;a href="http://technorati.com/tag/WSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=WSS"&gt;WSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS"&gt;MOSS&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bAcc%c3%a9ssibilit%c3%a9s%5d+Microsoft+SharePoint+Briefing+in+Dublin+with+HiSoftware&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>SharePoint</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!573.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!573.entry</guid><pubDate>Wed, 09 Apr 2008 19:57:18 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!573/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!573.entry#comment</wfw:comment><dcterms:modified>2008-04-09T20:11:48Z</dcterms:modified></item><item><title>[SharePoint] Dublin inaugure une rue en l'honneur de notre portail préféré</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!567.entry</link><description>&lt;p&gt;La municipalité de Dublin rend hommage à notre SharePoint préféré en lui dédiant une rue en plein centre ville. J’ai raté la cérémonie mais j’ai pu prendre quelques photos. 
&lt;p align=center&gt;&lt;a href="http://blu1.storage.msn.com/y1pndzJ6u2Pt9iVdzwCThlXvSWQ3yHhZ59fVsrM_UHxEFKqOSzDUbP2_f-N4j1X8nRihVmC3FbXXxUXkBZENOcV_7BvwqE3OYe5?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=324 alt=IMG00019 src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9gFjt-elD-NVz4J79CiRISyl9Mzqa01gLcNC6pgW-L0jwkxYjGNdahjcRRrgdJnH79TivotH94yDquGEjsU924e?PARTNER=WRITER" width=404 border=0&gt;&lt;/a&gt; 
&lt;p align=center&gt;&lt;a href="http://blu1.storage.msn.com/y1pndzJ6u2Pt9hLt7AKhIOHxJ0Jfrrm6MEAlkUE1wgPhZ8KHmAsEl5vXe1oRWg7L6TT40XzIaFzAQPnwkvfWSkehe1V4JH2IP2t?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=324 alt=IMG00025 src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9jVpaZQxZwFtO6ustshmxPuTgnznopGwgfhY-vwED_yXnNX3CGTj8ZyQ7impbL9tY-SwdNqhZxrJ6mx3k8aV1L_?PARTNER=WRITER" width=404 border=0&gt;&lt;/a&gt; 
&lt;p&gt;Si vous connaissez Dublin, cette rue est près de la célèbre avenue O'Connel Street 
&lt;p&gt;
&lt;p&gt;
&lt;div align=center&gt;
&lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;width:389px;padding-top:0px"&gt;&lt;a title="Cliquez pour voir cette carte sur Live.com" href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=53.34675~-6.254203&amp;amp;lvl=16&amp;amp;style=r&amp;amp;mkt=en-US&amp;amp;FORM=LLWR"&gt;&lt;img height=298 alt="Image de carte" src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9haSMzeaZXHr7RCsQ3628OoK6U4x19HmN7zRbOwAwXK2j9l-IOI6jdCpuEb6-xSuRLaNY2t35KcuoK7hmW8lKib?PARTNER=WRITER" width=389&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/SharePoint" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SharePoint"&gt;SharePoint&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Poisson+D+Avril" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Poisson+D+Avril"&gt;Poisson d'avril&lt;/a&gt;, &lt;a href="http://technorati.com/tag/WSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=WSS"&gt;WSS&lt;/a&gt;, &lt;a href="http://technorati.com/tag/MOSS" rel=tag&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin-left:0.4em;vertical-align:middle;border-right-width:0px" alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=MOSS"&gt;MOSS&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6419680929852795449&amp;page=RSS%3a+%5bSharePoint%5d+Dublin+inaugure+une+rue+en+l'honneur+de+notre+portail+pr%c3%a9f%c3%a9r%c3%a9&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=gaelduhamel.spaces.live.com&amp;amp;GT1=gaelduhamel"&gt;</description><category>SharePoint</category><comments>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!567.entry#comment</comments><guid isPermaLink="true">http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!567.entry</guid><pubDate>Tue, 01 Apr 2008 19:54:17 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://gaelduhamel.spaces.live.com/blog/cns!A6E8B6350CC655C7!567/comments/feed.rss</wfw:commentRss><wfw:comment>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!567.entry#comment</wfw:comment><dcterms:modified>2008-05-15T02:17:38Z</dcterms:modified></item><item><title>[SharePoint] Mettre en place une authentification Windows Live Id sur son site SharePoint</title><link>http://gaelduhamel.spaces.live.com/Blog/cns!A6E8B6350CC655C7!550.entry</link><description>&lt;table cellspacing=2 cellpadding=2 width=400 border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=top width=55&gt;&lt;a title="[SharePoint] Mettre en place une authentification Windows Live Id sur son site SharePoint" href="http://fqpsaq.blu.livefilestore.com/y1pbr1L1dQT-h34wdnVbekqvm5gKKn6U6J8UIQiA732dyh_GoTTPo7HEsib1OY-yznAzxc4fGpW2d4V_at0tM1xDrUdIpSkMGxb/[SharePoint] Mettre en place une authentification Windows Live Id sur son site SharePoint.docx?download" target="_blank" rel=tag&gt;&lt;img src="http://tw2juq.blu.livefilestore.com/y1pD7zjezS6ax2N3NBKS85vNVV_j8DyZu1GB2FVakE5TiDHjrhV_d9AHM-C3Jivjj8XUYcd_1MMJx5CKvapKU7QHQ/office2007_icon_word.jpg"&gt;&lt;/a&gt; 
&lt;td valign=top width=350&gt;&lt;a title="[SharePoint] Mettre en place une authentification Windows Live Id sur son site SharePoint" href="http://fqpsaq.blu.livefilestore.com/y1pbr1L1dQT-h34wdnVbekqvm5gKKn6U6J8UIQiA732dyh_GoTTPo7HEsib1OY-yznAzxc4fGpW2d4V_at0tM1xDrUdIpSkMGxb/[SharePoint] Mettre en place une authentification Windows Live Id sur son site SharePoint.docx?download" target="_blank" rel=tag&gt;Téléchargez l'article au format Microsoft Word 2007&lt;/a&gt; 
&lt;td valign=top width=55&gt;&lt;a title="[SharePoint] Mettre en place une authentification Windows Live Id sur son site SharePoint" href="http://fqpsaq.blu.livefilestore.com/y1pbr1L1dQT-h1fxmJxwMfDANO3lLcthnArlRVrT4z95QuLDudsuePaHmB1UGKG3T60t4NoqiuidzsFSJ5CI_h8-fZPqiVB6mSQ/[SharePoint] Mettre en place une authentification Windows Live Id sur son site SharePoint.pdf?download" target="_blank" rel=tag&gt;&lt;img src="http://tw2juq.blu.livefilestore.com/y1pD7zjezS6ax2wMLVQ4-KJn4_WJHCzshPFgWAnDyUEjVv2GsMegj94MUEw3p_qCFdKL3gPWJCW_WyWsaJ2oGOMQw/word2007_icon_pdf.gif"&gt;&lt;/a&gt; 
&lt;td valign=top width=350&gt;&lt;a title="[SharePoint] Mettre en place une authentification Windows Live Id sur son site SharePoint" href="http://fqpsaq.blu.livefilestore.com/y1pbr1L1dQT-h1fxmJxwMfDANO3lLcthnArlRVrT4z95QuLDudsuePaHmB1UGKG3T60t4NoqiuidzsFSJ5CI_h8-fZPqiVB6mSQ/[SharePoint] Mettre en place une authentification Windows Live Id sur son site SharePoint.pdf?download" target="_blank" rel=tag&gt;Téléchargez l'article au format Adobe PDF&lt;/a&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Je vais à travers cet article vous montrer comment implémenter l'authentification formulaire (communément appelé fba pour &lt;a title="Forms Based Authentication" href="http://www.sharepointfba.com/" target="_blank" rel=tag&gt;Forms Based Authentication&lt;/a&gt;) via les services Widows Live. Un prochain viendra rapidement sur la mise en place d'une liste SharePoint comme fournisseur d'accès (qui est d'ailleurs extrement proche de ce qui se fait dans le cas de Windows Live). 
&lt;p&gt;Pour mettre en place cette authentification, je vais utiliser la capacité de SharePoint à fournir pour un même contenu plusieurs authentifications possibles (Alternate Access Mapping): 
&lt;ul&gt;
&lt;li&gt;&lt;u&gt;Internet :&lt;/u&gt; http://live.spgael.sharepoint.local pour l’authentification via Windows Live 
&lt;li&gt;&lt;u&gt;Intranet :&lt;/u&gt; http://spgael.sharepoint.local pour l’authentification via Windows qui est la base de l’application SharePoint et donc celle définit par défaut. &lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;font color="#ff0000" size=1&gt;&lt;/font&gt;&lt;/em&gt;&lt;a href="http://gaelduhamel.spaces.live.com/mmm2008-02-07_16.56/#AAM"&gt;&lt;font color="#ff0000" size=1&gt;&lt;em&gt;Pour en savoir plus sur la configuration, reportez vous a la fin de l'article&lt;/em&gt;&lt;/font&gt;&lt;/a&gt; 
&lt;h1&gt;Windows Live Authentication Membership Provider&lt;/h1&gt;
&lt;p&gt;Ce membership provider est disponible sur CodePlex : &lt;a title="CodePlex: Windows Live Authentication 1.0" href="http://www.codeplex.com/CKS/Release/ProjectReleases.aspx?ReleaseId=7746" rel=tag&gt;http://www.codeplex.com/CKS/Release/ProjectReleases.aspx?ReleaseId=7746&lt;/a&gt; 
&lt;h2&gt;Ajout et déploiement de la solution&lt;/h2&gt;
&lt;p&gt;Première étape, ajoutez votre solution ! Pour cela, nous allons utiliser la ligne de commande &lt;a title="Technet: stsadm" href="http://technet.microsoft.com/en-us/library/cc261956.aspx" target="_blank" rel=tag&gt;stsadm&lt;/a&gt; avec l’option &lt;a title="Technet: addsolution" href="http://technet.microsoft.com/en-us/library/cc263162.aspx" target="_blank" rel=tag&gt;addsolution&lt;/a&gt;. Ouvrez donc une fenêtre shell et tapez : 
&lt;p&gt;c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o addsolution -filename c:\FBA\Live\CKS.MembershipProvider.WindowsLiveAuthentication.wsp 
&lt;p&gt;&lt;a href="http://tjgbww.blu.livefilestore.com/y1pbr1L1dQT-h33CTRI_i2QsdxcATX2kO0nAvcRYmVf76pM00eWJJK_oP_r1nbD0JJn6tNy1gejjgjkhfuwVyOGV0nNVfEuvc02?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=34 alt="clip_image010" src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9hYlH0_dCangoDsgjW4-e4mrKw0MBZwLLtKuQCjoHJ3lzz_BetXTtyqm3TInSLcfKtlmlgdV2VkpvE2hkVYsJrC?PARTNER=WRITER" width=244 border=0&gt;&lt;/a&gt; 
&lt;p&gt;Une fois la solution correctement ajoutée, il nous faut maintenant la déployer. Pour cela, deux solutions, via : 
&lt;ul&gt;
&lt;li&gt;La ligne de commande &lt;a title="Technet: stsadm" href="http://technet.microsoft.com/en-us/library/cc261956.aspx" target="_blank" rel=tag&gt;stsadm&lt;/a&gt; et les options &lt;a title="Technet: deploysolution" href="http://technet.microsoft.com/en-us/library/cc262459.aspx" target="_blank" rel=tag&gt;deploysolution&lt;/a&gt; et &lt;a title="Technet: Execadmsvcjobs" href="http://technet.microsoft.com/en-us/library/cc262783.aspx" target="_blank" rel=tag&gt;Execadmsvcjobs&lt;/a&gt; : &lt;/ul&gt;
&lt;p&gt;c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o deploysolution -name CKS.MembershipProvider.WindowsLiveAuthentication.wsp -immediate -allowgacdeployment 
&lt;p&gt;&lt;a href="http://tjgbww.blu.livefilestore.com/y1pbr1L1dQT-h2F8hmz9qHfyTURJXtY5oxQfDrGmEA8dWasXNSWm3rqAPq13LFgFgkP_lkTMkWSzTkKsBm3IKdSUg9BA9ZyOt17?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=32 alt="clip_image012" src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9gzvBjyAadd3UqmuVHyxXstYp_2wRWQJ7pGlUlfnndQLElyPF1qby5J7Jl5zBAcjPeOGraFzzNtDBSnrjPj3bR5?PARTNER=WRITER" width=244 border=0&gt;&lt;/a&gt; 
&lt;p&gt;c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o execadmsvcjobs 
&lt;p&gt;&lt;a href="http://tjgbww.blu.livefilestore.com/y1pbr1L1dQT-h05HpsT_cw9wPgy-Tp_zSrukBpftzMD16TpJvHML8SleM4n27Y3lF4XUOasTFvf0OmpWYAwW2rhe1stsJqr0MFG?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=26 alt="clip_image014" src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9j1Hah_gOfA9fwypdAfDw_za5Xg1v81F58TklcvVJk8zBl935cyZ677vVfaQk8GGvctx0hqOD7YNOttaXwExZC2?PARTNER=WRITER" width=244 border=0&gt;&lt;/a&gt; 
&lt;ul&gt;
&lt;li&gt;L’interface web de l’administration centrale de SharePoint : &lt;/ul&gt;
&lt;p&gt;&lt;a href="http://blu1.storage.msn.com/y1pndzJ6u2Pt9g7swf9vrZuHVFkGc0UF5To6diHpMTLyp-n_PMn9qtFqiLZX3QRIQvaCElfbfRMJL8MNZjwdBYdjODqfpM4fzaP?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=116 alt="clip_image016" src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9gJLdoZEiV_yootxNodbIKf6SLwl2PwAkx8k52iBORjBxgcLmAH3e01IAFdKqyFBK0VhRI0TZnuGNydHKjHO7Cd?PARTNER=WRITER" width=244 border=0&gt;&lt;/a&gt; 
&lt;table cellspacing=2 cellpadding=2 width=399 border=0&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=top width=247&gt;&lt;a href="http://blu1.storage.msn.com/y1pndzJ6u2Pt9hxaFX9FMmvJnOnMzGUP6c2QxvjDY39-TLkJN7fyUvq-5j2Biwn9Okvw9j6ReuwLWDeA3pPJYixi9qYYdJsocjA?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=67 alt="clip_image018" src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9ize1mWVF6PKp2oo0g7th9PhBOkGbcxYeAlEVs7OKWHDJCYVbsgcAFvv2hfA7IMoRbfq3mgpKHX4MIw1DtEKL-U?PARTNER=WRITER" width=244 border=0&gt;&lt;/a&gt; 
&lt;td width=144&gt;Cliquez sur la solution 
&lt;tr&gt;
&lt;td valign=top width=248&gt;&lt;a href="http://blu1.storage.msn.com/y1pndzJ6u2Pt9j9eVzkwifVr7cWYFIbvBQD4LD4Xe_CqQCvSEC_VVlGZpZLT0XPi50v2669Sa79vfHsR2DAZBo7oXVZ9YVa_n8d?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=149 alt="clip_image020" src="http://blu1.storage.msn.com/y1pndzJ6u2Pt9iBxGN54tGBasY5ySu7g7vmIOs0Ncl1pfuL6hZlHhV8sZ4uYaFzhFXAvfuUp4n1F42gNYgawFJQaBqyKqPDMqpw?PARTNER=WRITER" width=244 border=0&gt;&lt;/a&gt;&lt;a href="http://blu1.storage.msn.com/y1pndzJ6u2Pt9g7swf9vrZuHVFkGc0UF5To6diHpMTLyp-n_PMn9qtFqiLZX3QRIQvaCElfbfRMJL8MNZjwdBYdjODqfpM4fzaP?PARTNER=WRITER"&gt;&lt;/a&gt; 
&lt;td width=144&gt;Cliquez sur « Deploy Solution » 
&lt;tr&gt;
&lt;td valign=top width=248&gt;&lt;a href="http://blu1.storage.msn.com/y1pndzJ6u2Pt9iaB