jeudi 11 décembre 2008

[Sharepoint/AJAX] Créer une WebPart AJAX avec un UpdatePanel et un UpdateProgress

Voici un article très intéressant de James Tsai's Blog  :

How To Create AJAX-enabled SharePoint Web Part with UpdatePanel and UpdateProgress in 10 minutes

mercredi 10 décembre 2008

[Regex] Test d'expressions régulières

Besoin d'écrire des expressions régulières, mais malheureusement, si vous êtes comme moi, les tests sont parfois laborieux.

Heureusement, Yohann m'a montré un freeware très pratique :

Les expressions régulières suite : avec Regular Expression Designer

Voici le lien : http://www.radsoftware.com.au/regexdesigner/

vendredi 21 novembre 2008

[Sharepoint] Refaire le contrôle utilisateur Welcome.ascx

Dernièrement, j’ai eu besoin de faire un userControl du style de Welcome.ascx mais personnalisé.

Un de mes besoins était d’afficher le nom prénom de la personne connectée et pas le “Bienvenue”. Or, en authentification Forms, je ne voyais que le “Bienvenue login”.

Un petit coup de Refelctor sur la dll Sharepoint m’a permis de voir qu’il y avait plusieurs options (PostCacheSubstitutionTextType) pour cette affichage.

image

Par défaut, l’option utilisée est “WelcomeUser”, voici les autres options :

  • Invalid

  • UserEmail

  • UserId

  • UserLoginName

  • UserName

  • WebTitle

  • WelcomeUser


Le développement

Pour faire simple, je suis repartie du code de Welcome.ascx, et ai créé Welcome2.ascx.

Au chargement du contrôle j’ai rajouté ces quelques lignes qui me permettent de modifier le type de l’affichage.

[sourcecode language='c-sharp']
PostCacheSubstitutionText child = this.ExplicitLogout.MenuControl.Controls[0] as PostCacheSubstitutionText;
           if (child.TextType == PostCacheSubstitutionTextType.WelcomeUser)
           {
               this.ExplicitLogout.MenuControl.Controls.Remove(child);
               child.TextType = PostCacheSubstitutionTextType.UserName;
               this.ExplicitLogout.MenuControl.UseShortId = true;
               this.ExplicitLogout.MenuControl.Controls.Add(child);

           }
[/sourcecode]

A partir de la, rien ne m’empêcher de créer mon propre userControl :

image

Il ne suffit plus que de créer une feature/solution pour le déploiement de ce contrôle et de l’intégrer dans notre masterpage personnalisée.

 

Ce n’est certainement pas la solution la plus propre, mais la plus simple dans mon cas car elle ne m’implique que très peu de développement.

[Article] Pratiques fondamentales pour un développement logiciel sûr

L’article sur les pratiques de sécurité dans le développement de M. Howard a été traduit en français par K. Yildirim.

C’est un article de 20 pages vraiment très intéressant, voici le lien MSDN pour le téléchargement de l’article :

http://msdn.microsoft.com/fr-fr/security/msdn.securite.pratiques.fondamentales.aspx

Et une copie de la synthèse :

Synthèse

La fiabilité logicielle comprend le développement et l’implémentation de méthodes et de processus pour garantir que le logiciel fonctionne comme prévu tout en minimisant les risques de failles et de codes malveillants qui peuvent faire du tort à l’utilisateur final. Reconnaissant que la fiabilité logicielle est une ligne de défense essentielle dans le contexte actuel des menaces, de plus en plus dynamique et complexe, les principaux éditeurs ont entrepris des efforts considérables pour réduire les failles, améliorer la résistance aux attaques et protéger l’intégrité des produits qu’ils vendent. Ces efforts ont conduit à d’importantes améliorations dans la sécurité logicielle et donnent ainsi un très bon aperçu sur la manière d’améliorer l’état actuel de la sécurité logicielle.

