Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Jean-Christophe Brabant

SharePoint, HTML5, UX,PowerShell, ...
[Event] Conférence Conf’SharePoint

Bonjour à tous,

La semaine dernière, je vous informais que je serais présent à la conférence d’Agora CMS.

Aujourd’hui, je vous informe que je serais présent à la Conf’SharePoint en tant que Speaker.

Qu’est-ce que la Conf’SharePoint

Voici une petite présentation de l’évènement.

SharePoint va fêter ses douze ans d'existence en 2013. Cela coïncidera avec la sortie de SharePoint 2013 la nouvelle version. C'est l'occasion d'assister a la première conférence SharePoint Française en Europe.

Au programme, des experts (Microsoft, MVP, Professionnel de SharePoint), mais aussi des utilisateurs et décideurs (Clients, DSI, Métier) viendront présenter et discuter autour d'un seul sujet SharePoint.

Parcours

Quatre grands thèmes seront abordés.

Le développement SharePoint, ou comment tirer le meilleur de la plateforme SharePoint

L'infrastructure SharePoint, ou comment intégrer la plateforme dans mon parc informatique

La gouvernance et la stratégie SharePoint, ou comment réussir un projet SharePoint aujourd'hui

Le retour Client, car rien ne compte plus que l'expérience.

Où et quand ?

Rendez-vous donc les 22, 23 et 24 Mai 2013 au Centre de Congrès du Disney’s Hotel New York® à Disneyland®Paris.

Ma session

“SharePoint et la mobilité : Comment et pourquoi créer une application Windows 8 en lien avec SharePoint Server 2013 ?”

Ma session fera partie du parcours développement.

Avec Philippe, nous vous ferons découvrir les avantages de créer une application Windows 8 en interaction avec SharePoint 2013. Ensuite, nous entrerons dans le vif du sujet en vous montrant comment faire, en utilisant les nouvelles api de SharePoint 2013.

 

Quelques liens utiles pour suivre l’actualité de la Conf’SharePoint.

Au plaisir de vous voir !

clip_image002

Groupe Conf'SharePoint

clip_image004

Groupe Conf'SharePoint

clip_image006

Groupe Conf’SharePoint

image

Hashtag #csp2013

Compte Conf'SharePoint

clip_image010

La chaine YouTube de la Conf'SharePoint

clip_image012

Page Confsharepoint

 

Jicay

[Event] Conférence Agora CMS

Après plusieurs mois d’absence, me voici de retour.

Vous pourrez me retrouver, ainsi que Philippe Sentenac, dans une session sur l’”introduction aux CMS Microsoft” avec le Web Content Management de SharePoint 2013.

Qu’est-ce qu’Agora CMS ?

AgoraCMS

La conférence AgoraCMS est un évènement professionnel indépendant consacré aux outils de gestion de contenus Web (WordPress, Drupal, Joomla, ezPublish …). Son approche est fortement orienté vers un public fonctionnel (chef de projets, DSI…) en complément des nombreuses conférences dédiées aux publics techniques.

Le programme

Vous pourrez trouver le programme complet ici : http://www.agoracms.com/programme-conference-cms/

 

Jicay

[SharePoint][CSOM/JSOM] Récupérer l’adresse courante de la collection de site.

Lorsqu’on développe à l’aide du Client Side Object Model avec Javascript, il n’y a pas de moyen simple, comme le SPContext.Current.Site, du Server Object Model, pour récupérer l’adresse de la collection de site.

Cependant, nous pouvons nous servir de la puissance du CSOM pour la récupérer.

Avant toutes choses, il faut voir les prérequis au développement CSOM.

Pour ma part, je me suis développer une méthode d’initialisation qui va récupérer l’ensemble des informations que j’utiliserais ensuite dans mon code.

   1: var sSiteUrl = '';
   2: var sSiteRelativeUrl = '';
   3: var sCurrentWebUrl = '';
   4: var sCurrentWebRelativeUrl = '';
   5:  
   6: function fnLoadSite(callback) {
   7:     var context = new SP.ClientContext.get_current();
   8:     var site = context.get_site();
   9:     var currentWeb = context.get_web();
  10:  
  11:     context.load(currentWeb);
  12:     context.load(site);
  13:     context.executeQueryAsync(function () {
  14:         sSiteUrl = site.get_url();
  15:         sSiteRelativeUrl = site.get_serverRelativeUrl();
  16:         sCurrentWebRelativeUrl = currentWeb.get_serverRelativeUrl();
  17:         sCurrentWebUrl = sSiteUrl + sCurrentWebRelativeUrl;
  18:  
  19:         if (SP.ScriptUtility.isNullOrUndefined(callback)) {
  20:             callback();
  21:         }
  22:     },
  23:     function (sender, args) {
  24:         console.log('Request failed. (fnLoadSite) <br/>' + args.get_message());
  25:     });
  26: }

Explication du code :

Ligne 7, je crée le contexte JSON qui va me permettre de manipuler les données de SharePoint. Je demande ensuite de charger les données de la collection de site et du site web courant (ligne 11, 12). Une fois que ma requête aura été exécuté (ligne 13), je pourrai setter les variables globales (ligne 14-17) pour pouvoir les utiliser dans el reste de mon code.

A noter que j’utilise une classe bien pratique du namespace SP : SP.ScriptUtility et sa méthode isNullOrUndefined pour vérifier l’existence de la callback avant son appel.

Avec ce bout de code vous pourrez désormais travailler les adresses de la collection de site et du site web courant.

Bon code,

Jicay

[SharePoint][CSOM][JSOM] Prérequis au développement CSOM avec Javascript

