Onboarding SPFx

SPFx, oui déjà entendu parlé !!!

 

Mais je suis toujours la tête dans le guidon et n’est, hélas, pu commencer le fameux HelloWorld project !

Très bien, cet article est fait pour toi !

Je ne vais pas t’expliquer comment faire le WebPart HelloWorld puisque le tuto est disponible ici https://dev.office.com/sharepoint/docs/spfx/web-parts/get-started/build-a-hello-world-web-part

Non, je te propose de prendre un peu de recul et de comprendre comment fonctionne ce nouveau framework qui exploite des outils que tu n’as peut être jamais utilisé jusqu’ici en tant que SPFarmer.

YEOMAN, ça te parle ?

yoman_400x400

C’est une suite de 3 outils :

yo

YO, se charge de construire l’arborescence du projet à partir d’un modèle,

 

npm

NPM, permet de gérer les packages et leur dépendance,

 

 

gulp

GULP, est un outil de compilation.

 

Et comment tout cela fonctionne ?

spfx-schema

 

    1. Tout d’abord, il est nécessaire d’instancier un nouveau projet avec YO du type SharePoint,
    2. Le type ou modèle de projet est référencé sur NPM et redescendu sur votre machine,
    3. Il faut ensuite développer son application à partir du template qui exploite : TypeScript, REST, SCSS, REACT ou Knockout.JS (pour l’instant) : c’est donc du full client-side. J’espère avoir l’occasion de rentrer dans le détail du développement à proprement dit dans un prochain article rapidement.
    4. Lorsque l’on souhaite compiler son WebPart, il suffit de lancer la commande GULP SERVE.

gulpserve

  1. a : Les fichiers sont compilés TS vers JS, SCSS vers CSS, etc…
  1. b : un serveur web est monté avec NODE.JS

 

Chose importante, la commande GULP SERVE ne rend pas la main dans l’invite de commande et reste donc active.

A chaque changement de fichier source (TS, SCSS ou autre), GULP va automatiquement recompiler.

Ce n’est donc plus le moteur de visual studio qui fait le boulot et étant donné que tout tourne côté client le rechargement prend seulement quelques secondes.

Oui, vous pouvez tester en quelques secondes votre code J.

Terminé le process long et fastidieux de la compilation puis création du package, retrait du package sur le tenant et installation du package qui prend plus d’1 minute.

Et ça, j’achète !

 

La solution la plus simple pour tester le webpart est d’exploiter la page web de test générée localement, point 6a sur le schéma.

  1. a : La commande GULP SERVE lance automatiquement votre navigateur sur la page workbench.htmlCette page reprend le style graphique des Modern Pages SharePoint Online.Il suffit de lancer l’ajout du composant webpart du projet.

local-workbench

 

Attention cette technique ne permet pas d’intéragir avec l’environnement SharePoint Online.

Il vous faudra donc créé des données fictives qui seront chargées dans ce contexte local.

Le tuto parle de « Mock store » : https://dev.office.com/sharepoint/docs/spfx/web-parts/get-started/connect-to-sharepoint

La détection du mode local ou SharePoint est possible grâce à la propriété Environment.type

 

  1. b : l’autre solution consiste donc à tester directement sur SharePoint Online au travers de la page applicative /_layouts/workbench.aspx
  2. b’ : pour rappel, la techno est client-side full, donc finalement votre navigateur ouvre un WebPart qui exécute du code directement dans le naviguateur. Il ne se passe rien côté serveur hormis les traitements REST.

Les fichiers CSS, JS sont directement chargés sur votre serveur web local monté à l’aide de la commande GULP.

 

Ce processus est donc viable en phase de développement, en cas de déploiement réel sur SharePoint Online via un package, il convient de faire héberger les fichiers sur un CDN.

Ca tombe bien, SPFx propose d’exploiter Azure par défaut 😉

 

La suite au prochain épisode …

 

Publicités

Structure SharePoint

1.    Les composants SharePoint

 

1.1. Application de service

