Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Julien Chable

He blogs, you blog, I blog ...

Archives

[SharePoint 2010] Mettre à jour le type de contenu des documents d’une bibliothèque avec PowerShell

Beaucoup de travail, beaucoup de nouvelles astuces à partager mais pas beaucoup de temps pour le faire, voici ce qui devrait changer dans les prochaines semaines.

Pour la reprise, voici quelques scripts PowerShell qui pourrait vous épargner quelques minutes d’écriture. Le premier très simple (je n’ai pas le niveau de notre SPAdmin préfére Fabrice69), pour changer le type de contenu de documents contenus dans un répertoire récemment migré :

if(-not(Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}))
{
    Write-Host "Chargement de la librairie SharePoint pour PowerShell"
    Add-PSSnapin Microsoft.SharePoint.PowerShell
}

$web = Get-SPWeb http://companyweb
# La liste contenant les documents à mettre à jour
$listRP = $web.Lists["Revue de presse"]

# On prend que certains répertoires (ici ceux contenant le nom de notre journal local)
$folders = $listRP.Folders | where { $_.Name -like "*LNC*" }
foreach ($folder in $folders)
{
   Write-Host "Mise à jour répertoire => " $folder.Name
  
   $files = $folder.Folder.Files
   foreach ($file in $files)
   {
        Write-host "Traitement du fichier ==>" $file.Name
       
        if ($file.Level -eq [Microsoft.SharePoint.SPFileLevel]::Checkout)
        {
            $file.CheckIn("Archiver par le système")
        }
        
        # Créez le type de contenu dans les types de contenu de site
        $file.Item["ID du type de contenu"] = $web.ContentTypes["Revue de Presse"].Id;
        # Champ de type choix

        $file.Item["Nom du média"] = "LNC";
        $file.Item.Update();
   }
}

Happy PS ! (Dédicace à mon coéquipier de terrain David)

Nouvelle version du site OpenXmlDeveloper.org

Le site http://openxmldeveloper.org/ commençait à prendre de l’âge, Microsoft a donc décider de le refaire du sol au plafond avec quelques nouveautés également :

  1. Système de réputation : à l’instar des forums Microsoft, l’équipe a introduit un système qui permet aux membres actifs d’être reconnus par des points, leur permettant de gagner en responsabilité et en niveau d’accès sur le site. Ce système de reconnaissance fonctionne également par ami ou par notation sur les articles des compères permet de gagner également des points.
  2. Le membre du mois (actuellement trusté par notre ami Eric White).
  3. La mise en place du CAPTCHA et du blocage d’IP qui faisait cruellement défaut.
  4. Nouveau système de mise à jour du contenu qui devrait permettre une mise à jour plus fréquente du contenu du site.
  5. Nouveaux forums avec une mise en avant dès la page d’accueil.
  6. Un feed Twitter multilingue (Français, Japonais, Anglais, Espagnol, etc).

Je vous laisse avec ce nouveau cru et la montagne de post de Eric :

image

Merci à Liza et à Doug pour cette initiative,

Bonne lecture !

Kit de démarrage Open Data OGDI (Open Governement Data Initiative) sous licence libre

On entend de plus en plus parler d’Open Data(1) en ce moment, certains en parlent même comme du frère de l’Open Source.

Néanmoins, la publication/récupération de ce contenu ‘public’ est aujourd’hui un peu fastidieux à mettre en place. C’est pourquoi pour vous aider à mettre en place une publication Open Data sur les plateformes Microsoft, l’éditeur vous propose un kit sous la forme de composants logiciels qui permettent à toute entité publique de mettre en œuvre immédiatement une approche Open Data et ainsi :

  1. De récupérer, de s’approprier et de mettre en œuvre très rapidement et à moindre coût une solution ouverte, de bout-en-bout, de publication d’informations publiques via Windows Azure,
  2. Et de publier et d’exposer sur ce socle les ensembles de données que l’entité souhaite mettre à disposition des usagers et citoyens.

Le kit de démarrage OGDI (Open Governement Data Initiative) disponible sous licence libre Microsoft Public License (Ms-PL) s’adresse, via ses différents composants et code source associé, aux architectes, aux développeurs et à tous ceux qui souhaitent exposer et/ou consommer des informations publiques.

Ce kit de démarrage OGDI localisé et mis à jour pour VS 2010/.NET4/ASP .NET MVC 3 Razor est disponible en ligne à l’adresse http://www.microsoft.com/downloads/fr-fr/details.aspx?FamilyID=420837f8-25ec-47ba-b558-b6a7f64b3348. Le kit dispose d’une documentation complète qui en facilite la mise en œuvre.  Un site exemple avec divers ensembles de données prêt à l’usage est, par ailleurs, en ligne à l’adresse http://ogdifrance.cloudapp.net.