Comme je vous le rappelais dans mon précédent article, SharePoint nous offre la possibilité de développer côté client.

Cependant il y a quelques prérequis avant de pouvoir commencer à utiliser le CSOM avec Javascript.

Afin de pouvoir utiliser les objets nécessaire, il va falloir référencer le script “SP.js”. En effet c’est ce script qui va fournir l’ensemble des objets contenu dans le Namespace : http://msdn.microsoft.com/en-us/library/ee557057.aspx.

Lors du développement dans Visual Studio 2010, vous pourrez rajouter une référence à la version de debug du script pour profiter de l’intellisense : SP.Debug.js. Y compris pour les script SP.Core.Debug.js, SP.Runtime.Debug.js.

Exemple d’inclusion :

   1: <asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
   2:     <script type="text/ecmascript" src="/_layouts/SP.Core.Debug.js" />
   3:     <script type="text/ecmascript" src="/_layouts/SP.Debug.js" />
   4:     <script type="text/ecmascript" src="/_layouts/SP.Runtime.Debug.js" />
   5: </asp:Content>

Une fois les scripts inclus, il ne vous faudra plus que vous assurer que le script est bien chargé avant de faire appel aux différents objets CSOM :

   1: ExecuteOrDelayUntilScriptLoaded(startProcess(), 'SP.js');

Jicay
[SharePoint] Développer pour SharePoint à l’aide du modèle objet client.

SharePoint offre plusieurs niveau de développement. L’un d’entre eux est le développement côté client.

Il y a trois différents types de modèle client : .Net, Silverlight et ECMAScript. Chacun de ces modèles fournit un ensemble d’objet qui correspondent aux objets côté Serveur (à partir de la collection de site).

Ces modèles se basent sur les services WCF de SharePoint. Aussi, chaque appel aux objets clients, communiquera avec SharePoint à travers un proxy qui communiquera avec le service en lui-même.

CSOM

Ainsi, grâce au CSOM, vous serez en mesure de manipuler les données de SharePoint simplement. Notamment l’ensemble des ces éléments:

  • Site collections and sites

  • Lists, list items, views, and list schemas

  • Files and folders

  • Web, list, and list item property bags

  • Web Parts

  • Security

  • Content types

  • Site templates and site collection operations

Vous pouvez consulter cet article pour aller plus loin dans le développement Client Object Model : http://msdn.microsoft.com/en-us/library/ee537247(v=office.14).aspx et http://msdn.microsoft.com/en-us/library/ee535717(v=office.14).aspx

Jicay

[SharePoint Online] Comment référencer Script js et Css dans une masterpage

Dans le cadre de développement d’application sur SharePoint Online, il nous est impossible de créer des pages au niveau du “Layout”, dû au développement sandboxed des solutions.

Il nous est donc impossible d’y placer des fichiers pour les référencer simplement dans une masterpage.

Pour utiliser des scripts JS et fichiers CSS dans notre application, nous sommes obligé de stocker les fichiers dans une librairie de document dans le site SharePoint afin de pouvoir les référencer dans notre masterpage.

Afin de référencer les fichiers Js ou css nous pourrions utiliser la balise <script> HTML. Ainsi lorsque nous allons référencer ces fichiers, nous allons vouloir les situer de manières relatives à l’adresse de la collection de site. Malheureusement nous ne connaissons pas cette adresse à l’avance.

Le seul moyen est d’utiliser les tokens SharePoint, notamment un très utile pour récupérer cette adresse : ~sitecollection.

Cependant, ce token n’est utilisable que dans des balises server grâce au SPUrlExpressionBuilder : $SPUrl 

   1: <%$SPUrl:~SiteCollection/SiteAssets/js/jquery-1.8.0.min.js%>

Fichier Js

Pour référencer les fichiers Js, nous utiliserons la balise <asp:ScriptManager>.

   1: <asp:ScriptManager id="ScriptManager" runat="server" EnablePageMethods="false" EnablePartialRendering="true" EnableScriptGlobalization="false" EnableScriptLocalization="true">
   2:     <Scripts>
   3:         <asp:ScriptReference Path="<%$SPUrl:~SiteCollection/SiteAssets/js/jquery-1.8.0.min.js%>"></asp:ScriptReference>
   4:     </Scripts>
   5: </asp:ScriptManager>

Il nous appartiendra ensuite de gérer le côté relatif à l’intérieur des scripts.

Fichier Css

De la même manière, nous pourrons référencer ces fichiers avec la balise <SharePoint:CssRegistration>.

   1: <SharePoint:CssRegistration ID="Default" Name="<%$SPUrl:~SiteCollection/SiteAssets/css/perso.css%>" After="corev4.css" runat="server"></SharePoint:CssRegistration>

L’avantage des fichiers css, c’est que l’ensemble des liens qui sont listé à l’intérieur, sont relatifs au fichier et non à la page qui l’appel.

Vous pourrez désormais vous amuser en jouant avec les scripts Js et fichiers Css.

Bon code,

Jicay

[SharePoint 2010] Limiter l’accès aux pages de backend

Lors de la création d’un site, il peut nous arriver de vouloir limiter l’accès aux pages de back-end (les ‘Form Pages’), par exemple pour les utilisateurs anonymes.

Les pages que nous souhaitons limiter sont celles du type :

/_layouts/.aspx">/_layouts/.aspx">http://<site>/_layouts/<page>.aspx ou
/Lists//.aspx">/Lists//.aspx">http://<site>/Lists/<ListName>/<page>.aspx