Les applications de service ont un but différent, mais sont toujours rattachées au contenu SharePoint.

Exemple l’application de service de recherche va permettre de rechercher du contenu SharePoint (pas de contenu -> pas de recherche).

 

Pour la liste des applications de services disponibles sur SharePoint 2013.

http://social.technet.microsoft.com/wiki/contents/articles/12512.sharepoint-2013-service-applications-list.aspx

 

Il convient de définir les usages souhaités de SharePoint et ainsi de mettre en place uniquement les applications de services nécessaires.

 

1.2. Application web de contenu

Les applications web de contenu sont constituées au minimum d’une site IIS et d’une base de données.

Le site IIS permet de définir l’URL d’accès et le mode d’authentification (NTLM, Kerberos, Formulaire)

La base de données héberge les données de l’application web de contenu.

Il est recommandé de ne pas dépasser les 20 applications web de contenu dans une ferme SharePoint.

https://technet.microsoft.com/fr-fr/library/cc262787.aspx#WebApplication

Termes associés : WebApp, SPWebApplication (PowerShell, Code)

 

1.3. Base de données

SharePoint repose sur un système de base de données, on distingue plusieurs types :

  • Base de données de configuration (SharePoint_Config) : c’est la base de données centrale de la ferme SharePoint. S’y trouve la liste des serveurs de la ferme et le paramétrage global.
  • Base de données d’application de service : la plupart des applications de service nécessitent leur propre base de données. Certains services disposent même de plusieurs bases de données.
  • Base de données de contenu : chaque application web de contenu doit avoir au moins une base de données de contenu. Les collections de site avec les sous sites, les bibliothèques de document et les documents sont stockées dans les bases de données de contenu.

 

La base de données de contenu est l’élément minimum à sauvegarder puisqu’il contient le contenu SharePoint, attention à bien sécuriser les backups car il est ensuite possible de d’accéder à tout le contenu.

 

Il est recommandé de multiplier le nombre de base de données de contenu pour limiter la taille de chacune d’elle. Dans un scénario classique une base de données de contenu ne doit pas dépasser les 200 Go.

https://technet.microsoft.com/fr-fr/library/cc262787.aspx#ContentDB

 

Termes associés : ContentDB, SPContentDatabase (PowerShell, Code)

 

1.4. Collection de site

Une collection de site est un ensemble logique constitué d’un ou plusieurs sous site.

Il est ainsi possible de disposer d’un menu de navigation pour l’ensemble d’une collection de site. Les groupes SharePoint les niveaux d’autorisation sont également disponibles dans toute la collection de site.

Il existe des administrateurs de collection de site qui disposent d’un accès total en écriture à l’ensemble du contenu d’une collection de site.

Maximum 750 000 collections de site :

  • 500 000 collection de sites personnel (OneDrive)
  • 250 000 collection de sites SharePoint (publication, team sites, etc…)

https://technet.microsoft.com/fr-fr/library/cc262787.aspx#SiteCollection

Termes associés : SiteCollection, SPSite (PowerShell, code)

 

1.5. Site et sous site

Une collection de site est un ensemble de site.

Lors de la création d’une collection de site un premier site est créé, on parle de site de haut niveau.

Les sites qui sont ensuite créés sont appelés des sous sites.

Il est possible de créer un sous site de sous site.

 

Maximum 750 000 sous site par ferme SharePoint :

  • 500 000 pour les OneDrive,
  • 250 00 pour le reste de SharePoint

Cela reprend les mêmes limites que pour les collections de site, puisqu’ici Microsoft part du principe 1 collection de site = 1 sous site.

 

Si vous multipliez les sous site dans une collection de site, il est recommandé de ne pas dépasser les 2 000 sous sites dans une même collection.

https://technet.microsoft.com/fr-fr/library/cc262787.aspx#SiteCollection

Termes associés : Web, SPWeb (PowerShell, code)

 

1.6. Listes et bibliothèque de document

Un site SharePoint est constitué de plusieurs listes et bibliothèques de document.

