Affichages personnels, ?contents=1 et ?PageView

Les affichages personnels c’est à la fois le bien et le mal, surtout lorsque ça touche à la sacro-sainte default.aspx

« Génial on peut modifier notre page à la demande ».

« Mais où sont passés mes Web Parts ? Ca plante encore votre bousin »

Néanmoins deux petites astuces pour pouvoir vous sauver de toutes les situations :

  • …/maPage.aspx?PageView=Shared : permet d’afficher l’affichage partagé
  • …/maPage?PageView=Personal : à l’inverse, permet d’afficher l’affichage personnel de l’utilisateur
  • …/maPage?contents=1 : permet d’afficher la page de maintenance des composants WebParts de la page. Permet, entre autre choses, de restaurer les WebParts supprimés ou fermés. Pour avoir accès à cette interface il faut un niveau d’autorisation vous octroyant « Mettre à jour des composants Web Parts personnels » (à ne pas mettre entre toutes les mains).

Timer Job Product Version Job : Erreurs 10016, 1015

Dans la série « Les anomalies redondantes » …

Chaque jour, à 0:45, s’exécute un Timer Job intitulé « Product Version Job ». Ou en français dans le texte « Travail de version de produit ». Comme l’indique l’article TechNet faisant référence aux travaux du minuteur, ce job vérifie l’état d’installation de l’ordinateur et ajoute ces données à la base de données. Soit …

Certaines manipulations permettant de résoudre les différentes remontées d’anomalies liées à ce job existent. Mais comme l’indique Tristan Watkins, en absence de réponse claire et précise sur le sujet, il est préférable de vivre avec ces événements et de les superviser plutôt que de s’affranchir des informations capitales qu’ils peuvent délivrer.

Références :

Synchronisation des Profils utilisateurs : NetBios VS. Domain

Vous avez un domaine du type « mon-entreprise.fr » et votre nom NetBios se trouve être « monentreprise » ? ce cas particulier peut frapper la synchronisation de vos profils utlisateurs (via l’application de service Profil utilisateur).

En l’occurence, ForeFront Identity Manager (FIM) synchronise les informations relatives à des personnes (login de l’utilisateur ou encore son manager / N+1) de telle manière à mapper le nom du du domaine avec le nom NetBios de votre entreprise. En l’occurence la référence à une personne, qui aurait du être initialement de la forme « domaine\login », vous sera retourné de la manière suivante « cn\login ».

Pour palier à ce soucis, voici la marche à suivre :

– Sur votre serveur applicatif, ouvrez une fenêtre de commandes PowerShell SharePoint 2010 :

  • Get-SPServiceApplication
  • Notez le Guid du service d’application Profil utilisateur
  • $profil= Get-SPServiceApplication –Identity {Guid de votre service d’application Profil utilisateur}
  • $profil.NetBiosDomainNamesEnabled
  • Si la valeur retourné est « False » passez à l’étape suivante
  • $profil.NetBiosDomainNamesEnabled = « True »
  • $profil.update()
  • Vérifiez si la valeur est bien à « True » via $profil.NetBiosDomainNamesEnabled

– Créez maintenant une nouvelle Connexion de synchronisation.

Petite subtilité, si vous recréez une Connexion à l’identique de ce que vous aviez précédemment (par exemple une OU particulière de votre Active Directory) : l’ensemble de vos profils,même s’il se mettent correctement à jour, ne seront plus visibles par la fonction de recherche des profils utilisateur (menu « Gérer les profils utilisateurs »). Configurez donc cette nouvelle connexion de synchronisation de façon qu’il se synchronise sur une OU ne contenant pas les profils utilisateurs précédemment synchronisés.

Une fois créée, supprimez l’ancienne Connexion de synchronisation puis lancez une synchronisation complète.

Logiquement le nombre de vos profils devrait être réduit au sceptre de l’OU spécifiée (idéalement = 0 profils synchronisés).

Reconfigurez la connexion de synchronisation pour qu’il pointe vers la bonne OU (comme initialement) et relancez une synchronisation complète. Vous devriez logiquement avoir des noms de personnes du type « domain\login » et pouvoir utiliser la recherche de profils.

Application de service Profil utilisateur : Erreurs 5555, 6801, 6803

J’ai constaté dernièrement toute une batterie d’erreurs dont le détail faisait directement référence à l’application de service « Profil utilisateur » (je vous fais grâce des alertes / avertissements liés) :

  • Erreur 5555 – SharePoint Portal Server : Échec lors de la tentative de synchronisation de l’application Web {Guid}, base de données de contenu {Guid}. Message de l’exception : Mcrosoft.Office.Server.UserProfiles.UserProfileApplicationNotAvailableException: Aucune application de profil utilisateur n’est disponible pour traiter la demande. Contactez l’administrateur de la batterie de serveurs
  • Erreur 6801 – FIMSynchronizationService : The extensible extension returned an unsupported error (…)
  • Erreur 6803 – FIMSynchronizationService : The management agent « MOSS-{Guid} » failed on run profile « MOSS_DELTAIMPORT_{Guid} » because the server encountered errors.

Ces erreurs sont apparement des remontées classiques d’une malfonction de l’application de service en question. Celles-ci furent générés par une manipulation assez singulière : la reconfiguration de l’URL d’accès de la Centrale d’administration.

Trois cas de figure sont possibles :

NB : Dans mon cas -histoire de compléxifier la chose- il s’agissait des 3 cas de figure combinés, à savoir passer de http://serveur:8080 à https://serveur.domain.com:9999

Il faut savoir que pour synchroniser les profils utilisateurs à partir d’un annuaire, SharePoint utilise une usine à gaz joliment nommée ForeFront Identity Manager (FIM).

Ce dernier communique avec l’application de service en consommant un WebService SharePoint (ProfileImportExportService.asmx) configuré à l’installation du produit. En l’occurence, si vous aviez une URL d’accès à votre Centrale d’administration à l’installation et que celle-ci change entre-temps, la configuration de votre ForeFront Identity Manager se trouve être fausse.

Pour palier à cette anomalie, voici les opérations à mener :

  1. Connectez-vous au serveur exécutant l’application de service de Profil utilisateur. Utilisez le compte de service lié à l’application de service (ou le cas échéant, le compte de la ferme SharePoint).
  2. Vous connecter à FIM via miisclient.exe, qui se trouve à cet emplacement (faire varier la lettre de lecteur suivant votre installation) : C:\Program Files\Microsoft Office Servers\14.0\Synchronization Service\UIShell
  3. Si miisclient.exe vous retourne une erreur à l’ouverture vérifiez les points suivants :
    • Le service de synchronisation est-il lancé ?
    • Le compte de service (le compte de la ferme) est-il bien renseigné dans les groupes d’utilisateurs locaux liés à FIM : FIMSyncBrowse, FIMSyncJoiners, FIMSyncOperators et FIMSyncPasswordSet.
  4. Une fois miisclient.exe ouvert (onglet « Operations »), vous devriez constater les multiples erreurs de synchronisation (stopped-extension-dll-exception).
  5. Cliquez sur l’onglet Management Agents puis ouvrez les propriétés de l’Extensible Connectivity (ce dernier doit logiquement être nommé de la façon suivante : MOSS-{guid}).
  6. Sous le menu Configure Connection Information vous pouvez lire en bas de la fenêtre les informations utilisées par FIM pour la sychronisation :
    • Connect to : direct://serveur:8080 à remplacer par la bonne information. Laissez le protocole « direct:// » sauf si utilisation du SSL où vous utiliserez « https:// ». Dans tous les cas indiquez l’URL + n° de port utilisés pour accéder à votre Centrale d’administration. Exemple : https://serveur.domain.com:9999
    • Compte + utilisateur de l’application de service Profil utilisateur.
  7. Relancez un import complet et constatez le succès de l’import (success). Pensez aussi, dans le cas où vous planifiez des imports incrémentiels, à superviser le bon déroulement de ces derniers.

Utiliser la machine virtuelle 2010 Information Worker sous VMWare

Microsoft nous fourni un environnement virtualisé contenant l’ensemble de la nouvelle gamme 2010 de Microsoft. Bien pratique pour permettre d’évaluer SharePoint 2010 en environnement « full Microsoft », tout ça au travers d’exemples concrets ainsi qu’une Active Directory d’environ 200 comptes utilisateurs (incluant un large panel de méta-données).

Pour les télécharger ça se passe ici :

Le détail des deux machines virtuelles :

Machine virtuelle « a »

  1. Windows Server 2008 R2 Standard Evaluation Edition x64
  2. Active Directory Domain Controller pour le domaine « CONTOSO.COM » + DNS et WINS
  3. Microsoft SQL Server 2008 R2 Enterprise Edition + Analysis, Notification et Reporting Services
  4. Microsoft Office Communication Server 2007 R2
  5. Microsoft Visual Studio 2010
  6. Microsoft SharePoint Server 2010 Enterprise Edition
  7. Microsoft Office Web Applications
  8. Microsoft FAST Search for SharePoint 2010
  9. Microsoft Project Server 2010
  10. Microsoft Office Professional Plus 2010
  11. Microsoft Visio 2010
  12. Microsoft Project 2010
  13. Microsoft Office Communicator 2007 R2

Machine virtuelle « b »

  1. Windows Server 2008 R2 Standard Evaluation Edition x64 connecté au domaine « CONTOSO.COM »
  2. Microsoft Exchange Server 2010

Etape 1 : Hyper-V, VHD ? non merci …

Après avoir téléchargé et décompressé les fichiers archivés, je me suis vite rendu à l’évidence que NON, je n’allais pas installer Windows Server 2008 sur mon poste juste pour cette démo. Ayant pris l’habitude d’utiliser VMWare Workstation, ça me faisait mal de devoir au mieux jongler avec deux OS en multiboot (Windows 7 et donc, Windows Server 2008), au pire devoir réinstaller mon poste.

La première chose à laquelle je me suis essayé fut donc d’essayer d’exploiter la possibilité de Windows 7 en matière de boot VHD. Galère, galère … c’est sans compter que je perdais mon système hôte, la faculté de faire des snapshots, etc. Notez néanmoins que cette technique est particulièrement intéressante si vous avez une machine un peu limite niveau ressources système (notamment côté mémoire).

Quelques articles sur le sujet, pour ceux que ça intéresse :

Etape 2 : VHD vers VMDK

Non, moi, ce qui m’intéressait réellement c’était de pouvoir utiliser ces machines virtuelle (et principalement la première) sous VMWare Workstation, voir même VMWare ESX 3.5.

Première étape, convertir les fichiers VHD en VMDK. VMWare nous fourni des outils de conversion. Ce n’est pas faute d’avoir tenté et celui de VMWare Workstation, et celui de VMWare ESX voir même VMWare Converter Standalone mais rien n’y fait …

Encore un complot ? Une sombre histoire de version liée à Hyper-V ? Bref, j’ai arrêté de me torturer grâce à StarWind V2V Converter. L’outil est gratuit, on aurait tord de s’en priver.

Le choix est assez large

La conversion prend son temps mais fonctionne. Je n’ai néanmoins pas réussi à convertir la machine virtuelle en format VMWare ESX … je me contenterais du format Workstation pour le moment (je trouverais bien une solution d’ici là).

Etape 3 : Paramétrer la bête

Avant tout, il va nous falloir créer une machine virtuelle à laquelle nous allons greffer notre disque dur VMDK. Sous VMWare Workstation 7 suivez les étapes suivantes :

  1. File > New … > Virtual Machine
  2. Sélectionnez « Typical »
  3. Sélectionnez « I will install the operating system later »
  4. Sélectionnez « Microsoft Windows » et la version « Windows Server 2008 R2 x64 »
  5. Nommez et indiquez le chemin de stockage de votre future machine virtuelle
  6. Faites « Next » (la partie relative à la capacité du disque dur ne nous intéresse pas)
  7. Cliquez sur « Finish »
  8. Rendez-vous dans les paramètres de votre machine virtuelle : clic droits > Settings
  9. Supprimez l’entrée « Hard Disk (IDE) » : nous allons le remplacer par le VMDK précédemment généré
  10. Cliquez sur « Add », choisissez « Hard disk » puis « Next »
  11. Sélectionnez « Use an existing virtual disk »
  12. Indiquez le chemin de votre disque virtuel (idéalement copiez-le dans le dossier de votre machine virtuelle)
  13. Cliquez sur « Finish »
  14. Configurez la mémoire suivant vos ressources : dans « Settings », « Memory » ajustez la mémoire (3000 MB au minimum, 4000 MB et plus idéalement)
  15. Démarrez la machine virtuelle
  16. Une fois votre machine démarrée, vous devriez logiquement avoir un accès à Internet (la configuration d’une machine virtuelle VMWare par défaut le permet). Profitez de cet instant pour valider la licence de Windows Server 2008 (propriétés du poste de travail), ainsi que la suite Office (modifier l’installation dans ajout/supprimer de programmes)
  17. Installez également les VMWare Tools (toujours pratique pour accéder au file system du poste hôte)

Passer d’Hyper-V à VMWare n’est pas nativement implicite. Heureusement, côté software rien ne pose problème du côté de la machine virtuelle 2010 Information Worker. Mais au démarrage, premier constat : impossible d’exécuter les applications SharePoint sorti de l’administration centrale. Un problème DNS ? Rien de tout ça.