Le moyen simple de le faire, c’est d’activer la feature ViewFormPageLockDown (7c637b23-06c4-4724-9a9a-7c175762c5c4)

Cette feature permet de limiter l’accès à ces pages de manières assez simple. En effet il va vérifier les droits de l’utilisateur et n’autoriser l’accès que s’il possède la permission :

   1: SPBasePermissions.ViewFormPages

Pour terminer, il vous faudra créer des rôles sans ces permissions pour que les utilisateurs n’y aient pas accès.

C’est comme ça qu’on va pouvoir se retrouver avec des rôles comme restricted read (que l’on a en activant les features de publishing par exemple).

   1: rootWeb.RoleDefinitions.Add(new SPRoleDefinition()
   2: {
   3:     BasePermissions = SPBasePermissions.EmptyMask |
   4:                         SPBasePermissions.ViewListItems |
   5:                         SPBasePermissions.ViewPages |
   6:                         SPBasePermissions.Open |
   7:                         SPBasePermissions.OpenItems,
   8:     Name = HydeConstants.RoleDefinitions.RestrictedReadName,
   9:     Description = HydeConstants.RoleDefinitions.RestrictedReadDescription
  10: });

Maintenant, y a plus qu’à Clignement d'œil

Jicay

[SharePoint 2010][HTML5] Préparer une masterpage pour HTML5–Partie 2

Dans l’article précédent, je vous montrais quelles étaient les premières étapes pour créer une masterpage supportant HTML5.

La seconde phase est donc de modifier en profondeur la masterpage en utilisant les balises HTML5 lorsque cela à du sens.

Petit rappel sur HTML5

L’un des plus grand intérêt de HTML5 c’est la possibilité de donner du sens au contenu en utilisant les nouvelles balises sémantiques.

Là où on utilisait continuellement la balise DIV pour structurer le contenu de la page, de nouvelles balises ont fait leur apparition.

  • Nav – utilisé pour définir la navigation du site, d’une page ou autre.
  • Section – utilisé pour définir les grandes sections d’un document comme par exemple les chapitres, ou tout autre section dans un document.
  • Article – Utilisé pour représenter un texte indépendant, une portion de contenu. (article de blog par exemple)
  • Aside – Utilisé pour présenter le contenu le annexe au contenu principal. Il peut être annexe à un article ou à une page
  • Header – Utilisé pour représenter l’en-tête d’une section
  • Footer – Utilisé pour représenter le pied de page d’une section.

Passons aux choses sérieuses

Navigation

Dans un premier temps, nous allons pouvoir modifier tous les éléments de navigation pour qu’ils utilisent la balise ‘nav’

1. Ajouter la balise ‘nav’ autour des liens utilisé pour l’accessibilité

Dans les premières lignes de la masterpage, il y a plusieurs liens dans des ‘span’ qui sont utilisés pour l’accessibilité. Ces liens étant utilisés pour la navigation, il semble naturel de les mettre à l’intérieur d’une balise ‘nav’. On pourra en profiter pour y déplacer le style et la classe afin d’éviter les répétitions inutiles.

2. Ajouter la balise ‘nav’ autour des différents menus

On peut considérer les menus tels que ‘Welcome menu’, ‘Variations’, ‘My Links’ comme étant de la navigation. On peut donc les inclure dans une balise ‘nav’.

3. Changer la balise englobant le menu ‘Action du site’

Encore un menu qui pourrait être considérer comme de la navigation. On pourra donc changer la balise ‘span’ qui englobe le contrôle SiteAction, pour la balise ‘nav’. On prendra garde de bien laisser l’ID ‘siteactiontd’ et la classe ‘ms-siteactionsmenu’ .

4. Ajouter la balise ‘nav’ autour du breadcrumb

Elément par excellence de la navigation, entourer le breadcrumb de la balise ‘nav’ prends tout son sens.

5. Ajouter la balise ‘nav’ autour du menu QuickLanuch

On connait cette navigation sous le nom de Current Navigation.

6. Modifier la balise div qui entoure le menu tree view.

Le delegate control ‘TreeViewAndDataSource’ est entouré par la balise ‘div’ qu’il faut modifier pour la balise ‘nav’. Encore une fois, il faut penser à laisser la class ‘ms-treeviewouter’.

7. Ajouter la balise ‘nav’ autour des liens de navigation sous le QuickLaunch

Les liens RecycleBin et View All Site Content sont aussi considérer comme de la navigation.

Contenu

Dans un deuxième temps, on va pouvoir modifier les balises pour tout ce qui concerne le contenu.

8. Modifier le conteneur du ruban pour la balise ‘Section’

On pourra utiliser deux sections pour chacune des parties qui compose le ruban. La balise aura donc l’id ‘s4-ribbonrow’ et les classes ‘s4-pr/s4-ribbonrowhidetitle’. 

9. Utiliser la balise ‘Article’ pour les éléments du ruban

Chaque éléments du ruban pourra être contenu dans une balise ‘Article’. Ce qui inclus aussi les éléments suivant : le ruban (id : s4-ribboncont), la barre de notification (id: notificationArea, classe: s4-noti), et le panneau d’ajout de Web Part (id: WebPartAdderUpdatePanelContainer).

La balise ‘article’ prend son sens quand on sait que chaque élément fonctionne indépendamment.

10. Modifier le conteneur du contenu principal

Tout ce qui se trouve en dessous du ruban se trouve dans cette partie de la page. On peut donc remplacer la balise div avec l’id s4-workspace par la balise ‘section’.

11. Modifier la balise qui contient la zone de titre