A travers l’analyse des efforts de fiabilisation logicielle de chacun de ses membres, SAFECode a identifié un ensemble de pratiques de développement sûr qui peuvent s’appliquer dans divers environnements de développement pour améliorer la sécurité logicielle. Il est important de noter que ce sont des “pratiques terrain” utilisées par les membres de SAFECode. En rassemblant ces méthodes et en les partageant avec une plus large communauté, SAFECode espère faire bouger l’industrie de la définition de bonnes pratiques souvent citées, mais rarement mises en œuvre, à la qualification d’un ensemble de disciplines logicielles qui ont démontrées leur efficacité à améliorer la sécurité des applications et qui sont actuellement en place chez les principaux éditeurs. Avec cette approche SAFECode encourage l’adoption de bonnes pratiques qui ont prouvé leur efficacité et capacité de mise en œuvre même avec des besoins produits et des méthodologies de développement très différents.

Un des principaux objectifs de ce document est de rester concis, pragmatique et très pratique. Il préconise des pratiques de sécurité spécifiques à chaque phase du processus de développement—Définition des besoins, Conception, Développement, Test, Codage et Documentation— qui peuvent être implémentées dans divers environnement de développement.

Les éditeurs logiciels ont à la fois une responsabilité et un avantage business à assurer la fiabilité et la sûreté des produits. SAFECode a collecté, analysé et livré ces bonnes pratiques de sécurité dans l’objectif d’aider les autres acteurs du secteur à initier ou améliorer leur propre programme de fiabilisation logicielle et encourage l’adoption par l’ensemble de l’industrie des méthodes de développement sûres décrites dans ce document.

Table des matières

  • Aperçu
  • Définition des besoins
  • Conception
  • Programmation
  • Test
  • Intégrité et gestion du code
  • Documentation
  • Conclusion
  • A propos de SAFECode

A propos de SAFECode

Le “Software Assurance Forum for Excellence in Code” (SAFECode) est une organisation à but non lucratif exclusivement dédiée à accroitre la confiance envers les produis et les services de technologies de l’information et des communications à travers la promotion de méthodes efficaces de fiabilisation des logiciels. SAFECode est une initiative tirée par l’industrie, pour identifier et promouvoir les bonnes pratiques pour développer et livrer des logiciels, du matériel et des services plus sûrs et fiables. On compte parmi ses membres EMC Corporation, Juniper Networks, Inc., Microsoft Corp., Nokia, SAP AG and Symantec Corp. Pour plus d’information, vous pouvez visiter www.safecode.org.

Téléchargez le document complet au format PDF (20 pages)

lundi 3 novembre 2008

[Sharepoint] Les types de contenu et leurs IDs

Voici un bref récapitulatif de ce que l’on peut trouver sur MSDN concernant les types de contenu. En effet, quelle douleur de créer un type de contenu qui hérite d’autres types de contenu.

Les types de contenu de Sharepoint sont gérés par des IDs unique pour une même collection de site.

SharePoint utilise cette information pour déterminer la relation entre le type de contenu et l'élément qui l'utilise (liste, modèle de page, document,...).

Il est donc possible de construire un type de contenu valide via l'une des 2 conventions suivantes :

  • ID du type de contenu parent + 2 valeurs héxadécimales (ces 2 valeurs ne peuvent être "00")

  • ID du type de contenu parent + "00" + GUID héxadécimal


Un cas spécial, le type de contenu "System", il est défini par "0x". Il est celui dont tous les types de contenu héritent.

Voici la liste des types de contenu de base dans Sharepoint :

Base content type hierarchy structure

ID du type de contenu parent + 2 valeurs héxadécimale


Voila par défaut la construction d'un ID avec cette convention

Document content type ID

Example of default content type ID hierarchy

ID du type de contenu parent + "00" + GUID héxadécimal


Sharepoint utilise cette méthode dans les cas suivants :

  • Type de contenu de Site basé sur d'autres types de contenu

  • Type de contenu de List, dans ce cas, le type de contenu est copié dans la liste quand on ajoute un type de contenu de site à cette liste.


