Archives de catégorie : SharePoint Server

Mauvais format d’affichage lors de l’utilisation d’un champ supplémentaire de type numérique dans une colonne recherche

Un de nos utilisateur est tombé sur une problématique relativement étrange cette semaine alors je vous partage le résultat de mon investigation ainsi que la solution.

Dans une liste « Événement », on retrouve un champ de type « Nombre » nommé « Budget prévisionnel » :

Nombre

Dans une liste « Reddition », on retrouve un champ de type « Recherche » nommé « Événement ». On affiche également la colonne supplémentaire « Budget prévisionnel » dans cette colonne :

Recherche.PNG

Lorsqu’on exporte vers Excel on obtient ce résultat :

Excel

Pourtant, dans la liste ça s’affiche correctement :

ExcelList.PNG

J’ai trouvé quelque cas similaires sur les forums technet & StackExchange.

J’ai donc appliqué cette même solution mais en ajustant la formule selon les paramètres régionaux.

Solution

Il s’agit de créer un champ de type « Calculé » qui renvoie des données de type « Une seule ligne de texte » dans la liste Événement.

Ex : Budget prévisionnel (reporté).

Budget

La formule suivante simule l’affichage d’un champ monétaire avec les décimales et le signe de dollars :

=TEXTE([Budget prévisionnel]; »0.00$;(0.00$) »)

Par la suite, dans le champ de type « Recherche » il suffit d’ajouter le champ « Budget prévisionnel (reporté) » et il s’affichera correctement lors de l’exportation vers Excel :

Excel2

Ce qui est intéressant de cette solution, c’est qu’il n’est pas nécessaire de modifier le fichier « Excel » manuellement après chaque actualisation des données ou encore d’exécuter une macro.

Advertisements

Comment ouvrir un formulaire dans une fenêtre modale avec SharePoint 2016?

Introduction

On me demande souvent comment faire pour ouvrir un formulaire dans une fenêtre modale et malheureusement, ça ne se fait pas à partir du ruban « Insérer un lien ».

Il serait intéressant d’avoir une case à cocher permettant d’ouvrir un lien dans une fenêtre modale.

Procédure

  1. Modifier la page;
  2. Positionner le curseur à l’emplacement désiré;
  3. Sélectionnez l’onglet « Insérer » puis cliquez sur « Composant WebPart »;
  4. Sélectionnez la catégorie « Média et contenu » -> Éditeur de script;
  5. Sélectionnez le composant WebPart et cliquez sur « Modifier le composant WebPart »;
  6. Modifier le titre pour une valeur significative. Ex : « script_formulaire_fenetre_modale » et cliquez sur OK;
  7. Cliquez sur « Modifier l’extrait de code « ;
  8. Copier le code HTML suivant :

function openModalWindow(tUrl, tTitle) 
{
	var options = {
          url: tUrl,
          title: tTitle
        };

SP.SOD.execute('sp.ui.dialog.js', 'SP.UI.ModalDialog.showModalDialog', options);

}

<a href="#">Formulaire avec ouverture modale</a>

 
9. Ajuster la valeur des paramètres openModalWindow(‘URL’,’TITRE’) pour pointer sur le bon formulaire et qui sera affiché dans la fenêtre modale.

Ex : openModalWindow(‘/site/Lists/NomListe/NewForm.aspx’, ‘Formulaire avec ouverture modale’)

Si vous voulez utiliser une apostrophe dans le titre, il faut mettre un backslash devant.

Ex : \’

10. Ajuster la texte affiché entre les balises et

11. Appuyez sur OK

12. Enregistrer la page

Résultat

OuvertureModale

 

Qu’en est-il aujourd’hui du SharePoint Framework (SPFx) On-Premise ?

Introduction

En considérant ces différentes livraison en ordre chronologique :

  • SharePoint 2016 RC0 – Mai 2016
  • SharePoint 2016 Feature Pack 1 – Novembre 2016
  • SharePoint Framework GA (composants WebPart côté client seulement) – Février 2017
  • SharePoint 2016 Feature Pack 2 (Incluant SPFx) – Septembre 2017
  • SharePoint Framework Extension RC0 (SharePoint Online seulement) – Septembre 2017

On peut constater qu’il y a belle et bien un gros « gap » entre ce qui est mis en ligne sur SharePoint On-Premise versus SharePoint Online.

Cycle de mise à jour SharePoint Online vs SharePoint OnPremise

L’extrait suivant explique bien les différences  :