La zone de titre sera englobé dans la balise ‘Header’. Afin de garder le même fonctionnement, il faut qu’il garde son id:s4-titlerow et ses classes: s4-pr/s4-notdlg/s4-titlerowhidetitlefrom.

12. Modifier le premier div de contenu pour la balise ‘Article’

La première balise est celle avec l’id MSO_ContentTable.

A noter que si le but de la page est d’afficher différents articles, alors il est peut-être préférable de laisser la balise ‘div’. En effet, placer la balise article ici risquerait de perturber la signification de la balise.

Conclusion

Pour terminer cette article, il est important de noter que tous les changements proposés ici, peuvent être sujet à discussion. Tout le monde ne sera pas d’accord avec ces modifications. L’important ici est d’utiliser à bon escient les nouvelles balises HTML5.

Jicay

SharePoint 2013 : Disponibilité de SharePoint 2013 RTM sur MSDN ?

Certains l’auront peut-être déjà remarqué, mais dans les téléchargement disponible les téléchargement d’office ont perdu leur ‘Preview’.

On peut donc trouver la dernière version des produits suivants :

  • Office 2013
  • SharePoint 2013
  • Office Web Apps 2013
  • etc.

Les téléchargements sont disponible ici.

Maintenant y a plus qu’à s’amuser et tout réinstaller Tire la langue

Jicay

[SharePoint 2010][HTML5] Préparer une masterpage pour HTML5 – Partie 1

Pour faire suite à ce post, la première étape obligatoire est de transformer une masterpage SharePoint 2010 afin quelle permette l’exécution du code HTML5.

Je vais donc vous montrer les différentes étapes nécessaires à cette transformation.

Dans cette article, je montrai les bases, le minimum pour avoir une masterpage compatible HTML5.

Le Doctype

C’est un très bon exemple de la simplification qu’apporte cette nouvelle version d’HTML.

Le doctype avant :

  1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

devient :

  1: <!DOCTYPE html>

Note : L’utilisation de ce doctype peut entrainer des problèmes avec JavaSript sous IE8.

Retirer les namespaces de la balise html

La balise avant :

  1: <html lang="" dir="" runat="server" xmlns:o="urn:schemas-microsoft-com:office:office" __expr-val-dir="ltr">

devient :

  1: <html lang="" dir="" runat="server"  __expr-val-dir="ltr">

Là encore, on est dans la simplification de l’information.

Modifier la balise X-UA-Compatible

Jusqu’à présent cette balise était configurer pour permettre le mode de compatibilité IE8. Afin de profiter des nouveautés d’HTML5, il est nécessaire configurer le mode de compatibilité pour IE9.

La balise avant :

  1: <meta http-equiv="X-UA-Compatible" content="IE=8"/>

devient :

  1: <meta http-equiv="X-UA-Compatible" content="IE=9">

Note : Cette modification peut entrainer des problèmes avec JavaSript sous IE.

Simplifier l’encodage

Là encore la simplification est de mise.

La définition de l’encodage avant :

  1: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

devient :

  1: <meta charset="utf-8">
Remodeler les balises script et link pour css

La compréhension de ces balises par HTML5 est améliorer. Ainsi, de base, la balise link est utilisée pour le CSS et la balise script est utilisée pour JavaScript.

Ces balises avant :

  1: <script type="text/javascript">
  2: <link rel="stylesheet" type="text/css" href="file.css" />

deviennent :

  1: <script>
  2: <link rel="stylesheet" href="file.css" />
HTML5Shiv (Modernizer)

Comme j’en parlais dans mon précédent article, il est aussi important d’assurer la compatibilité avec les anciens navigateurs.

C’est pourquoi nous allons inclure la librairie JS HTML5Shiv. Celle-ci va permettre au navigateur de comprendre les nouvelles balises HTML5 et ainsi garder cohérant le design appliqué à ces balises.

Pour se faire, il suffit donc de rajouter ces lignes :

  1: <!--[if lt IE 9]>
  2: <script src="https://raw.github.com/aFarkas/html5shiv/master/dist/html5shiv.js"></script>
  3: <![endif]-->

Maintenant, nous sommes en présence d’une masterpage qui est prête à accueillir tout nos développement HTML5.

Comme vous avez pu le voir, tout n’est pas parfait lors de cette transformation. Il faut donc encore une fois, bien prendre en compte le risque lié à ces modifications avant de les effectuer

Dans le prochain article, j’irais un peu plus loin dans la transformation de la masterpage en la modifiant en profondeur.

Jicay

[SharePoint 2010] Transférer vers la page d’erreur de SharePoint

Problématique

Lors du développement d’une application SharePoint, l’un point critique qu’il faut prendre en considération, c’est la gestion des erreurs.

Cependant, toutes les erreurs ne sont pas équivalentes. Certaines doivent passer inaperçue pour l’utilisateur, tandis que d’autre devront être affichées en tant que telles.

Ainsi, l’une des possibilités, en cas d’erreur, est de rediriger l’utilisateur va une page d’erreur. Et quelle autre page servirait mieux que celle de SharePoint ?

image

Rediriger vers la page d’erreur de SharePoint

Aussi, comment rediriger vers cette fameuse page ?

Rien de plus simple. Le framework de SharePoint nous propose une méthode pour ça, la méthode de la classe SPUtility : TransferToErrorPage.

Il suffit de lui passer en paramètre le texte à afficher sur la page, et de laisser faire la magie.

Voici le code qui a généré la page d’exemple :

  1. SPUtility.TransferToErrorPage("Parameter 'list' is missing, or it's not recognized.");

Conclusion

