Patterns & Practices SharePoint Guidance Drop 5

La team des P&P SharePoint a mise à jour les guidances. Cette nouvelle version est la drop 5.

 

Pour le télécharger: http://spg.codeplex.com/

Microsoft Ajax Content Delivery Network

Microsoft Ajax content delivery network (CDN) permet d'ajouter facilement des scripts ASP.NET Ajax et JQuery dans nos applications Web. Ces scripts ne sont plus hostés sur nos serveurs, mais directement chez Microsoft.

En tirant parti de Microsoft Ajax CDN , nous pouvons améliorer les performances de nos applications Ajax. Les scripts sont mis en cache sur des serveurs situés partout dans le monde.

 

Par exemple, pour référencer jQuery:

<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.1.js" type="text/javascript"></script>  

ou pour la version light:

<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.1.min.js" type="text/javascript"></script>

 

 

Pour plus d’info: http://www.asp.net/ajaxlibrary/CDN.ashx

Vous connaissez PLINQ, demain il y aura DryadLINQ

Vous connaissez PLINQ / Parallel Framework qui permet de paralléliser notre code sur plusieurs processeurs/cores. Les équipes de MS Research ont travaillé sur DryadLINQ qui permet de paralléliser l’éxecution sur plusieurs machines tout comme le ferait PLinq sur plusieurs cores.

Il transforme du LINQ en tant qu’execution distribué de type Dryad:

  • Les objets LINQ et C# sont distribués
  • Les requetes LINQ deviennent des jobs Dryad
  • Les méthodes C# sont exécutés dans chaque Dryad job.

dryadlinq[1]

 

DryadLINQ est disponible depuis peu en tant qu’academic release.

http://research.microsoft.com/en-us/downloads/03960cab-bb92-4c5c-be23-ce51aee0792c/default.aspx

 

Pour plus d’info:

Le site du projet : http://research.microsoft.com/en-us/projects/dryadlinq/default.aspx

Le blog de la team: http://blogs.msdn.com/dryad/

Lazy<T> Construction à la demande

Dans ma découverte du nouveau framework .net 4, je suis tombé sur un nouveau type: Lazy<T>.

Il permet de construire les objets à la demande. En effet, d’habitude, dès que l’on effectue un MaClass mc = new MaClass(), notre objet est immédiatement instancié.

Mais grâce à la construction à la demande, Lazy<MaClass> lm = new Lazy<MaClass>() , c’est dès que l’on aura besoin de notre objet qu’il sera construit.

Plutôt que de recopier la msdn :), je vous laisse découvrir les différentes fonctionnalités offerte par Lazy<T>

http://msdn.microsoft.com/en-us/library/dd997286%28VS.100%29.aspx

Devinez la suite... sinon rendez-vous demain

Devinez la suite… Microsoft nous prépare apparemment quelques choses… en rapport avec le skate…

 

Avez vous des idées ?


[.net 3.5 SP1] Projet setup et les pré requis en mode: Télécharger les pré requis au même endroit que l’application

Dans un projet setup où vous avez sélectionner avoir .net 3.5 SP1 étant un pré requis et avec le mode “Télécharger les pré requis au même endroit que l’application”, vous obtiendrez une jolie erreur à la compilation.

“The install location for prerequisites has not been set to 'component vendor's web site' and the file 'DotNetFX35SP1\dotNetFx35setup.exe' in item '.NET Framework 3.5 SP1' can not be located on disk.”

 

Pour résoudre le problème, c’est par ici: http://download.microsoft.com/download/A/2/8/A2807F78-C861-4B66-9B31-9205C3F22252/VS2008SP1Readme.htm#General%20Issues

C# 4.0, les paramètres nommés et optionnels, y a quoi derrière ?

C# 4.0 ajoute enfin les notions de paramètre optionnel et nommé. Si nous reprenons le code suivant :

static void Main(string[] args) { //Appel de la methode en utilisant le parametre optionel MaMethode1(); //Appel de la methode en utilisant le parametre nommé MaMethode1(maVar: "Valeur par parametre nommé"); // Appel de la methode de facon classique MaMethode1("Valeur standard"); Console.ReadLine(); } static void MaMethode1(string maVar = "Valeur par defaut") { Console.WriteLine(maVar); }

Ouvrons le maintenant avec Reflector :

Notre methode1 devient :

private static void MaMethode1([Optional, DefaultParameterValue("Valeur par defaut")] string maVar) { Console.WriteLine(maVar); }

On constate que le compilateur à ajouté 2 attribut issues du namespace System.Runtime.InteropServices. Ces 2 attributs ne vous sont pas inconnus ? Ils existaient déjà dans la version précédente.

Regardons à présent, comment le compilateur fait l’appel à notre méthode :

private static void Main(string[] args) { MaMethode1("Valeur par defaut"); string CS$0$0000 = "Valeur par parametre nomm\x00e9"; MaMethode1(CS$0$0000); MaMethode1("Valeur standard"); Console.ReadLine(); }

Et bien, nous constatons que pour l’utilisation du paramètre par défaut, le compilateur remonte la valeur par défaut, dans l' appel à la méthode en tant que paramètre.

Concernant le paramètre nommé, le compilateur créer une variable intermédiaire. Comme quoi, c’est bien le compilateur qui fait tout le boulot :)

