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());

5 novembre 2012

SharePoint 2013 : Cache distribué

Aujourd'hui, un nouvel article sur SharePoint 2013 et l'optimisation des ses performances sur nos machines de développement!
 
Comme cela a été évoqué dans un article précédent, la version de SharePoint Server 2013 nécessite 24 Go de RAM disponible pour un serveur en mode Standalone...

Malheureusement tout le monde n'a pas la chance de pouvoir jouer avec du SSD sur un PC portable, donc le besoin d'optimisation des performances devient vite très important.

Après l'article permettant de diminuer l'impact de la recherche sur la RAM (lire ici), nous allons à présent nous attaquer au cache distribué utilisé par SharePoint 2013. En effet, le service "Distributed cache" se situe souvent dans le haut du panier lorsque l'on cherche les services gourmands dans le gestionnaire des tâches.
Il est possible d'éteindre tout simplement ce service mais une solution plus élégante reste tout de même de le paramétrer correctement...
Il est donc possible d'influer sur la taille de ce cache distribué en suivant les actions suivantes:
  • Se connecter à l'administration centrale de votre serveur SharePoint,
  • Se placer dans la catégorie "Services sur le serveur",
  • Arrêter le service de cache distribué,
  • Lancer la commande Powershell suivante : "Update-SPDistributedCacheSize -CacheSizeInMB CacheSize", où CacheSize représente l'allocation maximale autorisée en MB (équivalent à : (RAM maximale sur la machine - 2Go) / 2).
  • Redémarrer le service de cache distribué
  
En combinant le paramétrage de la recherche rédigé dans l'article disponible ici, et ce paramétrage du cache distribué, il est possible de lancer une machine virtuelle de démonstration SharePoint Server 2013 (embarquant SQL Server 2012 et Visual Studio 2012 et Office 2013) avec seulement 5 Go de RAM.

22 octobre 2012

SharePoint 2013 : Géolocalisation

Aujourd'hui un petit article sur SharePoint 2013 et une nouveauté sympathique qui est la géolocalisation!
 
Au premier abord, il ne semble pas possible d'utiliser cette fonctionnalité car le type de colonne associé ne peut pas être créé. 
Pour réaliser notre besoin, il faudra lancer une commande PowerShell sur les sites (ou réaliser ceci par du code managé):
 
$weburl = "http://votresite"
$fieldXml = ""
$web = get-spweb $weburl
$field = $web.Fields.AddFieldAsXml($fieldXml)
$web.Update()
 
Suite au passage de ces commandes, une nouvelle colonne de site nommée 'Localisation" sera ajoutée à votre site.
Cette colonne est à présent disponible pour être utilisée. Pour cela, nous allons créer une liste personnalisée. Dans les paramètres de cette liste, il est possible de rajouter une colonne à partir d'une colonne de sites puis il faudra sélectionner la colonne "Localisation".

Vous pourrez à présent ajouter des éléments dans votre liste en utilisant la géolocalisation. Le champ nous permet de saisie la géolocalisation en utilisant les éléments suivants:
  • Position actuelle en utilisant le paramètre du navigateur.
  • Coordonnées GPS en remplissant les latitudes et longitudes.
Le rendu basique des éléments de la bibliothèque sera le suivant:
 
 
Lors du clic sur l'image globe, vous verez apparaitre une carte détaillée correspondant à la localisation renseignée. Ce composant utilise Bing Maps mais nécessite la création d'un compte d'utilisation sous peine d'avoir un joli message en plein milieu de la carte...
Pour utiliser pleinement les fonctionnalités de géolocalisation, il faudra affecter un compte Bing à votre ferme SharePoint: http://msdn.microsoft.com/en-us/library/jj163283(v=office.15).aspx
 
Il est ensuite possible de présenter la liste des points sur la même carte. Pour cela il faut créer une nouvelle vue de type "Carte" dans cette bibliothèque. Ce genre de vue a été rajouté automatiquement par SharePoint suite à l'utilisation de la colonne de type "Géolocalisation" à votre liste SharePoint.
 
Une fois cette vue de type "Carte" créée, vous pourrez présenter l'information comme vous le souhaitez. Par exemple, vous pourrez ajouter une WebPart sur la page d'accueil de votre site et avoir la présentation suivante:
 
 
 