C’est une méthode simple et efficace qui permet de gérer un type bien particulier d’erreur et de rediriger l’utilisateur vers une page qu’il reconnaitra. Il faudra cependant, trouver d’autres façon de gérer les autres erreurs qui ne nécessite pas de redirection.

Jicay

[SharePoint 2010] Problème de localisation de la navigation d’une liste

Problématique

J’ai récemment été confronté à un client qui avait des problèmes de localisation de la navigation quand celui créait des listes SharePoint.

Son application est un intranet multi-lingue géré avec la fonctionnalité MUI de SharePoint.

Pour rappel, la localisation d’une liste se fait en deux étapes.

La création de la liste, et une fois que celle-ci a été créée, la traduction dans la langue voulue. Pour ce faire, il suffit de changer la langue de l’utilisateur, puis se rendre dans les paramètres ‘Titre, description et navigation’ de la liste et modifier le titre. (Cette opération est à répéter pour l’ensemble des langues pour lesquelles on souhaite traduire la liste).

Le problème, relevé par le client, c’est que le lien de navigation, généré automatiquement lors de la création de la liste, n’est pas localisé grâce aux étapes précédentes.

C’est normal.

Ce qu’il faut comprendre, c’est que le lien de navigation qui a été créé avec la liste, est complètement indépendant de la liste. Lors de sa création, il récupère le titre de la liste.

Conclusion

Pour arriver à nos fins, et avoir la navigation correspondante aux noms des listes, il faudra traduire le lien de navigation de la même manière qu’on aura localisé la liste. Et ce, pour chaque liste et dans chacune des langues de l’application.

C’est un point qu’il faut prendre en compte et bien expliquer aux clients quand on lui parlera de MUI.

[SharePoint 2010] Page Layout unghosted après un déploiement

Le problème

Lors de mon dernier projet, j’ai remarqué que les pages layouts que l’on avait créés étaient unghosté dans la librairie de page layout.

En effet, dans SharePoint designer, les pages layout présentaient ce petit icône (le i) indiquant qu’ils étaient unghosted.

image

Recherche de l’origine du problème

J’ai donc cherché à déterminer si les pages layouts étaient déployés de manière unghosté, ou si cela résultait d’une action lors du déploiement.

Voici la définition du module déployant le page layout :

image

Après quelques recherches, aucune des actions, effectuées lors du déploiement, ne personnalise le page layout.

De plus, lorsque je choisi de “Rétablir la définition du site” :

image

le page layout reste unghosté.

J’ai donc ma confirmation que le page layout est déployé unghosté. Cependant, je ne sais toujours pas pourquoi !

Je remarque à ce moment qu’en réalité tous les pages layouts ne sont pas unghosté. La différence entre eux ? La méthode de création.

En effet, les pages layout qui se retrouvent unghosté, sont ceux qui ont été créé avec SharePoint Designer. Les autres, sont ceux qui ont été créé directement à la main.

Résolution du problème

Concrètement lorsque l’on crée un page layout avec SharePoint Designer, celui-ci rajoute des éléments automatiquement au code.

image

Il suffit donc de supprimer ces attributs de l’élément Page pour que de nouveau, après le déploiement, celui-ci reste ghosté.

J’espère que ça aidera les personnes qui ont ce soucis.

Jicay

[SharePoint][HTML5] Coupler SharePoint à HTML 5

Cet article est le premier d’une série sur SharePoint et HTML5.

A travers lui , je vais essayer de vous montrer quel est l’intérêt d’utiliser HTML 5 avec SharePoint et ce que ça peut apporter à vos applications. Les articles qui suivront auront pour objectifs de prendre une nouveauté d’HTML 5 et de la mettre en œuvre dans un cas concret d’utilisation.

HTML 5, c’est quoi ?

Pour comprendre l’intérêt d’HTML 5, il faut commencer par savoir ce qu’est HTML 5.

Je ne ferais ni un cours, ni une liste exhaustive de ce qu’apporte cette nouvelle version d’HTML. Vous pourrez trouver d’autres sites qui le feront bien mieux que moi. Par contre il faut comprendre le lien avec SharePoint.

Concrètement de quoi parle-t-on lorsqu’on voit HTML 5 ?

HTML 5, c’est avant tout la dernière version d’HTML, en cours de standardisation. Mais c’est aussi et surtout le regroupement de trois technologies :

HTML + JavaScript + CSS 3

C’est ce regroupement qu’on appelle vulgairement HTML5. Il apporte un lot de nouveautés que l’on peut situé dans les catégories suivantes :

image

Chacune de ces catégories offrant nativement de nouvelles possibilités pour enrichir vos applications SharePoint. Voici un site qui vous permettra de voir quelles sont les parties de HTML 5 réellement utilisable aujourd’hui.

Ce n’était pas possible avant HTML 5 ?

Avant HTML 5, un grand nombre de sites web offrait déjà des possibilités qu’offre aujourd’hui HTML 5. Cependant elles étaient réalisables soit grâce à des outils/Plug-in tierce, comme Silverlight ou Flash, soit à l’aide de beaucoup de développement JavaScript.

L’intérêt d’HTML 5 est que ces possibilités nous soient offertes nativement et de manières standard.

Et SharePoint dans tout ça ?

SharePoint 2010 a fait son apparition lorsque HTML en était à sa version ‘XHTML 1.0’ et CSS 2. Cette version d’HTML était assez limitée pour enrichir les applications web. C’est pourquoi Microsoft s’est basé sur Silverlight pour enrichir SharePoint.