Une liste permet de stocker de l’information, tandis qu’une bibliothèque va stocker des fichiers.

Un calendrier est vu comme une liste.

Il convient de créer plusieurs bibliothèques de document dans un même site SharePoint afin de limiter la porter de certaines fonctions, exemple les notifications (« M’avertir ») ou encore la synchronisation avec OneDrive (en attendant la compatibilité du client nextgen avec SharePoint On Premise). L’aspect sécuritaire est également un facteur de création de nouvelle docLib, exemple une docLib pour les commerciaux et une docLib pour les responsables d’activités.

Maximum :

  • 30 000 d’éléments ou de document dans une liste.
  • 50 000 autorisations uniques (recommandé de ne pas dépasser les 5 000).

https://technet.microsoft.com/fr-fr/library/cc262787.aspx#ListLibrary

Termes associés : DocLib, List, Library, SPList (PowerShell, code)

 

2.    Schéma de synthèse

sharepoint-structure

 

Columns Hidden and SharePoint Crawl

Le moteur de recherche de SharePoint n’indexe pas les colonnes Hidden.
Un moyen de contournement est possible, il consiste à conserver vos colonnes Hidden à false (donc de les rendre visibles) et d’utiliser à la place les propriétés :

  • ShowInDisplayForm= »false »
  • ShowInEditForm= »false »
  • ShowInListSettings= »false »
  • ShowInNewForm= »false »
  • ShowInVersionHistory= »false »
  • ShowInViewForms= »false »

Ainsi, elles ne seront pas visibles de l’interface utilisateur, mais le moteur de recherche pourra les indexer 🙂

 

Damien NOBLET.

PROGRAMMATICALLY CREATE THUMBNAIL PHOTO ON SHAREPOINT USERS PROFILES

Vous connaissez surement la commande powershell : Update-SPProfilePhotoStore.

Cette commande bien pratique, permet de redimensionner les images des profils utilisateurs lorsque celles-ci sont positionnées par code. Voir https://kouilb.wordpress.com/2010/09/10/import-des-photos-du-profil-sharepoint-2010/

Tout cela est très bien lorsque l’on fait du PowerShell.

Mais lorsque l’on fait des mises à jour des photos des utilisateurs par programmation il n’est pas pratique de recourir à une commande PowerShell.

J’ai donc récupéré le code exécuté par la commande Update-SPProfilePhotoStore (merci ILSpy) et j’en ai fait une classe C# Helper (voir document  ci-joint en bas de page).

 

Principe des photos de profils SharePoint

Pour rappel, lorsqu’un utilisateur ajoute une photo dans son profil SharePoint. Celle-ci est stockée dans la bibliothèque d’image « Users Photos » à la racine de la collection de site MySite.

La photo sélectionnée par l’utilisateur est tout d’abord redimensionnée selon trois formats (300px, 72px et 48 px).

Attention les formats changent entre SharePoint 2010 et 2013.

Les images sont stockées avec le login de l’utilisateur suivi d’un suffixe :

  • _LThumb pour le format 300px
  • _MThumb pour le format 72px
  • _SThumb pour le format 48px.

 

Exemple :UsersPhoto

Enfin le profil utilisateur utilise l’url de l’image au format Medium pour la propriété « PictureUrl ».

 

Le code

La classe Helper

Tout d’abord, la classe Helper. Je n’ai rien inventé tout est repris de la commande PowerShell, mais petite explication quand même 🙂

 

On commence par écrire quelques propriétés et méthodes pour récupérer les largeurs définies (300 px, 72px et 48px) et les suffixes associés.

HelperImage1

Puis la méthode de resize « CreateThumbnail », je l’ai adapté pour quelle prenne en paramètre l’image d’origine en tableau de byte.

Elle prend donc en paramètre :

  • L’image à redimensionner (Byte[] OriginalFile)
  • La largeur souhaitée (int idealWidth)
  • La hauteur souhaitée (int idealHeight)
  • Le répertoire ou la docLib où enregistrer l’image redimensionnée (SPFolder folder)
  • Le nom de l’image redimensionnée (string fileName)