Étant donné que SharePoint Online et SharePoint 2016 ont différents cycles de mise en circulation pour les nouvelles fonctionnalités, ils ont aussi des fonctions différentes lorsqu’il s’agit de SharePoint Framework. SharePoint Online utilise toujours la dernière version de SharePoint Framework, mais SharePoint 2016 prend uniquement en charge la version correspondant aux dépendances côté serveur des packages déployés.
SharePoint 2016 Feature Pack 2 prend en charge les composants WebPart SharePoint Framework côté client hébergés dans des pages SharePoint classiques créées à l’aide de SharePoint Framework v1.1.0. Cela signifie que lorsque vous ciblez la plateforme SharePoint 2016, vous devez utiliser SharePoint Framework v1.1.0 en raison des dépendances de la version côté serveur.

Source

Le Feature Pack 2 à la rescousse de SharePoint 2016?

Partiellement. Oui il est possible de développer des composants WebPart client avec cette version mais il y a quand même plusieurs améliorations qui ont été effectuées entre la version 1.1.0 et la version 1.4.0 du SharePoint Framework.

De plus, le SharePoint Framework Extension qui permet entre autre d’utiliser des placeholder pour par exemple ajouter un pied de page (Footer) sans modifier la page maître n’est pas disponible et il ne le sera probablement jamais pour SharePoint 2016.

SPFx Extension disponible seulement sur SharePoint 2019?

Je n’ai pas réussi à obtenir une confirmation officiel de Microsoft mais on tire cette conclusion suite à des échanges avec d’autres MVP influents en nous me basant sur ceci :

Lors du « Jeff teper’s takeover about SharePoint » sur Twitter une question concernant la disponibilité de l’expérience moderne dans un Feature Pack future a été posé :

TwitterModernExperience

 

Puisque le SPFx Extension a besoin de l’expérience moderne pour fonctionner et que celui-ci est un trop gros changement pour un feature pack, on peut conclure que le SPFx Extension ne sera pas disponible On-Premise avant SharePoint 2019.

Conclusion

C’est vraiment dommage car le SPFx Extension permet d’effectuer plusieurs personnalisations sur lesquelles on peut compter en toute sécurité dans un avenir prévisible mais celui-ci n’est malheureusement pas disponible. Donc, dans l’attente de celui-ci, on devra continuer de faire des Add-Ins pour ajouter un pied de page ou encore des CEWP…

Références :

SPFx Sharepoint 2016 support

SPFx known issues and common questions

Erreurs fréquentes avec le mode feuille de données

On m’a posé plusieurs questions cette semaine en lien avec le mode feuille de données alors j’ai cru bon de vous partager les diverses solutions.

Message d’erreur :

« Impossible de coller les informations car la zone coupé ou copiée et la zone de collage ne sont pas de la même taille. Cliquez sur une seule cellule et réessayez de procéder au collage. »

Voici les étapes pour reproduire le problème :

1. En mode Feuille de données, sélectionnez les lignes à copier

erreurCopierModeFeuilleDeDonnees1

2. Sélectionnez la dernière ligne

erreurCopierModeFeuilleDeDonnees2

3. Effectuez un « Coller »

erreurCopierModeFeuilleDeDonnees

Solution 

La solution se retrouve pourtant dans le deuxième bloc du message d’erreur mais une image vaut parfois mille mots.

Il suffit donc de positionnez le curseur dans la première cellule et non pas la ligne au complet :

erreurCopierModeFeuilleDeDonnees3

 

Message d’erreur :

« Les cellules sélectionnées sont en lecture seule. »

Voici les étapes pour reproduire le problème :

Créer une colonne de type « Plusieurs lignes de texte »

erreurCopierModeFeuilleDeDonnees6

En mode Feuille de données, lorsque vous tentez de saisir une valeur dans un champ de types « Plusieurs lignes de texte »

erreurCopierModeFeuilleDeDonnees5

Vous obtenez le message :

erreurCopierModeFeuilleDeDonnees4

Solution 

La solution consiste à retirer le champ « Plusieurs lignes de textes » de l’affichage ou encore de transformer celui-ci en un champ de type, « Texte brut ».

erreurCopierModeFeuilleDeDonnees7

Par la suite dans le mode feuille de données vous serez en mesure de modifier les valeurs :

erreurCopierModeFeuilleDeDonnees8

 

Techniques pour récupérer les éléments HTML d’une WebPart en JavaScript (Partie 2)

Dans mon billet précédent, j’ai abordé différentes techniques pour récupérer les éléments HTML d’une WebPart en JavaScript.

Cependant, que faire si vous ne voulez pas afficher le Titre d’une WebPart de recherche de contenu et que des changements dans l’ordre des WebParts est possible (changement de ID)?

J’ai donc trouvé deux nouvelles techniques :

Technique 3 – Ajouter une balise dans le modèle d’affichage et naviguer dans ses éléments parents

Cette technique consiste à utiliser le ajouter une balise (un div avec un ID « wp » dans ce cas) puis de naviguer dans ses éléments parents pour récupérer le HTML d’une WebPart précise.