Aujourd’hui SharePoint reste un produit plutôt mâture fonctionnellement parlant, mais qui manque encore d’attrait pour ses utilisateurs. On n’a donc de cesse de chercher à améliorer l’interface et l’ergonomie de celui-ci dans nos applications.

HTML 5, la réponse ?

Bien que Silverlight ait de beaux jours devant lui, HTML 5 offre désormais une alternative séduisante.

Il faut cependant se poser la question de l’intégration et de la compatibilité dans un parc informatique existant.

L’avantage de l’utilisation d’HTML5, est que le seul point sur lequel il faut s’attarder c’est la question du navigateur. Alors que dans le cas de Plug-Ins il faudra aussi penser à leur déploiement.

HTML 5 est, plus ou moins, compatible avec les dernières versions des navigateurs récents. On peut considérer qu’à partir d’IE9 ou Firefox 3.5, par exemple, la compatibilité avec HTML5 est assurée. Même si celle-ci sera encore améliorée avec IE 10 et les dernières versions de Firefox.

Pour les navigateurs plus récents, il faudra penser à une alternative comme des librairies JavaScript qui assureront la comptabilité. Bien sûr, ce sera une comptabilité limitée.

Les librairies telles que Html5shiv ou même Modernizr vous aideront à assurer la compatibilité jusqu’à IE7.

En résumé

Si je devais choisir si oui ou non il faut utiliser HTML 5 avec SharePoint 2010, je répondrais que HTML 5 est simplement l’évolution d’HTML et que si le parc informatique où se situera l’application le permet, il ne faut pas hésiter à y passer.

Jicay

[SharePoint][PowerShell] Appliquer un template custom à un site web à sa création.

Le contexte

L’un des meilleurs amis du SharePointeur est sans nul doute PowerShell. Il offre à peu près tout ce qui est nécessaire à l’administration d’une ferme, au déploiement de projets, etc.

Une tâche revient régulièrement lors de nos développements : créer des collections de sites et des sites web. PowerShell nous permet de les créer facilement grâces aux cmdlets spécifiques : New-SPSite et New-SPWeb.

Développement avec Site & WebTemplate custom

Encore une fois, c’est une situation récurrente que de se trouver en présence de SiteTemplate et WebTemplate personnalisés.

Il est donc utile de pouvoir appliquer automatiquement ces templates directement aux sites que l’on souhaite créer par powershell.

Ca tombe bien, les cmdlets ont un paramètre qui permet de spécifer le template souhaité : “-Template”.

Et là : Problème ! Lorsqu’on exécute la cmdlet avec bon paramètres, on obtient une erreur.

PS C:\Users\Admiistrator> $SPWeb = New-SPWeb -Url http://{monsite}/test2 -Name monsite -Template "{0c6caf23-bb65-4e34-88c2-8d7d0e9dccca}#WebTemplate"
WARNING: Template is not found and is not applied.

C’est tout à fait normal. La commande va chercher dans la liste des templates globaux. (On peut en avoir une liste exhausitve en exécutant la commande suivante : Get-SPWebTemplate | Sort-Object "Name")

Comment l’appliquer ?

Pour appliquer un template après la création, il faut le créer sans lui spécifier de tempalte à la création. De même s’il n’a pas trouver le template, il créera le site sans template.

Il suffira après d’appliquer ce template après-coup grâce à la méthode ApplyWebTemplate de l’objet SPWeb.

Le code complet pour créer un site avec un template custom :

PS C:\Users\Admiistrator> $SPWeb = New-SPWeb -Url http://{monsite}/test2 -Name monsite

$SPWeb.ApplyWebTemplate("{0c6caf23-bb65-4e34-88c2-8d7d0e9dccca}#WebTemplate")
$SPWeb.Dispose()

Jicay

PS: Petit clin d’oeil à MatN qui a passé du temps sur ce problème Sourire

[SharePoint 2010] Supprimer la redirection automatique d’un “access denied”

Comment SharePoint gère les access denied ?

Par défaut SharePoint gère les problèmes d’accès en redirigeant automatiquement les utilisateurs vers une page en particulier : http://{site}/_layouts/AccessDenied.aspx

AccessDenied

Modifier ce comportement ?

Nous pourrions vouloir, cependant, réagir d’une manière différente et personnalisée à un “access denied”.

La propriété qui gère ce système est celle de la classe SPSecurity : CatchAccessDeniedException.

Une fois la propriété à true, nous pourrons catcher l’exception : “UnauthorizedAccessException

Je vous propose 3 manières différentes pour manipuler cette propriété :

- Manipulation directe de la classe SPSecurity

Voici un exemple de manipulation :

SPSite site = SPContext.Current.Site;
SPSecurity.CatchAccessDeniedException = true;
try
{
    // Code here
}
catch (UnauthorizedAccessException exception)
{
    // code here
    throw;
}
finally
{
    SPSecurity.CatchAccessDeniedException = false;
}

Attention cependant avec cette propriété. Il faut penser à la repasser à false, une fois notre traitement de l’exception effectué. Il faut aussi prendre garde aux exceptions qui pourraient être lancée dans le code, qui empêcherait de remettre la propriété à false.

- La propriété CatchAccessDeniedException de l’objet SPSite

C’est une propriété est une manière plus rapide d’accéder à celle de la classe SPSecurity. Elle se manipule exactement de la même manière que cette précédente.

SPSite site = SPContext.Current.Site;
site.CatchAccessDeniedException = true;
try
{
    // Code here
}
catch (UnauthorizedAccessException exception)
{
    // code here
    throw;
}
finally
{
    site.CatchAccessDeniedException = false;
}