Ceci vous permettra d'avoir une présentation centralisée des points de géolocalisation de votre liste.
Ce genre d'intégration offre de nouvelles perspectives pour les entreprises. Nous pouvons par exemple penser aux cas métiers suivants:
  • Localisation des hôtels et restaurants pour les déplacements des collaborateurs,
  • Localisation des points de ventes, d'une entreprise
  • Conception d'application métiers de détection d'évènements,
  • ...
 
Bienvenue dans votre SharePoint à la carte!

15 octobre 2012

SharePoint 2013 : Noderunner.exe

Aujourd'hui, un nouvel article sur SharePoint 2013!
En travaillant quotidiennement sur la nouvelle mouture de SharePoint Server, il s'avère que cette version est très plaisante mais qu'elle est aussi beaucoup plus gourmande que la précédente version en terme de consommation de ressources machine.
En allant faire un tour sur le Technet au niveau des prérequis matériels de SharePoint 2013, cette assertion est confirmée:
 
Il faut pour l'instant compter 8Go de RAM pour une installation SharePoint Foundation 2013 et 24Go de RAM pour la version SharePoint Server 2013! (oui oui 24Gb, ce n'est pas une erreur...).
 
Autant vous dire que pour une machine virtuelle de développement SharePoint Server 2013 qui tourne sur un PC portable de 8Go de RAM, l'affaire va s'avérer compliquée et l'optimisation des ressources va être nécessaire...
 
En faisant un tour sur les processus sur ma VM, je me suis aperçu que le service NodeRunner était vraiment très gourmand. Ce service est en fait relié à la recherche FAST!
 
Il existe néanmoins un moyen de contenir cet appétit des plus voraces.
Pour cela, il faut suivre les actions suivantes:
  • Réduire l'impact de la recherche sur la CPU de la machine de développement. Pour cela, il faut lancer la commande Powershell suivante : "Set-SPEnterpriseSearchService -PerformanceLevel Reduced"
  • Modifier le fichier de configuration situé à l'emplacement suivant : "C:\Program Files\Microsoft Office Servers\15.0\Search\Runtime\1.0\noderunner.exe.config" afin de lui préciser la quantité de RAM dont il peut disposer. Il faut se positionner sur la balise "noderunnersettings" et modifier l'attribut "memoryLimitMegaBytes". Par défaut, la valeur est à "0", ce qui signifie que l'exécutable n'a aucune limite de RAM.
 
 
Ce problème de consommation des ressources par le service de recherche pourrait éventuellement être corrigé lors de la sortie de la version RTM, mais il vaut mieux être au courant de ce genre de paramétrage.

14 octobre 2012

INFOPATH : Solution Sandbox SharePoint

Aujourd'hui, un petit article sur les solutions  en mode Sandbox (ou en bon français : en mode bac à sable). Il est effectivement possible d'utiliser ce genre déploiement pour un formulaire de type InfoPath.
 
Les avantages sont les suivants:
  • Un administrateur de la collection de sites pourra déployer le formulaire lui-même sans demander de réaliser ceci à un administrateur ayant les accès à l'administration centrale.
  • Pas d'interruption de service sur la ferme SharePoint,
  • Possibilité de limiter la quantité de ressources utilisées par cette solution sandbox.
  • Le formulaire sera publié directement depuis InfoPath sans avoir besoin de passer par l'étape envoi à l'administrateur et téléchargement dans l'administration centrale,
  • Au niveau protection et sécurité de la ferme, les solutions Sandbox sont exécutées dans un processus séparé (il existe un service Windows User Code Host) tandis qu'un formulaire dans l'administration centrale peut exécuter n'importe quel genre de code sans sécurité et accéder à n'importe quelle ressource de la ferme.
 
Les inconvénients se situent surtout au niveau  du CAS (Code Access Security) qui entraine de nombreuses limitations sur le code :
  • Pas de possibilité d'impersonnation du contexte SharePoint (Le fameux 'RunWithElevatedPrivileges' bien connu des développeurs SharePoint...),
  • Modèle objet SharePoint limité,
  • Pas d'accès au disque,
  • ...
 
 
Vous l'aurez compris, il est recommandé d'utiliser le déploiement Sandbox d'un formulaire avec code lorsque vous disposez d'une faible quantité de code à embarquer dans le formulaire!
 
Bon jeu dans le bac à sable de SharePoint 2013!