Gael's profileGael Duhamel - SharePoin...PhotosBlogListsMore ![]() | Help |
Gael Duhamel - SharePoint et Commerce Server [MVP]Blog sur les technologies Microsoft SharePoint et Commerce Server July 01 Je suis MVP Commerce Server :)J’ai reçu cet après midi un email de la part de Microsoft m’annonçant ma nomination au programme MVP. C’est donc un grand plaisir pour moi et une belle récompense pour le travail effectué. A moi, donc de continuer à travailler pour pouvoir rédiger un autre post de ce type dans 1 an. Je tiens aussi à remercier les membres de la team Commerce Server d’Altima ainsi que nos différents clients sans qui tout cela n’aurait pas été possible
[Commerce Server] Camaieu boutique – Prêt à porter féminin et vêtement mode en ligneLa team Commerce Server d’Altima est heureuse de vous annoncer la sortie du nouveau site eCommerce de Camaieu. A vos cartes bleues Technorati Tags: Commerce Server - Camaieu - Mode - Fashion - Retail May 01 [SharePoint / Commerce Server 2009] Le template pack est sortie!La team Commerce Server vient de mettre à disposition de la communauté un site template pour leur Commerce Site. Vous pouvez télécharger celui-ci à cette adresse: Microsoft Commerce Server 2009 Template Pack (Contemporary Site). InstallationQue du banal dans cette étape: suivant, suivant, …. terminé! Configuration GénéraleConfiguration de la publicitéExécutez ce script pour associer les droits nécessaires à vos comptes services:
Configuration du canalOuvrez le site créer. RésultatThat’s it, that’s all, vous voilà avec un magnifique site de e-Commerce sous SharePoint April 27 [SharePoint / Commerce Server 2009] Configuration / Installation d’un environnement de développement SharePoint / Commerce Server 2009
Dans cet article, je vais vous décrire la procédure à suivre pour installer et configurer votre environnement de développement Commerce Server2009 / SharePoint 2007.
Architecture Physique et logiciellePour commencer, j’ai mis en place une « mini » architecture afin de séparer mon active directory de mon server front end. J’ai donc deux boites avec :
UtilisateursConcernant l’installation du contrôleur de domaine, il ne sert à rien d’en faire un focus particulier car il y a suffisamment d’articles de qualité traitant de ce sujet. Pour ma part, j’aime travailler avec un AD sur une deuxième machine virtuelle sous Windows 2008 Core. Si vous voulez pousser un peu sur ce sujet, je vous conseille cette excellente ressource sur la configuration de la version core de Windows 2008 : Server Core Installation Option of Windows Server 2008 Step-By-Step Guide Compte utilisateur à créer pour SharePointMOSSfarm (Exécute le service SharePoint - doit être administrateur de la ferme) MOSSRunTimeUser (Application Pool pour l’application SharePoint) MOSSsspPool (Application Pool pour le Shared Service Provider) MOSSsearchService (Exécute le service de recherche de MOSS) WSSsearchService (Exécute le service de recherche de WSS) WSScontentAccess (Récupère le contenu en dehors de la ferme) MOSSsspService (Execute le Shared Services Provider (SSP)) MOSSprofile (Récupère les profils dans l’AD) MOSSsspMySite (Exécute le SSP My Site) Compte utilisateur à créer pour SQL ServerSQLservice (Exécute les services SQL) Compte utilisateur à créer pour Commerce ServerCatalogWebSvc (Application Pool pour le web service catalogue) CSDMSvc (Exécute le service Direct Mailer) CSHealthMonitorSvc (Execute le service Health Monitor) CSStageSvc (Execute le service de Staging) CSStagingUser (Utilisateur du staging) MarketingWebSvc (Application pool pour le web service marketing) OrdersWebSvc (Application pool pour le web service commande) ProfilesWebSvc (Application pool pour le web service profil) SQL Server 2008Pour commencer, vérifiez que tous les composants requis sont bien installés. Pour cela, il vous suffit de cliquer sur l’outil de vérification : Une fois les prés requis validés, vous pouvez lancer l’installation : Dans mon cas, je sélectionne toutes les options car je vais mettre en place les rapports de Commerce Server. Je ferais bientôt un article la dessus. Pour tous les services liés à SQL, j’utilise le même compte service. Ce n’est bien sur pas un best practices mais en environnement de développement c’est acceptable Attention, ici il est important d’utiliser la collation SQL_Latin1_General_CP1_CI_AS Voila notre SQL Server 2008 installé. Il nous reste à permettre l’utilisation des « Named pipes » par SQL. Pensez à appliquer ensuite le service pack 1 de SQL. SharePoint 2007Pour commencer, nous allons installer Microsot Office SharePoint Server 2007 avec le SP1 : Maintenant que SharePoint est installé, nous allons configurer l’administration. Pour cela, il nous suffit de suivre les étapes du wizard : Sur une première installation, nous avons à créer la ferme. Il nous faut donc cliquer sur non, je souhaite créer une nouvelle ferme : Le compte à utiliser ici est celui que j’ai appelé MOSSfarm. Ce compte est celui qui va gérer ma ferme SharePoint. Le compte à utiliser ici est celui que j’ai appelé MOSSfarm. Ce compte est celui qui va gérer ma ferme SharePoint. Pour l’authentification, il n’y a pas vraiment d’importance à choisir Kerberos plutôt que NTLM. Dans un environnement de dev, j’opte pour NTLM… par facilité. Avant de configurer SharePoint, nous allons appliquer les patchs dans cet ordre :
Ici rien de particulier à faire si ce n’est le fameux « Suivant, suivant, terminer »J. Ces updates vont mettre à jour certains composants/fonctionnalités de SharePoint et il est très important d’exécuter le SharePoint configuration wizard après chaque mise à jour. (Je ne mets pas ici de copie d’écran car il n’y a rien à faire de particulier à part attendre ConfigurationSharePointNous allons maintenant configurer les différents rôles SharePoint. Ouvrez l’administration centrale SharePoint et cliquez sur l’onglet « Operations » puis « Outgoing e-mail settings ». Sur la page « Outgoing E-Mail settings », remplissez les champs et cliquez sur le bouton « OK ». Pour information, le service SMTP n’existe plus sous Windows 2008. Vous pouvez utiliser l’utilitaire ArGoSoft Mail Server. C’est un freeware léger et simple à utiliser et configurer. RechercheRendez-vous sur l’interface d’administration de SharePoint. Cliquez dans le menu ou l’onglet sur « Operations » puis sur « Services on server ». Sur la liste des services, cliquez sur le lien « Start » à la ligne « Windows SharePoint Services Search » : On renseigne les comptes utilisateurs dédiés à la recherche : Sur la liste des services, cliquez sur le lien « Start » à la ligne « Office SharePoint Server Search » : Renseignez ensuite l’adresse email de contact et le compte de service : Shared ServicesMaintenant que notre recherche est configurée, nous allons installer le Shared Service. Pour cela, dans le menu de gauche de l’application web d’administration, cliquez sur « Shared Services Administration » : Cliquez sur « New SSP » : Dans l’écran suivant, nous allons devoir créer deux applications web pour héberger notre SSP ainsi que l’application « My Site ». Cliquez d’abord sur « Créer une nouvelle application web » : Nous allons donc créer l’application web pour notre SSP. Remplissez les champs nécessaires. Nous allons maintenant créer notre application web pour notre « My Site ». Pour cela, cliquez sur le lien » créer une nouvelle application web » : Nous allons maintenant renseigner les paramètres pour l’application web « My Site ». Maintenant que nos deux applications web sont configurées, il nous reste a renseignez les derniers champs dont le compte qui va exécuter le service SSP : Notre SSP est donc maintenant créer. Commerce ServerPour installer Commerce Server 2009, vous devez auparavant installer... Commerce Server 2007 ! Commerce Server 2009 étant en fait une réécriture des API très orientés .Net 3.5 (Linq, Entities,.. ). La structure de la base étant quant à elle quasi identique. Pour avoir un léger aperçu des nouvelles orientations, je vous conseille de lire cet article : What's New in Commerce Server 2009? Sur l’installation et la configuration de Commerce Server, vous pouvez consulter le document officiel : Microsoft Commerce Server 2009 RC Installation and Configuration Guide Commerce Server 2007L’installation étant terminée, nous allons passer à la configuration Une fois Commerce Server 2007 installé et configuré, vous pouvez appliquer le SP2. Attention, si vous souhaitez utiliser les clients riches de CS, il vous faut les installer avant l’application du service pack. Commerce Server 2009InstallationMise en place d’un « SharePoint Commerce Site »
Maintenant que Commerce Server 2009 est installé, il nous faut configurer les droits SQL Server pour notre compte service MOSSRunTimeUser:
ConfigurationNous devons maintenant configurer le site Commerce Site en lui spécifiant le nom du catalogue ainsi que le canal par défaut. Pour cela, ouvrez l’application web -> site actions -> view all site content. Cliquez ensuite sur la liste « Channel configuration », déroulez le menu de l’entrée « Channel » et cliquez sur « Edit item » et renseignez la valeur : "Default". Faite de même avec l’item « DefaultCatalog » avec comme valeur: "Adventure Works Catalog". Votre site est donc maintenant prêt à être utilisé April 22 [Commerce Server] 2 webcasts autour des possibilités/capacités de Commerce ServerSi vous avez un peu de temps en fin de journée ce jeudi 23 avril, je vous conseille de regarder 2 webcasts sur Commerce Server. La première webcast sera animée par Victor Castro de Commerce Generation: Green Up Your Business Online with Virtual Gift Cards for Customer Retention and Brand Loyalty by Commerce Generation. Cette webcast expliquera comment les cartes cadeaux peuvent aider à augmenter les ventes d’un site eCommerce. Vous verrez aussi comment l’implémenter dans une solution Commerce Server. La deuxième webcast sera animée par la société Cactus Commerce et tournera autour de la stratégie Multi Channel de Commerce Server 2009: Cross-Channel Retail and the Mobile Experience. Vous pourrez ainsi voir les possibilités qu’offre Commerce Server 2009 dans votre stratégie mCommerce. Tags: Commerce Server - WebCast - Carte Cadeau - mCommerce - Multi-Channel - Gift Card March 26 [Commerce Server 2009] Retour sur le MIX 2009Le MIX 2009 a été l’occasion d’officialisé la sortie de la dernière version de Commerce Server dans sa mouture 2009. A cette occasion Jean-Yves Martineau le fondateur de Cactus Commerce et Scott Cairney son vice président ont réalisé une session passionnante sur la nouvelle génération de leur plate-forme eCommerce (visible sur le site du MIX: Creating a "Next Generation" E-Commerce Experience). Je profite de ce post pour promouvoir les sites et ressources officielles (toutes en anglais, pas de version française pour le moment):
Tags: Commerce Server March 03 [Commerce Server] Commerce Server 2009Ca y est! Après quelques mois de gestation, la nouvelle version de Commerce Server est disponible à la vente. Adieu donc à Mojave et bienvenue à Commerce Server 2009. La nouvelle version s’accompagne même d’un site remis à jour tant au niveau du contenu que du design: le luxe Côté licence, pas de gros changement puisqu’il est toujours disponible en version Standard et Entreprise. Les fonctionnalités restant les mêmes. Le gros du travail a été fait dans les API de Commerce Server ainsi que le couplage avec SharePoint aux travers d’une série de web part. Pour le détail des fonctionnalités: Commerce Server 2009 Features. Tags: Commerce Server February 26 [SharePoint] HiSoftware & Microsoft annonce la date de la release pour la solution d’accessibilité SharePointJe parlais hier de la version 1.0 d’Hi-Sofware qui était loin d’être satisfaisante pour l’accessibilité sous SharePoint et voilà qu’après de longs mois d’attente la version 2 du Control Kit a été annoncé pour le lundi 9 mars! C’est une très bonne nouvelle pour tous les projets internet sous la technologie SharePoint, espérons que l’attente sera à la hauteur des espérances. Pour lire le communiqué officiel: HiSoftware & Microsoft Announce Release Dates for SharePoint Accessibility Solutions
Tags: SharePoint - MOSS - WCM - Accessibilité February 25 [SharePoint] Un CMS sous MOSS accessible? Yes, we can!Durant les 6 derniers mois de l’année 2008, j’ai travaillé sur un projet internet de gestion de contenu sous MOSS 20O7 ECM pour l’équivalent de la sécurité sociale Irlandaise: Department of Social and Family Affair. La grande ambition et le principal challenge de ce projet était d’avoir le site complètement accessible pour les non/mal voyant ou les déficients visuels comme il est convenu de les appeler maintenant. En effet, pour ceux ayant déjà travaillé sur ce type de sujet, la grande problématique est essentiellement dû au moteur de rendu par défaut de SharePoint qui n’est absolument pas W3C/WCAG 1.0 AA compliant. La première partie de mon travail, à d’abord été d’analyser les différentes solutions du marché qui peuvent permettre de rendre notre site sous MOSS accessible. Autant le dire tout de suite, il n’y a pas grand chose à se mettre sous la dent: La solution d’HiSoftware à travers son Accessibility Kit (gratuit) ne répondait en rien à notre problème. Il ne proposait que quelques controls adapter mais rien de vraiment conséquent (ou alors il fallait payer très cher). Quant à SPWorks, la solution a été rejeté par le client qui n’était pas persuadé de la fiabilité de cet outil. A tord me semble t’il, car le framework Alternative Rendering Framework for SharePoint (ARF) semble très puissant et simple à utiliser (il est par exemple utilisé sur la solution CKS:Enhanced Blog Edition). A mon avis, cette solution souffre surtout de ne pas être adossé à un gros éditeur. D’ailleurs, je serais curieux de connaître les retours d’expérience de cette solution. Je n’ai pas trouvé beaucoup de ressources à ce sujet. De ce fait, je suis donc parti sur une solution customisée complète. Pour des raisons de confidentialités, je ne peux pas vous soumettre les éléments de ma feature mais je peux vous expliquer en gros ce que j’y ai mis:
Résultat des efforts, un site XHTML: Et une belle récompense du gouvernement Irlandais avec un “eGovernment Award for accessible website”:
Tags: SharePoint - ECM - Accessibity - W3C - WCAAG - CMS [Commerce Server] Webcast sur la nouvelle version de Commerce Server 2009La société Cactus va diffuser ce jeudi 26 février un webcast sur les nouvelles fonctionnalités de Commerce Server 2009. En voici le résumé: The New Microsoft® Commerce Server 2009 Product Release In this technical session you will get an in depth look into the new Commerce Server 2009 product release, available in Q3/FY09, and the improved capabilities to compress time to market for e-commerce sites. Learn how to use Commerce Server's next-generation e-commerce API and web parts to rapidly develop high performance, rich multi-channel e-commerce user experiences. See improvements to the programming model, improved functionality for working with the desktop and devices, and integration of Commerce Server with Microsoft Office SharePoint® Server and ASP.NET. We’ll also cover future product roadmap. Ce webcast est disponible pour les partenaires. Il vous suffit donc de vous connecter au portail partenaires de Microsoft ou de cliquer directement sur ce lien. Tags: Commerce Server - WebCast I'm back!Après un long silence de quasiment 8 mois, me revoilà de retour sur mon blog. Un gros travail sur un site ECM sous SharePoint à vampiriser l’essentiel de mon temps et étant sous NDA, je ne pouvais communiquer les choses intéressentante que j’ai pu trouver avec vous. De plus, j’ai terminé ma petite escapade Irlandaise en revenant en France. Je suis maintenant chez Altima ou plutôt de retour pour être précis J’en ai profité pour passer quelques certifications et me voila MCTS .NET Framework 2.0 Web Applications. Prochaine étape le MCPD Web Developer. Pourquoi développement Web au lieu de mon cher SharePoint? Tout simplement car Altima souhaite obtenir la mention Gold Partner Custom dev qui correspond le plus à sa cible de client sur le eCommerce.
A très vite pour de nouvelles aventures… sur ce blog ou sur le blog de la Team Commerce Server d’Altima. Tags: Altima - MCTS - MCPD - Gaël Duhamel June 25 [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-- UPDATE -- 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 -- UPDATE -- 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 :
Le gros avantage est que le webmaster du site peut facilement (à ses risques et périls tout de même La structure de ma liste est toute simple :
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 Philippe Sentenac sur les méthodes d’extensions, j’ai décidé de refaire cette classe en utilisant ces extensions et les nombreuses autres classes generics du framework .Net. Pour commencer, j’ai étendu l’objet SPWeb 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 ILookup < TKey, TElement>. Cette interface, va me permettre ensuite de récupérer très facilement une entrée de ma configuration : public static ILookup<String, String> ConfigurationList(this SPWeb spWeb, String Category) { SPList spListConfiguration; ILookup<String, String> configurationEntries = null; // La liste n'est pas accessible aux end users. // On doit donc s'y connecter sur le compte admin pour y accéder // Optionnel, si vous avez décidé de mettre la liste en lecture pour tout vos utilisateurs SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite mySite = new SPSite(spWeb.Site.ID)) { using (SPWeb myWeb = mySite.OpenWeb(spWeb.ID)) { Je récupère ma liste « Configuration » grâce à la méthode d’extension TryGet de Philippe : if (myWeb.Lists.TryGet("Configuration", out spListConfiguration)) { J’exécute ensuite mon query pour récupérer mes éléments : SPQuery spQuery = new SPQuery(); spQuery.Query = String.Format(<Where><Eq><FieldRef Name='Category' /><Value Type='Choice'>{0}</Value></Eq></Where>", Category); Et je stock les résultats dans un document XML Linq (XDocument) : XDocument xml = XDocument.Parse(spListConfiguration.GetItems(spQuery).Xml); Je définie mon namespace pour me simplifier la lecture du code : XNamespace z = "#RowsetSchema";Je renvoie tout ce flux dans mon interface générique en lui spécifiant :
configurationEntries = (from xmlItems in xml.Descendants(z + "row").ToArray() select new ConfigurationEntry { Key = (String)xmlItems.Attribute("ows_Title"), Value = (String)xmlItems.Attribute("ows_Value") }) .ToLookup(key => key.Key, element => element.Value, EqualityComparer<String>.Default); }); } onfigurationEntries; } J’utile cette classe pour stocker ma clé ainsi que la valeur associée dans mon query Linq : public class ConfigurationEntry { public String Key; public String Value; } 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) public sealed class Configuration { private ILookup<String, String> configurationValues; public Configuration(SPWeb spWeb, String category) { if (spWeb == null) throw new ArgumentNullException("A SPWeb object cannot be null"); if (String.IsNullOrEmpty(category)) throw new ArgumentNullException("A category cannot be empty"); configurationValues = spWeb.ConfigurationList(category); } public Configuration(String category) { if (SPContext.Current == null) throw new ArgumentNullException("SPContext cannot be null. Please ensure that you're running a SharePoint application"); if (String.IsNullOrEmpty(category)) throw new ArgumentNullException("A category cannot be empty"); configurationValues = SPContext.Current.Web.ConfigurationList(category); } public String GetEntry(String key) { return Convert.ToString(configurationValues[key].FirstOrDefault()); } } Notez l’utilisation du générique FirstOrDefault, qui nous permet ici de nous retourner un String.Empty s’il n’y a pas de valeur à retourner. 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: Configuration configValues = new Configuration(spWeb,"SSRS"); Console.WriteLine("SSRS URL:" + configValues.GetEntry("SSRSUrl")); Console.WriteLine("SSRS Path:" + configValues.GetEntry("SSRSPath")); Console.WriteLine("SSRS WebPartPage:" + configValues.GetEntry("SSRSWebPartPage")); 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 :
La récupération de votre valeur se faisant comme ceci: Console.WriteLine("SSRS Url:" + spWeb.ConfigurationList("SSRS", "SSRSURL")); Comme promis, voici ici un exemple de classe qui vous permet de comparer 2 Strings sans distinction de la casse : public class StringNoCaseSensitive : IEqualityComparer<String> { public Boolean Equals(String val1, String val2) { return (val1.ToLower() == val2.ToLower()); } public int GetHashCode(string obj) { return obj.ToLower().GetHashCode(); } } Dans l’appel du ILookup,remplacer EqualityComparer<String>.Default par new StringNoCaseSensitive() et le tour est joué... Tags: June 10 [Telerik] Petit bug sur le control RadHtmlFieldDans le cadre d’un de mes projets de publication web sous MOSS, j’utilise très souvent le RAD editor pour SharePoint de Telerik. Il est vraiment très performant et d’une grande facilité d’utilisation. Mais j’ai détecté un petit bug dans son utilisation lorsque vous souhaitez valider vos pages pour éviter les attaques par script injection (XSS) via l’attribut validateRequest=True. <pages enableSessionState="true" enableViewState="true" enableViewStateMac="true" validateRequest="true" pageParserFilterType="Microsoft.SharePoint.ApplicationRuntime.SPPageParserFilter, Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" asyncTimeout="7"> 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 : <Telerik:RadHtmlField ID="Request" FieldName="Request" runat="server"/> Ce qui provoquait une erreur de type: Un rapide coup d’œil dans l’event viewer me donne un message d’erreur un peu plus explicite : 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… Tags: June 06 [SharePoint] Mettre à jour son web.config par l'intermediaire d'un fichier XML de configuration - UPDATED ON 06-JUNE-2008MISE A JOUR DU 06 JUIN 2008 <add path="configuration/system.web" id="{45C74BC1-DBA5-489f-A6E9-6932C25F1D97}"> <xhtmlConformance mode="Strict" /> </add> Ceci évitant la recréation multiple de vos actions. Grand merci à Gaetan Bouveret pour cet éclaircissement. Comme quoi la communauté SharePoint est plus forte que le SDK ------------------------------- Je reprend ici un post de Gaetan Bouveret, au sujet de la mise à jour du fichier web.config sans ligne de code. 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 SPWebConfigModification. Intéressé par son post, j'ai donc essayé de le mettre en place sur un de mes projets. J'ai donc ajouté dans un fichier xml (déployé par ma feature dans le répertoire config du 12) cette ligne: <add path="configuration/system.web"> <xhtmlConformance mode="Strict" /> </add> Pour déployer ce fichier dans votre web.config, il vous faut exécuter la commande : stsadm -o copyappbincontent Lors de la toute première commande tout marche parfaitement bien, mon noeud est bien ajouté là ou je le voulais. <system.web> .... <xhtmlConformance mode="Strict" /> </system.web> 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. Pour remédier à cela, j'ai simplement ajouté une commande remove juste avant la commande add: <remove path="configuration/system.web/xhtmlConformance" /> 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. <remove path="configuration/system.web/httpModules/add[@name='Session']" /> <add path="configuration/system.web/httpModules"> <add name="Session" type="System.Web.SessionState.SessionStateModule"/> </add> ps: Attention pour les fermes, le SDK stipule bien que cette commande doit être exécutée sur chaque serveur de la ferme. Tags: May 31 [SharePoint] SPBuiltInFieldId ou la classe qui vous rend serviceDans 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 SPBuiltInFieldId. 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: Par contre, chose des plus étranges, cette classe n'est pas du tout documenté Tags: May 27 [SharePoint] Custom Field - Variation labels sur CodePlexJe viens de poster sur CodePlex un nouveau projet de type champ personnalisé. Ce champ permet d'afficher la liste des « variation labels » définit pour votre site web. 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). Pour commencer, vous devez installer la solution et activer la feature (un guide d'installation et configuration est disponible dans l'onglet release du projet)
Une fois cela fait, vous pouvez maintenant ajouter votre nouveau type de colonne dans votre liste :
En mode ajout/modification, une liste déroulante vous permet de sélectionner une des variations installées sur votre serveur de publication MOSS.
Ci-dessous, la liste des variations installées (comme preuve de ma bonne fois
Pour ajouter ce type de colonne à une liste via un peu de lignes de code, vous pouvez faire comme ceci: String languageId = spList.Fields.AddFieldAsXml(String.Format("<Field Type=\"VariationLabelsFieldType\" DisplayName=\"{0}\" Name=\"{0}\" Required=\"TRUE\" />", SPGael.SharedConstants.LANGUAGECOLUMNNAME)); Pour ajouter un lookup colonne basé sur votre liste de variation, vous pouvez faire comme ceci : using (SPSite spSite = new SPSite(SPContext.Current.Site.ID)) Rendez-vous donc sur http://www.codeplex.com/VariationLabelsCsFld pour télécharger, tester et me remonter les éventuels bogues, évolutions, ou autres… Tags: May 21 [Windows Live] Bon anniversaireCela fait maintenant 11 ans que je suis sur Hotmail... 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 javascript en était à ses débuts et la bataille faisait rage entre Internet Explorer 4.0 et Netscape Communicator... Tags: May 18 [SharePoint] MOSS ROBOTS meta tagJe 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. 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, Stefan Goßner (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 : Adjusting the MOSS ROBOTS meta tag for 3rd party search engines. 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 Tags: [SharePoint] Ajouter une langue dans la liste des variations d’un site de publication MOSS (maj le 19 mai 2008)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 LocaleID (pour en avoir une liste : http://www.microsoft.com/globaldev/reference/lcid-all.mspx) en attendant de leur offrir une vrai « culture » (vous pouvez en trouver une liste ici : http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx) et donc le module linguistique pour SharePoint (les langues disponibles sont ici: http://www.microsoft.com/downloads/details.aspx?displaylang=fr&FamilyID=36ee1bf0-652c-4e38-b247-f29b3eefa048) qui vous permettra de voir votre SharePoint « parler » flamand 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:
N’oubliez pas le IISRESET pour prendre en compte votre modification et constater le résultat : 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 HTTP_ACCEPT_LANGUAGE. Tags: May 15 [Linq] Grouper les items renvoyés par un query sur une listeAuparavant, lorsque je voulais regrouper mes valeurs issues d’un query sur une liste. Je devais faire tout un tas de manipulations, comme : // Ma liste SPList spList = null; try { spList = SPContext.Current.Site.RootWeb.Lists["MaListe"]; } catch { } // si null, exception if (spList == null) throw new NullReferenceException("La liste n'existe pas"); // Recuperation du nom interne de la colonne if (!spList.Fields.ContainsField("Categorie")) throw new NullReferenceException("La colonne categorie n'existe pas"); String categoryColumnName = spList.Fields["Categorie"].InternalName; // Recuperation des categories distinctes triees SPQuery spQuery = new SPQuery(); spQuery.Query = String.Format("<OrderBy><FieldRef Name='{0}' /></OrderBy>", categoryColumnName); // Chargement du Xml XDocument xml = XDocument.Parse(spList.GetItems(spQuery).Xml); // Ajout du namesplace pour recuperer mes valeurs XNamespace z = "#RowsetSchema"; // IMPORTANT: n'oubliez pas de typer votre regroupement var groupedCategories = from allcategories in xml.Descendants(z + "row") group allcategories by (string)allcategories.Attribute("ows_Categorie") into distinctCategories select distinctCategories; // Ensuite il nous suffit de recuperer le resultat // Ici en l'ajoutant a un control de type Checkbox list foreach (var cat in groupedCategories) { this.cblCategories.Items.Add(new ListItem((string)cat.Key)); } Simple non? Pour allez un peu plus loin, ou si vous débutez comme moi, allez jeter un oeil sur le blog de Wriju. Il y a d'excellentes choses à lire. Tags: April 17 [SSRS] The report server is not responding. Verify that the report server is running and can be accessed from this computerLorsque vous souhaitez installer SQL Server Reporting Server 2005 (sp2) sur une autre instance web que celle par défaut, vous pouvez avoir ce type d’erreur: The report server is not responding. Verify that the report server is running and can be accessed from this computer. 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.x\Reporting Services\ReportManager (x correspondant à votre instance SSRS). <UI> <ReportServerUrl></ReportServerUrl> <ReportServerVirtualDirectory>ReportServer</ReportServerVirtualDirectory> <ReportBuilderTrustLevel>FullTrust</ReportBuilderTrustLevel> </UI> Il vous faut :
<UI> <ReportServerUrl>http://ssrs.sharepoint.local/ReportServer</ReportServerUrl> <ReportServerVirtualDirectory></ReportServerVirtualDirectory> <ReportBuilderTrustLevel>FullTrust</ReportBuilderTrustLevel> </UI> Et voila maintenant votre service SSRS installé sur une autre instance web que celle par défaut. April 09 [Accéssibilités] Microsoft SharePoint Briefing in Dublin with HiSoftwareMicrosoft Ireland organise avec la société HiSoftware 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 CodePlex à cette adresse: Accessibility Kit for SharePoint. Ci dessous, le texte officiel de l'invitation: What: Microsoft SharePoint Briefing - Dublin Where: Microsoft EPDC2 Auditorium When: Thursday, April 24, 2008, 9:00 to 17:00 GMT, London Who Should Attend: IT Professionals. Summary: 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. 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 & Collaboration and Workflows. During the partner sessions, HiSoftware’s President & 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. Registration: If you would like to attend this event, please register online by visiting: http://go.microsoft.com/?linkid=8416325. Tags: April 01 [SharePoint] Dublin inaugure une rue en l'honneur de notre portail préféré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. Si vous connaissez Dublin, cette rue est près de la célèbre avenue O'Connel Street
Tags: March 22 [SharePoint] Mettre en place une authentification Windows Live Id sur son site SharePoint
Je vais à travers cet article vous montrer comment implémenter l'authentification formulaire (communément appelé fba pour Forms Based Authentication) 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). 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):
Pour en savoir plus sur la configuration, reportez vous a la fin de l'article Windows Live Authentication Membership ProviderCe membership provider est disponible sur CodePlex : http://www.codeplex.com/CKS/Release/ProjectReleases.aspx?ReleaseId=7746 Ajout et déploiement de la solutionPremière étape, ajoutez votre solution ! Pour cela, nous allons utiliser la ligne de commande stsadm avec l’option addsolution. Ouvrez donc une fenêtre shell et tapez : c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o addsolution -filename c:\FBA\Live\CKS.MembershipProvider.WindowsLiveAuthentication.wsp Une fois la solution correctement ajoutée, il nous faut maintenant la déployer. Pour cela, deux solutions, via :
c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o deploysolution -name CKS.MembershipProvider.WindowsLiveAuthentication.wsp -immediate -allowgacdeployment c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o execadmsvcjobs
Enregistrer votre application Windows Live IDIl vous faut maintenant enregistrer votre application auprès de live.com. Vous devez faire cela afin de récupérer un ApplicationID ainsi que Clé secrète qui vous permettra d’identifier et authentifier vos utilisateurs auprès de Live.com. Rendez-vous donc sur https://msm.live.com/app/default.aspx et cliquez sur Register an application.
Sur l’écran suivant, notez bien votre ApplicationID, car nous en aurons besoin pour configurer notre provider. Configurer votre providerPour commencer, nous allons spécifier à notre application web d’utiliser l’authentification via Windows Live ID. Pour cela ouvrez l’administration centrale de SharePoint dans l’onglet « Application Management » et cliquez sur « Authentication Providers ». Notre application web SharePoint est donc configurée pour utiliser l’authentification via Windows Live ID, il nous reste plus qu’à configurer correctement les applications web pour qu’elles reconnaissent notre nouveau provider. Pour cela, nous allons utiliser la ligne de commande stsadm qui a été étendue d’une nouvelle option addwindowsliveauth. Ouvrez donc un shell et tapez : c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o addwindowsliveauth -appid <application id> -appkey <application secret key> -appmode <http/https> -profsite <URL du site qui contient la liste des profiles> -proflist <nom de la liste des profiles utilisateurs> -locked <URL pour rediriger les utilisateurs bloqués> -url <URL de l’application web> -member <Nom du membership> -role <Nom du role> Pour éclaircir un peu les paramètres car ce n’est pas vraiment explicite et bien documenté :
Pour terminer, ouvrez le fichier web.config de votre application web configurée pour recevoir l’authentification Windows Live ID afin de modifier la page de login a ouvrir ainsi que configurer le paramètre membership et role manager par defaut : Avant : <authentication mode="Forms"> <forms loginUrl="/_layouts/login.aspx" /> </authentication> ... <membership> <providers> <add name="WindowsLiveMembership" type="CKS.WindowsLiveAuthentication.LiveMembershipProvider, CKS.WindowsLiveAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b5adbad25a892e4a" /> </providers> </membership> <roleManager> <providers> <add name="WindowsLiveRoleManager" type="CKS.WindowsLiveAuthentication.LiveRoleProvider, CKS.WindowsLiveAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b5adbad25a892e4a" /> </providers> </roleManager> Après : <authentication mode="Forms"> <forms loginUrl="/_layouts/liveauth-handler.aspx?action=login" /> </authentication> ... <membership defaultProvider="WindowsLiveMembership"> <providers> <add name="WindowsLiveMembership" type="CKS.WindowsLiveAuthentication.LiveMembershipProvider, CKS.WindowsLiveAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b5adbad25a892e4a" /> </providers> </membership> <roleManager defaultProvider="WindowsLiveRoleManager" enabled="true" cacheRolesInCookie="true" cookieName="liveroles"> <providers> <add name="WindowsLiveRoleManager" type="CKS.WindowsLiveAuthentication.LiveRoleProvider, CKS.WindowsLiveAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b5adbad25a892e4a" /> </providers> </roleManager> Après avoir enregistrée les modifications, faite IISReset. Pour terminer la configuration, il ne nous reste plus qu’a activer la feature de synchronisation (utile si vous avez plusieurs sites fonctionnant avec l’authentification via Windows Live Id). Se connecter et gérer les permissionsDans mon cas, j’ai 2 sites sur une même base SharePoint :
Suggestion d'amélioriation par rapport au projet codeplex publiéComme expliqué un peu plus haut, j’ai masqué mon PUID. Pour corriger cela, il vous suffit d’éditer :
public string DisplayName { get { if (String.IsNullOrEmpty(strDisplayName)) return strId; else return strDisplayName; } set { strDisplayName = value; } }
MembershipUser user = new MembershipUser( ApplicationName, bup.DisplayName /* au lieu de bup.Id */, bup.Id, bup.Email, "", "", bup.Approved, bup.Locked, bup.Created, bup.LastLogin, bup.LastLogin, DateTime.Now, bup.LockedOn);
col.Add(
new MembershipUser user = new MembershipUser(
ApplicationName,
bup.DisplayName /* au lieu de bup.Id */,
bup.Id,
bup.Email,
"",
"",
bup.Approved,
bup.Locked,
bup.Created,
bup.LastLogin,
bup.LastLogin,
DateTime.Now,
bup.LockedOn)
); Pour cela, n’oubliez pas de vous assurer que le champ « display name » soit bien marqué comme obligatoire dans la page « liveinfo.aspx » <asp:RequiredFieldValidator ControlToValidate="tbDisplayName" runat="server" SetFocusOnError="true" ErrorMessage="Display name is a required field" /> Ainsi que dans la liste « WindowsLiveUserListName », vous pouvez d’ailleurs modifier cela dans la création automatique de la liste sur la commande stsadm personnalisée addwindowsliveauth (fichier WindowsLiveAuthStsAdmCommand.cs) :
list.Fields.Add("DisplayName", SPFieldType.Text, true); N’hésitez pas à contribuer à ce projet des plus intéressants en postant vos bugs, évolutions. La communauté ne vie que par et grâce a vous. Je vous rappelle l’adresse : http://www.codeplex.com/CKS/Release/ProjectReleases.aspx?ReleaseId=7746 Configurer l’Alternate Access Mapping
Pour aller plus loin sur l’Alternate access mapping, je vous conseille la lecture de ses articles :
Tags:
|
Liste des blogs SharePoint
Listes des blogs Commerce Server intéressants
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|