Voici le code pour y arriver :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
ExecuteOrDelayUntilScriptLoaded(initializeScript, "sp.js");</pre>


function initializeScript()
{
//Find the DIV with the webpartid then the closest parent div starting with MSOZoneCell_WebPartWPQ
$wp= $("#wp").parents("div[id*='MSOZoneCell_WebPartWPQ']"); //MSOZoneCell_WebPartWPQ2
$wp.css('max-width', '660px');
$wp.css('float', 'left');
}
</script>

Résultat

Dans cet exemple de WebPart de recherche de contenu, un style est appliqué sur le DIV MSOZoneCell_WebPartWPQ2 en utilisant une balise :

techniqueHTML3

Points à faire attention avec cette technique

  • Assurez-vous de mettre un ID significatif qui est unique dans votre page.

Technique 4 – Utiliser le GUID de la WebPart

Cette technique consiste à utiliser le webpartid puis de naviguer dans ses éléments parents pour récupérer le HTML d’une WebPart précise.

Voici le code pour y arriver :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
ExecuteOrDelayUntilScriptLoaded(initializeScript, "sp.js");

function initializeScript()
{
//Find the DIV with the webpartid then the closest parent div starting with MSOZoneCell_WebPartWPQ
$wp= $("DIV[webpartid='13c8d6db-fa88-4e77-985c-ef4fcc858865']").parents("div[id*='MSOZoneCell_WebPartWPQ']"); //MSOZoneCell_WebPartWPQ2
$wp.css('max-width', '660px');
$wp.css('float', 'left');
}
</script>

Résultat

Dans cet exemple de WebPart de recherche de contenu, un style est appliqué sur le DIV MSOZoneCell_WebPartWPQ2 en utilisant le webpartid:

techniqueHTML4

Points à faire attention avec cette technique

  • Assurez-vous d’ajuster votre code si vous supprimez puis ajoutez à nouveau la WebPart car le webpartid changera.

Conclusion

Les deux nouvelles techniques présentées dans cet article peuvent vous permettre facilement d’appliquer des personnalisations sur un élément HTML d’une WebPart.

Ces techniques peuvent répondre à un besoin simple mais cela ne constituent pas une solution aussi robuste et à l’épreuve du futur que l’utilisation du SharePoint Framework.

Il faut comprendre que l’utilisation de code client qui repose sur des éléments du DOM spécifiques ne sont pas recommandé car ceci n’est pas pris en charge dans l’interface utilisateur moderne. De plus, le DOM dans SharePoint Online est sujet à des changements fréquents…

Une topologie SharePoint avec une seule application web, est-ce possible ?

Introduction

Dans le passé, la topologie d’une ferme SharePoint 2010 incluait généralement plusieurs applications web de contenu. Un compte de service et un pool applicatif étaient également prévu pour héberger le MySite. Bien que ceci est totalement supporté, ceci ne répond plus aux meilleures pratiques en matière de performance. À moins d’une raison d’affaires nécessitant de le faire autrement, il serait possible d’avoir une seule application web. Dans ce billet, les différents avantages et inconvénients seront exposés ainsi que la façon de s’y prendre pour y arriver dans SharePoint 2013-2016.

Avantages et inconvénients

Avoir une seule application web apporte plusieurs avantages :

Cependant, cela vient aussi avec sa part d’inconvénients

  • Complexité au niveau de la création des certificats SSL lorsqu’il y a plusieurs domaines;
  • Nécessité d’avoir un nom de domaine dans le URL;
  • Nécessité de que l’ensemble des collections de sites utilisent les mêmes mode d’authentification.

One Web App to rule them all? Comment?

Dans SharePoint 2010, lorsqu’une entité voulais avoir sont propre URL, il fallait inévitablement passer par la création d’une nouvelle application web. Maintenant, il est possible d’avoir plusieurs URL de vanité (Vanity URL) sans créer une application web distincte en utilisant une collection de sites nommées par l’hôte (HNSC).

Étant donné que l’environnement Office 365 utilise des collections de sites nommées par l’hôte, les nouvelles fonctionnalités sont optimisées pour ces collections de sites et devraient être plus fiables.

Pour le déploiement de sites, il est recommandé d’utiliser des collections de sites nommées par l’hôte avec tous les sites situés dans une même application Web, comme illustré dans le diagramme suivant :

hnsc.jpg

Source

 

Plusieurs applications Web avec des collections de sites nommées par l’hôte ?

Si vous utilisez plusieurs applications Web, vous induisez une surcharge opérationnelle et rendez le système plus complexe. Il est recommandé d’utiliser une application Web pour les collections de sites. Toutefois, les raisons suivantes peuvent vous inciter à implémenter des collections de sites dans plusieurs applications Web :

  • Les stratégies de sécurité d’une organisation exigent des applications Web ou des pools d’applications distincts.
  • Les applications Web doivent être configurées différemment.
  • Une organisation exige l’utilisation de plusieurs groupes de proxys.