Taille des IDs des types de contenu


La taille maximum d'un ID de type de contenu est de 512 octets.

Exemple (le niveau concerné est en bleu) :

Example of content type ID hierarchy

Lien msdn pour plus d'informations sur cette patie

vendredi 24 octobre 2008

[Sharepoint] Intégrer Ajax Control Toolkit pour ASP 3.5 SP1

Un lien vers le blog de Jérémy qui nous indique ce qu'il ne faut faire pour éviter les petites suprises de contrôles qui ne fonctionnent pas.

Plus plein d'autres astuces de ses dernières (més)aventures avec MOSS, n'est ce pas Jérémy ;)

mardi 7 octobre 2008

[Sharepoint] Supprimer les liens “Mon site” et “Mes liens” sur un site

Au début, avant de laisser libre les utilisateurs dans SharePoint, j’ai préféré enlever les liens “Mon site” et “Mes liens” du site et leur laisser juste le nécessaire pour se familiariser.

Ayant eu quelques difficultés à trouver comment faire, ce post me servira de mémo.

  1. Il faut avoir des droits d’administrateurs et avoir accès au site d’administration centrale de SharePoint.
  2. On clique sur notre fournisseur de services partagés
  3. Dans la partie “Profils utilisateurs et Mes Sites”, on va sur le dernier lien : Autorisations des services de personnalisation
  4. Dans mon cas, j’ai simplement supprimé le groupe “utilisateurs authentifiés”
  5. Si l’on veut être plus fin, il suffit d’éditer ce même groupe et lui enlever ou ajouter des droits.
  6. On peut aussi créer ses propres groupes de droits

Voilà, ce n’est pas plus compliqué mais il faut le savoir ;)

lundi 6 octobre 2008

[Sharepoint] Commande PSConfig

Après avoir lu l’article intéressant SharePoint et ses DB : Avez vous pensé à les "Tweaker" ? de Renaud Comte, j’ai cherché les possibilités proposées par cet outils qui à l’air vraiment intéressant.

Un article intéressant de The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] nous montre quelques exemples d’utilisation de PSConfig : Plus loin dans l'installation de SharePoint 2007.

 

L’exécutable se trouve dans le répertoire 12/BIN : PSConfig.exe

et vous trouverez son détail sur  Technet

[Sharepoint]Listes des Features avec leur GUID

Dans la même problématique que le post précédent pour la création de définition de site, on a souvent besoin de connaitre les GUID des features.

Voila un lien qui les répertorie : List of Features with GUIDs

[Sharepoint] ID des list template

A force de toujours chercher partout les listtemplateId, j’ai enfin trouvé un post qui répertorie un ensemble d’ID.

Il s’agit du blog de Simeon’s TechNotes intitulé SharePoint List Template Id’s

Value

Description

1200

Administrator tasks list

104

Announcements list

303

Blog Categories list

302

Blog Comments list

301

Blog Posts list

105

Contacts list

120

Custom grid for a list

118

Custom Workflow Process

130

Data Connection library

110

Data sources

108

Discussion board

101

Document library

106

Events list

150

Gantt Tasks list

100

Generic list

1100

Issue tracking

103

Links list

114

List template gallery

116

Master pages gallery

201

Meeting Agenda list

202

Meeting Attendees list

204

Meeting Decisions list

207

Meeting Objectives list

200

Meeting Series list

210

Meeting text box

211

Meeting Things To Bring list

212

Meeting Workspace Pages list

117

No-Code Workflows

2002

Personal document library

109

Picture library

300

Portal Sites list

2003

Private document library

111

Site template gallery

102

Survey

107

Tasks list

112

User Information list

113

Web Part gallery

119

Wiki Page library

140

Workflow History

115

XML Form library

[Sharepoint] Liste des placeholders d’un Masterpage

Voici un post intéressant (sur Grounding.co.za) qui liste les placeholders utiles dans une masterpage Sharepoint :

SharePoint default.master page placeholders

 

 image_78

