in

didierdanse.net

Site personnel de Didier Danse
Didier Danse's Personnal Website
Microsoft Most Valuable Professional ASP.NET

didierdanse.net - Les news Developpement

  • Le Service Pack 2 de Vista en beta, c'est pour cette semaine!

    Alors qu'il y a un an presque jour pour jour je vous annonçais la venue du SP1 de Visa, voici désormais le SP2 en beta!

    Comme pour son prédécesseur, il corrige certes quelques bugs, failles de sécurité et autres incohérences qui persisteraient après le SP1 mais il ajoute de nouvelles fonctionnalités / possibilités.

    Pour le télécharger, il vous faudra attendre le:

    • 2 décembre pour les abonnés MSDN et Technet;
    • 4 décembre en téléchargement publique sur MSDN et Technet.

    Les nouveautés les plus importantes de ce Service Pack:

    • Support de types d'hardware émergeants:
      • Support du Bluethoot 2.1;
      • Possibilité d'enregistrer des données sur des supports Blue-Ray;
      • ...;
    • Amélioration de l'administration;
    • Amélioration des performances:
      • Windows Search 4 qui améliore les performances d'indexation et améliore la qualité des résultats;
      • Diminution des ressources nécessaires pour les gadgets de la toolbar;
      • Hyper-V.

    Des améliorations concernant la compatibilité entre des logiciels tels que ZoneAlarm et Vista sont présentes. Par ailleurs, Microsoft annonce que toute application qu'il n'y aura pas de régression de la compatibilité lors du passage au SP2 (heureusement ceci dit...).

    On notera aussi qu'un outil pour nettoyer les fichiers devenus obsolètes après l'installation du SP2 est fourni.

    N'hésitez pas à poster vos feedbacks à ce sujet et n'oubliez pas, il s'agit d'une version beta, il n'est pas conseillé de l'installation pour une installation en "production".

  • SharePoint: des uploads lents avec IE6? Pourquoi?

    Alors que l'envoi de fichier via WebDAV (c'est-à-dire à l'aide de la vue Explorateur) se passe efficacement, l'envoi de fichiers via l'interface web dans SharePoint s'avère très lent?

    Si vous disposez d'Internet Explorer 6 sur les pcs depuis lesquels l'upload est lent, ne cherchez plus le pourquoi! Si ce n'est pas le cas, il s'agit juste d'une piste à suivre.

    La cause est simple: Internet Explorer 6 utilise une clé de registre qui indique la taille du buffer à utiliser pour l'envoi des fichiers. La taille par défaut pose problème dès lors que vous faites l'upload d'un fichier de plus de 2Mo. Après quelques secondes, l'upload semble s'arrêter (et pour preuve, vous pouvez monitorer la charge réseau au travers de l'information "Total Bytes/sec") et un timeout intervient dès lors.

    Internet Explorer 7 ne souffre pas de ce paramètre puisque la valeur de la clé s'est vue modifiée.

    Vous trouverez la procédure pour mettre à jour le paramètre: http://support.microsoft.com/kb/329781/en-us

  • SharePoint: Récupérer la taille d'un Item

    On fera le calcul en utilisant deux fonctions:

    • GetAttachmentsTotalSize: renvoie la taille totale occupée par les fichiers attachés à l'item;
    • GetItemSize: renvoie la taille total des fichiers attachés à laquelle on y ajoute la taille du contenu inclus dans les différents champs.

    GetAttachmentsTotalSize

        Public Function GetAttachmentsTotalSize(ByVal item as SPListItem) As Integer
            Dim size As Integer = 0
    
            For Each filename As String In item.Attachments
                Dim file As String = item.Web.GetFileAsString( _ 
                    item.Attachments.UrlPrefix + filename)
                size = size + file.Length
            Next
    
            Return size
        End Function

    GetItemSize

        Public Function GetItemSize(ByVal item as SPListItem) As Integer
            Dim size As Integer = GetAttachmentsTotalSize()
    
            For Each field As SPField In item.Fields
                If Not (item(field.Id) Is Nothing) Then
                    size = size + item(field.Id).ToString().Length
                End If
    
            Next
    
            Return size
        End Function

    Bon calcul!

  • SharePoint: Attention aux champs users après une migration avec la Content Migration API

    [English version]

    Si dans vos listes vous utilisez un champ user qui filtre les utilisateurs possibles sur base d'un groupe SharePoint et que vous avez l'intention de migrer votre application d'un environnement à un autre via la Content Migration API, ce post est pour vous!

    Tout d'abord, un rapide rappel sur la manière de filtrer les users sur base d'un groupe:

    Dans la définition de la liste, cliquez sur le nom de la colonne user. Une fois dans la fenêtre de propriétés, il suffit de sélectionner le groupe utilisé pour filtrer les users.

     02_thumb[1] 

    Comment cela se passe-t-il en interne? L'identifiant du groupe sélectionné est stocké dans une propriété du champ. Il s'agit de SPFieldUser.SelectionGroup qui reçoit et renvoie un entier comme en atteste MSDN: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfielduser.selectiongroup.aspx.

    Cet identifiant (424 dans notre exemple) est celui présent dans l'url lorsque vous modifiez les membres du groupe.

    01_thumb[2]

    Jusque là, pas de problème.

    Là où peut survenir un problème, c'est lorsque, via STSADM (stsadm -o export) ou un outil (SP RAD Studio par exemple) utilisant la Content Migration API, nous exportons ce site et ensuite l'importons dans un autre environnement. Et là, surprise! Il s'avère que le groupe sélectionné pour le filtre ne correspond pas à ce que nous attendions.

    03_thumb[12]

    Que s'est-il passé? La réponse est simple. Seul un identifiant sous forme d'entier est utilisé comme nous l'avons vu. En regardant le package généré par une opération d'export, on pourrait penser que l'import ne posera aucun problème puisque l'on retrouve  <Group Id="424" Name="GroupName" [...]> dans le fichier UserGroup.xml.

    Cependant, lors de l'import, pour peu que l'identifiant soit déjà utilisé, le groupe importé recevra un nouvel ID. Malheureusement, l'ID utilisé par le champ user n'est quant à lui pas modifié. Et c'est ainsi que l'on se retrouve avec un filtre sur un groupe non souhaité!

    Ainsi, il nous sera nécessaire de modifier manuellement ce filtre après la migration. Pour cela, il suffit de passer par l'interface web... si nous en avons le droit. Dans le cas contraire, une solution possible est d'utiliser des extensions STSADM. C'est cette solution que j'ai mis en place afin de réaliser toutes les opérations d'une traite.

    Cette opération prend en paramètre le nom d'un groupe SharePoint (et non pas sans identifiant puisqu'on ne le connaît pas à l'avance dans notre scénario).

    stsadm -o setfieldproperties -url <SiteUrl> -list <Listname> -field <Fieldname> -userfieldgroupfilter <GroupName>

    Cette extension fait partie des extensions Migration extensions présentes sur CodePlex (http://www.codeplex.com/migrationstsadmext).

  • Roadshow MSDN: Comment Silverlight 2 et WPF peuvent procurer de riches expériences client aux utilisateurs - Liège, 15 Octobre

    Des sessions techniques dans la région liégeoise, cela est suffisamment rare pour être signalé.

    Aujourd’***, les développeurs qui construisent de nouvelles applications veillent tout particulièrement à ce qu’elles procurent une riche expérience client aux utilisateurs. En effet, ceux-ci sont de plus en plus familiarisés avec des applications (web) capables de réagir de façon logique et d’interagir d’avantage avec eux en tenant compte de leurs actions.

    Rejoignez-nous au RIA Roadshow et restez à l'écoute des dernières innovations. Vous y apprendrez comment développer de riches applications pouvant être déployées sur le web et au-delà de ce que vous pouvez habituellement faire avec une application basée sur un navigateur

    Cette session abordera 4 sujets principaux:

    • Les nouvelles fonctionnalités de ASP.NET AJAX

    • Comment utiliser les Windows Live Tools for Visual Studio

    • Comment construire une application Silverlight 2 qui fait appel aux services à distance, à l’inter-liaison des données (data binding), à la création de gabarits et styles (templating & styling) et cela, aussi bien avec Visual Studio 2008 qu’avec Expression Blend 2.5

    • Windows Presentation Foundation et le .NET Client Profile

    Inscriptions: http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&EventID=1032390486&%3bCulture=fr-BE

  • TechDays '08 à Luxembourg: 30 septembre 2008 à Mondorf-les-Bains, Luxembourg et c'est gratuit!

    C'est au tour du Luxembourg d'héberger les TechDays '08. Avec 6 sessions pour les développeurs et 3 orientées IT Pro, ces TechDays ont pour but d'avoir un large aperçu des nouveautés de .NET et du Service Pack associé ainsi que sur la virtualisation, un des sujets de discussion les plus en vogue actuellement.

    C'est gratuit et le nombre de places est limité donc inscrivez-vous au plus vite!

    Agenda complet: http://www.microsoft.com/belux/techdays08/agenda.aspx

    Inscription: http://www.microsoft.com/belux/techdays08/inscrivez.aspx

  • ASP.NET AJAX: Tous mes UpdatePanels sont raffraîchis lors d'un retour serveur alors que seul un UpdatePanel ne devrait l'être, pourquoi?

    Dans la continuité des questions / réponses sur ASP.NET AJAX (1.0 ou 3.5, peu importe dans ce cas), voici la réponse à une petite question relativement simple mais que tout développeur débutant avec ASP.NET AJAX rencontrera certainement.

    Imaginons une page contenant les éléments suivants:

    • Deux update panels;
    • Un timer;
    • Un bouton et un label dans chacun des update panels.

    Ceci donne une page de ce type (sans aucun chichi et ne respectant aucunement les conventions de nommage habituelles):

    image

    Un seul trigger est associé à l'UpdatePanel1. Celui-ci a pour but de réaliser un retour serveur asynchrone lorsque Timer1 lance l'évènement Tick, ce qui donne:

        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
        </Triggers>
            <ContentTemplate>        
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
            </ContentTemplate>
        </asp:UpdatePanel>

    Aucun trigger n'est associé à l'UpdatePanel2 et pourtant, les deux updatepanels sont rafraichis lors de ce fameux retour asynchrone.

    Ceci se justifie par le fait que, par défaut, la propriété UpdateMode des objets UpdatePanel a la valeur Always. Ainsi, quelque soit l'élément qui a effectué le retour serveur, les UpdatePanel sont raffraîchis.

    Afin de mieux contrôler le rechargement des UpdatePanel, il suffit de mettre la propriété UpdateMode à la valeur Conditional. Dès lors seul les retours serveurs effectués et présents dans les triggers auront pour effet de recharger le contenu de notre UpdatePanel.

        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
        </Triggers>
            <ContentTemplate>        
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
            </ContentTemplate>
        </asp:UpdatePanel>

    Pour rappel, vous pouvez retrouver une Introduction à ASP.NET AJAX sur ce même site.

  • ASP.NET AJAX 1.0: Sys is undefined, pourquoi et comment le corriger?

    Certes, c'est loin d'être un problème récent mais étant récemment retombé sur le problème, je me décide enfin à écrire la solution... Je sais que cela servira au moins à une personne :-)

    Après avoir installé les extensions ASP.NET AJAX 1.0 sur un poste dans le but de réaliser des développements avec Visual Studio 2008, on pourrait s'attendre à trouver le template de projet "ASP.NET AJAX Enabled Web Application". Il n'en est pourtant rien comme en atteste la capture d'écran suivante:

    image

    Puisque nous n'avons guère le choix, choisissons le template ASP.NET Web Application. Rapidement, nous pouvons remarquer que les composants "de base" de ASP.NET AJAX Extensions sont bel et bien présents dans la toolbox. Parfait!

    image

    Il ne nous reste donc plus à les utiliser à l'aide d'un drag and drop, tout ce qu'il y a de plus classique.

    Si on observe le web.config (le plus simple étant de garder le web.config ouvert dans Visual Studio, vous serez immédiatement averti des changements), on peut voir que quelques lignes ont été ajoutées dans le web.config:

    <assemblies>
                    <add assembly="System.Web.Extensions, Version=1.0.61025.0, 
    Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </assemblies>

    Dès lors, on pourrait se dire que tout va bien et que Visual Studio a fait le travail pour nous. Mais après exécuté la page, l'erreur 'Sys' is undefined apparaît dans le browser.

    Pourquoi? La réponse est simple... On retrouve

    <script src="/ScriptResource.axd?d=xyz" type="text/javascript"></script>
    <script src="/ScriptResource.axd?d=abc" type="text/javascript"></script>

    dans la source HTML. Or si on vérifie ce que génére ce fichier, on remarque que celui-ci n'est pas disponible. Cela est dû au fait que le serveur ne sait pas comment interpréter les .axd. C'est pour cela qu'il est nécessaire d'ajouter les lignes suivantes dans le web.config et ce entre <system.web> et </system.web>:

    <httpHandlers>
      <add verb="GET" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler"
    validate="false"/> </httpHandlers>

    Désormais, il ne nous reste plus qu'à laisser exploser notre imagination.

    Le web.config minimal:

    <?xml version="1.0"?>
    <configuration>
        <appSettings/>
        <connectionStrings/>
        <system.web>
        <httpHandlers>
          <add verb="GET" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler"
    validate="false"/> </httpHandlers> <compilation debug="false"> <assemblies> <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </assemblies> </compilation> <authentication mode="Windows"/> </system.web> </configuration>

    Notez que vous pouvez trouver un web.config complet à l'adresse suivante:

    C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025.

  • SharePoint: Introduction à la Content Migration API

    La Content Migration API, voilà une librairie importante de SharePoint et qui s'avère souvent trop peu connue. Comprendre cette API permet de réaliser des opérations de transfert de données d'un environnement SharePoint à un autre et de ce manière efficace. C'est pour cette raison que j'ai décidé de publier un ensemble de posts à ce sujet afin de montrer ce qu'il est possible de faire grâce à cette librairie. Mais commençons par le début et voyons ce qu'est cette API.

    Qu'est ce que la content migration API?

    La Content Migration API permet d'effecuter le transfert de données d'un site SharePoint. Ce transfert peut s'effectuer entre des environnements connectés (éventuellement le même environnement) ou entre des énvironnements totalement déconnectés. 

    Qu'entend-t-on par le terme données? En fait tout (ou presque) ce qu'il est possible de définir via l'interface web de SharePoint, à savoir:

    • Listes
    • Eléments de liste (lists items)
    • Web Parts
    • Page customisées
    • Pages maîtres (master pages)
    • Types de contenu (content types)
    • CSS
    • Page layouts
    • Colonnes de sites
    • Images référencées dans des pages
    • ...

    Ne font pas partie des données qui peuvent être transportées par la Content Migration API et définis via l'interface web de SharePoint:

    • Alertes
    • Statuts Check in/Check out
    • Eléments de la corbeille
    • Statuts des Workflows
    • Logs des modifications

    On notera également que les éléments suivants ne sont également pas pris en compte lors de l'export:

    • Features
    • Workflows personnalisés
    • Solutions

    La raison pour laquelle les features et les workflows personnalisés ne peuvent être exportés est qu'ils se trouvent dans le système de fichiers et non pas dans la base de données comme pour les autres éléments. Si on devait résumer ceci, on dirait que tout ce qui résulte d'un développement ou d'une customisation (ajouter une liste n'est pas pour moi une customisation ;-) ), et donc déployable via les solutions, doivent être déployés en suivant les principes courants, en utilisant par exemple STSADM.

    Le transfert de données d'un site à l'autre se fait en trois étapes:

    1. Export: Choix des éléments à exporter et génération d'un ensemble de fichiers contenant les données;
    2. Transport: Les fichiers générés doivent être placés afin d'être accessibles lors d'opérations vers l'environnement cible. Le transport peut se faire par n'importe quel moyen (FTP, clé USB, ...) puisqu'il s'agit de simples fichiers;
    3. Import: Sur base des fichiers générés et mis à disposition, l'import peut se faire dans l'environnement cible.

    Les fichiers intermédiaires étant basés sur une structure de fichiers connue (voir Content Migration XML Schema Reference), il est possible de générer ces fichiers de données depuis une application tierce et ce afin de faciliter l'import d'information provenant d'un autre système d'information.

    Par quelles fonctionnalités SharePoint utilise-t-il la C.M. API?

    Il ne s'agit pas d'une liste exhaustive loin de là mais un aperçu des fonctionnalités utilisées régulièrement et pour lesquelles on ne soupçone pas toujours l'utilisation de l'API.

    Copier / Déplacer depuis les menus de gestion du contenu et de structure 

    image

    Pour faire simple, quelles sont les opérations qui sont effectuées lorsque l'on veut copier un site? On pourrait penser qu'il y a une boucle pour réaliser une copie du site source vers le site cible (la copie devant se faire dans le même site collection, le site source et le site destination sont d'office connectés entre eux) mais il n'en est rien. Il s'agit de la suite d'actions désormais si bien connue:

    • Export: vers le système de fichiers local;
    • (Transport: non nécessaire dans ce cas puisque la cible et la destination se trouve sur le même serveur; )
    • Import: vers un nouveau site SharePoint.

    On notera que lors de la copie d'un site vers un autre à l'aide de cette fonctionnalité, la sécurité du site n'est pas dupliquée. Nous comprendrons pourquoi très bientôt. N'oubliez donc pas de réappliquer vos règles de sécurité.

    STSADM

    STSADM, que certains nomment Super admin tool, est un outil utilisable en ligne de commande fourni avec SharePoint qui permet d'effectuer un ensemble considérable d'opérations autour de SharePoint. Si vous ne connaissez pas encore les possibilités (et les limites) de cet outil, foncez sur votre moteur de recherche préféré et faites une petite recherche à ce sujet... en attendant que je poste à ce sujet :))

    image

    Comme à l'accoutumée, comment peut-on copier des données d'un site à l'autre à l'aide de STSADM? En suivant nos éternelles trois étapes bien entendu:

    • Export: du site source vers un fichier (compressé dans l'exemple ci-dessous)

    stsadm -o export -url http://monserveur/monsitesource -filename "c:\un repertoire\content.cmp"

    Un rapide aperçu des options liées à la sélection des éléments à exporter de cette fonctionnalité de STSADM:

    stsadm.exe -o export
               -url <URL du site à exporter>
               -filename <Chemin vers le fichier ou le répertoire intermédiaire>
               [-includeusersecurity]
               [-versions <1-4>
                   1 - Dernière version majeure des fichiers et des list items (valeur par défaut)
                   2 - Version courante, qu'elle soit mineure ou majeure
                   3 - Dernière version majeure et dernière version mineure des fichiers et des lists items
                   4 - Toutes les versions]

    Au vu des propriétés, on se rend rapidement compte qu'il n'est possible d'exporter que des sites complets.

    • Transport des fichiers: A vous de choisir ce qui vous convient le mieux. Tous les chemins mènent au serveur de destination ;-);
    • Import: d'un fichier (compressé dans l'exemple ci-dessous) vers le site cible

    stsadm -o import -url http://monserveur/monsitecible -filename "c:\un repertoire\content.cmp"

    Un petit tour du côté des options liées à la manière d'importer les éléments:

    stsadm.exe -o import
               -url <URL du site dans lequel importer les données>
               -filename <Chemin vers le fichier ou le répertoire intermédiaire>
               [-includeusersecurity]
               [-updateversions <1-3>
                   1 - Ajoute de nouvelles versions au fichier (valeur par défaut)
                   2 - Remplace le fichier et ses versions (suppression avant insertion)
                   3 - Ignore le fichier si il est déjà existant sur la destination]

    On notera qu'il existe d'autres propriétés/options liées aux fichiers générés (compression ou non, ...) qui sont certes importantes mais sont moins parlantes que celles qui nous intéresse ici.

    Web Services

    Le WebService Sites, disponible à l'adresse http://<Site>/_vti_bin/Sites.asmx, permet d'effectuer des exports et des imports de données. Comme pour STSADM, le niveau le plus bas qu'il est possible d'exporter est le site.

    image  image

    Gestion de contenu web

    Le Web Content Management, que l'on retrouve au travers des publishing sites suit la même procédure en ce qui concerne la publication d'information sur un site particulier. La source et la destination étant directement connecté, il n'y a ainsi que les opérations d'export et d'import qui sont effectuées. L'export se fait sur un  sous-ensemble de données, à savoir uniquement celles-qui doivent être publiées. Cette opération de filtre des données à exporter se nomme l'export sélectif.

    Pourquoi utiliser la Content Migration API?

    Export sélectif

    Que ce soit les web services ou STSADM, il n'est pas possible, nous l'avons vu, de réaliser un export de données d'un niveau plus bas que le site. Ce n'est cependant qu'une limite de l'outil et non pas de la Content Migration API puisque dans le cas du Web Content Management, l'API est utilisée pour exporter un sous-ensemble de données. Ainsi, seuls les éléments de liste qui ont été ajoutés ou mis à jour depuis une date donnée sont exportées afin de permettre une réplication d'un site à un autre.

    Utilisant la même API, nous pouvons effectuer la même opération et sélectionner les éléments à exporter. Nous verrons dans un prochain post que cela peut avoir plusieurs utilités. Bien entendu, les premiers intérêts que l'on peut trouver sont la publication d'éléments et la réplication de données d'un site vers un autre.

    Dans un prochain post, nous verrons comment effectuer un export sélectif du point de vue développement. Nous nous rendrons rapidement compte qu'il est aisé d'implémenter sa propre logique pour la sélection des données.

    Maintien des identifiants des éléments d'un site

    Dans certains cas, il est important de préserver les identifiants d'un site à l'autre. On retrouve cette nécessité lors d'un export sélectif (pour savoir quel élément mettre à jour) mais aussi si un webpart référence une liste via son identifiant, il est nécessaire de retrouver le même identifiant pour cette dite liste.

    Nous verrons que dans certains cas, le maintien des identifiants n'est pas nécessaire et que pire que ça, cela peut poser parfois des problèmes. Effectivement, toutes les données sont stockées en base de données. Le GUID (identifiant unique) est utilisé comme clé primaire au sein de cette base. Le principe d'une clé primaire est d'interdire les doublons. Or que se passe-t-il si vous importez un package vers deux sites différents en maintenant les identifiants? Vous dupliquez les identifiants.

    Les packages de migration de données

    De quoi est composé un package de migration de données?

    Pour qu'une migration de données soit effective, il est nécessaire que tous les éléments nécessaires soient présents sur le serveur source. Un package de migration de données contient donc, en plus des données proprement dit, un ensemble de fichiers dans lesquels sont stockés les informations sur les éléments requis ou encore ceux à importer (groupes et utilisateurs pour la partie sécurité par exemple).

    Succintement, le package est formé des fichiers suivants:

    image

    • Manifest.xml: est le fichier de base lors de toute migration;
    • Requirements.xml: contient la liste des éléments requis par le contenu à migrer. La vérification de l'existence de ces ressources se fait préalablement à toute migration de données;
    • ExportSettings.xml: contient la logique utilisée lors de l'export pour vérifier que tous les éléments attendus dans le package soient présents;
    • RootObjectMap.xml: contient l'élément de plus haut niveau à importer;
    • SystemData.xml: utilisé principalement lorsque l'on maintient les identifiants, il contient l'ensemble des éléments installés et requis sur le serveur. En cas d'absence de l'un ou plusieurs de ces éléments arrêtent l'import;
    • UserGroup.xml: contient les informations provenant du site d'origine concernant les utilisateurs et les groupes SharePoint utilisés dans le site;
    • LookupListMap.xml: contient les liens entre items liés (c'est à dire utilisés dans les champs lookup);
    • ViewFormsList.xml: contient la liste des Web Parts en indiquant si il s'agit de vues ou de formulaires;
    • fichiers .dat: contiennent les données proprements dites.

    Il existe un outil très utile pour parcourir le Content Migration Package Explorer: http://blogs.msdn.com/ronalus/archive/2007/10/02/content-migration-package-explorer.aspx

    image

    Sous quel format peut être le package?

    Deux possibilités s'offrent à nous pour stocker l'ensemble des fichiers précédemment cité:

    • Fichier Compressé: théoriquement avec une extension .cmp, il s'agit de l'option par défaut lors d'un export;
    • Répertoire: les fichiers sont situés dans un répertoire unique.

    Le premier a l'avantage de rassembler tous les fichiers nécessaires au sein d'un seul et même fichier, qui plus est, compressé. L'inconvénient est que cette compression est couteuse en temps et nécessite de disposer sur disque de deux fois la taille du package. Notez que pour de gros packages, une erreur peut survenir durant la compression, arrêtant l'export en cours.

    Dans le second cas, il est important de faire attention à bien transférer tous les fichiers d'un environnement source vers l'environnement cible.

    Peut-on modifier un package de migration de données?

    Bien entendu! Comme nous l'avons vu précédemment la référence au sujet de la syntaxe de ces fichiers est fournie. Nous verrons d'ailleurs comment utiliser la Content Migration API (et surtout comment modifier les fichiers intermédiaire) il est possible d'effectuer des opérations qui ne sont pas possibles Out-of-the-box, par exemple passer d'un template en français à un template en anglais et inversément.

    Pour faciliter les modifications, il est conseillé d'utiliser des fichiers non compressés.

    Conclusion

    Désormais, nous avons une connaissance suffisante de la Content Migration API afin de passer à la réalisation d'exemples concrets. 

    Dans un prochain post, je présenterai au travers d'un poste le développement d'une application permettant d'effectuer des exports ainsi que des imports de sites ou d'un ensemble quelconque d'informations provenant de sites SharePoint. Nous verrons également comment utiliser la C.M. API pour permettre de changer le parent d'un élément exporté.

    Plus tard, nous verrons également comment réaliser des exports incrémentals de données, utilisés lors de la réplication par exemple.

    Enfin, après voir vu comment développer des outils utilisant ces fonctionnalités nous verrons comment les utiliser à bon escient pour réaliser des opérations qui pourraient s'avèrer complexes sans ceux-ci.

  • Sql Server: Impossibilité de passer d'une version à l'autre ou de le désinstaller. Que faire?

    L'installation de Sql Server, que ce soit dans le but d'installer SharePoint ou non, est une opération relativement simple et relativement rares sont les problèmes qui peuvent survenir.

    L'ajout de composants, la mise à jour de notre Sql Server ou encore la désinstallation d'un Sql Server (et oui... cela est parfois nécessaire à des fins de nettoyage avant réutilisation d'un serveur) n'amène que peu de difficultées supplémentaires. Il suffit de suivre les indications (en utilisant l'argument SKUUPGRADE=1 comme indiqué dans l'article Sql Server: Passer de la version Express à une version Standard/Enterprise) et d'être patient (oui je sais, je me répète).

    Cependant, j'ai malheureusement rencontré un problème pas ou peu documenté. L'erreur obtenue est:

    The setup has encountered an unexpected error while Setting Internal Properties. The error is: Fatal error during installation.

    En l'absence d'un message d'erreur explicite, une petite lecture des logs permet de découvrir un peu plus de détails:

    GetServiceUserGroup failed for OFFICESERVERS, 5
            Error Code: 0x80070534 (1332)
    Windows Error Text: No mapping between account names and security IDs was done.

    Après lecture et recherche dans l'historique de l'installation de la machine, il s'avère que l'erreur est dûe au fait que Sql Server utilise des comptes locaux temporaires dont le SID n'existe plus suite à un changement de nom de la machine (Voir Renommer un serveur et un SharePoint installé en standalone).

    Effectivement, l'outil NewSID a effectué la mise à jour de tous les SID qu'il a pu identifier.

    Pour rappel, le "Computer Security Identifier" ou "Identificateur de Sécurité" permet d'identifier un ordinateur (plus précisément le système d'exploitation qui y est installé). Ce SID est créé et assigné dès les premières phases de l'installation du Windows.

    Pour la même raison, cette erreur peut survenir après avoir placé une machine dans un réseau d'entreprise.

    La correction est simple pour peu qu'on ait accès à la base de registre. Pour cela, dans le menu Démarrer (Start), dans la zone Exécuter (Run) indiquez regedit

    Identifiez les hierarchies suivantes en remplacant X par 1, 2, ... n où n est le nombre d'instances déjà présentes: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\Setup

    Deux clés de registres s'y trouvent :

    • SQLGroup
    • FTSGroup

    groups dans registry pour install sql server

    Supprimer ces clés de registre permet de réinitialiser les comptes.

    Redémarrez le programme d'installation ou de mise à jour de Sql Server. Vous ne devriez désormais plus recevoir cette erreur.

    Selon mes recherches sur Internet, il semble que deux autres groupes peuvent être présents dans les clés de registre et nécessitent une suppression:

    • AGTGroup
    • ASGroup
  • Sql Server: Passer de la version Express à une version Standard/Enterprise

    Sql Server Express convient parfaitement pour une utilisation lors de développement ou de projets persos. Certaines limitations peuvent cependant être insuffisantes pour des développements nécessitant plus de composants ou d'espace de stockage.

    Réalisant principalement des développements principalement dans un environnement SharePoint, ce post a pour origine un besoin lié à SharePoint qui, par défaut, inclut l'installation d'un Sql Server express. Cependant, ceci s'applique à d'autres environnements basés sur Sql Server.

    Mettre à jour Sql Server

    Après avoir mis le cd ou le DVD contenant la version cible de Sql Server, lancez, en ligne de commande, le programme d'installation à l'aide de setup.exe SKUUPGRADE=1 (respectez la casse)

    Après avoir accepté les termes de la licence, un peu de patiente et quelques clics à la sauce Next Next Next, vous pouvez enfin choisir les composants de Sql Server que vous souhaitez mettre à jour.

    image

    Comme indiqué, cliquez sur Advanced pour accéder à plus d'options. Bien entendu, vous n'êtes aucunement obligé de passer par cette étape mais cela est tout de même fortement conseillé afin d'être certain d'installer tout ce que vous souhaitez et uniquement ce que vous souhaitez.

    image

    Sélectionnez le nom de l'instance (la mise à jour se fait instance par instance. Il vous faudra donc réaliser l'opération plusieurs fois si vous avez plusieurs instances à mettre à jour). Dans le cas de SharePoint, vous pouvez indiquer "OFFICESERVERS" dans Named instance ou encore passer par le bouton Installed instances.

    InstalledInstances 

    Sélectionnez les éléments que vous souhaitez mettre à jour ou installer pour l'instance sélectionnée.

    existingcomponents

    Pensez à cocher les composants à mettre à jour...

    image 

    Il suffit dès lors de suivre les instructions et d'être patient.

    Les écrans suivants dépenderont des composants mis à jour ou installés. Par exemple, l'écran pour le compte à utiliser pour Reporting Services:

    image  image

    Ensuite un rapport des actions qui vont être effectuées apparait:

    image

    A nouveau, un seul mot d'ordre après avoir cliqué sur Install : la patience!

    Attention, si vous avez renommé votre machine entre la première installation et la mise à jour d'une instance, il est nécessaire d'effectuer quelques petites opérations comme indiqué dans le post suivant: à suivre...

  • IE Dev Toolbar ne fonctionne pas, que faire?

    Bien que depuis peu il soit possible de réaliser des développements SharePoint sous Vista, souvent, les développeurs utilisent une machine virtuelle contenant Windows Server 2003 et l'Internet Explorer installé par défaut.

    L'extension IE Dev Toolbar peut être utile dès lors que l'on manipule le DOM de la page web (encore plus utile si on couple l'utilisation de cette extension avec l'utilisation du debugger JavaScript de Visual Studio 2008). Mais après avoir installé cette extension et réinstallé Internet Explorer, nous sommes rapidement heureux de pouvoir démarrer cette toolbar. Et là, surprise puisque rien n'est présent dans ce toolbar.

    image

    Effectivement, l'extension n'est, par défaut, pas autorisée à accéder au contenu de la page web. Effectivement, l'accès à Internet depuis un serveur n'est pas conseillée. Les options sont ainsi sélectionnées en ce sens.

    Pour autoriser l'accès à la page web par IE Dev Toolbar, rendez-vous dans les options Internet de Internet Explorer. Ensuite cocher l'option "Enable third-party browser extensions"

    image

    Redémarrez Internet Explorer et là... bingo!

    image

    Sur des O.S. "clients" (Windows XP, Windows Vista, ...), aucun souci puisque cette option est, à l'installation, activée.

  • Nintex Reporting 2008

    Partiellement basé sur Silverlight (et oui, Silverlight dans SharePoint devient une habitude), ces graphiques ont l'avantage de permettre d'effectuer du drill-down (visualiser le détail à partir de données consolidées). Au vu de la démo online, cela semble un produit avec beaucoup d'avenir.

      Rich Interactive Charts

    Time Intelligence

    Nintex n'en est pas à son coup d'essai dans la mise en place de composants pour SharePoint puisqu'ils sont déjà les concepteurs de Nintex Workflow 2007 (http://www.nintex.com/Nproducts/Workflow.aspx). Ce composant s'intégre parfaitement avec SharePoint et permet de dessiner des workflows aisément au sein de l'interface web.

    Plus d'infos sur la page du constructeur: http://www.nintex.com/Nproducts/Reporting.aspx

  • SharePoint: Quand les Service Packs nous créent des soucis... On les résoud!

    Bien que les Service Packs soient disponibles et même, pour la plupart des gens, installés depuis plusieurs mois (pour SharePoint) voire même plusieurs années (pour Windows Server 2003), ce souci peut toujours survenir actuellement lorsque l'on met en place une infrastructure à base de Windows Server 2003, avec ou sans SharePoint.

    Dans l'event log applicatif, on peut ainsi retrouver deux erreurs récurentes: la 10016 et la 10021. Notez cependant que la "procédure" ci-dessous est valable pour toutes les erreurs liées aux permissions d'activation des composants DCOM.

    Pour corriger cela, rendez-vous dans les Component Services en passant par le panneau de configuration puis outils d'administration pour enfin arriver dans les services components.

    image image

    Une fois ces étapes passées, un petit tour dans la configuration DCOM nous permet de modifier les propriétés de ces composants.

    Correction de l'erreur 10021

    A la lecture du CLSID ({61738644-F196-11D0-9953-00C04FD919C1} - voir le paragraphe Connaitre le composant portant un CLSID particulier), on remarque qu'il s'agit du composant IIS WAMREG admin Service

    image

    Après un clic droit, vérifiez les droits concernant l'activation du composant.

    Dans le cas du IIS WAMREG admin Service, c'est l'utilisateur NETWORK SERVICE qui nécessite d'avoir les droits pour activer et lancer localement le composant.

    image image

    Correction de l'erreur 10016

    Comme indiqué précédemment, la procédure est valable quelque soit le composant DCOM pour lequel les droits nécessaires ne sont pas présents. C'est le cas avec le composant dont le CLSID est {3D42CCB1-4665-4620-92A3-478F47389230} qui est l'ID du composant OSearch.

    image

    Dans ce cas, les utilisateurs WSS_WPG et WSS_ADMIN_WPG doivent recevoir les droits d'activation et de lancement.

    Connaitre le composant portant un CLSID particulier

    Dans la boîte de dialogue "Exécuter" (menu Démarrer > Exécuter), entrez regedit (éditeur de la base de registre). A la suite de cela, faites une recherche à l'aide de CTRL + F.

    image

    Collez le CLSID dans la boite de recherche.

    image

    Vous obtenez ainsi rapidement le nom du composant qui pose problème.

    image

    Si vous n'avez pas accès, pour une raison ou une autre, à la base de registre, il vous faudra parcourir les propriétés de chacun des composants afin de trouver l'ID correspondant.

  • Renommer un serveur et un SharePoint installé en standalone

    Il est fréquent lors de tests ou du dévelopement de réaliser une image que l'on duplique. Si l'on connecte entre elles les différentes machines dupliquées, cela peut avoir des conséquences sur l'utilisation (conflit de noms, ...). Il convient dès lors de modifier le nom des machines afin d'éviter ceci.

    Modifier le nom d'un serveur peut être une opération complexe si l'on n'effectue l'ensemble des opérations nécessaires dans un ordre donné. Cette opération s'avère d'autant plus complexe qu'il héberge un SharePoint, que ce soit un WSS ou MOSS. Certaines opérations sont liées au serveur lui-même, tandis que d'autres sont liées au SharePoint installé sur celui-ci. Enfin, dans le cadre d'une duplication basée sur des machines virtuelles, d'autres opérations font alors leur apparition.

    • Modifier le nom du serveur
    • Modifier le SID

    Enfin, l'opération complémentaire à effectuer pour permettre au SharePoint est la suivante:

    • Modifier le nom indiqué du serveur stocké dans SharePoint
    • Modifier le mapping des urls

    Enfin, concernant le fait de dupliquer des machines virtuelles, il reste donc une étape nécessaire:

    • Modifier l'adresse MAC de la carte réseau simulée

    Voyons dès lors l'ordre dans lequel ces étapes doivent être réalisées.

    Modifier le mapping des urls

    Le mapping des urls permet à SharePoint de savoir ce à quoi l'on fait référence. Ainsi, il est nécessaire de lui préciser les urls utilisées pour faire appel à notre SharePoint.

    Pour cela, rendez-vous dans la central administration

    image_thumb47

    puis cliquez successivement sur les liens Operations

    image_thumb1

    et Alternate access mappings.

    image_thumb11

    Pourquoi cette opération? Tout simplement parce que SharePoint va recevoir une adresse qui sera http://monnomactuel/ par exemple alors que d'ici la fin de la procédure ce serveur s'appellera http://monnouveaunom. Il ne nous reste plus qu'à cliquer sur chacun des liens afin de modifier les urls indiquées.

    image_thumb51 

    image_thumb40

    Renommage du server SharePoint

    Certaines références à notre ancien nom existent toujours au sein de notre SharePoint. Il est donc nécessaire de spécifier qu'il est nécessaire de modifier ce nom partout au sein de SharePoint.

    Pour réaliser l'opération, rendez-vous dans le répertoire c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN (le répertoire par défaut pour STSADM)

    En ligne de commande, effectuer la commande suivante:

    stsadm -o renameserver -newservername monnouveaunom -oldservername monnomactuel

    Il est nécessaire, comme pour toutes les opérations de stsadm, d'être membre du groupe administrateurs local.

    Changement du SID ainsi que le nom de la machine

    Qu'est ce que le SID? Le "Computer Security Identifier" ou "Identificateur de Sécurité" permet d'identifier un ordinateur (plus précisément le système d'exploitation qui y est installé). Ce SID est créé et assigné dès les premières phases de l'installation du Windows.

    Pourquoi est-il nécessaire de modifier le SID lors d'un clonage d'un Windows, quel qu'il soit? C'est sur base du SID qu'un serveur est identifié dans un domaine. Par ailleurs, lorsque des utilisateurs locaux sont créés, ils se verront assignés un ID basé sur le SID (il s'agit de la concaténation du SID et d'un "compteur"). Sachant que la sécurité est basée sur les SID des comptes locaux, on comprend aisément l'impact que peut avoir cette duplication des SID.

    L'outil recommandé pour ce type d'opération se nomme NewSID, développé par sysinternals et repris par Microsoft. Nous en sommes actuellement à la version 4.10. Il est gratuit et disponible à l'adresse suivante: http://download.sysinternals.com/Files/NewSid.zip (68 Ko)

    Cet outil permet de plus de modifier le nom d'un serveur, opération également nécessaire dans le cas d'un renommage, le tout en une seule opération.

    Renommer le serveur est nécessaire afin d'y accéder. Effectivement, lorsque l'on fait appel à http://monnouveaunom, le serveur cherche de quelle machine on parle. Ainsi, il faut modifier les noms Netbios et DNS qui ont cet objectif.

    Un petit tour rapide des écrans proposés par NewSID... On se rend rapidement compte qu'il suffit de suivre les étapes et d'indiquer le nouveau nom de la machine.

    image_thumb  image_thumb1[1]  image_thumb2 image_thumb4  image_thumb3  image26_thumb 

    Automatiquement, Windows redémarre afin d'être certain que toutes les noms soient cohérents et qu'à aucun moment l'ancien nom ne figure dans le cache.

    Modification des credentials

    En ligne de commande, effectuer la commande suivante:

    stsadm -o updatefarmcredentials -userlogin monuser -password monpassword

    image_thumb43 

    Redémarrage du serveur IIS

    IIS, pour des raisons de performances, place toute une série d'éléments en cache. Pour supprimer le cache, le plus simple, vu que nous sommes dans une période durant laquelle notre SharePoint risque de toute façon de ne pas être disponible, il suffit de redémarrer le serveur.

    Toujours en ligne de commande, tapez

    iisreset /noforce

    image_thumb45

    Modifier l'adresse MAC

    L'adresse MAC est une adresse "en dur" indiquée dans chaque carte réseau. Cette carte permet d'identifier la carte réseau utilisée.

    L'utilisation d'une machine ne retire en rien les principes basés sur l'adresse MAC. Cependant, vu qu'il s'agit d'une machine virtuelle (et ne disposant pas de carte réseau physique), celle-ci partage la connexion de la machine hôte et utilise une adresse MAC également virtuelle. Cette adresse est définie dans le fichier de configuration de la machine virtuelle (le fichier .vmc). Ainsi, dans ce fichier, il faut modifier le <ethernet_card_address>.

    <ethernet_card_address type="bytes">0003FF36E666</ethernet_card_address>

    On y est!

    Nous voici donc avec un serveur SharePoint renommé et fonctionnant parfaitement.

More Posts Next page »
L'auteur du site ne peut être tenu responsable des dommages que les informations fournies pourraient entraîner. Tout est cependant mis en oeuvre pour éviter tout désagrément.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems