25 décembre 2012

SHAREPOINT 2013 : Déploiements non supportés

Aujourd'hui un post sur SharePoint 2013. Avant de rentrer dans le dur sur cette nouvelle version, nous allons faire un état des lieux des installations de SharePoint 2013 non supportées par Microsoft:
 
  • Installation sur un disque formaté en Refs (Resident File System),
  • Installation en dehors d'un domaine (c'est à dire sur un groupe de travail),
  • Installation sur un contrôleur de domaine. Cette configuration est autorisée uniquement dans le cas d'un machine de développement ou de démonstration,
  • Installation sur un Windows de type "Web Server",
  • Installation sur une machine virtuelle utilisant la fonctionnalité "Dynamic memory". Cette fonctionnalité apparue dans Windows 2008 R2 SP1 permet de fournir une plage de mémoire minimale et maximale de mémoire allouée dynamiquement. Mais cette gestion dynamique n'est pas supporté epour SharePoint 2013 car certains services applicatifs tels qu'AppFabric ne supportent pas cette gestion dynamique.
 
Pour la virtualisation des infrastructures SharePoint, il est possible de mettre en place "Hyper-V". Dans ce cas, je vous recommande fortement de suivre les "best practices" énoncés à cet endroit : http://technet.microsoft.com/en-US/library/ff621103(v=office.15).aspx

16 décembre 2012

INFOPATH 2013 : Clear Cache

Lorsque vous ouvrez un formulaire InfoPath, le modèle est mis en cache sur votre machine: dans le répertoire local de l'utilisateur ("C:\Documents and Settings\[UserSession]\Local Settings\Application Data\Microsoft\InfoPath").
 
Lorsqu'une nouvelle version du formulaire est déployée (en local ou sur SharePoint), InfoPath détecte le changement et ouvre la dernière version du formulaire.
Dans certains cas, le formulaire précédemment mis en cache peut poser problème et bloquer la mise à jour automatique (par exemple lorsque les anciennes connexions de données à l'ouverture ne sont plus accessibles).
 
Pour réaliser manuellement cette action, il vous suffira de lancer la commande suivante:
 > Menu Démarrer > Exécuter > "Infopath /cache clearall"
 
Ainsi tous les formulaires présents dans le cache de l'utilisateur seront supprimés et la dernière version publiée du formulaire sera utilisée.

12 décembre 2012

SharePoint 2010 : Permission groupe AD non immédiat

Lors de l'utilisation quotidienne SharePoint 2010, vous pouvez être amené à vouloir ajouter un groupe AD dans un groupe SharePoint afin de faciliter l'administration des accès aux sites.
Si vous utilisez le mode d'authentification " Claims" sur votre Web application, vous pourrez être surpris du fait qu'un membre de votre groupe AD n'ait pas accès au site immédiatement au site, ni 1h après d'ailleurs...
 
Après quelques recherches, il s'avère que ce fonctionnement provient du "token-timout" utilisé par la méthode d'authentification "Claims".
Par défaut, cette valeur est définie à 1440 minutes (soit 24 heures)... Ce qui signifie que les modifications effectuées sur les membres d'un groupe AD ne sont pas répercutées en temps réel dans notre cher SharePoint.

 
Pour obtenir la valeur en vigueur sur votre ferme:
stsadm -o getproperty -propertyname token-timeout

Pour modifier temporairement cette valeur, vous pouvez utiliser la commande suivante:
stsadm -o setproperty -propertyname token-timeout -propertyvalue
 
 

30 novembre 2012

SHAREPOINT 2013 : Déploiement de solution

Aujourd'hui un article concernant SharePoint 2013 et une grande nouveauté concernant le déploiement des solutions.
 
A présent, SharePoint dispose de 2 répertoires dans le file system nommés "14" et "15".
  • Le répertoire "14" permettant de gérer le sites migrés en mode de compatibilité SharePoint 2010,
  • Le répertoire "15" permettant de gérer les nouveaux sites et les sites migrés en SharePoint 2013.
 
En effet, la grande nouveauté dans le déploiement est qu'un site migré peut toujours utiliser la définition 2010 puis pourra à tout moment être upgradé vers la définition 2013! Cela permet de proposer une migration rapide et transparente vers les nouvelles versions de SharePoint.
 
Par contre, il est évident que ce principe de double répertoire entraine une problématique dans le déploiement des fonctionnalités!
Il existe un nouveau paramètre : "CompatibilityLevel" (sur la commande "Install-SPSolution") permettant de préciser le mode de déploiement de la solution dans l'administration centrale:
Les valeurs possible pour ce paramètre sont les suivantes:
  • "14" : Installe la solution dans le répertoire "14" de SharePoint 2013,
  • "OldVersions" ou "Old" : Installe la solution dans le répertoire "14" de SharePoint 2013,
 
  • "15" : Installe la solution dans le répertoire "15" de SharePoint 2013,
  • "NewVersion" ou "New" : Installe la solution dans le répertoire "15" de SharePoint 2013,
 
  • "14,15" : Installe la solution dans les deux répertoires de SharePoint 2013,
  • "AllVersions" ou "All" : Installe la solution dans les deux répertoires de SharePoint 2013,
 
Il faudra donc retravailler quelques peu certains WSP afin de les adapter à leur cible!
Par exemple certains modèles de sites personnalisés devront faire partie d'un nouveau WSP dédié au répertoire 15 tandis que certaines fonctionnalités pourront être déployées dans les 2 répertoires sans ajustement.
 
Une grande attention devra être apportée à cette nouvelle méthode de compatibilité et à la méthodologie de repackaging des solutions car cette architecture sera amenée à perdurer dans les prochaines versions.

25 novembre 2012

INFOPATH : Supprimer lignes extensibles

Aujourd'hui un petit article relatif à une question récurrente sur les éléments extensibles d'InfoPath. Bien souvent, les utilisateurs ont besoin de supprimer toutes les lignes d'un tableau ou d'une section extensible.
Il n'existe aucun moyen simple de réaliser ceci en travaillant par l'interface. Par contre cela se fait assez facilement en utilisant du code managé.
 
Pour se faire, il est possible d'utiliser la procédure C# ci-dessous.
Comme son nom l'indique, cette procédure permet de supprimer tous les nœuds enfants d'un nœud spécifié en paramètre :
 
        private void RemoveAllChildren(string strNode, XPathNavigator formNavigator)
        {

            try
            {
                XPathNavigator rowsNav = formNavigator.SelectSingleNode(strNode, NamespaceManager);
                XPathNavigator lastChild = rowsNav.SelectSingleNode("child::*[position() = last()]", NamespaceManager);
                XPathNavigator firstChild = rowsNav.SelectSingleNode("child::*[position() =1]", NamespaceManager);

                if ((firstChild != null) && (lastChild != null))
                {
                    firstChild.DeleteRange(lastChild);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Une erreur est survenue lors de la fonction 'RemoveAllChildren' appliquée sur le noeud '" + strNode + "'.", ex);
            }
        }
 
 
Pour appeler cette procédure, il suffit d'utiliser le code de la manière suivante:
      RemoveAllChildren("//my:NomParentExtensible", this.Maindatesource.CreateNavigator());