Tout se trouve dans le document de configuration des machines virtuelle (voir les liens de téléchargement plus haut). En fait la machine virtuelle est à la fois contrôleur de domaine, serveur DNS, serveur SharePoint, etc. ce qui nécessite de configurer deux cartes réseau (voir 3 comme c’est mon cas, histoire de conserver mon accès Internet) :

  1. Retournez dans les settings
  2. Configurez le « Network Adapter » créé de base. Changez son type de connexion en « Host-only »
  3. Ajoutez une nouvelle carte réseau : Add > Network Adapter
  4. Sélectionnez « Host-only »
  5. Si la machine virtuelle tourne, VMWare devrait logiquement effectuer une sauvegarde de l’état de votre machine (sauvegarde qui devrait durer quelques minutes)

Maintenant configurons ces cartes réseau côté Windows :

  • Carte réseau 1 (IPv4) : ip fixe 192.168.150.1/255.255.255.0
  • Carte réseau 2 (IPv4) : ip fixe 192.168.150.6/255.255.255.0 – Preferred DNS Server : 192.168.150.1

Ignorez les erreurs relatives au « Microsoft Virtual Machine Bus », il s’agit d’une référence de l’ancienne configuration Hyper-V.

Pour conserver la connexion Internet rajoutez une nouvelle carte réseau et laissez la configuration de cette dernière de base (type NAT côté VMWare + récupération automatique d’une adresse IP côté carte réseau sous Windows Server).

Voilà, si vous avez suivi ce rapide tutoriel vous devriez pour pouvoir faire fonctionner la machine virtuelle 2010 Information Worker sous VMWare.

Intégrer des applications Lotus Notes dans SharePoint

Lorsque l’on parle intégration dans SharePoint on peut rapidement citer les méthodes suivantes comme étant communément « valables » (ie. via le framework .NET tout est intégrable) :

  • Consommer des WebServices voir des flux XML
  • Utiliser des WebParts (fournis par l’éditeur tiers voir la communauté)
  • Indexer une source connexe via le moteur de recherche de SharePoint
  • Possibilité d’intégrer des sources de données externes au service d’authentification via le Membership Provider
  • Utiliser le Business Connectivity Services (où son grand frère, le Business Data Catalog)

La méthode décrite ci-dessous n’utilise aucune de ses méthodes, où tout du moins pas à 100%. Toute la méthode repose sur l’utilisation d’un plugin WebSphere. Il ne s’agit pas d’une faute de frappe … néanmoins la finalité est bien celle que nous recherchons, offrir la possibilité d’intégrer des applications Lotus sous SharePoint et ce de façon transparente pour l’utilisateur.

IBM, dans sa grande sagesse, nous fournit un article détaillant la méthodologie à employer : Installing and Configuring Domino 6 for use with Microsoft IIS. La marche à suivre parait un peu « batarde » mais fonctionne parfaitement et c’est bien le principal (je ne garantie pas la compatibilité de la méthode mais sachez néanmoins que cela fonctionne sur des serveurs Domino en versions 7, 8 et 8.5).

Voici un exemple de fichier de configuration permettant d’interfacer Domino Web Access via IIS.

Concernant la partie authentification, à savoir le mapping entre l’Active Directory et Lotus Domino (nous permettant de nous connecter au serveur Lotus via notre identifiant AD, incluant également les notions de LCA Lotus), tout se passe au niveau de la configuration de l’annuaire (renseignez-vous auprès de votre administrateur Domino). Une fois cette manipulation faite assurez-vous d’avoir la possibilité d’accéder à votre serveur Domino via internet.

Pour finir il vous suffit d’utiliser le WebPart le plus basique qui soit, à savoir la visionneuse de pages et de configurer le lien vers l’application tel que vous l’aviez paramétrée dans le fichier de configuration du plugin WebSphere. Exemple pour le Domino Web Access :

Visionneuse

A savoir également, pour les non-initiés, que dwar.nsf gère la redirection des personnes connectées vers leur boîte mail personelle (/maboitemail.nsf).

A voir également :

Exam 70-631: Microsoft Windows SharePoint Services 3.0, Configuring

Suite à mon passage avec succès la certification SharePoint la plus basique qui soit, un petit conseil : évitez -comme moi- de suivre le cursus en français si vous révisez à l’aide de tests blancs en anglais. Ça parait évident mais cela m’a fait commettre ma seule erreur. Notez néanmoins que j’installe le plus souvent des systèmes traduits en français … mais le but d’une certification reste de valider vos connaissances et de l’obtenir (accessoirement hein ^^).

Au passage, Joel Oleson vient de publier un billet intéressant sur les futures certifications SharePoint 2010.

Feedback installation SharePoint 2010

