Affichage des articles dont le libellé est MOSS. Afficher tous les articles
Affichage des articles dont le libellé est MOSS. Afficher tous les articles

lundi 17 novembre 2008

Redirection et Simplification d'URL sous Sharepoint

C’est une problématique qui survient relativement souvent dans des organisations de taille importante (> 1.000 users) utilisant des sites collaboratifs comme WSS ou MOSS :

Il est nécessaire de structurer nos collections de sites Sharepoint à l’aide de chemins gérés, du type : http://nom_serveur/nom_direction/nom_equipe/nom_projet/

Cela permet de regrouper les sites collaboratifs par direction, par équipes… (dans la mesure où ces projets ne sont pas transversaux à plusieurs directions, bien sûr).

Derrière, niveau stockage SQL, ça permet également de regrouper les collections de sites par base de données (exemple : une base par direction + une base pour les projets transverses).

Le problème, c’est quand on ne se souvient pas de l’adresse complète, ou alors, que l’on souhaite communiquer de manière évènementielle sur un site donné : difficile d’utiliser ces URL à rallonge. On a besoin, dans certains cas, de définir des ‘raccourcis’ vers certains sites, avec une URL simplifiée facile à retenir du type : http://nom_serveur/raccourci , ou encore http://mon_serveur/evenement.

Il existe plusieurs solutions :

- utiliser un annuaire de site (pratique, exhaustif, permet de trier ou filtrer, mais cela ne règle pas le problème de complexité de l’URL)

- ne pas utiliser de chemins gérés, on met toutes les collections de sites directement derrière le nom du serveur (absolument pas recommandé)

- utiliser un DNS particulier (il faut alors faire intervenir les admins du DNS d’entreprise à chaque nouveau besoin de raccourci)

- utiliser un alias IIS avec une redirection (solution plus « propre », c’est la solution que je vais détailler ici).


Exemple :
On souhaite rediriger http://serveur:port/direction_1/equipe_1/projet/mon_site_collaboratif vers http://serveur:port/genial

1. A la main, cela donne :

- Ouvrir IIS manager,
- sélectionner le site web Sharepoint sur lequel on souhaite positionner la redirection. (partie « serveur:port », avec ou sans numero du port)

- Clic droit, nouveau > répertoire virtuel
- Clic sur « suivant »
- Saisir le nom de l’alias (= le nom du raccourci, ici « genial »), puis « suivant »


- Indiquer un répertoire physique (peu importe, on va le changer ensuite)
- Cocher « lecture », « executer », puis « suivant » et « fin »

Ensuite, sur le répertoire virtuel nouvellement créé, faire clic droit, « propriétés ».

- Onglet « repertoire virtuel », cocher le 3e radio bouton « une redirection vers une URL », puis indiquer l’adresse vers laquelle rediriger, à savoir http://serveur:port/direction_1/equipe_1/projet/mon_site_collaboratif.

- Cocher la case d’option « l’URL exacte ci-dessus »
- Cliquer sur OK

Voilà, la redirection est prête !

2. Via code C# : application de type console

Notes :

  • cette appli console doit tourner sur le serveur Sharepoint avec un compte qui a les droits sur IIS
  • dans le cas présent, cela concerne une single server farm. Sinon, l’opération est à répéter sur chaque frontal web.
  • je vous laisse le soin d’indiquer le répertoire correct de votre IIS

using
System;
using
System.Collections;
using System.Text;
using System.IO;
using System.DirectoryServices;
using System.Reflection;
using
System.Runtime.InteropServices;

namespace Ajout_IIS_Alias