HelperImage2

L’utilisation

J’utilise un travail du minuteur SharePoint pour réaliser la mise à jour des photos.

Je récupère la liste de stockage des Photos (dans le MySite).

Resize1

Les photos sont stockées dans une base de données métier (Oracle).

Je récupère le login (samAccountName) et la photo au format byte[].

Resize2

Je récupère le profil SharePoint (attention la récupération est réalisée à l’aide d’une autre classe Helper)

Resize3

Je réalise le redimensionnement dans les 3 formats.

Resize4

Je viens modifier le profil utilisateur pour utiliser le format medium.

Resize5

Lien pour télécharger les fichiers sources : SPHUserProfilePhoto.cs , ImportHermesPhoto.cs

 

Vous avez tout pour réaliser une synchronisation des photos SharePoint à partir d’une base de données métier.

 

Damien NOBLET

Proof Of Concept Word Automation on SharePoint 2013

Voici un bout de code permettant l’utilisation de l’application de service Word Automation de SharePoint 2013 dans un composant WebPart.

Nous utilisons ici la nouvelle fonctionnalité de conversion synchrone et non la création d’une tâche façon SharePoint 2010.


publicclassConvertToPDF : WebPart
{
  TextBox tbt =newTextBox();
  Button btn =newButton();

  protectedoverridevoid CreateChildControls()
  {
     btn.Text ="Convert";
     btn.Click += btn_Click;
     this.Controls.Add(tbt);
     this.Controls.Add(btn);
  }

  void btn_Click(object sender, EventArgs e)
  {
     SPFile file =SPContext.Current.Web.GetFile(tbt.Text);
     byte[] PDF = WriteSpFile(file);

     SPWeb web =SPContext.Current.Web;

     SPList list = file.Item.ParentList;

     // Url for file to be created
     string destFile = list.RootFolder.Url +"/"+ file.Name +".pdf";

     // create the document and get SPFile/SPItem for
     // new document
     SPFile addedFile = list.RootFolder.Files.Add(destFile, PDF, false);
     SPItem newItem = addedFile.Item;
     newItem["Title"] ="PDF";
     newItem.Update();
     addedFile.Update();
  }

  publicstaticbyte[] WriteSpFile(SPFile spFile)
  {
    using (Stream read = spFile.OpenBinaryStream())
    {
      using (MemoryStream write =newMemoryStream())
      {
        string wordAutomationServiceName = "Word";
        SyncConverter sc = newSyncConverter(wordAutomationServiceName);
        SPSite spSite = SPContext.Current.Site;
        sc.UserToken = spSite.UserToken;
        sc.Settings.UpdateFields =true;
        sc.Settings.OutputFormat =SaveFormat.PDF;
        ConversionItemInfo info = sc.Convert(read, write);

        if (info.Succeeded)
        {
          return write.ToArray();
        }
      }
    }
   returnnull;
  }
}

Il est nécessaire d’inscrire à votre projet la référence à la DLL Microsoft.Office.Word.Server du dossier ISAPI de SharePoint.

dll

Attention ce code n’a aucun contrôle d’erreur (POC).

PowerPivot pour SharePoint 2013 et le refresh des données

Après plusieurs mois sans nouveaux articles, je vais aujourd’hui prendre le temps de vous faire un petit rappel sur le refresh des données PowerPivot sous SharePoint 2013.

Cet article ne vous montre pas comment mettre en place cette « u… à g.. » de Business Intelligence sous SharePoint 2013, il y a déjà beaucoup d’information sur Internet.

Le refresh on demand

Le refresh on demand utilise la configuration de la source de données du fichier Excel.

refreshOnDemand

Pour vérifier la configuration, ouvrir le fichier PowerPivot dans Excel 2013.

EditInExcel

Dans l’onglet Data, ouvrir les connexions de données.

EditConnection