Placeholder

Description

clip_image002[4]

PlaceHolderGlobalNavigation

The global navigation

clip_image004[4]

PlaceHolderGlobalNavigationSiteMap

The global navigation breadcrumb.  This is a nested placeholder.

clip_image006[4]

PlaceHolderSiteName

Site name

clip_image008[4]

PlaceHolderSearchArea

Search box area

clip_image010[4]

PlaceHolderTopNavBar

Top navigation area

clip_image012[4]

PlaceHolderHorizontalNav

Top navigation menu for the page.  This control is nested inside the PlaceHolderTopNavBar

clip_image014[4]

WSSDesignConsole

The page editing controls when the page is in Edit Page mode (in the browser, click Site Actions, and then click Edit Page)

clip_image016[4]

SPNavigation

Empty by default in Windows SharePoint Services 3.0. Can be used for additional page editing controls such as in a publishing portal.

clip_image018[4]

PlaceHolderPageImage

Page icon in the upper-left area of the page

clip_image020[4]

PlaceHolderTitleLeftBorder

Left border of the title area

clip_image022[4]

PlaceHolderTitleBreadcrumb

Main content breadcrumb area

clip_image024[4]

PlaceHolderPageTitleInTitleArea

Page title shown immediately below the breadcrumbs

clip_image026[4]

PlaceHolderMiniConsole

A place to show page-level commands, for example, WIKI commands such as Edit Page, History, and Incoming Links

clip_image028[4]

PlaceHolderTitleRightMargin

Right margin of the title area

clip_image030[4]

PlaceHolderTitleAreaSeparator

Shows shadows for the title area

clip_image032[4]

PlaceHolderLeftNavBarDataSource

Data source for the left navigation menu

clip_image034[4]

PlaceHolderCalendarNavigator

Shows a date-picker for navigating in a calendar when a calendar is visible on the page

clip_image036[4]

PlaceHolderLeftNavBarTop

Top of the left navigation area

clip_image038[4]

PlaceHolderLeftNavBar

Left navigation area

clip_image040[4]

PlaceHolderNavSpacer

The width of the left navigation area

clip_image042[4]

PlaceHolderLeftNavBarBorder

Border element on the left navigation bar

clip_image044[4]

PlaceHolderBodyLeftBorder

Border element for the main page body

clip_image046[4]

PlaceHolderPageDescription

Description of the page contents

clip_image048[4]

ContentPlaceHolder

Main content of the page

clip_image050[4]

PlaceHolderBodyRightMargin

Right margin of the main page body

clip_image052[4]

PlaceHolderFormDigest

The "form digest" security control

clip_image054[4]

PlaceHolderUtilityContent

Extra content at the bottom of the page

clip_image056[4]

PlaceHolderBodyAreaClass

Additional body styles in the page header

clip_image058[4]

PlaceHolderTitleAreaClass

Additional styles in the page header

vendredi 3 octobre 2008

[Sharepoint] Créer une page ASPX et la déployer dans la Bibliothèque de Pages d'un site

Mon besoin était de développer des pages Asp.net de façon classique (style site web dans VS2008) mais de les avoir dans la bibliothèque de Pages d’un site.

Ainsi, je pouvais utiliser la navigation de Sharepoint et avoir une application web normale sans créer un répertoire vituel dans IIS.

Je vais donc présenter la solution que j’ai utilisée, ça n’est peut être pas la meilleure, mais pour ma part elle fonctionne bien et me permet d’avoir des applications métiers spécifiques.

Pré-requis :

But:

  1. Créer un site web MOSS avec une bibliothèque (Pages dans mon cas) dans laquelle je mettrai toutes les pages web de mon application.

  2. Garder le Design (Masterpage et CSS) du site parent

  3. Avoir toutes la logique métier et le code-behind dans une Dll.


