jeudi 27 novembre 2008

MOSS Feature : "Zip and download" sur une doclib

Comme dans Livelink J, un feature développé par Mohamed Zaki permet de télécharger un ZIP de

 

-          tous les docs de la doclib

-          tous les docs avec toutes les versions

-          tous les docs d’une vue particulière

 

http://mzaki.spaces.live.com/Blog/cns!E3340AEAC1CDD449!1411.entry

 

>> A tester !

 

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 !

jeudi 4 septembre 2008

Livre blanc MS : MOSS et les réseaux sociaux

Un article intéressant de la MS Sharepoint Team : (http://blogs.msdn.com/sharepoint/archive/2008/08/27/announcing-the-how-to-get-the-most-value-from-social-computing-for-business-with-microsoft-white-paper.aspx ) qui présente son dernier livre blanc concernant Sharepoint et les réseaux sociaux.

Au menu :

-       présentation du « social computing » et des réseaux sociaux
-       retour d’expérience à partir de 2 cas d’entreprises
-       quelques scénarios d’utilisation des wikis / blogs / forum de discussion

Les objectifs étant

-       de voir la valeur ajoutée des réseaux sociaux et l’impact « business » pour l’entreprise.
-       Présenter des scénarios de cas réels dutilisation
-       Et bien sûr montrer en quoi Sharepoint répond à la problématique

Le livre blanc How to Get the Most Value from Social Computing for Business with Microsoft

peut être téléchargé ici : http://www.microsoft.com/downloads/details.aspx?FamilyId=C5844123-7F31-49D4-811C-7B90E6217B1D&displaylang=en

Bonne lecture

mardi 15 juillet 2008

Erreur MOSS "La version d'évaluation pour ce serveur a expiré."

Je viens de tomber sur une erreur assez bizarre sur ma VM de travail :

 

« La version d'évaluation de Microsoft Office SharePoint Server 2007 pour ce serveur a expiré. » losque j’essaie d’accéder à « mon site ».

Dans l’administration centrale, si je verifie le lien « convertir le type de licence », (http://serveur:port_admin/_admin/Conversion.aspx), j’ai bien comme type de licence « Office SharePoint Server avec licence d'accès client Enterprise ». Donc perplexe !?!

Erreur assez classique finalement, car en googlelisant sur «MOSS The evaluation version for this server has expired » , on obtient beaucoup de réponses

Ce serait dû à un problème de droits sur des composants COM, et le message d’erreur est bidon…

§       Pour faire simple, si vous êtes dans un environnement de DEV, il suffit d’ajouter en tant qu’admin local les comptes utilisés par les pool d’application IIS de nos sites MOSS, un IISRESET, et l’erreur n’apparait plus. 

§       Pour un environnement de PROD, ne donner que les droits indiqués dans la page suivante.

Cf. http://blogs.msdn.com/joelo/archive/2008/01/02/evaluation-version-expired-but-not-really.aspx pour l’explication complète

mercredi 4 juin 2008

eXo Portal : un concurrent 2.0 à MOSS ?

Suite à une présentation produit d’eXo (http://www.exoplatform.com/) Portal et WebOS, je me suis intéressé aux fonctionnalités proposées par eXo Portal, notamment à fin de comparaison avec MOSS.

Ce produit, basé sur les standards Java, utilise une part de ce qui fait le web 2.0 aujourd’hui, à savoir :

-       une touche d’Ajax
-       gestion de groupes et de relations
-       portlet administrable et deplacables par les utilisateurs
-       du RSS pour syndiquer des contenus

Ce portail permet l’accès et la collaboration à du contenu et des applications depuis un point d’entrée unique.

Les standards autour duquel ce produit est développé permet une certaine flexibilité, adaptabilité et connectivité aux environnements Java.

L’authentification s’appuie nativement sur du LDAP mais peut s’adapter à de l’Active Directory ou à des formulaires.

Une sorte de plugin « WebOS » (qui s’ajoute au portail) permet d’afficher une version du portail sous forme de bureau virtuel dans le navigateur, tel un client connecté via un Terminal Server. Les fenetres présentent alors les même contenus qu’une section du portail.

A la couche portail eXo, s’ajoutent plusieurs blocs :

-       Collaboration Suite 1.0, pour la partie collaborative (équivalent au quartier « WSS » de la rosace MOSS)
-       ECM 2.0 pour la gestion de contenu (équivalent au quartier « ECM » de la rosace MOSS)

>> eXo plateforme saffiche donc comme un concurrent à MOSS avec une forte connotation java / open source et un peu plus de web 2.0 dans linterface native.

A suivre donc, complément dinformations à venir dans un 2nd post.



vendredi 23 mai 2008

Utilisation de MyLinks sans activer MySite

Les questions se posent régulièrement lors de la conception d’un portail :

Autorise-t-on les sites personnels (MySite) ?

La réponse est souvent NON, pour des raisons de liberté dexpression des collaborateurs (les RH sont frileux à ce genre d’initiative), et parfois car les utilisateurs ne sont pas matures à ce genre de fonctionnalité.

Autorise-t-on les Liens personnalisés (MyLinks) ?

Souvent encore, on souhaite faire un portail un peu personnalisé, mais pas trop, et MyLinks répond bien à cette problématique : la réponse est souvent OUI.

Pour activer/désactiver ces fonctionnalités, il suffit de se rendre dans l’administration centrale, puis sur le service partagé associé au portail.

Puis, lien « Autorisations des services de personnalisation ». Pour le groupe « autorité NT\utilisateurs authentifiés »

Ø       Décocher « Créer un site personnel » (supprime le droit de créer un site perso MySite)
Ø       Cocher « Utiliser des fonctions personnelles » (autorise les liens perso et les affichages personnalisés)

Une fois cela fait, si un utilisateur se rend sur la page d’accueil du portail, il doit voir apparaitre en ahut de page « Mes Liens » et non plus « Mon site ». Jusque là tout va bien.

L’ajout d’une page dans ses liens favoris est également facile.

Le problème survient lorsque lon clic sur « gérer les liens », car alors, on est redirigé vers une page du « MySite », qui lui, nest pas autorisé (http://serveur:port_du _mysite/MySite/_layouts/myquicklinks.aspx)

>> on obtient une belle page derreur « Erreur inconnue » et pas dautres information.

(Cette erreur survient surtout si, dans un premier temps, on a activé MySite, puis on la désactivé.)

La solution est plus astucieuse : utiliser un lien recontruit à la main, sachant que la page de gestion des lien est en fait accessible via _layout. On utilisera alors le lien « http://serveur/_layouts/myquicklinks.aspx » qui permet dadministrer sa liste de liens perso dans un environnement « non-Mysite ».

NOTE : Cette astuce fonctionne également pour :

-       la gestion de mon profil utilisateur (http://serveur/_layouts/EditProfile.aspx 
-       la gestion de mes « collègues » (http://serveur/_layouts/MyContactLinks.aspx 

mercredi 19 mars 2008

WSS / MOSS : Une erreur inattendue s'est produite

Si vous avez développé des webparts, ou même effectué un peu de
personnalisation sur votre site WSS 3.0, vous avez peut-être rencontré
cette erreur des plus agaçante :
"Une erreur inattendue s'est produite" , (par exemple dans mon cas, sur la
page DispForm.aspx d'une simple liste) puis une proposition pour désactiver
certaines webparts de la page, celles-qui pourraient poser problème. Le
problème, c'est qu'il n'y a aucune indication sur la nature de l'erreur, ni
trace...

Or MOSS / WSS 3.0, c'est de l'ASP.NET, et les développeurs ASP.NET savent
qu'il est possible de masquer ou d'activer les messages d'erreur +la trace
à l'affichage.
>> Ca se passe bien sûr au niveau du fichier web.config. Il faut changer :

<SafeMode MaxControls="200" CallStack="false"
AllowPageLevelTrace="false"....
en
<SafeMode MaxControls="200" CallStack="true" AllowPageLevelTrace="false"…

et désactiver les erreurs personnalisées en mettant "Off" :

<customErrors mode="On"/>
à remplacer par
<customErrors mode="Off"/>

Une fois modifié, enregistrer le fichier web.config. (Attention, cela
provoque un recyclage du pool d'application, et déconnectera les éventuels
utilisateurs courants.)
Lors du prochain appel à la page, le message d'erreur devient une page
classique ASP.NET, et c'est nettement plus parlant pour débugger !

jeudi 14 février 2008

Erreur (classique) du composant webpart : format incorrect...

Je me suis confronté récemment à cette erreur dans un environnement WSS 3.0 de production :

« Erreur du composant WebPart : Une des propriétés du composant WebPart a un
format incorrect. Windows SharePoint Services ne peut désérialiser le
composant WebPart. Vérifiez le format des propriétés et réessayez.
 »

Les symptomes : toutes les webparts de titre de page de composant webpart étaient en erreur sur plusieurs collections de sites, ainsi que les webpart Office Web Components (graphiques Offices)

Classique, dirai-je, un coup de Google et ce devrait être réglé Après qq recherches,  je trouve une info de la KB Microsoft : http://support.microsoft.com/default.aspx?scid=kb;en-us;826786 . Lerreur serait dû à un problème de droits sur le répertoire temporaire (dans lequel Sharepoint désérialise ses WP).
Dans mon cas, ce n
était pas cela mais presque : en fait plus despace disque système sur lun des frontaux de la ferme.

Seulement, une fois de la place libérée, on aurai pu penser que cela allait être réglé : erreur, toujours le problème !...

Finalement, un IISRESET aura raison du message derreur, et les webparts sont alors redevenue disponibles et sans erreur.

lundi 21 janvier 2008

Effectuer le monitoring de serveur WSS / MOSS

Concernant le monitoring de serveurs WSS Microsoft, il n’existe pas de webpart « out of the box » qui fait le monitoring, cependant, voici quelques pistes :

Ø       Avec System Center Operations Manager 2007 : SharePoint Monitoring Toolkit

Ø       Avec PerformancePoint server : Monitoring Dashboard Viewer for SharePoint Services

Ø       Sans appli spécifique, mais avec windows Perfmon (pas d’interface via webpart) :
o       Utilisation basique de perfmon : http://blogs.codes-sources.com/phil/archive/2007/07/11/sharepoint-2007-surveiller-les-performances-de-vos-serveurs-perfmom-part-1.aspx

o       Compteurs indicatifs Sharepoint : http://blogs.codes-sources.com/phil/archive/2007/08/21/sharepoint-2007-surveiller-les-performances-de-vos-serveurs-perfmom-partie-2.aspx

mercredi 9 janvier 2008

Ajouter le menu de navigation dans les pages de webparts

Par défaut, les 8 pages de webparts prédéfinies nous proposent des dispositions exotiques, sur toute la largeur de la page.

Mais bien souvent, on aimerai conserver une certaine cohérence avec la page d’accueil du site, et notamment disposer du menu gauche de navigation

Cas 1 : la modif est ponctuelle : privilégier Sharepoint Designer, et ouvrez votre fichier avec.

Cas 2 : modif globale pour les futures pages de webpart : édition du modèle

Pour cela il faut aller sur le serveur, dans le répertoire .\12\TEMPLATE\1036\STS\DOCTEMP\SMARTPGS\

Dans loptique de test, on va éditer le premier fichier correspondant à un affichage dune zone de webpart pleine page.

Editer donc le fichier spstd1.aspx

Pour ajouter le menu de navigation, supprimer la ligne qui surcharge le contenu de la default.master :

<asp:Content ContentPlaceHolderId="PlaceHolderLeftNavBar" runat="server"></asp:Content>

Sauvegarder, relancer IIS, créer une nouvelle page de webpart.

Si vous faites le test, vous aller effectivement voir apparaitre le menu, mais pas avec la bonne largeur.

Pour modifier la largeur du menu, là encore, RDV dans le fichier que lon vient de modifier, et supprimer la ligne :

<asp:Content ContentPlaceHolderId="PlaceHolderNavSpacer" runat="server"></asp:Content>

Sauvegarder, relancer IIS, (créer une nouvelle page de webpart si modif du modèle)

et voilà.