C# 4.0, les paramètres nommés et optionnels et l'intellisence

L’une des nouveautés de C# 4 est la possibilité d’avoir « enfin » des paramètres optionnels ayant une valeur par défaut et nommés.

Si l’on prend cette méthode

static void MaMethode1(string maVar = "Valeur") { Console.WriteLine(maVar); }

Il est possible de l’appeler par :

//Appel de la methode en utilisant le parametre optionel MaMethode1(); //Appel de la methode en utilisant le parametre nommé MaMethode1(maVar: "Valeur par parametre nommé"); // Appel de la methode de facon classique MaMethode1("Valeur standard");

Mais comment l’IntelliSense nous aide t’il ?

Lorsqu’un paramètre est optionnel, IntelliSense nous le signal entre crochet.

clip_image002

Concernant, l’info bulle, nous avons ce résultat :

clip_image004

Pour l’instant, nous n’avons pas les descriptions sur les paramètres, mais n’oublions pas que ce n’est qu’une CTP, et que bien des choses changeront.

Accès anonyme et les pages Forms / viewlsts.aspx...

De plus en plus de site internet sont réalisés avec MOSS 2007. Pour les rendre accessibles à tous, il est nécessaire d’activer l’accès anonyme.

Malheureusement, les pages "/_layouts/viewlsts.aspx" et les pages ".../Forms/AllItems.aspx" restent visible pour tout le monde! Ce qui n'est pas vraiment...

Il existe une solution, les lecteurs réguliers du blog de la team ECM la connaissent peut êtres, il suffit d’activer la feature "cachée" ViewFormPagesLockdown.

stsadm.exe –o activatefeature –url <site collection url> -filename ViewFormPagesLockdown\feature.xml

La feature interdit l’accès a ces pages et demandes-en contre partis une authentification...

Ce blog http://blogs.msdn.com/nay/pages/moss-based-internet-sites-live.aspx regroupe un certain nombre de site basé sur MOSS. J’ai donc essayé quelques urls :)