Solution envisagée :

  1. Création d’une feature/solution Sharepoint avec VSeWSS

  2. Création d’une page aspx lièe à la masterpage par défaut du site et contenant un delegate control

  3. Création des fichiers ascx pour les delegate control

  4. Création de l’ensemble des fichiers .cs pour le code-behind et autres classes nécessaires

  5. Ajout des Dlls supplémentaires nécessaires à l’application.


Résultat obtenu:

  1. Le delegate control est déployé dans le dossier “12/TEMPLATE/CONTROLTEMPLATES

  2. Les pages ASPX seront déployés dans la bibliothèque “Pages” du site web

  3. Les Dll déployés dans le GAC ou dans le bin du site web Sharepoint selon choix.


On commence :

On créé un site vide Sharepoint

image

On créé ensuite l’arborescence suivante :

image

Pour la créer, on ajoute plusieurs éléments et dossiers dans la solution :

Le UserControl

  • Le dossier Templates qui permettra de définir les TemplateFiles du fichier manifest de la WSP

  • Le dossier CONTROLTEMPLATES  qui représente le dossier des usercontrols de MOSS

  • Dans ce dernier dossier, vous y ajouter le fichier .ascx
    Cette arborescence permet de générer correctement le fichier manifest.xml.


Le contenu de la feature

  • On ajoute un élément module (que l’on nomme UCForm ici) qui nous créé le répertoire de feature ainsi que l’ElementManifest Module.xml.

  • Un fichier .ascx.cs qui correspondra à notre classe partielle de notre userControl (donc son code-behind)

  • Un fichier .aspx qui contiendra toutes les infos nécessaires pour être liè au style du site


Les Dll supplémentaires

Si l’on doit ajouter des Dlls supplémentaires dans le déploiement, il suffit de les rajouter à la racine du projet (comme ici, xtr.toolbox.dll)
Attention, il ne faudra pas oublié de les rajouter dans le fichier manifest.xml, mais nous le verrons dans les étapes suivantes.

Les références

Pour pouvoir développer correctement du web (en gros, pouvoir compiler le code-behind), il ne faut pas oublier d’ajouter les références System.Web et System.Web.Extension.
Ici, les références comme xtr.ToolBox.dll seront aussi à ajouter aux Dlls supplémentaires car le projet en a besoin.

Voici la WSP générée :

image

Je vais maintenant montrer le contenu de chaque fichier CREE :

MonUC.ascx
[sourcecode language='html']

< %@ Assembly Name="MonDelegateControlEtMaPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" %>
< %@ Control Language="C#" AutoEventWireup="true" Inherits="MonDelegateControlEtMaPages.UCForm.MonUC" %>

   
       
       

       

       
       

       
   



[/sourcecode]

On précise l’assembly qui contient le code-behind du userControl et on lu définit sa classe partielle.

Et pour me faire plaisir, j'ai ajouté un updatePanel (Attention, masterpage contient le scriptmanager)

monUC.ascx.cs

[sourcecode language='c-sharp']

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MonDelegateControlEtMaPages.UCForm
{
    public partial class MonUC : System.Web.UI.UserControl
    {
        #region controls
        protected Button Button1;
        protected TextBox TextBox1;
        protected Label Label1; 
        #endregion

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            Button1.Click += new EventHandler(Button1_Click);
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //On met le code MD5 de=u label soit toto dans la texbox à la suite du clic
            //Pour le faire j'utilise une classe de ma boite à outils qui a été mis en référence (Xtr.ToolBox.dll
            TextBox1.Text =  Xtr.ToolBox.Utils.Crypto.getHashMD5(Label1.Text);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "toto";

        }
    }
}

[/sourcecode]

Dans ce code, on y définit les contrôles utilisés, l’événement clic et on utilise une dll extérieur pour Hasher le texte “toto”

MaPage.aspx
[sourcecode language='html']

< %@ Page Language="C#" Inherits="Microsoft.SharePoint.Publishing.PublishingLayoutPage,Microsoft.SharePoint.Publishing,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>

< %@ Register TagPrefix="SharePointWebControls" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
< %@ Register TagPrefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages"
    Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