Il est plus complexe d’implémenter des collections de sites nommées par l’hôte avec plusieurs applications Web dans une batterie de serveurs en raison du travail de configuration supplémentaire que cela entraîne. Par exemple, les URL avec des sites nommés par l’hôte peuvent être réparties sur plusieurs applications Web qui partagent le même port dans une même batterie de serveurs. Ce scénario nécessite des étapes de configuration supplémentaire pour garantir le mappage des demandes avec les applications Web appropriées. Vous devez configurer manuellement les mappages sur chaque serveur Web de la batterie de serveurs en paramétrant une adresse IP par application Web, puis créer et gérer des liaisons d’en-tête d’hôte pour affecter des adresses IP uniques pour chaque site. Des scripts peuvent gérer et répliquer cette configuration d’un serveur à l’autre ; toutefois, cela rend la solution plus complexe. En outre, chaque URL unique nécessite un mappage dans le DNS. En général, si plusieurs applications Web sont obligatoires, nous vous recommandons de privilégier l’utilisation de collections de sites basées sur des chemins d’accès avec mappage des accès de substitution.

 Source

Qu’est-ce qui se passe avec mes certificats SSL ?

Un autre problème se pose lorsque vous souhaitez utiliser des certificats SSL. Il est possible d’utiliser le SSL, mais cela nécessite que vous utilisiez des certificats génériques (* .contoso.com). Les collections de sites nommées par l’hôte doivent être nommées site1.contoso.com, site2.contoso.com, etc. pour passer la validation du navigateur. C’est similaire à ce qui se produit dans vos sites SharePoint Online ex : https://tenant.sharepoint.com, où * .sharepoint.com sera le certificat SSL générique utilisé. Autrement, un certificat Multi-named (SAN) pourrait être utilisé pour site1.contoso.com et site2.contoso.com mais il devra être modifié si vous ajoutez une autre collection de site ex : site3.contoso.com.

Si vous avez plusieurs domaines, un certificat multi domaine (UCC) pourrait être utilisé :

Ex : contoso.com, fabrikam.com

Conclusion

Les avantages sont beaucoup plus nombreux d’y aller avec une topologie avec une seule application web alors il est préférable de s’en tenir aux meilleures pratiques autant que possible.

 

Comment copier des affichages SharePoint d’une liste/bibliothèque vers une autre ?

Introduction

Si vous travaillez avec SharePoint depuis un bon moment, vous vous êtes surement retrouvé dans une situation dont vous aviez créé une liste/bibliothèque avec bon nombre d’affichages et qu’à un bon moment, vous aviez besoin de copier ces affichages vers une autre liste ayant les mêmes colonnes. Malheureusement, il n’y a pas de mécanisme permettant de tout sélectionner vos affichages et de les copier vers une autre liste. Dans ce billet je vous présenterai quelque façons pour y arriver en utilisant en premier un outil tiers et en second un script PowerShell.

Les outils tiers

Bien évidemment, si les outils tiers peuvent copier des listes et des bibliothèques, ils peuvent également être utilisé pour copier des affichages dans des listes existantes.

Dans l’exemple ci-dessous j’utilise ShareGate pour copier des affichages :

Affichage1

Affichage2

Puisque c’est seulement une case à cocher, c’est tout ou rien alors ce n’est pas possible de sélectionner les affichages que l’on veut copier ou pas. Heureusement, ça ne nécessite pas un doctorat en génie nucléaire pour arriver à copier des affichages avec un outils tiers.

Le PowerShell à la rescousse

Si vous effectuer une recherche sur google avec les termes « Copy sharepoint view », les premiers résultats que vous allez trouver utilise majoritairement un script PowerShell afin d’effectuer la tâche. En effet, puisqu’il y a peu de chance qu’on effectue cela à tous les jours, il est préférable de faire un script PowerShell qu’une solution utilisant le modèle objet serveur (SSOM) ou client (CSOM).

Ce script permet d’effectuer la copie des affichages d’une liste source vers une liste de destination.

On peut l’appeler facilement ainsi :

.\Copy-SPListViews.ps1 -SourceWebUrl « https://portal.contoso.com/sites/teamsite/ &raquo; -DestinationWebUrl « https://portal.contoso.com/hr &raquo; -SourceListTitle « Team Documents » -DestinationListTitle « HR Documents »

Celui-ci peut vous offrir d’avantage de flexibilité si de sélectionner les affichages que l’on veut copier ou pas

 

Conclusion

La copie d’affichage est possible dans la mesure ou les deux listes/bibliothèques ont les mêmes colonnes et dans ce billet je vous ai présenté deux méthodes ayant chacun leur niveau de convivialité et de flexibilité.