Certains sites fonctionnent, d’autres non (http://www.wise-woman.net/_layouts/viewlsts.aspx).

 

Bon verrouillage

 

le tips sur le blog de la team ECM.

[MOSS Tip Of The Day] Comment connaître le mode de notre page de publication

Si vous faite des pages de publication, dans le code behind, la page hérite de Microsoft.SharePoint.Publishing.PublishingLayoutPage.

Mais comment faire pour afficher/cacher des éléments si la page est en mode édition ou non. Par réflexe, j' ai recherché une propriété dans la classe PublishingLayoutPage, mais rien...

La solution se trouve dans le SPContext courant.

 

if (SPContext.Current.FormContext.FormMode == SPControlMode.Edit) { // Mon code }

[MOSS Tip Of The Day] Ajouter une page de publication à une bibliothèque de pages par code

Ça fait quelques temps que je n' avais plus rien posté... Pour me rattraper (un peu) voici un petit bout de code c# qui permet d' ajouter une page de layout dans une bibliothèque de pages.

 

using (SPSite site = new SPSite("http://intranet")) { using (SPWeb web = site.OpenWeb()) { PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web); PublishingSite pubSite = new PublishingSite(site); // Récuperation de toutes les pages de layout PageLayoutCollection plc = pubSite.GetPageLayouts(true); // On prend la premiere... PageLayout pageLayout = plc[0]; PublishingPage pubPage = pubWeb.GetPublishingPages().Add("pages/mapages.aspx", pageLayout); pubPage.Update(); } }

Nouvelle série de Smart Art pour Office 2007

Comme le souligne XaMaLa et Na-Young, de nouveaux modèles de SmartArts sont disponibles gratuitement pour Office 2007. Nous allons pouvoir rajouter de jolies diagrammes à nos présentations !!

Pour les télécharger.

Microsoft Success Stories

Microsoft vient de lancer le site Microsoft Success Stories. Ce site regroupe des témoignages sur les solutions, POC MS qui ont eu du succès :)

Le site est fait en silverlight avec plein de vidéos de partout !!!

 

Bon visionnage

MSDN & TechNet Tour 2008

A l' occasion du lancement de Microsoft Visual Studio 2008, Windows Server 2008 et SQL Server 2008, Microsoft organise du 10 avril au 12 juin MSDN & TechNet Tour 2008.

A Lille, Nantes, Lyon, Toulouse, Marseille : ce rendez-vous incontournable des IT professionnels, vous permettra de faire le point sur les dernières technologies Microsoft.

Construisez dès maintenant votre agenda à partir de plus de 20 sessions.

Vous pourrez me retrouver le 29 Mai à Marseille lors de ma session sur "Présentation générale des technologies SharePoint: Microsoft Office SharePoint 2007, Windows SharePoint Services 3.0 et Microsoft Search server 2008"

[MOSS Tip Of The Day] Renseigner le control PeopleEditor

Cette astuce complète la dernière que j' ai publié sur le control PeopleEditor. Voici comment renseigner le contenu du PeopleEditor avec une personne:

 

PickerEntity entity = new PickerEntity(); entity.Key = @"domaine\login"; ArrayList arL = new System.Collections.ArrayList(); arL.Add(entity); PeopleEditor1.UpdateEntities(arL);

[MOSS Tip Of The Day] Ecrire dans les logs SharePoint

Dans vos développement SharePoint (WebPart, EventHandler...), il est bien normal de vouloir écrire dans les fichiers de Log SharePoint.

Pour cela, il y a une jolie petit méthode:

Microsoft.Office.Server.Diagnostics.PortalLog.LogString("Mon Message");

D' autre méthodes sont disponibles dans Microsoft.Office.Server.Diagnostics.PortalLog

Vista et la fenêtre Console de Virtual PC 2007

Si comme moi, vous utilisez Vista et Virtual PC 2007, vous avez peut être un petit souci avec la fenêtre Console de VPC qui ne veut pas s' afficher alors qu' elle est bien présente dans la barre des taches.

Voici la petite astuce pour la faire revenir:

  • Ouvrer avec notepad le fichier Options.xml qui se trouve dans: C:\Users\monlogin\AppData\Roaming\Microsoft\Virtual PC\
  • Modifier les valeurs dans la balise console, les balises left_position et top_position en mettant par exemple 0.
  • Redémarrer VPC, et hop, la console et de nouveau la :)

 

Merci à Nicolas T, pour son aide !!

[MOSS Tip Of The Day] Comment utiliser le control PeopleEditor

Le control PeopleEditor est un control asp.net qui permet de sélectionner un utilisateur de SharePoint. Si vous souhaitez le mettre dans une page custom, voici comment...

Il faut enregistrer la dll Microsoft.SharePoint dans votre page pour pouvoir profiter de ces controls.

<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

Ensuite, ajouter le control PeopleEditor...

<SharePoint:PeopleEditor AllowEmpty="false" SingleLine="true" ValidatorEnabled="true" MultiSelect="false" id="PeopleEditor1" runat="server" SelectionSet="User" />

Puis pour récupérer les valeurs dans le code behind...

if (PeopleEditor1.ResolvedEntities.Count == 0) return; PickerEntity entity = (PickerEntity)PeopleEditor1.ResolvedEntities[0]; string email = string.Empty; if (entity.EntityData.ContainsKey("Email") == true) email = entity.EntityData["Email"].ToString();

 

Il est possible d' avoir comme propriété sur l'EntityData:

  1. AccountName
  2. DisplayName
  3. Title
  4. Department
  5. Email
  6. SPUserID
  7. SPGroupID
  8. SIPAddress
  9. PrincipalType

 

Puis pour finir, si vous souhaitez avoir le SPUser corresspondant...

SPSecurity.RunWithElevatedPrivileges(delegate() { SPWeb web = SPControl.GetContextWeb(this.Context); SPUser usr = null; try { usr = web.SiteUsers[entity.Key]; } catch { return; } if (usr == null) return; });

 

Voila, bon code SP :)

SharePoint en 32Bits... vers la fin...

Lu dans la doc du SP1:

http://office.microsoft.com/download/afile.aspx?AssetID=AM102509121033

Recommendations for 64-bit hardware

Windows SharePoint Services 3.0 and Office SharePoint Server 2007 are the last SharePoint Products and Technologies versions able to run on 32-bit hardware and operating systems. Do take this into account in current and future hardware decisions: Buying 64-bit hardware today helps ensure that your environment can accommodate future requirements and helps you to take advantage of the performance and scale of 64-bit technologies.



[MOSS Tip Of The Day] Accéder à la vue d'une ListViewWebPart