< %@ Register TagPrefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls"
    Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
< %@ Register TagPrefix="PublishingNavigation" Namespace="Microsoft.SharePoint.Publishing.Navigation"
    Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
< %@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

 
   
   
 

 
 


 


 


 




 
&nbsp;

 

  
 



[/sourcecode]

Dans mon cas, il s’agissait d’une page de publication donc je la fait hériter de la bonne classe : Microsoft.SharePoint.Publishing.PublishingLayoutPage,Microsoft.SharePoint.Publishing,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c

Je n’oublie pas tous les register nécessaire pour le bon fonctionnement de la page.
Ici j’en ai mis plus que besoin pour notre exemple, mais avec ceux-ci je couvre beaucoup de choses (Webpart, navigation,…)
Ne pas oublier surtout : <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

Car c’est ce register qui nous permet d’ajouter le delegate control.

Ensuite on garde bien tous les asp:Content pour éviter des erreurs suivant la masterpage choisi.

Module.xml

[sourcecode language='xml']

698-5627">698-5627ae24209a" xmlns="http://schemas.microsoft.com/sharepoint/" >
 
 
 
 
 
             RootWebOnly="false" >

     
              IgnoreIfAlreadyExists="TRUE" >
     
     
     
     
   

 




[/sourcecode]

Et le contenu des fichiers GENERES :

En sachant que nous allons compléter le fichier Feature.xml pour que le déploiement corresponde à nos besoins.

Feature.xml

[sourcecode language='xml']

         Title="MesPages" Scope="Web" Version="1.0.0.0" Hidden="FALSE"
         ActivateOnDefault="False" DefaultResourceFile="core" xmlns="http://schemas.microsoft.com/sharepoint/">
 
   
   
 



[/sourcecode]

Le scope de ma feature se situe au niveau du site web.
Par défaut je ne l'ai pas activée.
Pour l'exemple, je n'ai pas mis non plus de description dessus, ce qui n'est pas très pratique quand on doit l'actualiser.

manifest.xml

[sourcecode language='xml']

http://schemas.microsoft.com/sharepoint/">
 
   
 

 
   
   
 

 
   
 



[/sourcecode]

Ce fichier est généré automatiquement, on notera bien, qu'il a pris en compte notre dll xtr.ToolBox.
J'ai laissé le déploiement dans le GAC pour les dlls, mais vous pouvez le modifier.

Le développement est terminé, il nous suffit de déployer notre WSP générée et voici le résultat obtenu :

Nous avons bien MaPage.aspx dans notre bibliothèque.

image

 

Et le résultat obtenu tout en gardant le design choisit

image

 

Voila, c’est terminé, donc assez facilement on peut développer des applications asp.net et les intégrer dans Sharepoint.

mercredi 1 octobre 2008

[Sharepoint|CSS]Les classes CSS utilisées dans MOSS

En mofiant le style de mon site, je suis tombé sur un site très intéressant sur le design Sharepoint.

Il répertorie l'ensemble des classes CSS utilisées dans Sharepoint.
Trés utile lorsqu'on veut créer son propre style.

CSS Reference Chart for SharePoint 2007 (Microsoft Office SharePoint Server 2007 and Windows SharePoint Services v3).

D'ailleurs, l'ensemble du site de l'auteur (Heather Solomon) est très intéressant pour le design sous Sharepoint.

mardi 30 septembre 2008

Visual Studio 10

Un article intéressant sur PCinpact sur l'orientation de Microsoft et visual Studio 10 :

Microsoft ajoute la modélisation au coeur de Visual Studio 10

Et un autre article sur le même sujet :

Microsoft dévoile le futur de ses outils de développement

[SPD] Problème d'URL après une publication

Sur mon serveur de test, j'ai publié via Sharepoint Designer des modèles de pages d'un site à l'autre.
Et après je me suis aperçu que j'avais plein de problèmes et d'erreurs.
En y regardant de plus prêt j'ai vu que les urls des 2 sites se mélangeaient.