Attention cependant avec cette propriété. Il faut penser à la repasser à false, une fois notre traitement de l’exception effectué. Il faut aussi prendre garde aux exceptions qui pourraient être lancée dans le code, qui empêcherait de remettre la propriété à false.

- La méthode SuppressAccessDeniedRedirectInScope

La méthode la plus intéressante ici, est la méthode statique SuppressAccessDeniedRedirectInScope() de la classe SPSecurity.

Cette méthode, va créer un contexte dans lequel la propriété citée plus haut :SPSecurity.CatchAccessDeniedException sera à true tout au long de son utilisation.
Cette propriété sera remise dans le même état qu’à l’entrée dans le contexte.

L’avantage de cette méthode est qu’il n’est plus nécessaire de gérer tous les cas possible pour remettre la propriété dans son état précédent une fois notre traitement terminé.

Pour l’utiliser, rien de plus simple :

using (new SPSecurity.SuppressAccessDeniedRedirectInScope())
{
    try
    {
        // Code here
    }
    catch (UnauthorizedAccessException ex)
    {
        // code here
    }
}
Vous savez tout maintenant pour réaliser des traitements lors de la levée d’une exception Access Denied.

Jicay

Retour hackathon Windows Phone 7 - Azure

Après avoir pu profiter me reposer un peu (ou pas), il est temps pour moi de vous faire profiter de mon retour sur cet évènement.

Résumé du hackathon

Pour faire simple ce sont deux jours pendant lesquels plusieurs développeurs se rencontre et développent jours et nuits. C’est un moment privilégié où les idées foisonnent et où elles se réalisent. C’est le moment où tout nos petits projets prennent vie. Mais surtout, le hackathon est un évènement pendant lequel, on retrouve des personnes qui partagent une même passion, qui sont curieuses de découvrir de nouvelles choses ou bien qui n’ont qu’une envie, partager leurs connaissances.

Cet évènement a tenu ses engagements. Les gens était motivé (il faut voir le nombre d’apps qui ont été développées durant le weekend), l’entraide était de mise et la bonne humeur omniprésente. C’était sans compter un décors exceptionnel et un temps magnifique. C’était d’ailleurs assez de ne pas rester au soleil et de se motiver pour retourner bosser.

Merci à Bernard LACHAUD pour les magnifiques photos. (j’en mettrais d’autres quand elles arriveront).

Le weekend s’est terminé sur la remise des prix de trois concours organisés pour récompenser les développeurs et leurs applications.

Le premier était pour celui qui développerait le plus d’application dans le weekend. Celui qui a gagné ce prix, c’est Julien Noble, un MSP. Il a eu pour récompense un Nerf (pour bourrin Tire la langue).

Le second avait pour but de récompenser les ‘meilleurs’ applications du weekend. Le jury composé des GO et des coachs a fait une présélection d’une dizaine d’application qui sortaient du lot pendant le weekend. Les développeurs des applications avaient alors 3 minutes pour présenter leur application. Les applaudissements ont aidé nos jury à choisir les trois meilleures. C’est avec une agréable surprise que notre application a été retenue comme étant la meilleure du weekend. Nous sommes donc repartis, les trois premiers groupes, avec un Nokia Lumia 710 pour chacun des développeurs qui composaient les groupes.

Le dernier concours était organisé par notre ami belge Stéphane Vidouse. Plus que les applications en elles-même, il a voulu récompenser le thème des applications. C’est encore une fois avec surprise qu’il nous a choisit pour notre application 4Life.

Notre application

Nous étions quatre développeurs à travailler sur l’application 4Life. Avec Cyprien Autexier, Benjamin Baldacci et Matthieu Panisset nous avons choisit de développer une application d'aide aux gestes de premiers secours.

Cette application permet aux utilisateurs de découvrir (ou de se souvenir) les gestes de premiers secours ainsi que des informations liées aux risques majeurs que l'on rencontre dans la société. 

Elle permet aussi de réagir à un état d'urgence : 

- Lorsqu’on se trouve en difficulté, il suffit de lancer un appel au secours qui va envoyer une notification à l'ensemble des personnes possédant l'application dans un rayon de 1km. Les personnes recevant cette notification, sont redirigées sur une carte qui donne la position et l'itinéraire pour rejoindre la personne et lui porter secours. L'application enverra aussi sa fiche personnelle afin que les secours aient les bonnes informations (groupe sanguin, allergies, ...) 

- Si on est présence d'un incident/accident. L'application propose à l'utilisateur de suivre un questionnaire interactif qui va lui permettre de qualifier l’incident pour transmettre rapidement les informations pertinentes aux secours tout en sécurisant les alentours. Bien sûr, à tout moment l'utilisateur pourra appeler les secours très rapidement grâce aux raccourcis disponibles dans l'application.

Nous avons beaucoup d'idées pour aller plus loin que ce que nous avions envisagé sur un weekend et nous sommes en train de définir les fonctionnalités présentes pour la première version de l'application. Notre objectif est de fournir une application de qualité offrant un service utile et pertinent pour les utilisateurs dans les mois qui viennent.

Voici quelques screenshot de l’application actuelle.

Pour finir…

…je souhaite remercier les coachs Rudy Huyn, Aymeric Weinbach, David Poulin et Wilfried Woivré, qui nous ont aidés durant le weekend, mais surtout nos Gentils Organisateurs qui nous ont permis de passer un superbe moment.

Tout ça pour dire, quand est-ce qu’on recommence ?

 

Jicay

[SharePoint 2010] Désactiver le correcteur orthographique dans les pages d’un site de publication