Un nouveau blog MSDN OGDI France (http://blogs.msdn.com/b/ogdifrance/) a d’ailleurs été tout spécialement créé pour l’occasion.

(1) Quelques précisions pour bien démarrer :

Les informations publiques, ou données ouvertes (Open Data), sont aujourd’hui en termes de potentiel, d’opportunités et d’enjeu au cœur du développement de multiples innovations sociales et économiques grâce à leur mise en ligne par l’administration et les collectivités territoriales. En effet, portées à la connaissance des citoyens, des chercheurs, des associations, des entreprises, ces informations statistiques, géographiques, urbanistiques, etc. peuvent devenir des mines d’or dès lors qu’elles sont retravaillées, croisées entre elles et mises en scène et ainsi contribuer à la création de nouveaux services tout en favorisant la transparence de l’action publique.
Comme le décrit l’édition du premier trimestre 2011 du magazine RSLN - Regards sur le numérique qui propose une enquête complète sur les informations publiques, la publication et la consommation d’informations publiques sur le Web sous une forme facilement accessible par les personnes et les logiciels constitue une dimension essentielle.

OGDI utilise la plateforme Windows Azure dans le Cloud pour faciliter la publication et l'utilisation d’informations publiques variées provenant d'entités publiques (gouvernement, ministères, collectivités locales et territoriales, mairies, services déconcentrés de l'Etat, etc.). Les données sont publiées à l'aide de standards ouverts et sont facilement accessibles à partir de n'importe quelle plate-forme et depuis de très nombreux outils de consultation et d’interrogation à destination des utilisateurs finaux.

Le protocole et le format principal que le kit de démarrage ODGI utilise pour cela est appelée OData (Open Data Protocol). Ce protocole Web pour requêter et effectuer des opérations sur des données constitue une extension de technologies Web largement acceptées telles que http, XML, AtomPub, etc. Cet engagement et adhésion envers les principes fondamentaux du Web et ses standards permet à OData d’offrir une intégration des données simplifiée et un nouveau seuil en termes d’interopérabilité au travers d’un large éventail de producteurs et de consommateurs. Les spécifications du protocole OData sont ouvertes, publiques et libres d’implémentation ainsi que précisé dans l’OSP (Open Specification Promise). Pour de plus amples informations, vous pouvez consulter le site dédié à http://www.odata.org.

Le kit de démarrage OGDI peut aussi retourner les données au format JSON (JavaScript Object Notation) ou JSONP (JSON with padding) et prend également en charge le format KML (Keyhole Markup Language), un format de l'industrie largement accepté pour les données géo-spatiales, rendant ainsi le kit de démarrage OGDI compatible avec des technologies de cartographie sur poste de travail ou sur le Web, comme Géoportail, Google Earth, Google Maps, Microsoft Bing Maps, etc.
La solution consiste en trois composants principaux :

  1. Le premier composant est un chargeur de données. Une application en mode console contrôlée par des paramètres en ligne de commande, le chargement de données peut être automatisé à l'aide de scripts et intégré ainsi les processus ETL (Extract, Transform, and Load) existants. Une application graphique permet de réaliser les mêmes opérations au travers d’une interface claire et intuitive pour l’utilisateur ;
  2. L’autre composant corollaire, qui est déployé dans Windows Azure, est un service de données de type REST (Representational State Transfer). Il s’agit un point de terminaison OData en façade d’un stockage Windows Azure et en exposant les données publiées en formats OData, JSON ou KML. Les données ou le résultat d’une requête peuvent être téléchargés aux formats CSV, Microsoft Office Excel ou encore DAISY, dont le but est de rendre le contenu publié accessibles aux personnes souffrant de déficiences visuelles ou de dyslexie ;
  3. La troisième composante est un kit de développement interactif, un site Web à destination des utilisateurs finaux et des développeurs. Il consomme les informations publiques en utilisant le service de données et les exposent pour une navigation et interrogation dynamique par les utilisateurs finaux depuis un catalogue de données de l’entrepôt. Les données peuvent être visualisées dans des formats largement utilisés et reconnaissables tels que des tableaux, des cartes, des graphiques à barres ou des diagrammes circulaires. Le code source correspondant est disponible dans une variété de langages et de bibliothèques/Frameworks largement utilisés sur le Web, incluant, entre autres, C#, Flex, JavaScript, PHP, Python, Silverlight, etc. ; ce qui permet d’illustrer pour les développeurs la prise en compte de ces informations dans leurs applications ou vis-à-vis du développement de nouvelles applications qui utilisent ces informations publiques.

Le chargeur de données est destiné à s'exécuter en interne (on-premise), le service de données à être hébergé dans Windows Azure. Il en est de même par défaut pour le kit de développement interactif. Les informations publiques résident également dans le Cloud.

Le kit de démarrage OGDI correspond à l’adaptation en français accompagnée de certaines évolutions du kit de développement logiciel éponyme disponible en téléchargement sous la même licence libre sur la forge CodePlex.

Remerciements à Philippe B. pour l’information !

Here we go again : ++ MVP SharePoint Server !

“Félicitations! Nous sommes heureux de vous remettre la récompense MVP Microsoft® 2011!” : Yeah ! Pour la cinquième année consécutive, me voilà reconduit MVP dans le domaine de SharePoint Server.

C’est reparti pour un tour donc, et l’année 2011 devrait être fournie en activité communautaire ! J’en profites pour féliciter tous les renouvelés et les nouveaux arrivants.

Les inscription pour la conférence “SharePoint 2010 à l’heure des WCAG 2.0, du RGAA et d’Accessiweb 2.1” sont ouvertes

L’édition 2011 de ce séminaire qui se déroulera le 22 et 23 Mars – mais pas seulement cf à la fin - change quelque peu : maintenant sur deux jours => 1 journée présentation et 1 journée d’ateliers.

Un séminaire qui aborde les étapes de la conduite d'un projet intégrant l'accessibilité numérique, les évolutions en termes d'accessibilité introduites par les produits et technologies Microsoft avec de nombreuses démonstrations autour de Microsoft SharePoint 2010, Microsoft SharePoint 2010 Designer, Microsoft Silverlight 2+, Internet Explorer 8.0/9.0, Visual Studio 2010, etc.

La seconde journée du séminaire sera orientée vers la pratique en proposant une série d’ateliers dirigés ainsi que des compléments et éclairages techniques sur le développement de pages, de composants "WebPart" avec SharePoint 2010, du support de Silverlight 2+, etc.

À la fin de ce séminaire, vous devriez être en mesure notamment de :

  • Comprendre les WCAG 2.0, le RGAA, et AccessiWeb 2.1, et leur articulation respective,
  • Intégrer l'accessibilité dans son projet SharePoint,
  • Faire le point sur l'accessibilité (par défaut) de SharePoint 2010 et les grands axes d'évolutions dans ce domaine,
  • Comprendre les points importants vis-à-vis des développements de pages, de composants "Web part", du support de Silverlight 2+, etc.
  • Connaître et savoir utiliser les principaux outils de tests associés,
  • Et de réaliser une première évaluation de l'accessibilité de sa solution au final.

Au-delà des 22 et 23 mars 2011, d'autres sessions de ce séminaire sont programmées les :

Bonne inscription !

@Microsoft Redmond : MVP Global Summit 2011

Je profite de mon attente à l’aéroport de Seattle pour vous présenter les moments forts de ce Summit 2011, le Campus de Microsoft à Redmond ainsi que Bellevue.

Etant mon 5ème Summit et mon périple étant de courte durée (moins de 4 jours sur place et autant de vol …) pour ce cru 2011, pas de visite de Seattle cette année pour moi. Mais beaucoup de plaisir à retrouver tous mes compères et amis lors de cette réunion mondiale - que j’avais raté l’année dernière faute de temps - et à découvrir ce que nous réserve Microsoft dans les prochains trimestres/années Sourire

@MS Campus

Bien évidemment, le campus reste sous surveillance et l’emplacement des équipes  produit inconnues (d’où un changement de localisation régulier), je ne vous en dirais donc pas beaucoup sur ces quelques photos :

IMG_3523

IMG_3524

Imaginez un complexe de plus de 50 bâtiments comme celui-ci disposés les uns à côté des autres et entourés d’espaces  verts : une véritable mini ville à elle seule avec sa propre activité économique (restaurant, bar, etc).

Bellevue Downtown

De grandes avenues comme je n’ai plus souvent l’occasion d’en voir :

IMG_3532

IMG_3533

IMG_3535

Un distributeur d’iPod, iPhone et autres appareils de grande consommation … :

IMG_3538

Le Microsoft Store (malheureusement pas de Windows Phone 7 sans opérateur … MS a raté un bon coup avec ce Summit …), une véritable arène de divertissement :

IMG_3541

IMG_3544

Welcome session

Voici quelques moments forts du Summit 2011 (pour le reste bien évidemment c’est NDA) :

IMG_3509

Steve Ballmer – CEO Microsoft – répond a quelques questions :

IMG_3492

IMG_3498

Toby Richards (General Manager, Community & Online Support) nous invite au Safeco Field pour la soirée de clôture :

IMG_3507

Les MVPs SharePoint ont répondu à l’appel et aux questions des équipes produits :

IMG_3522

Soirée de clôture au Safeco Field

Après le musée de l’aviation et le musée de la musique de Seattle que nous commençons à bien connaitre maintenant, après les avoir fait plusieurs fois, nous voici invité au Safeco Field pour passer une excellente soirée :

IMG_3551

IMG_3561

IMG_3563

IMG_3567

Les vestiaires de l’équipe transformés en salle de jeux Kinect :

IMG_3572

IMG_3576

IMG_3578

IMG_3581

IMG_3591

Une dernière photo avec le “Moose” des Seattle’s Mariners avec Sébastien (ça ne se voit peut-être pas : je suis en train de geler !):

IMG_3603

Il est temps pour moi de retourner sur le caillou afin de reprendre un peu de températures (1 à 5°c à Seattle) et de couleurs ! Excellent MVP Summit 2011 malgré un voyage bien trop court !

Enjoy !

SharePoint 2010 : Résolution d’un problème javascript avec ISA Server 2004 SP2

Lors d‘une récente installation de SharePoint 2010 avec utilisation de Host Header chez un client, nous avons pu constater un bug assez dérangeant : une erreur Javascript apparaissait systématiquement (cf en bas à gauche d’Internet Explorer - à noter que Firefox ne notifie pas de ces erreurs) rendant inutilisables la plupart des commandes de l’interface, y compris le bouton ‘Actions du site’ :

image

Remarque : Quelques précisions sur “l’apparition systématique” du problème : tout fonctionnait quelque parfois, surtout avant d’aller manger et au retour l’erreur revenait …

Selon la capture d’écran, il manque de toute évidence des définitions, ce qui signifie que certains fichiers Javascript n’étaient pas été chargés par la page. Ici se posait alors deux questions :

  1. Est-ce que la master page personnalisée est en cause ou non ? => Le rétablissement de la master page WSS 4 fait persister le problème Triste
  2. Est-ce un problème d’alias, IIS, de chemin géré, etc ? Après avoir tout vérifié dans le DNS, IIS et l’administration centrale de SharePoint (et PowerShell) => rien à redire sur la configuration …

Après avoir validé ces points, il y a peu de chance que SharePoint soit en cause surtout sur une plateforme nouvellement installée (en respectant au mieux toutes les bonnes pratiques du moment). Immédiatement vient donc les questions sur l’infrastructure de l’entreprise : parefeu et proxy ?

Pas de pare-feu mais un proxy ISA Server 2004 SP2. Afin de tester si le proxy peut poser problème, nous créons des règles côté client pour forcer ce dernier à ne pas passer par le proxy pour les adresses de l’en-tête mais rien ne change Triste Gloups, ça sent le sapin pour la production …

Nous revenons donc à l’origine du problème : certains fichiers ne se chargent pas ! Pour descendre un peu plus profond dans notre diagnostique, nous prenons un proxy HTTP bien connu des développeurs Web/AJAX : Fiddler. Immédiatement la source du problème est identifié :

Bug AJAX SharePoint

Nous avons un code HTTP de retour 502 : erreur de proxy. Quelques secondes suffisent pour rechercher une quelconque référence connue de ce problème, premier lien : bug erreur HTTP 502 connu et résolu avec le SP3 de ISA Server 2004. Le SP3 est installé, le problème est résolu !

Pour résumer, SharePoint 2010 + Host Header/alias DNS + ISA Server 2004 SP2 => passage du SP3 d’ISA Server 2004.

Sur ce, je peux rejoindre la communauté des MVPs à Seattle en toute tranquillité ! Bon vol pour ceux qui seront de la partie et à très bientôt pour les autres.

Association des propriétés entre SharePoint 2007/2010 et les documents Word (au format Open XML)

Je vous avais déjà présenté les capacités du nouveau format Open XML et notamment son extensibilité dans un précédent post. Voici un post juste pour attirer votre attention sur les capacités d’association des propriétés entre SharePoint et les documents OpenXML (=> les documents au format binaire .doc ne fonctionneront pas. Une feature de base de l’intégration Office/SharePoint, qui ne semble malheureusement pas si connue que ça Triste

Imaginons que vous soyez dans une bibliothèque de documents comportant une vue et un certain nombre de propriétés :

image

Ouvrez un document existant avec Office 2007 ou 2010 ou créez en un nouveau (dans ce cas mieux vaut avoir créer un type de contenu avec ces colonnes) puis naviguez dans le menu Insertion > QuickPart > Propriétés du document :

image

Choisissez une propriété à insérer et créer votre document autour :

image

En faisant apparaitre la barre de propriétés serveur, vous constaterez que toute modification apportées aux propriétés ou à la valeur du champs de propriétés inséré dans le document sont synchronisées dans les deux sens : toute modification dans le document met à jour la propriété associée et toute modification de propriété dans SharePoint mettra à jour la valeur dans votre document.

Cette association est importante pour la gestion analytique des documents qui deviennent, au delà d’un support de lecture/impression, une source de données et d’informations potentielles que les vues sauront exploiter à merveille avec des combinaisons de vue groupement/totaux(somme, moyenne, etc)/filtre :

image

Cas des documents en dehors du contexte SharePoint

Si le document est sortie de son environnement SharePoint, les propriétés et les associations resteront valides, néanmoins les propriétés de type personne ne seront plus disponibles. Il suffira de replacer le document dans la bilbiothèque pour restaurer le mapping des propriétés.

Conclusion

Les capacités d’Open XML associé à SharePoint 2010 et Office permettent d’associer les propriétés serveur – aka SharePoint - d’un document avec son contenu. De quoi créer des modèles de document afin de pré-remplir certains documents uniquement à l’aide des propriétés et des valeurs par défaut, éviter une double saisie de la valeur aux utilisateurs (dans le document puis dans les propriétés) ou encore de ne pas avoir à contrôler les écarts de saisie entre le document et les propriétés.

Enjoy !

Julien

Offrir une expérience sans compromis de vos applications Silverlight dans SharePoint 2010 en quelques lignes

L’intégration forte de SharePoint 2010 avec Silverlight permet d’offrir une expérience unique à vos utilisateurs (et ils vont aimer ça !). Vous le savez déjà me direz vous, et pour cela il suffit même juste de prendre le fichier .xap de l’application, et d’ajouter une webpart Silverlight pour intégrer une application dans SharePoint 2010.

“C’est pas faux”, mais qu’en est-il si l’utilisateur n’a pas Silverlight et que pour garantir le contenu de votre page, vous souhaitez soustraire l’emplacement ‘vide’/non fonctionnel par une image au lieu d’une bannière de demande d’installation ? Comment spécifier des paramètres variables (server side) ? Comment personnaliser le processus d’installation en toute simplicité ? Compliqué avec la webpart Silverlight (bien que l’on puisse la personnaliser quand même jusqu’à un certain point). Je vous présente (ou fait redécouvrir) un script qui vous simplifiera la vie pour réaliser ces tâches : Silverlight.js disponible sur MSDN Code.

Une fois le script Silverlight.js intégré dans vos webparts ou autre support (gabarit de page, master page, controle, etc), il ne suffit plus que de saisir les quelques lignes de codes suivantes pour afficher votre application et prévoir une option de secours si vos utilisateurs n’ont pas Silverlight d’installer :

<div id="silverlightControlHost">
    <script type="text/javascript">
        // Contenu alternatif (installation) si pas de Silverlight en vue
var getSilverlightMethodCall = "javascript:Silverlight.getSilverlight(\"4.0.50401.0\");" var installImageUrl = "http://go.microsoft.com/fwlink/?LinkId=161376"; var imageAltText = "Obtenir Microsoft Silverlight"; var altHtml = "<a href='{1}' style='text-decoration: none;'>" + "<img src='{2}' alt='{3}' " + "style='border-style: none'/></a>"; altHtml = altHtml.replace('{1}', getSilverlightMethodCall); altHtml = altHtml.replace('{2}', installImageUrl); altHtml = altHtml.replace('{3}', imageAltText); Silverlight.createObject( "ClientBin/MonAPplicationSilverlight.xap", silverlightControlHost, "slPlugin", { width: "100%", height: "100%", background: "white", alt: altHtml, version: "4.0.50401.0" }, { onError: onSLError, onLoad: onSLLoad }, "param1=value1,param2=value2", "row3"); </script> </div>

Pour Firefox, il faut un petit hack pour que cela fonctionne :

Silverlight.createObject( "ClientBin/SilverlightApplication1.xap", $get("silverlightControlHost"), "slPlugin", {

La génération de cette sortie HTML/javascript (depuis une contrôle ou une webpart par exemple) permettra aisément de spécifier les valeurs des paramètres en fonction du contexte d’utilisation et de l’emplacement du site dans votre collection de sites.

Update : pour vous simplifier encore plus la tâche, vous pouvez utiliser le modèle ‘Silverlight Web Part’ de projet Visual Studio 2010 disponible dans la galerie en ligne des extensions.

N’oubliez pas de rendre vos applications Silverlight accessible, pour rappel c’est possible depuis Silverlight 2 !

Lien vers la documentation MSDN :http://msdn.microsoft.com/en-us/library/cc265155(vs.95).aspx

Merci à l’équipe pour son travail qui m’a fait gagner une demi journée de labeur Sourire

SharePoint 2010 : Le come back de l’annuaire de sites, en mieux !

Ceux qui avait utilisé l’annuaire de sites dans MOSS ont certainement être surpris de ne pas le retrouver ou pas complètement dans SPS 2010. Un peu déçu de cette regression, je me suis mis à la recherche d’une solution palliative, et j’ai trouvé une solution que je souhaitais partager avec vous : SPSiteDirectory2010 ! Disponible sur Codeplex, ce projet permet d’aller même un peu plus loin que son ancêtre. On remerciera au passage MCS UK pour cette belle initiative.

Cette solution se présente sous la forme d’une liste – stockant toutes les informations des sites et des informations supplémentaires intéressantes ( taille, quotas, etc) –, d’une webpart d’affichage et de deux timers job qui liste les sites et vérifient si les sites existent toujours après un certain temps.

L’installation et la configuration de la solution sont documentées dans un guide disponible à part.

image

Avec vos talents de codeurs, vous pourrez aussi modifier les affichages des données et compléter les informations manquantes afin de faire de cette annuaire de sites une source d’informations pour nos administrateurs IT préférés (hein Christian !)

Créer un Cmdlet personnalisé pour SharePoint 2010

L’administration de SharePoint n’a jamais été aussi aisée et productive que depuis l’apparition des centaines de cmdlets pour PowerShell. Les amateurs de stsadm et des scripts en mode DOS ne pourront que confirmer cela (enfin j’espère !?). Vous ne vous trouver pas encore assez performant dans l’administration de votre ferme, même avec PowerShell ? Vous ne trouver pas la commande qui vous ferait être encore plus productif ? Votre produit de gestion de sauvegarde de ferme préféré n’a pas cmdlet et vous ne pouvez pas vous en passer ?! C’est par ici …

La première question à se poser est : quand créer des cmdlets ? Une cmdlet permet à un administrateur de la ferme de gérer et d’administrer la ou les fermes SharePoint rapidement depuis une console PowerShell (potentiellement distante). Si vous avez des tâches spécifiques, que vous exécutez par lot et cela de façon fréquente, vous avez un contexte propice à cette création. Sinon ne perdez pas votre temps à créer des cmdlets qui finiront au placard rapidement, essayez plutôt de poussez les possibilités de PowerShell et de passer par des fonctions pour vous en sortir. D’autant que le travail de développement n’est pas à la portée de n’importe quelle personne d’IT.

Il y a bien d’autres situations avec SharePoint 2010 nécessitant la création de nouveaux cmdlets : nouvelles capacités de gestion (site, liste, autorisations, etc), création d’un nouveau service, interopérabilité avec des outils tierces (exemple Backup Exec, etc), etc.

Les bases

Avec SharePoint, vous avez plusieurs choix lors de la conception de votre cmdlet puisque la plateforme propose plusieurs classes déjà spécialisées en fonction de votre intention :

Pour vous aiguiller, l’un des critères à prendre en compte est l’utilisation de la persistance entre vos cmdlets : est-ce que la cmdlet retourne un objet qui sera stocké dans une variable ? Si c’est le cas, utilisez les classes dérivées de SPCmdletBase, soit :

  • SPGetCmdletBase
  • SPNewCmdletBase
  • SPRemoveCmdletBase
  • SPSetCmdletBase

Si votre cmdlet ne retourne pas d’objet spécifique, mais n’effectue que des actions (par exemple : mise à jour d’autorisations, affichage d’un état en sortie texte non structuré, etc), l’utilisation de la classe SPCmdlet sera plus indiqué.

Si vous souhaitez utiliser le système de pipeline de PowerShell pour enchainer votre commande, la classe tout indiquée à cela sera SPCmdletPipeBind. Nous allons d’ailleurs y avoir recours dans notre exemple.

Dans cette partie, nous allons créer un exemple simple, une cmdlet permettant de lister le contenu d’une liste. Nous avons fait le choix d’utiliser la classe de base SPGetCmdletBase qui sera utilisé conjointement avec SPCmdletPipeBind pour récupérer le paramètre de l’adresse de la liste :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;
using Microsoft.SharePoint.PowerShell;
using Microsoft.SharePoint;

namespace Demo.SharePoint.PowerShell
{
    [
Cmdlet(VerbsCommon.Get, "SPList", SupportsShouldProcess = false), SPCmdlet(RequireLocalFarmExist = true)]
   
public sealed class GetSPListCmdlet : SPGetCmdletBase<SPList>
    {
        [
Parameter(Mandatory = true, ValueFromPipeline = true, Position = 0)]
       
public SPListPipeBind PipeBind { get; set; }

        [
Parameter(ValueFromPipeline = false)]
       
public string QueryFields { get; set; }

        [
Parameter(ValueFromPipeline = false, ValueFromRemainingArguments = false)]
       
public SwitchParameter ShowFields { get; set; }

       
protected override IEnumerable<SPList> RetrieveDataObjects()
        {
           
List<SPList> splists = new List<SPList>();

           
SPList list = PipeBind.Read();
           
if (list != null)
            {
                AssignmentCollection.Add(list.ParentWeb);
                AssignmentCollection.Add(list.ParentWeb.Site);
                splists.Add(list);
            }

           
// Paramètre champ
           
if (ShowFields)
            {
               
foreach (SPField field in list.Items.Fields)
                   
Console.WriteLine(field.Title + " - " + field.InternalName);
               
return null;
            }
           
else if (!String.IsNullOrEmpty(QueryFields)) // Export en CSV
            {
               
StringBuilder sb = new StringBuilder();
               
// Colonnes
               
Console.WriteLine(QueryFields);
               
// Valeurs
               
SPListItemCollection collListItems = list.GetItems(QueryFields.Split(';'));
               
foreach (SPListItem listItem in collListItems)
                {
                   
foreach (string field in QueryFields.Split(';'))
                        sb.Append(listItem[field].ToString()).Append(
";");
                   
Console.WriteLine(sb.ToString());
                    sb =
new StringBuilder();
                }
               
return null;
            }
           
else
               
return splists;
        }
    }

   
public sealed class SPListPipeBind : SPCmdletPipeBind<SPList>
    {
       
public string ListURI { get; private set; }

       
public SPListPipeBind(SPList spList) : base(spList) { }

       
public SPListPipeBind(string listURI) { this.ListURI = listURI; }

       
protected override void Discover(SPList instance)
        {
           
this.ListURI = instance.ParentWeb.Site.MakeFullUrl(instance.RootFolder.ServerRelativeUrl);
        }

       
public override SPList Read()
        {
           
SPSite site = new SPSite(this.ListURI);
           
SPWeb web = site.OpenWeb();
           
return web.GetList(this.ListURI);
        }
    }
}

Le déploiement

Concernant le déploiement, rien de sorcier avec les extensions SharePoint de Visual Studio 2010 :

  1. Créez un nouveau projet vide (sélectionner CSharp > SharePoint > 2010 puis entrez le nom de votre projet)
  2. Créez une solution en tant que Solution se déployant dans la ferme.
  3. Ajoutez les références vers Microsoft.SharePoint.PowerShell  et System.Management.Automation (dans le répertoire “c:\windows\assembly\GAC_MSIL\<nom de l’assembly>”)
  4. Supprimez la classe déjà créé par le projet et créez en une nouvelle avec le nom de votre classe, ici GetSPListCmdlet.
  5. Copiez le code ci-dessus dans le nouveau fichier de classe,
  6. Pour déployer la cmdlet automatiquement avec la console de gestion PowerShell SharePoint, nous allons créer un fichier XML nommé ‘Demo.SharePoint.powerShell.xml’ (<nom de l’assembly>.xml)
  7. Copiez le contenu du fichier XML (cf plus bas)
  8. Mapper le répertoire (<14 hive>/CONFIG/PowerShell/Registration) dans votre projet (clic droit sur le projet > Add > SharePoint mapped folder) et placez y le fichier XML précédemment créé.
<?xml version="1.0" encoding="utf-8" ?>
<ps:Config xmlns:ps="urn:Microsoft.SharePoint.PowerShell"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="urn:Microsoft.SharePoint.PowerShell SPCmdletSchema.xsd" >
  <ps:Assembly Name="$SharePoint.Project.AssemblyFullName$">
    <ps:Cmdlet>
      <ps:VerbName>Get-SPList</ps:VerbName>
      <ps:ClassName>Demo.SharePoint.PowerShell.GetSPListCmdlet</ps:ClassName>
      <ps:HelpFile>Demo.SharePoint.PowerShell.dll-help.xml</ps:HelpFile>
    </ps:Cmdlet>
  </ps:Assembly>
</ps:Config>

Remarque : pour créer le fichier d’aide, utilisez les liens suivants pour comprendre la structure du fichier XML à créer http://msdn.microsoft.com/en-us/library/aa965353%28VS.85%29.aspx et http://blogs.msdn.com/b/powershell/archive/2006/09/14/draft-creating-cmdlet-help.aspx. Le projet joint contient le fichier d’aide associé à notre exemple.

L’exécution

Une fois le projet créé et compilé, déployez le projet (clic droit sur le projet > Deploy) et lancez une commande PowerShell (il vous faudra ouvrir une nouvelle console après chaque déploiement) et testez les commandes suivantes :

> $list = Get-SPList http://<chemin vers votre liste>
> $list.ShowUser = $false
> $list.Update()

=> Récupération de l’objet SPList de la liste spécifiée et modification de la propriété ShowUser

> Get-SPList http://<chemin vers votre liste> –ShowFields

=> Affiche toutes les propriétés (nom et nom interne) de la liste

> Get-SPList http://<chemin vers votre liste> -QueryFields "Title;Author"

=> Affiche le contenu des propriétés spécifiées pour tous les éléments de la liste

Les sources sont disponibles ici.

A bientôt et meilleurs voeux pour cette nouvelle année

Permissions utilisateur PowerShell pour SharePoint 2010

Un truc de débutant certainement, mais pour ceux qui reste coincé dessus voici un petit post sur les permissions de gestion de SharePoint 2010 avec PowerShell.

Utiliser des cmdlets SharePoint 2010 dans PowerShell nécessite deux conditions :

  • que l’utilisateur courant soit membre du rôle “SharePoint Shell Access” de la base de configuration,
  • et membre du groupe local de sécurité WSS_ADMIN_WPG.

Comment ajouter un compte d’un de vos collègues administrateur qui vous remplace pendant ces vacances (prévu dans votre plan de gouvernance n’est-ce pas ?!) ? Avec PowerShell bien évidemment (ici en spécifiant une base de contenu) :

> $db = Get-SPContentDatabase –Identity SPS_Content_Portail_80

> Add-SPShellAdmin –UserName democorp/useradmin  -database $db

Pour obtenir et vérifier les comptes d’administrateurs de shell :

> Get-SPShellAdmin

Pour supprimer un administrateur :

> $db = Get-SPContentDatabase –Identity SPS_Content_Portail_80

> Remove-SPShellAdmin –Username democorp/useradmin –database $db

Que faire si vous utilisez la commande Add-SPShellAdmin et que vous avez une erreur vous disant que vous n’avez pas les permissions pour accéder à la base de données ?

Vérifiez que l’utilisateur courant est bien :

  • Membre des rôles db_owner et securityadmin sur l’instance du serveur de base de données de la ferme
  • Qu’il possède les droits d’administration de la machine locale

Remarque : vérifier = ne pas ajouter les rôles ! Attention à la sécurité, ce n’est pas rien de donner des droits db_owner !

Remarque : un compte qui possède tous ces rôles est celui du compte d’accès à la DB de la ferme. Ajoutez donc l’administrateur avec ce compte si vous n’arrivez pas à découdre de ces droits.

Si votre utilisateur possède bien ces droits et que vous avez un message vous stipulant que vous n’avez pas les privilèges d’administrateur pour exécuter la commande, voici la source de votre nuisance : l’UAC. Désactivez le ou lancer la de gestion PowerShell en mode administrateur depuis le menu démarrer (clic droit > Exécuter en tant qu’administrateur).

[SharePoint 2010] Etre plus productif avec votre clavier : la liste des raccourcis

L’époque du “Espèce de cliqueuse” (les personnes se reconnaitront) est presque révolue : de nombreux raccourcis clavier sont maintenant disponibles dans cette édition. En plus de nous rendre plus productif, on saluera ce geste d’accessibilité à destination des personnes handicapées.

Pour ceux qui ne l’avaient pas encore trouver, la voici donc cette liste des raccourcis pour Sharepoint Server 2010 : http://office2010.microsoft.com/en-us/sharepoint-server-help/keyboard-shortcuts-HA010369395.aspx

Enjoy

[SharePoint 2010] Développer un site Internet SharePoint 2010 de A à Z ou presque !

La plupart des systèmes de WCM disponibles gratuitement sur Internet suffisent bien souvent à créer un site ou un blog. Mais entre nous, un site ‘Propulsé par SharePoint 2010’ est quand même beaucoup plus flexible, extensible et puissant que n’importe laquelle des autres plateformes de gestion de contenu (fonctionnalités par défaut). Bref on aime SharePoint alors il n’y a aucune raison de ne pas faire son site Internet (‘facing site’) avec !

Je ne vais pas vous présenter toutes les étapes de création d’un facing site SharePoint, de nombreux bloggeurs ont déjà d’excellents contenus. Je vais simplement tenter de vous donner quelques unes des astuces que j’ai glané il y a quelques temps lorsque je travaillais sur mon premier  ‘Facing Site’ avec SPS 2010.

Le livre de Randy Drisgill (sans oublier les autres auteurs de qualité), annoncé pour cette fin d'année/début d’année 2011, devrait apporter une bonne synthèse de tout cela.

Première étape : activer l’accès anonyme sur vos sites

Vous trouverez sur Internet beaucoup de liens traitant du sujet. En voici un au hasard.

Bien débuter avec sa Master Page

La première étape est bien évidemment de créer le “look and feel” global avec la master page. Au programme donc, HTML, ASP.NET, CSS et JS/JQuery. Pour cela, je ne peux que vous conseiller de démarrer avec les Starter Master Page (anciennement connu sous le nom de minimal master page sous SP2007) : http://startermasterpages.codeplex.com/

Concernant les pages layout, planifiez bien et couchez vos gabarits sur papier avant de les réaliser (on ne met pas la charrue avant les boeufs) car à coup sûr vous aurez besoin de plusieurs gabarits de page :
- Accueil du site
- Page d’article (plusieurs variantes bien souvent)
- Page spécifique (contact, à propos de, etc)

Une solution, surtout avec SharePoint 2010 et ses zones de texte riche qui permettent d’insérer des webparts, est de trouver une disposition générale qui permet de répondre à un maximum de cas sans avoir à créer une multitude de pages layout systématiquement.

Un autre point pour un site Internet est de penser à placer, si besoin, des content place holder supplémentaire dans la master page qui pourront ensuite être utilisés dans le gabarit de page par une zone de webparts par exemple. Cela permet de créer des pages avec des zones contextuelles en fonction de la page affichée (possibilité de travailler avec la query string) dans la zone normalement dévolue à la master page. Par exemple, insérer dans la zone réservée au menu (à gauche ou à droite de votre page) une webpart avec les partenariats ou certifications en cours sur la page de produit ‘mobilier de bureau’ et une autre webpart avec ceux et celles sur la page de produit ‘matériel de sécurité’. La webpart peut être différente d’une page à une autre, voire absente, et “intégrer” dans la master page.

Pour cette tâche, les outils Developer Tools ou FireBug seront vos alliés les plus précieux !

Cacher le ruban et le champ de connexion

Pour un utilisateur anonyme, avoir un ruban vide de tout élément (sauf de l’icône ‘Parcourir’) n’est pas très ergonomique et utile (surtout si vous replacez un contrôle de fil d’Ariane comme celui de 2007). L’idée est donc de le cacher pour les utilisateurs anonymes, mais uniquement pour cette population ci et non pour les personnes qui auront à créer et éditer le contenu !

Pour cela, je laisse Nicolas vous donner quelques explications sur l’aspect technique de la manipulation. Pour ma part, je reste attaché à l’utilisation du delegate control pour le ruban à plus d’un titre :
- On ne touche que peu à la master page initialement créée (le codeur ne touche pas au travail du designer),
- Si vous avez besoin de changer le comportement de l’affichage, vous bénéficiez du mécanisme de ‘mise à jour’ du delegate control. De plus, le codeur peut s’en donner à coeur joie sans impacter le travail du designer. Par exemple, vous souhaitez affiner les conditions d’affichage du ruban dynamiquement en fonction de plusieurs critères, des droits géré par un autre système (AD LDS, etc) ou encore en fonction de l’emplacement de la page. Même si cela ne remplace bien évidemment pas une gestion de la sécurité ou une personnalisation des fournisseurs de sécurité, nous parlons bien d’esthétique.

Pour les utilisateur anonymes, le champ de connexion (contrôle qui affiche votre nom et le menu utilisateur lorsque vous êtes authentifié) peut ne pas avoir de signification pour un site public non Extranet. Utilisez les contrôles SPSecurityTrimmedControl ou le couple LoginView/LoggedInTemplateTemplate pour gérer son affichage.

Recherche

Par défaut si un utilisateur anonyme souhaite effectuer une recherche, il tombera sur votre page d’authentification (FBA) ou la boite de dialogue d’authentification (Windows). Pas vraiment sympathique comme situation …

Cette situation a déjà été traité avec WSS 3 (http://sharingpoint.blogspot.com/2007/05/anonymous-search-results-in-wss-v3.html).

Cela provient du fait que la page de résultats de recherche standard hérité d’une page qui nécessite une authentification (classe LayoutsPageBase). Voici la solution que j’ai mise en oeuvre pour palier à cette problématique :

  1. Copiez (ne modifiez pas l’original) la page de résultat OSSSearchResults.aspx situé dans le répertoire LAYOUTS du ‘14’
  2. Supprimez la propriété Inherits=”…” de la directive @Page
  3. Spécifiez cette page de résultat dans Paramètres de collection de sites > Paramètre de recherche > Page des résultats de recherche de la collection de sites
  4. Testez avec une nouvelle recherche, à partir de maintenant vos utilisateurs anonymes ne seront plus systématiquement assailli par l’authentification.

Une autre solution est d’utiliser une page que vous avez déjà créé et d’y placer les webparts de recherche nécessaire (n’oubliez pas d’activer la fonctionnalité pour afficher les webparts de recherche).

Pour créer une master page propre à votre page de recherche issue de la page maître globale, Randy Drisgill nous donne quelques conseils. Quand cela est possible, je préfère personnellement utiliser un centre de recherche pour gérer la recherche. Néanmoins, il vous faudra dupliquer la navigation globale entre autre ou utiliser une astuce décrite dans le récent post de Renaud traitant du sujet. Comme l’explique notre TheMit national, nous avons plusieurs possibilités offertes à nous pour gérer la recherche. Je vous laisse consulter son article.

Vérifiez que les résultats soient bien les mêmes entre ceux de l’administrateur et ceux pour un utilisateur anonyme. En cas de différence anormale, vérifiez le compte utilisés pour le crawling de votre recherche et vérifiez que vous avez correctement configuré la disponibilité des contenus.

Divers

Quelquefois, un développeur fini son travail à des horaires tardives dans la soirée. En fin de semaine, la fatigue arrive et notre raisonnement n’est plus des plus vifs, c’est pourquoi voici quelques éléments sur lesquels je suis restés quelques minutes à buter :

- Lorsque vous créez un sous-site de publication, celui-ci n’apparaît pas automatiquement dans la barre de navigation globale. Cela provient du fait que la page d’accueil du sous-site n’est pas approuvée par défaut. Approuvez la page d’accueil (ainsi que toutes les pages que vous souhaitez publier bien évidemment !) et le lien vers le sous-site fera son apparition dans la barre de navigation globale.

- Supprimez les sites ‘MySite’

- Supprimez les liste par défaut inutile et les vues publiques par défaut

- Une TOP feature pour votre site est la détection des navigateurs non supportés (par exemple IE 6 !). Un script disponible sur Google code et expliquer par Randy Drisgill devrait vous aider à mettre cela en oeuvre rapidement. Ce sera toujours mieux que la boîte de dialogue du contrôle <WarnOnUnsupportedBrowsers>.

- Le truc qui fait la différence, et que de nombreux sites en production ne le font pas systématiquement, est de supprimer l’avertissement de contrôle Active X.

Et j’en passe.

Mobile

Pourquoi ne pas faire bénéficier vos lecteurs ou clients de l’accès mobile à votre site ? Randy nous explique comment faire.

Voilà a peu près tout ce que j’ai eu besoin de réaliser pour monter un site SharePoint sur Internet (mais toujours pas en ligne, vous savez, il manque le plus important : le contenu ! Quand les développeurs font leur travail, les autres regardent …). Cela n’est pas forcément exhaustif …

[SharePoint 2010] Kit de signature électronique XML avancée (XAdES) disponible

Le Kit de démarrage « Signature avancée (XAdES) pour Microsoft .NET Framework v3.5 (et ultérieur) » est disponible sous licence libre CeCILL-B sur le site Microsoft France Interop à l’adresse suivante (merci à Philippe pour l’info) :
http://www.microsoft.com/france/interop/ressources/xades.aspx

Ce kit vient compléter le livre blanc « Signature avancée (XAdES) avec Microsoft Office 2010 » signé par Philippe Beraud et la société KEYNECTIS disponible à cette adresse :
http://www.microsoft.com/downloads/details.aspx?displaylang=fr&FamilyID=ea7b4bfe-7ff9-4ad6-9c29-49ed219028b3

Il s’agit d’une réactualisation de la base de code développée à l’époque sur le Framework 1.1 pour un projet en Belgique. Le code a été remis au gout du jour de la version 3.5 et suivante avec des évolutions sur la gestion des schémas, des certificats, une revue de code de sécurité complète, la correction de bogues, etc  ainsi qu’une documentation sur le sujet.

Au final, ce kit s’adresse aux architectes, aux développeurs et à tous ceux qui souhaitent générer ou vérifier des signatures avancées XAdES depuis l’environnement .NET. Il ouvre ainsi en particulier la voie à des solutions personnalisées à destination de la plateforme SharePoint 2010 et notamment pour le secteur public. En effet, compte tenu des recommandations des RGI/RGS, le kit est de nature à intéresser, pour les échanges électroniques, le secteur public dans son ensemble et au-delà.

[SharePoint 2010] Gérer une page contenant des webparts en erreur

Une petite astuce en vrac qui pourra en aider plus d’un (non non Adrien je ne cible personne …). En effet, l’existence de bug dans les webparts SharePoint – la votre fraichement développé ou celle d’un tierce) peut vous mettre dans une situation où votre page ne dit rien d’autre qu’elle ne peut s’afficher :

Sans titre

Heureusement la trace laisse d’indispensables informations. Si cela arrive sur le serveur de production, après une mise à jour de la solution (par exemple … et même si dans l’absolument la recette du composant a dû être effectuée sur la machine du développeur, la plateforme de recettage et celle de préprod, mais nous ne sommes jamais à l’abris Confus), mieux vaut savoir récupérer votre page à minima.

Une des astuces bien pratique pour se sortir de ce mauvais pas (souvent dû à des vérifications non effectuée dans le code de la webpart) consiste alors à accéder à la page d’administration des webparts en ajoutant le paramètre ?contents=1 à l’url de la page incriminée. Il vous suffira alors de supprimer ladite webpart gênante et votre page retrouvera de son éclat … néanmoins sans cette webpart.

Pour vos sites publics ou afin de respecter une charte graphique plus ‘corporate’ de vos pages d’erreurs (login, etc également), Todd Carter propose sa solution de personnalisation de ces pages.

SharePoint Easy Setup : installer et configurer rapidement votre machine de développement SharePoint 2010

Quel développeur SharePoint n’a pas passé au moins une soirée (et une bonne partie de sa nuit) à installer et à configurer sa machine (virtuelle ?) SharePoint Server 2010. Il y a quelques semaines, j’avais tester le script du projet AutoSPInstaller (http://autospinstaller.codeplex.com/) avec un certain succès, cependant certaines étapes de création de la machine n’en restent pas moins incontournables et très sincèrement fastidieuses.

Pour les démonstrations (avec FAST, Project, Communicator, BI, etc), l’utilisation de la VM d’évaluation de la plateforme est une option (en deux machines, Exchange 2010 étant à part) pour gagner énormément de temps d’installation et de configuration, mais n’en reste pas moins mal adapté pour un environnement de développements, surtout sur des machines de 4 à 6 Go de mémoire vive. De surcroit, l’ensemble de la plateforme est intégralement en Anglais et qu’il est plus difficile de faire une démonstration à un public Francophone.

Bref, vous l’aurez compris, il existait des solutions et les projets communautaires apportent déjà une bel part à la solution, mais c’était sans s’arrêter sur l’annonce (qui tombe à point pour quelqu’un qui vient de se faire corrompre sa VHD comme moi ! ) de Chris Johnson : SharePoint Easy Setup for Developers.

Chris nous annonce que Microsoft fournit dès aujourd’hui tous les outils prépackagés pour provisionner des machines virtuels pour les développeurs SharePoint. En détail et sans surprise, la solution utilise des scripts PowerShell (PowerShell, what else ?), à l’instar de AutoSPInstaller, pour installer et configurer toute votre machine SharePoint pour développeur. La possibilité de configurer la VM résultante comme dual boot VHD (comme mon bon TheMit nous l’avait merveilleusement décrit) est également prise en compte.

Au niveau des logiciels installés (licence d’évaluation ou les vôtres) :

  • SharePoint Server 2010 + pre-requisites (Standalone)
    • Visual Studio 2010 Ultimate Edition
    • Silverlight 4 Tools for Visual Studio
    • Expression Studio 4 Ultimate
    • Open XML SDK v2
    • Visual Studio SDK
    • Visual Studio SharePoint Power Tools
    • Office 2010 Professional Plus
    • SharePoint Designer 2010
    • Visio 2010

    C’est par ici pour le téléchargement du kit.

    image

    Retour sur cette solution dessus très prochainement.

    Bon SPIntallation !

    [SharePoint 2010] L'administration toolkit V1 est disponible
    Pour ceux qui serait passé à côté de l'annonce sur le blog de la team SharePoint, voici le post original. Pour les autres, ce ne sera qu'une piqure de rappel. Voici les grands traits de cette première édition du Administration Toolkit version 2010 :
    • Nouvel outil de réplication PowerShell pour migrer les profiles et les données de réseau social utilisateurs,
    • Le connecteur CMIS (Content Management Interoperability Services) que je suis impatient de tester avec un autre CMS compatible,
    • Le kit de test de charge (LTK qui était attendu depuis quelques temps) afin de simuler un trafic utilisateurs et de tester vos fermes de qualification avec VS Team System,
    • Un manifest SWC pour ajouter des rôles pour SP 2010 à Windows Serve 2008 pour SWC.
    Pour ma part je devrais tester l'outil de réplication d'ici quelques semaines ainsi que le LTK. Wait and see.

    Forcément, je ne pouvais pas vous laisser saliver devant cette première version du SAK 2010 sans vous donner l'adresse de téléchargement : http://www.microsoft.com/downloads/details.aspx?FamilyId=718447d8-0814-427a-81c3-c9c3d84c456e&displaylang=en 

    [SharePoint 2010] Batterie locale non accessible avec PowerShell

    Ayant eu l’erreur sur un environnement de développement fraîchement installé chez un client, voici une erreur que j’ai pu constater : “La batterie locale n’est pas accessible. les applets de commande avec le champ FeatureDependancyId ne sont pas enregistrées.”

    Après avoir tenté quelques manipulations (quelquefois hasardeuses !), j’ai trouvé qu’il s’agissait d’un problème de droit sur la base de contenu du serveur. Pour régler ce dernier, ouvrez SQL Management Studio, naviguez dans la base de contenu ciblée (WSS_Content_Portail_80 dans mon cas) puis Sécurité > Utilisateurs. Cliquez droit sur votre utilisateur > Propriétés et vérifiez les accès de votre compte utilisateur à la base.

    Utile surtout quand vous vous en rendez compte quelques minutes avant une présentation …

    Développer des applications .NET et SharePoint accessibles avec UI Automation et ARIA

    Voici une rediffusion de l’article paru dans le magazine Programmez du mois d’Avril que je diffuse plus largement sur mon blog. Pour aller plus loin dans ce domaine, vous pouvez aussi consulter le livre blanc présenté dans un de mes précédents posts.

    Depuis l’arrivée du RGAA (Référentiel Général sur l’Accessibilité des Administration) fin d’année dernière, tous les sites web des administrations se doivent de s’y conformer et de devenir accessibles. Cependant le web n’est pas le seul domaine où les efforts d’accessibilité doivent être réalisés. En effet, quoi de plus normal pour une personne non voyante de pouvoir utiliser Word ou une application Silverlight tout comme elle pourrait naviguer dans un espace d’équipe SharePoint ?

    Dans cet article, nous allons traiter ensemble des solutions techniques permettant à des technologies d’assistance (lecteur vocale d’écran, table braille, etc) de comprendre le contexte dans lequel se trouve l’utilisateur afin de lui permettre de naviguer et d’interagir avec les applications de façon efficace. Parmi ces solutions techniques nous allons trouver principalement UI Automation pour WPF et Silverlight, et ARIA pour le web et SharePoint 2010.

    De MSAA à UI Automation

    Pour les développeurs connaissant MSAA (Microsoft Active Accessibility) et l’interface IAccessible, permettant de pouvoir retrouver des informations sur les éléments composant une interface utilisateur, sachez que cette API est très certainement appelée à être dépréciée pour se voir remplacée par UI Automation (au moins sur la plateforme .NET). En cause, des lacunes dans le domaine des performances, de la complexité de mise en œuvre et une architecture dépassée.

    UI Automation comble ces lacunes et apporte également un accès en code managé (C#, etc) et code natif (C/C++) en plus d’être pleinement compatible avec son ancêtre IAccessible, ce qui permet à une application IAccessible de consommer une application UI Automation et à une application UI Automation de consommer une application IAccessible. En plus de ces avantages, on notera également qu’UI Automation apporte une grande productivité pour annoter les éléments composants l’interface graphique des informations nécessaires aux technologies d’assistance.

    Dans les deux cas le principe est similaire et consiste à exposer les informations des objets de l’interface utilisateur dans un arbre hiérarchique. Ces informations seront ainsi disponibles pour toutes les applications désirant connaître la composition de l’interface utilisateur. Cela peut-être une technologie d’assistance nécessaire à une personne non voyante ou mal voyante, qu’une application de test d’interface utilisateur. Car, au-delà de servir à exposer des informations destiné aux technologies d’assistance, UI Automation sert également à automatiser vos tests d’interface ; un des tests les plus complexe et fastidieux à automatiser, du moins avant l’arrivée de UI Automation.

    image 
    Fig 1 – Architecture d’UI Automation

    Microsoft a publié les spécifications d’UI Automation et celle de MSAA sous licence Microsoft Open Specification Promise afin de permettre aux plus grand nombre de créer des implémentations compatibles. A aujourd’hui, les plateformes concernées par UI Automation sont Windows XP SP2, Windows Vista, Windows 7, Windows Server 2003 SP2 et Windows Server 2008. Notez que Mono, l’implémentation libre de .NET, implémente également UI Automation.

    Rendre vos applications WPF accessibles

    L’arrivée en 2005 de .NET 3.0 à apporter WPF mais aussi une brique trop peu connue aujourd’hui qu’est UI Automation. Comme le montre la figure 1, l’architecture d’UI Automation devrait vous positionner dans l’une des positions en fonction de ce que vous développez : client ou fournisseur. Si vous concevez une application que vous souhaitez rendre accessible, vous vous trouver dans la position du fournisseur. Si en revanche, votre application consomme les informations retournée par UI Automation, par exemple pour créer une application d’aide à la lecture d’écran ou alors une automatisation des tests de l’interface utilisateur, vous vous trouvez dans le cas du client.

    Quel que soit le cas dans lequel vous vous trouvez, vous devez ajouter une référence à votre projet Visual Studio vers l’assembly nommée UIAutomationTypes. Si vous vous trouvez dans le cas du fournisseur, l’assembly UIAutomationProvider devra être également ajoutée, et dans le cas d’un client vous ajouterez plutôt l’assembly UIAutomationClient.

    Dans le cadre d’une application WPF, UI Automation est nativement supporté directement au travers de la description de l’interface que vous créez en annotant vos contrôles d’attributs spécifiques :

    <Window ...>

    <Label Name="lblNom">Nom d'utilisateur :</Label>

    <TextBox Name="txtNom" Height="30" Width="300"

    AutomationProperties.Name="NomUtilisateur"

    AutomationProperties.IsRequiredForForm="True"

    AutomationProperties.HelpText="Nom d'utilisateur du formulaire de connexion"/>

    <Label Name="lblMotDePasse">Mot de passe :</Label>

    <PasswordBox Name="txtMotDePasse" Height="30" Width="300"

    AutomationProperties.Name="MotDePasse"

    AutomationProperties.IsRequiredForForm="True"

    AutomationProperties.HelpText="Mot de passe du formulaire de connexion"/>

    <Button Name="btnOK" ...>

    ...

    </Window>

    En complétant les éléments de l’interface avec des propriétés UI Automation, vous rendez visible à toutes applications désirant connaître la composition des éléments de l’interface : identifiant, contexte (attribut IsRequiredForForm), relation avec les autres contrôles( attribut labeledBy par exemple) etc. En utilisant un logiciel nommé UI Spy, disponible avec le SDK Windows 7, vous pourrez visualiser les informations disponibles aux autres applications. La figure 2 montre les informations exposées par l’application dans un arbre (partie gauche) et avec les informations de chaque élément (partie droite).

    image

    Fig. 2 – Aperçu de l’application WPF dans UISpy

    Si vous désirez exploiter une application pour la manipuler ou pour créer une technologie d’assistance en utilisant les API d’UI Automation, voici quelques extraits de code :

    // On récupère l’AutomationElement depuis le handle d’un processus

    AutomationElement notepadApplication = AutomationElement.FromHandle(p.MainWindowHandle);

    // Nous récupérons un contrôle en particuler et utilisons ses informations

    PropertyCondition motDePasseCondition =

    new PropertyCondition(AutomationElement.NameProperty, "MotDePasse");

    AutomationElement motDePasseElement =

    wpfDemoUIAutomationApplication.FindFirst(TreeScope.Descendants, motDePasseCondition);

    if motDePasseElement.Current.IsRequiredForForm)

    ...

    }

    // Utiliser le comportement d’un contrôle pour interagir avec (ici une fenêtre)

    TransformPattern tranform = notepadApplication.GetCurrentPattern(

    TransformPattern.Pattern) as TransformPattern;

    if (tranform != null) {

    // Si c’est OK, on redimensionne et on déplace.

    tranform.Resize(1000, 300);

    tranform.Move(10, 10);

    }

    Pour un développeur, rajoutez des attributs est extrêmement simple et peu chronophage. Cet effort sera d’autant récompensé que vos testeurs seront dans la capacité de créer des scénarios qui pourront être automatisé directement avec UI Automation. La création de contrôle personnalisé sort du cadre de cet article, mais vous pourrez trouver tous les éléments dans les ressources du séminaire sur le sujet disponible sur le site de Microsoft France (cf référence).

    Développez des applications accessibles ne se résume bien évidemment pas à simplement décorer le XAML de l’interface avec des attributs. Voici quelques considérations supplémentaires nécessaires permettant d’améliorer l’accès et la compréhension de votre interface aux technologies d’assistance :

    • Paramètres utilisateurs :
      • Ne pas changer les paramètres système de l’utilisateur,
      • Supporter les paramètres d’accessibilité (contraste élevé, taille police 120ppp, etc)
    • Conception de l’interface :
      • Ne pas coder les couleurs en dur, utilisez au maximum les couleurs du système,
      • Supporter une interface dont tous les éléments rentrent dans une résolution de 1024*768,
      • Fournir un équivalent textuel au élément non textuel (comme le ‘alt’ pour les images d’une page web)
    • Navigation :
      • Activer la sélection par tabulation pour tous les contrôles où l’utilisateur nécessite une interaction, et dans un ordre logique,
      • Pour les personnes voyante sou mal voyantes, vos contrôles doivent montrer que le focus est sur eux (ex : par une bordure épaissie, une ombre, etc),
      • Exposer un raccourci pour chaque menus ou commandes

    Rendre vos applications Silverlight accessibles

    Depuis la sortie de Silverlight 2, UI Automation est aussi disponible au sein du runtime d’exécution Silverlight. Cela se traduit par une technique de mise en œuvre d’UI Automation très similaire à WPF pour votre application Silverlight. Voici l’équivalent du XAML précédent pour Silverligth :

    <UserControl ...>

    ...

    <TextBlock Name="lblNom">Nom d'utilisateur :</TextBlock>

    <TextBox Name="txtNom" Height="30" Width="300"

    AutomationProperties.Name="NomUtilisateur"

    AutomationProperties.IsRequiredForForm="True"

    AutomationProperties.HelpText="Nom d'utilisateur du formaulaire de connexion"/>

    <TextBlock Name="lblMotDePasse">Mot de passe :</TextBlock>

    <PasswordBox Name="txtMotDePasse" Height="30" Width="300"

    AutomationProperties.Name="MotDePasse"

    AutomationProperties.IsRequiredForForm="True"

    AutomationProperties.HelpText="Mot de passe du formulaire de connexion"/>

    <Button Name="btnOK" Height="30" Width="300" Content="OK" Margin="0,20,0,0" />

    </UserControl>

    Sachez que l’implémentation d’UI Automation dans Silverlight possède néanmoins quelques différences par rapport à WPF : espaces de noms utilisés, DLL à référencer, interface à implémenter pour les contrôles personnalisés, etc.

    Etre accessible avec SharePoint 2007

    Alors que SharePoint 2007 n’utilisait pas de standard particulier pour support l’accessibilité, plusieurs projets avait été lancé pour combler cette lacune. Parmi ceux-là, le projet AKS (Accessibility Kit for SharePoint 2007) est le plus abouti. Mais attention ce dernier n’est pas une solution miracle qui va rendre vos sites SharePoint accessibles sans votre participation, ce projet est pour une bonne part un regroupement d’éléments méthodologiques.

    Vous pouvez trouver le projet à cette adresse : http://aks.hisoftware.com. Une fois installé et activé, votre travail ne fait que commencer, les sites ne devenant pas immédiatement conformes au WCAG 1.0 et niveau A ou AA. Les points d’amélioration pour rendre votre site accessible vont passer par une mise à jour des CSS, des pages maîtres, de définitions de site, des adaptateurs de contrôles, des contenus restitués (par exemple, le flux HTML issu d’une transformation XSLT d’une webpart), etc. D’autres composants (par exemple, aRTE pour accessible Rich Text Editor, SPWorks ARF et Content and Code SAS) vous fourniront des solutions complémentaires à AKS.

    SharePoint 2010 accessible … par défaut !

    ARIA (Accessible Rich Internet Application) est une initiative du W3C pour répondre à certaines problématiques posées par le DHTML/Ajax/SVG (HTML 5 incorporera ces fonctionnalités). En effet, IE6 et 7 ne supporte pas les notifications de rafraichissement partiel d’une page, ce qui rend inefficace les lecteurs d’écran pour les personnes non voyantes devant les applications AJAX ; qui aujourd’hui représente la plupart des applications web populaires.

    L’apport d’ARIA pour les pages web concerne notamment : l’utilisation des technologies web sémantique, la séparation stricte entre la présentation et le contenu, permettre la surveillance passive des applications par les technologies d’assistance, etc. Au niveau des attributs sémantiques, vous aurez à votre disposition les attributs d’états et de propriétés d’information (directement associés aux API d’Accessibilité des technologies d’assistance) et les attributs de rôle permettant de définir le rôle d’un élément (menu, contenu, pied de page, etc).

    Les pages SharePoint 2010 sont compatibles XHTML (XHTML 1.0 Strict pour être plus précis). Néanmoins bien que vos pages soient bien formés, et le XHTML ne prévoyant pas l’intégration des informations WAI ARIA, leur seule présence entrainera une erreur lors de la validation par un validateur XHTML. Cela n’est qu’un détail, puisque le XHTML étant bien formé et composé avec des balises ARIA, la structure sera optimale pour les navigateurs et autres technologies d’assistance.

    Pour cette version 2010 de SharePoint, Microsoft à améliorer l’accessibilité selon les points suivants :

    • Support du XHTML 1.0 / ARIA,
    • Nettoyage et suppression des tableaux pour être remplacé par des div et des calques CSS en se reposant pour la majorité du rendu sur le style CSS de la page maître,
    • Respect plus strict des standards et notamment de CSS,
    • Amélioration du support des navigateurs.

    Parmi les évolutions notables qui faciliteront l’accessibilité mais aussi le travail des designers, vous pouvez trouver le rendu de la navigation globale intégralement réalisé en balises div, ul/li et span, les menus contextuels et les raccourcis clavier pour naviguer dans le ruban et la page d’accueil. Vous constaterez également la présence d’une sémantique aux éléments du ruban, des alertes, des éditeurs de texte, aux formulaires riches, des éditeurs de grille et aux boîtes de dialogues.

    Par exemple, voici maintenant la sortie XHTML pour un éditeur de texte (fig. 3) :

    <div… role="textbox" aria-haspopup="true" aria-autocomplete="both" aria-haspopup="true">

    image
    Fig. 3 – Editeur de contenu SharePoint 2010

    Voici la façon dont est intégrer une commande du ruban de SharePoint 2010 (fig. 4) :

    <a… role="button" aria-describedby="Ribbon.EditingTools.CPEditTab.Clipboard.Paste.Menu.Paste.Paste_ToolTip">

    image 
    Fig. 4 – Commande du ruban de SharePoint 2010

    Au niveau des info-bulles, une balise SPAN est utilisée avec la propriété aria-hidden (élément caché)à faux par défaut (fig. 5) :

    <span… id="Ribbon.EditingTools.CPEditTab.Clipboard.Paste.Menu.Paste.Paste_ToolTip" role="tooltip" aria-hidden="false">

    image 
    Fig. 5 – Info-bulle dans SharePoint 2010

    Pour permettre à une technologie d’assistance d’identifier les boîtes de dialogue (fig. 6), une balise DIV est utilisée :

    <div… role="dialog" aria-labeledby="dialogTitleSpan">

    image 
    Fig. 6 – Boîte de dialogue de SharePoint 2010.

    Cette avancée majeure dans l’accessibilité confirme l’intérêt et l’effort que réalise Microsoft pour rendre accessible ses applications phare. Néanmoins, au-delà de Microsoft, la responsabilité de garder la syntaxe XHTML et les directives ARIA sera donné aux entreprises développant des composants tierces. Qu’à cela ne tienne, des validateurs de contenu accessible, à commencer par Visual Studio en personne, viendront aider les développeurs dans cette tâche.

    Conclusion

    Microsoft est sans nul doute moteur, voire précurseur, dans le domaine de l’accessibilité. Après avoir pris le taureau par les cornes dès Windows 2.0, voici que le géant de Redmond montre le chemin aux développeurs et aux autres plateformes concurrentes. Une initiative qui concrétise l’espoir de milliers de personnes de pouvoir enfin accéder dans de bonnes conditions à ces applications issues de la révolution du web 2.0.

    Références



    Les 10 derniers blogs postés

    - Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

    - Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

    - Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

    - Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

    - Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

    - Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

    - Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

    - Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

    - Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

    - SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01