Heureusement, grâce à une des extensions de Gary Lapointe, j'ai pu rétablir l'ensemble des webapplications:
Fix Publishing Pages Page Layout URL
C:\>stsadm -help gl-fixpublishingpagespagelayouturl

stsadm -o gl-fixpublishingpagespagelayouturl

Fixes the Page Layout URL property of publishing pages which can get messed
up during an upgrade or from importing into a new farm.

Parameters:
-url
-scope
[-pagename ]
{[-pagelayout to (format: "url, desc")>] /
[-regexsearchstring replacement of the page layout url>]
[-regexreplacestring replacement of the page layout url>]}
[-verbose]
[-test]

 

Cette extensions permet donc de corriger toutes les locations érronnées sur un site qui a été migré.

Encore merci à lui pour cette extension ;)

mardi 23 septembre 2008

[Tools] Plusieurs browsers en Standalone

Comme beaucoup, lorsqu'il s'agit de faire du design web, nous avons besoin de tester  celui-ci sur différents navigateurs sans pour autant les installer.

Ou dans le cas d'IE6 et IE7 les voir fonctionner sur la même machine.

En cherchant, je suis tombé sur ce site qui propose toute une panoplie de navigateurs "Portable" :

http://www.wikistuce.info/doku.php/logiciels/une_panoplie_de_navigateur

Très pratique.

[Sharepoint] MasterPage et CSS sous forme de Feature

Récemment, je devais customiser mon Sharepoint pour qu'il adopte la charte graphique de l'entreprise.

Dans ce post, nous verrons donc une des solutions  (peut être pas la meilleure, mais pour le moment elle me convient :) ) pour créer des features contenant les masterpages, les css et les images.

Pour le développement, j'utilise, comme d'habitude, l'extension VSeWSS.

Pour faire mon projet je me suis basé sur le trés bon (et surtout très clair, merci à lui) post de phil : SharePoint 2007 : Creer une MasterPage et la deployer via une feature

Tout d'abord, nous créons un nouveau projet.

image

Ensuite on lui ajoute un nouvel élément:

  • Catégorie : Sharepoint

  • Modèle : Module

  • Nom : Je l'appelle XtrMasterPage


image

Voila l' arborescence obtenue:

image

On supprime le fichier sample.txt, ensuite, on renomme le fichier Module.xml en ProvisionedFiles.xml (pour suivre le poste de phil) et je l' édite.

Afin de ne pas me perdre dans l'arborescence, j'ai préféré suivre celle de sharepoint et voila ce que ça donne:

image

Le projet se décompose en 2 parties :

  • La feature

  • Les fichiers


La feature:

Définit ici sous le nom de XtrMasterPage, elle contiendra les fichiers .xml et .cs nécessaire à la feature

Les Fichiers:

Pour permettre leurs déploiements via la WSP, j'utilise le dossier "Templates" de VSeWSS  (voir [VSeWSS] Inclure des ressources supplémentaires dans une WSP)et y reproduit l'arborescence de ma feature:

  1. Dans _catalogs/masterpage, on y dépose les masterpages

  2. Dans Style Library, on y dépose les css

  3. Dans Style Library/Images, on y dépose les images utiles aux css


Ensuite, on complète le fichier xml :

[sourcecode language='xml']

 
   
     
     
   

 


 
   
   
 


 
   
   
   
 




[/sourcecode]

Ainsi, lorque l'on vadans la Vue WSP sous VS2008, voilà ce que l'on obtient :

image

On modifie maintenant, si besoin, le fichier feature.xml. Par exemple comme celui-ci :

[sourcecode language='xml']

[/sourcecode]

Ensuite, on déploie la WSP générée.

image

Dans le contenu du site, on peut y voir, :

Les css

image

Les Master Pages

image

Voilà, on peut maintenant la choisir dans "MonMOSS > Paramètres du site > Paramètres de la page maître du site"    (sous MOSS uniquement)

image