Passés les premières évaluations du produit, il ne m’a pas fallu longtemps pour implémenter une plateforme SP2010 (Beta) dans un environnement autre que celui de mon labo interne. Autrement dit, voici déjà venu l’implémentation d’un pilote chez un client.

Au niveau de l’installation à proprement parler, sorti du cap des pré-requis matériels et logiciels (à base de Service Pack + Hotfix), les réflexes sont les même que ceux acquis sur MOSS 2007.

Néanmoins, nouvelle version + Beta oblige j’ai du faire face à mon lot de bugs et autres obstacles avant de pouvoir passer en mode bac-à-sable côté fonctionnel de l’application. Et plus particulièrement un problème d’authentification à la création des bases de configuration / administration. A force de recherches j’ai réussi à localiser la source du problème : http://ethan-deng.com/SharePoint2010InstallationIssues.aspx

A noter néanmoins que côté résolution de l’erreur, il nous a fallu nous connecter avec le compte d’administration SharePoint spécialement créé pour l’occasion (lequel avait les pleins pouvoirs sur l’AD) pour finaliser le déroulement de l’assistant de configuration.

Autre problème lors du changement des Alternate Access Mapping (permattant d’accéder via une URL différente que le nom propre du serveur). Ça se passe ici : http://social.technet.microsoft.com/Forums/en/sharepoint2010setup/thread/a9e6b9c2-6494-431e-a389-5d4ec79bd02e

Le reste n’est que paramétrage tout ce qu’il y a de plus classique.

VSTO/Outlook et le Global Address List

Et un article barbare ! un ! Donc, comment récupérer les contacts de notre GAL (Global Address List) à partir d’un développement Outlook ?

Apparement ils ont oublié de faire le boulot (là j’parle de nos amis de chez Microsoft). On se limite seulement aux contacts favoris relatif au client Outlook. Pour accéder aux contacts enregistrés sur le serveur Exchange, il faut utiliser des API bien spécifiques. C’est la tâche à laquelle s’est attelé un MVP en écrivant une classe assez complète.

C’est ici que ça se passe: http://www.dimastr.com/redemption
Un petit exemple de code en C# (le VB.NET est largement commenté sur le site de Redemption) :
//On déclare notre application Outlook
Application outlook = Globals.ThisAddIn.Application;
//Puis un NameSpace de type MAPI
NameSpace ns = outlook.GetNamespace(« MAPI »);
//Ensuite une session Redemption
RDOSessionClass rdoSession = new RDOSessionClass();
//L’objet MAPI de notre session mappé avec celui de notre namespace
rdoSession.MAPIOBJECT = ns.MAPIOBJECT;
//Un objet Adress Book
RDOAddressBook rdoAdd = rdoSession.AddressBook;
//On parcoure les entrées du GAL
foreach (RDOAddressEntry rdoEnt in rdoAdd.GAL.AddressEntries)
{
//On récupère le nom de l’entrée
string sName = rdoEnt.Name.ToString();
//Puis le fax
const int PR_PRIMARY_FAX_NUMBER = 0x3A23001E;
string sFaxNumber = (string)rdoEnt.get_Fields(PR_PRIMARY_FAX_NUMBER);
}
Quelques remarques :
  • Petite subtilité concernant le fax. Seules certaines propriétés de l’entrée sont disponibles. Pour les autres -comme dans notre exemple, le fax- ils faut utiliser la fonction get_fields() en lui indiquant la constante héxadecimale correspondante, puis caster la valeur récupérée comme il faut.
  • Les données en question se trouvent ici : http://www.cdolive.com/cdo10.htm.
  • Utilisez le prefixe &H pour le VB.NET, et 0x pour le C#.
  • Pour savoir à quel champ correspond quelle donnée, utilisez l’utilitaire OutlookSpy : http://www.dimastr.com/outspy

SharePoint 2007 – Forces et faiblesses

La formule peut étonner. A priori lorsqu’on utilise une telle présentation c’est avant tout pour vendre son produit (où tout du moins son concept). Pas spécialement ma philosophie.

Ayant l’opportunité de travailler sur plusieurs plateformes, j’ai pris parti de traiter du sujet comme j’aimerais qu’on me le présente. A savoir, comme une solution imparfaite, malgré son leadership annoncé (ou quasi …).

Bien évidemment, tout ceci peut porter à jugement, voir être critiqué, mais dites-vous bien que seul le discours l’accompagnant lui donnera son intérêt (oui, s’il vous plait, arrêtez avec vos slides prêtes à lire …).

Bref, il va falloir revoir tout ça en profondeur. Les dernières annonces SharePoint, etc.

Wait and see …