[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(); } } }

Office 2007 SP1

Le SP1 d'Office 2007 est dispo:

http://www.microsoft.com/downloads/details.aspx?FamilyId=9EC51594-992C-4165-A997-25DA01F388F5&displaylang=en

Office 2003 Developer Resources

Comment ne pas relayer l' excellent plan qu' à confectionné "la plus grande blogeuse" sur Office: Erika Ehrli !

Je trouve cette carte vraiment très pratique et bien faite.

 

[MOSS Tip Of The Day] Changer la master page par code

Si vous souhaiter changer la master page de votre site MOSS par code, vous pouvez utiliser la classe SPWeb ou PublishingWeb qui se trouve dans la DLL 12\ISAPI\Microsoft.SharePoint.Publishing.dll.

Un bout de code vaut mieux qu'un long discours...

web.CustomMasterUrl = "/_catalogs/masterpage/my.master"; web.MasterUrl = "/_catalogs/masterpage/my.master";

ou

// Récupération du site web de publication courant PublishingWeb pw = PublishingWeb.GetPublishingWeb(web); // Permet de mettre la masterPage par defaut pw.MasterUrl.SetValue("/_catalogs/masterpage/my.master", true); pw.CustomMasterUrl.SetValue("/_catalogs/masterpage/my.master", true); pw.Update();

SPWeb.BreakRoleInheritance(false) dans une requête Http GET

Problème:

Lorsque vous appelez SPWeb.BreakRoleInheritance(false) à partir d'une demande HTTP GET, une exception est toujours levée bien que vous ayez spécifié SPWeb.AllUnsafeUpdates=true

Updates are currently disallowed on GET requests. To allow updates on a GET, set the 'AllowUnsafeUpdates' property on SPWeb.

Cause:

Il s'agit d’une limitation « by design » de SPWeb.BreakRoleInheritance.

BreakRoleInheritance fonctionne en deux étapes.

Tout d'abord, il doit supprimer les permissions et copier les autorisations du site parent .

Ensuite, il vérifie le paramètre CopyRoleAssignments. Si la valeur est à false, il effectue une étape supplémentaire pour nettoyer les autorisations.

Malheureusement, il y a un effet de bord à l'étape 1, il “casse” certains objets internes de SPWeb et provoque à nouveau la création des autorisations. Or, la recréation de ces objets internes pousse SPWeb.AllowUnsafeUpdates à avoir une valeur par défaut, qui est la valeur false. En d'autres termes, SPWeb.AllowUnsafeUpdates est réinitialisé au milieu de l’appel à SPWeb.BreakRoleInheritance, il y a donc une exception!!

La solution:

Il existe deux solutions possibles à ce problème:

  1. Vous faites appel à SPWeb.BreakRoleInheritance dans une requête HTTP POST. Il n’est donc plus nécessaire de faire un SPWeb.AllowUnsafeUpdates=true. C’est d’ailleurs recommandé d’un point de vue sécurité.
  2. Vous voulez absolument faire appel à SPWeb.BreakRoleInheritance dans une requête HTTP GET. Il faut appeler SPWeb.BreakRoleInheritance avec le paramètre true.

 

Cette solution s'applique égualement pour SPList.BreakRoleInheritance.

SPWeb web = SPControl.GetContextWeb(this.Context); web.AllowUnsafeUpdates = true; //Attention, une exception est levée si le paramètre est à "false" docLib.BreakRoleInheritance(true); SPRoleAssignmentCollection roles = docLib.RoleAssignments; for (int i = roles.Count-1; i >= 0; i--) { roles.Remove(i); }

VS 2008 disponible dans une semaine !!

D'après ce blog, Visual Studio 2008 sera disponible la semaine prochaine !!

Pour le télécharger: http://msdn2.microsoft.com/subscriptions.

 

Bon D/L à tous !

Recommandations pour les settings des App Pools de Sharepoint

Je vous recommande vivement ce tres bon article de Joel Oleson sur les Applications Pool de SharePoint.

http://blogs.msdn.com/joelo/archive/2007/10/29/sharepoint-app-pool-settings.aspx

MOSS et les noms de colonne

Lors de la création d'une colonne dans un liste / bibliothèque SharePoint 2007, SharePoint encode le nom de la colonne si elle contient par exemple des espaces, des caractères accentués...

Mais lors d'un petit dev, je me suis rendu compte que MOSS encodait egalement le nom, si celui ci est au moins composé de 3 lettres et 1 chiffre. En effet, j'ai bien été surpris de voir que ma colonne "rub1" était en en fait "_x0072_ub1".

Conclusion de cette petite histoire, dans vos dev MOSS faite attention à l' internalName !!!

Les piles rechargables USB

Je viens de recevoir mon pack de piles rechargables sur port USB. Je trouve ce concept très sympa et vraiment utile pour ma petite souris USB Smile
USBCELL

Pour plus d'info:
http://www.usbcell.com

VSTO Update

La team VSTO a mis à jour récemment :

-          un fix pour le développement d’add-in pour Office 2007 sur Vista :

Update for Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System (VSTO 2005 Second Edition)

-          Une nouvelle version du runtime de VSTO 2005 SE

Microsoft Visual Studio 2005 Tools for Office Second Edition Runtime (build 8.0.50272.891) (x86)

 

Bon D/L

Plus de Messages Page suivante »


Les 10 derniers blogs postés

- [WPF] Nouvel article sur c2i.fr par Richard Clark le il y a 7 heures et 19 minutes

- F# nouvelle CTP 1.9.6.2 (update) par Pierrick's Blog le il y a 11 heures et 24 minutes

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le 09-05-2008, 17:45

- [Fun] Votre simulateur de vol avec Microsoft ESP par Julien Chable le 09-05-2008, 12:02

- [Best Practices] Customisation du My Site : Comment le modifier en amont et en aval par The Mit's Blog le 09-05-2008, 10:47

- Patrick Tisseghem s'en est allé ... par The Mit's Blog le 09-05-2008, 10:04

- MS AutoCollage par alex# le 09-05-2008, 09:18

- Un grand SharePointeur nous a quitte : Patrick Tisseghem manquera à la communauté ! par RedoBlog - The .NET Gentleman !!! le 09-05-2008, 08:52

- [WPF] Comment charger dynamiquement un fichier XAML qui définit des eventhandler ? par Thomas Lebrun le 09-04-2008, 10:56

- Article sur le filtrage des modèles de site SharePoint par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 09-04-2008, 00:11