Dans SharePoint on a la possibilité d' afficher une liste ou une bibliothèque sur une page (la default.aspx par exemple). En paramétrant la webpart, il possible de sélectionner une vue à afficher et un type de barre d' outils. Vous avez sûrement remarqué, que si vous ajoutez une colonne ou modifier une vue de la liste, le changement n' est pas répercuté au niveau de la webpart. En efet, elle fait une copie de la vue sélectionnée dans son propre espace de stockage.

Après un petit tour dans le model objet de la ListViewWebPart, je n' ai pas trouvé d' objet SPView et les modifications au niveau du XML ne donnait rien. J' ai donc regardé en détail le code de la ListViewWebPart pour regarder en détail son fonctionnement. Et comme je le craignait, on a bien un SPView qui est déclaré en private. Il ne reste plus qu' a faire une peu de reflexion...

 

Voici le code (avec la modification de la toolbar)  :)

// On récupere le webpart manager de la page Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager mngr = web.GetLimitedWebPartManager("default.aspx", System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared); for (int j = 0; j < mngr.WebParts.Count; j++) { if (mngr.WebParts[j] is ListViewWebPart) { ListViewWebPart listWP = mngr.WebParts[j] as ListViewWebPart; System.Reflection.PropertyInfo viewProp = listWP.GetType().GetProperty("View", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); // On a notre SPView !!! SPView spView = viewProp.GetValue(listWP, null) as SPView; // Obligatoire !!! string txt = spView.SchemaXml; // On récupere le xml pour la toolbard System.Reflection.PropertyInfo nodeProp = spView.GetType().GetProperty("Node", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); XmlNode node = nodeProp.GetValue(spView, null) as XmlNode; XmlNode tBarNode = node.SelectSingleNode("Toolbar"); if (tBarNode != null) { // Le type de toolbar: standard / freeform / none tBarNode.Attributes["Type"].Value = "Freeform"; // Une position XmlAttribute pos = tBarNode.OwnerDocument.CreateAttribute("Position"); pos.Value = "After"; tBarNode.Attributes.Append(pos); // CAML pour avoir le bouton: ajouter un element tBarNode.InnerXml = @"<IfHasRights><RightsChoices><RightsGroup PermAddListItems=""required"" /></RightsChoices><Then><HTML><![CDATA[ <table width=100% cellpadding=0 cellspacing=0 border=0 > <tr> <td colspan=""2"" class=""ms-partline""><IMG SRC=""/_layouts/images/blank.gif"" width=1 height=1 alt=""""></td> </tr> <tr> <td class=""ms-addnew"" style=""padding-bottom: 3px""> <img src=""/_layouts/images/rect.gif"" alt="""">&nbsp;<a class=""ms-addnew"" ID=""idAddNewItem"" href=""]]></HTML><URL Cmd=""New"" /><HTML><![CDATA["" ONCLICK=""javascript:NewItem(']]></HTML><URL Cmd=""New"" /><HTML><![CDATA[', true);javascript:return false;"" target=""_self"">]]></HTML><HTML>Ajouter un nouvel élément</HTML><HTML><![CDATA[</a> </td> </tr> <tr><td><IMG SRC=""/_layouts/images/blank.gif"" width=1 height=5 alt=""""></td></tr> </table>]]></HTML></Then></IfHasRights>"; spView.Update(); } } }

Plus de Messages Page suivante »


Les 10 derniers blogs postés

- [MIX10] Keynote deuxième journée – Internet Explorer 9, Html5, Visual Studio 2010, OData par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 18 heures et 58 minutes

- Certifications beta .NET 4 par Kévin Gosse le il y a 19 heures et 4 minutes

- [Mix 2010] – Microsoft Translator Technology Preview V2 par RedoBlog - The .NET Gentleman !!! le il y a 19 heures et 45 minutes

- Lancement en Preview de Cyclone lors des TechDays 2010! par Blog de Frédéric Queudret le il y a 22 heures et 8 minutes

- [WP7] Je ne veux pas d’un nouvel iPhone par Le blog de FremyCompany le 03-17-2010, 13:11

- [WF4] Pourquoi utiliser le ContentPresenter dans l’ActivityDesigner? par Blog de Jérémy Jeanson le 03-17-2010, 07:54

- [Mix 2010] – Telechargez Internet Explorer 9 en Preview ! par RedoBlog - The .NET Gentleman !!! le 03-17-2010, 00:58

- [MIX 2010] – Keynote Day 2 online : Windows Internet Explorer 9, jQuery, OData et Dallas CTP2 ! par RedoBlog - The .NET Gentleman !!! le 03-17-2010, 00:18

- [Mix 2010] – Retour d’expérience développement Seesmic sur Windows Phone 7 par RedoBlog - The .NET Gentleman !!! le 03-16-2010, 23:44

- [Mix 2010] – Le Keynote Day 1 disponible online ! par RedoBlog - The .NET Gentleman !!! le 03-16-2010, 23:21