{

class
Program


{

static void Main(string[]
args)

{

//
creation virtual dir


CreateVDir("IIS://serveur:port/W3SVC/2065292710/Root", "genial",
"C:\\Inetpub\\Wwwroot", "
http://serveur:port/direction_1/equipe_1/projet/mon_site_collaboratif");

//
suppression virtual dir


//DeleteVDir("IIS://serveur:port/W3SVC/2065292710/Root",
"genial");


Console.ReadLine();

}


static void
CreateVDir(string metabasePath, string vDirName, string physicalPath, string
httpRedirect)

{


// metabasePath is of the form
"IIS://<servername>/<service>/<siteID>/Root[/<vdir>]"


// for example "IIS://localhost/W3SVC/1/Root"



//
siteID can be found via
http://weblogs.asp.net/owscott/archive/2005/07/29/421058.aspx


// vDirName is of the form "<name>", for example,
"MyNewVDir"


// physicalPath is of the form
"<drive>:\<path>", for example,
"C:\Inetpub\Wwwroot"




Console.WriteLine("\nCreating virtual directory {0}/{1}, mapping the Root
application to {2}:", metabasePath, vDirName, physicalPath);


try


{


DirectoryEntry site = new DirectoryEntry(metabasePath);


string className = site.SchemaClassName.ToString();


if ((className.EndsWith("Server"))
(className.EndsWith("VirtualDir")))


{


DirectoryEntries vdirs = site.Children;


DirectoryEntry newVDir = vdirs.Add(vDirName, (className.Replace("Service",
"VirtualDir")));


newVDir.Properties["Path"][0] = physicalPath;


newVDir.Properties["HttpRedirect"][0] =
((object)httpRedirect);


newVDir.Properties["AccessScript"][0] = true;


// These properties are necessary for an application to be
created.


newVDir.Properties["AppFriendlyName"][0] = vDirName;


newVDir.Properties["AppIsolated"][0] = "1";


newVDir.Properties["AppRoot"][0] = "/LM" +
metabasePath.Substring(metabasePath.IndexOf("/",
("IIS://".Length)));


newVDir.CommitChanges();


Console.WriteLine(" Done.");


}


else


Console.WriteLine(" Failed. A virtual directory can only be created in a site or
virtual directory node.");


}

catch
(Exception ex)


{


Console.WriteLine("Failed in CreateVDir with the following exception: \n{0}",
ex.Message);


}

}

static void DeleteVDir(string
metabasePath, string vDirName)

{


// metabasePath is of the form
"IIS://<servername>/<service>/<siteID>/Root[/<vdir>]"


// for example "IIS://localhost/W3SVC/1/Root"


// vDirName is of the form "<name>", for example,
"MyNewVDir"


// physicalPath is of the form
"<drive>:\<path>", for example,
"C:\Inetpub\Wwwroot"


Console.WriteLine("\nDeleting virtual directory {0}/{1}:", metabasePath,
vDirName);


try


{


DirectoryEntry site = new DirectoryEntry(metabasePath);


string className = site.SchemaClassName.ToString();


if ((className.EndsWith("Server"))
(className.EndsWith("VirtualDir")))


{


DirectoryEntries vdirs = site.Children;


vdirs.Remove(vdirs.Find(vDirName, className));


site.CommitChanges();


Console.WriteLine(" Done.");


}


else


Console.WriteLine(" Failed. A virtual directory can only be created in a site or
virtual directory node.");


}

catch
(Exception ex)


{


Console.WriteLine("Failed in DeleteVDir with the following exception: \n{0}",
ex.Message);


}

}


}

}

Enfin, le developpement l’idéal serait ensuite :

- une liste sharepoint dans laquelle on saisi les mots-clés et les adresses de redirection associées
- un timer job sharepoint qui tourne tous les soirs par ex, qui parse la liste créée ci-dessus, et qui ajoute/supprime les réperoires virtuels correspondants à chaque frontal de la ferme.

- …

Enjoy !

vendredi 16 novembre 2007

Modifier la limite de 10mo d'un modele de site / liste

Dans SPS2003, la taille du modèle de site, incluant pages et contenu, était limité à 10Mo.

C’est également le cas dans WSS 3.0 et MOSS par défaut, il y a cependant du progrès : Microsoft permet de modifier cette valeur via l’outil STSADM, et ce jusqu’à un maximum de 500 Mo !

Par exemple, pour faire passer la limite à 30Mo pour les modèles de listes ET modeles de site, taper dans la ligne de commande du serveur :

stsadm -o setproperty -propertyname max-template-document-size -propertyvalue 30000000

(ou 30000000 correspond à la taille en bytes)

et voilà ! la limite est modifiée. Attention cependant à ne pas faire de modèle trop gros, sachant que cela impactera directement la taille de la base de contenu si les utilisateurs partent de ce modèle… J

dimanche 28 octobre 2007

Nouveaux thèmes WSS et debug...

Si vous vous êtes déjà penché sur le problème de comment créer un thème pour mon/mes sites WSS 3.0 / MOSS, vous savez déjà qu'il faut commencer en dupliquant un thème existant et le modifier.

Cela signifie donc :
  • aller dans le répertoire 12/TEMPLATE/THEMES
  • copier coller l'un des répertoires, avec son contenu.
  • donner un nouveau nom à ce répertoire
  • renommer le fichier .INF qui se trouve dans ce répertoire
  • éditer le .INF pour donner un nouveau nom au thème
  • éditer le fichier SPTHEMES.XML, et ajouter un déclaration (même nom que précédemment) pour ce nouveau thème.

Ce qui est moins évident, c'est comment "debugger" un thème facilement ? Visiblement, par expérience, la mise à jour des images n'est pas instantanné, ni les modifs du fichier CSS... La raison ? WSS met en cache le thème courant, avec ses images et sa CSS.

Cela signifie notamment, pour qu'une modification soit visible, qu'il faut recycler le pool d'application, et switcher vers un autre thème, puis le réappliquer. Enfin, coté client, il faut parfois forcer le rafraichissement du navigateur par un CTRL + F5...

Une partie de ces actions peut être effectuée via batch ou programme de switch en mode console (voilà donc le genre d'outils à mettre en place pour un debug rapide !)

lundi 27 août 2007

La webpart de requête de contenu MOSS ne fonctionne pas...

J'ai remarqué au cours de mes différentes navigations sur des sites MOSS, que la Content Query Webpart était potentiellement très utile pour récupérer du contenu dynamique à partir d'une requête, et le mettre en forme via XSL.

>> Je décide donc de me lancer avec une petite maquette, afin de voir jusqu'ou on peut aller dans cette personnalisation ...

Après avoir créé une collection de sites MOSS, je cherche à ajouter et à faire fonctionner la webpart de requête de contenu (également connu sous le nom Content Query WebPart, ou encore CQWP). (Environnement : 1 server MOSS FR avec un serveur SQL2005 pour le repository. Connexion avec le compte administrateur système de la collection de sites.)

1. Premier problème : la webpart n'est pas disponible dans la liste de webpart.
Solution : l'ajouter au site via la page d'administration 'Galerie de composants WebPart', en sélectionnant 'Nouveau', puis en cochant 'ContentByQueryWebPart' puis 'compléter la galerie'.

Ensuite, on ajoute la webpart sur notre page ASPX : on passe en mode édition, 'ajouter une webpart', puis ajout de 'ContentByQueryWebPart' à notre page.

2. Deuxième problème : la webpart est bien importée sur la page, mais affiche le message suivant :



"Impossible d'afficher ce composant WebPart. Pour résoudre le problème, ouvrez
cette page Web dans un éditeur HTML compatible avec Windows SharePoint Services
tel que Microsoft Office SharePoint Designer. Si le problème persiste, contactez
l'administrateur de votre serveur Web."


Si on essaye de "modifier le composant webpart partagé" par le menu contextuel de la webpart, on a alors un autre message d'erreur :




"Impossible de charger le fichier XSL. Le fichier spécifié est introuvable.

(Exception de HRESULT : 0x80070002)Page de maintenance des composants
WebPart : Si vous y êtes autorisé, vous pouvez utiliser cette page pour fermer
temporairement des composants WebPart ou supprimer des paramètres personnels.
Pour plus d'informations, contactez l'administrateur de votre site.

Résoudre les problèmes liés à Windows SharePoint Services. "

Solution : activer un feature responsable de la publication de la bibliothèque de feuilles de style...
Dans la page "Paramètres du site", cliquer sur le lien "Fonctionnalités de la collection de sites", puis activer la fonctionnalité "Infrastructure de publication Office SharePoint Server" en bas de page, qui dans mon cas, était désactivé par défaut.
(en version US, ce feature s'appelle "Office SharePoint Server Publishing Infrastructure")

Cela permet notamment de créé la bibliothèque de styles (accessible via l'URL http:///sites/Style Library/), dans laquelle la webpart va piocher sa feuille de style XSL.

A ce moment là, si l'on revient sur notre page d'accueil sur laquelle se trouve la webpart en erreur, celle ci affiche desormais plus rien (blanc), mais plus d'erreur. Il est alors possible de cliquer sur "modifier le composant webpart partagé" et ainsi de modifier les propriétés de la webpart.

Il est normalement possible de modifier la feuille de style utilisée par la webpart : ItemStyle.xsl.

3. Troisième problème : une modification de la feuille de style ItemStyle.xsl n'impact pas notre webpart : la liaison entre la feuille XSL et la webpart ne se fait pas bien.

Explication : en fait, au moment où l'on a activé la fonctionnalité MOSS (feature), une webpart "Composant WebPart de requête de contenu" (en version US : "Content Query Web Part") a été ajoutée et activée sur la bibliothèque de webpart de notre collection de site. C'est donc cette webpart qu'il faut utiliser, et non 'ContentByQueryWebPart' pour bénéficier de la liaison XSL. On supprime et on ajoute la nouvelle webpart.


(suite de la personnalisation dans un prochain post)

NOTE : la webpart de flux RSS fonctionne sur le même principe, et avec les mêmes sources : il faut donc que ce feature "Infrastructure de publication Office SharePoint Server" soit activé pour la faire fonctionner.


lundi 30 juillet 2007

Liens sur la customisation MOSS

Série d'articles intéressants (3 articles) sur la personnalisation MOSS, les feuilles de style CSS, et les outils à disposition pour personnaliser, par Philippe Sentenac :

Le lien vers le 1er article : les navigateurs et MOSS
Le 2e article : les CSS
Le 3e : les outils du développeur MOSS

Exemples de customisation MOSS...

Une question que l'on nous pose régulièrement concerne la capacité de MOSS à pouvoir créer des sites web hautement personnalisables. (au design 'pro', et pas comme un simple intranet...).



MOSS est bien une solution de gestion de contenu web (intégrant notamment CMS et le système de pages maitres d'ASP 2.0...), et afin d'illustrer cela, voilà quelques exemples de sites qui tournent sous MOSS :


Certains de ces sites sont en production (Microsoft...), alors que d'autre sont de simples vitrines d'exemple.


Pour un tour d'horizon illustré, voir ce post de Nae Young Kwon (MS), qui est très bien fait.