Habituellement pour désactiver la correction orthographique dans un site SharePoint, il suffisait d’aller la centrale d’administration, et de désactiver la feature “Spell Checking” dans la liste des features de scope Farm.

Feature Spell Cheking

Malheureusement, ça ne fonctionne pas pour les pages. SharePoint nous montre constamment le nombre d’erreurs qu’il y a dans la page.

Exemple correction orth

Le moyen de désactiver définitivement le correcteur orthographique est tout simple. Il suffit de commenter une ligne dans le fichier SP.UI.Spellcheck.js.

RegisterSpellingHandler

A savoir

Cette modification, comme elle est faite dans le js, sera effective sur l’ensemble de la ferme.

Ca y est, vous n’aurez plus de demande de correction lors de l’archivage des pages.

Jicay

[SharePoint 2010] Limitation du nombre d’élément de navigation dans un site de publication

Mise à jour 23/01 : Suite à des remarques constructives, j’ai pu voir que je n’avais pas mis l’accent sur les risques de cette manipulation. On ne dira jamais assez que les modifications des limitations par défaut ne sont pas sans conséquences. J’ai donc modifié mon article pour bien faire comprendre en quoi cette modification était nécessaire dans mon cas.

L’un des principes des sites de publication est la création d’articles. La navigation joue un rôle important dans ce type de site. Cependant il arrive que la navigation fasse des siennes lorsque qu’il y a beaucoup de sous-sites et pages accessible par la navigation. Par exemple des sites qui possédaient des sous-sites, se retrouveraient, au niveau de la navigation, avec des sites enfants au même niveau que le site parent.

D’où vient ce fonctionnement ?

En cherchant, un peu sur le net, je suis tombé sur cette propriété : la propriété DynamicChildLimit.
Cette propriété est utilisé par les providers de sitemap :

GlobalNavSiteMapProvider
CombinedNavSiteMapProvider
CurrentNavSiteMapProvider
CurrentNavSiteMapProviderNoEncode

Elle permet de configurer le nombre "maximum” d’enfant qu’il va retourner (à savoir qu’il compte les sites et les pages). Par défaut cette valeur est à 50. Ce qui veut dire que le sitemap va retourner les 50 premiers sites/pages dans l’ordre de la navigation, et s’arrêter. Du coup les sites qui n’en font pas partie seront placés au mauvais endroit.

Comment modifier ce comportement ?

La première méthode qui nous vient à l’esprit est donc de modifier cette limitation. Il suffira donc de changer cette limitation dans le fichier web.config. Voici un exemple de méthode pour appliquer cette modification : msdn et Reza.

DynamicChildLimit = 50 : Limite le nombre d’élément du sitemap à 50
DynamicChildLimit = 150 : Limite le nombre d’élément du sitemap à 150
DynamicChildLimit = 0 : Désactive la limite

A savoir

Attention, il faut bien comprendre l'impact d’un tel changement. En effet les limitations par défaut ne sont pas mise au hasard. Le provider va parcourir les sites existants et aller en profondeur pour récupérer toutes informations. Le problème, comme nous l’indique les blogs de Stefan Gossner et TheMit, c’est l’utilisation de la mémoire par le provider et donc le risque de ce qu’on appel “Memory Pressure”. Ce qu’il faut savoir c’est que le provider lorsqu’il va parcourir les sites ne va pas fermer et libérer les sites dans lesquels il passe. L’un des moyens de savoir si la modification de cette limite va impacter votre serveur est d’effectuer des tests de charges sur le serveur. Vous saurez si cette solution vous convient.

D’autres méthodes ?

Si cette solution ne convient, il y a toujours moyen de corriger ce phénomène autrement.

Par exemple, l’une des solutions serait de recoder le provider, ou, comme le préconise stefan grossner, de passer par un fichier XML statique qui sera mis à jour une fois par jour. Ce ne sont pas les seules solutions, il faudra regarder les avantages et les inconvénients de chacune pour choisir celle qui correspond au mieux.

Jicay

[SharePoint 2010] Exclure une partie d’une page de publication de la recherche

Le moteur de recherche indexant toute la page, il arrive que le terme que l’on cherche se retrouve dans le titre d’un site, d’une page, etc. et se retrouve dans le menu de gauche de page n’ayant aucun lien. Il est donc intéressant de ne pas indexer les menus

La méthode est assez simple, et est très semblable aux méthodes SEO classique.

D’habitude pour éviter qu’un moteur de recherche indexe une page, il faut rajouter un attribut noindex, voire nofollow dans une balise meta.

Dans SharePoint il existe une classe qui permet de ne pas indexer le contenu par le moteur de recherche SharePoint. Cette classe se nomme tout naturellement “noindex”. Ainsi pour éviter d’indexer le menu, il suffira de l’englober dans une div (par exemple) ayant cette classe-là.

  1: <SharePoint:AspMenu ID="TopNavigationMenuV4" EncodeTitle="false" runat="server" EnableViewState="false"
  2:                     DataSourceID="topSiteMap" AccessKey="<%$Resources:wss,navigation_accesskey%>"
  3:                     UseSimpleRendering="true" UseSeparateCSS="false" Orientation="Horizontal" StaticDisplayLevels="1"
  4:                     MaximumDynamicDisplayLevels="0" SkipLinkText="" CssClass="s4-tn noindex">
Jicay
Plus de Messages Page suivante »


Les 10 derniers blogs postés

- 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

- SharePoint Online: Script PowerShell pour supprimer une colonne dans tous les sites d’une collection par Blog Technique de Romelard Fabrice le 11-27-2018, 18:01