Ouvrir les propriétés de la connexion aux données.

EditPropertiesConnection

Ouvrir les propriétés d’authentification

EdutAuthSetting

Sélectionner « None » pour que le refresh aille récupérer l’identité de la banque d’information sécurisée (Secure Store).

AuhtSecureStore

N’oubliez pas de positionner l’identité dans le secure store.

SetCredentialsSSOPowerPivot

Bien sur, donner les autorisations de lecture au compte sur les données (base de données) attaquées par le fichier PowerPivot.

Le refresh intéractif ou à la demande est normalement opérationnel.

Le refresh planifié

Une autre possibilité est de demander à SharePoint de faire la mise à jour des données PowerPivot.

Pour cela, rendez-vous dans la gestion des planifications de mises à jour.

ManageDataRefresh2

Activer la mise à jour planifiée et demander un refresh dès que possible.

EnableSchedule

Vous avez la possibilité de fournir des identifiants.

Sceduled1

Et de spécifier pour chaque connexion de données des paramètres spécifiques.

Sceduled2

Relancer la page de gestion des mises à jour planifiée. Vous allez voir apparaître sous peu une nouvelle ligne sur l’historique qui va vous confirmer (ou pas) la bonne exécution de la mise à jour des données.

ScheduleOK

L’astuce

Il est possible que la mise à jour échoue avec ce message d’erreur « Call to Excel Services returned an error. ».

SceduleFailed

ULS indique un message plus explicite :

EXCEPTION: System.InvalidOperationException: Call to Excel Services returned an error. —> Microsoft.AnalysisServices.SPClient.Interfaces.ExcelServicesException: We’re sorry. We can’t open the workbook in the browser because it uses these unsupported features:

Les mises à jour planifiées ne peuvent être réalisée si le fichier Excel PowerPivot contient une feuille PowerView. Cela fonctionne avec des PivotTables.

Supprimer ces feuilles, nous allons voir comment créer les rapports PowerView directement dans SharePoint.

Création d’un rapport PowerView depuis SharePoint

Nous avons désormais, un fichier PowerPivot avec beaucoup de données.

Nous allons créer un rapport PowerView sans Excel directement depuis SharePoint.

Depuis la galerie PowerPivot, lancer la création d’un rapport PowerView.

CreatePowerView

Vous vous retrouver dans votre navigateur à créer un rapport PowerView 🙂

IECreatePowerView

Enregistrer, le rapport il est ajouté automatiquement à la galerie.

Galerie

Conclusion

La mise à jour à la demande d’un fichier PowerPivot avec une feuille PowerView est possible mais plus de mise à jour planifiée. :-/

Je vous conseille donc de sortir les feuilles PowerView de vos fichiers PowerPivot afin de bénéficier de ces mises à jour automatiques bien pratiques !

@ bientôt, Damien

La recherche contextuelle SharePoint ne retourne aucun élément

Considérez le scénario suivant, une application web avec deux étendues :

– une étendue sur la zone par défaut avec une authentification par formulaire

– une étendue sur une autre zone avec une authentification windows intégrée

Mapping

Dans cette configuration, votre moteur de recherche SharePoint doit impérativement utiliser l’URL d’accès au contenu qui utilise l’authentification Windows intégrée.

Le moteur de recherche ne peut indexer un site SharePoint via une authentification par formulaire.

StartAdress

 L’indexation se passe dans ce cas normalement.

 Une recherche sur l’étendue « Tous les sites » fonctionne normalement.

searchresults

 Par contre une recherche contextuelle (conceptuelle selon le terme Microsoft) « Ce site » ou « cette liste » ne vous retourne aucun élément.

 

noresults

 

Cela se produit si l’URL par défaut d’une application web n’est pas l’URL d’accès au contenu du moteur de recherche.

Il est donc obligatoire de configurer la zone par défaut avec l’authentification Windows Intégrée et d’utiliser les autres zones pour les autres modes d’authentification.

GoodMapping

Damien.

 

%d blogueurs aiment cette page :