Lors de la réalisation de l’un de nos projets d’intranet collaboratif supporté par SharePoint Online et donc intégré à Office 365, notre client avait pour objectif la création d’un formulaire SharePoint, accessible dans sa version online et permettant la lecture/écriture de données dans une base SQL Azure.
Ce formulaire SharePoint devait permettre aux utilisateurs de mettre à jour leurs données personnelles, aussi bien sur leurs comptes O365 que dans la base de données, utilisée par d’autres services internes à l’entreprise.
La validation devait également entrainer la création et la configuration automatique de groupes Office 365.
Le type de contenu externe, un lien direct entre un formulaire SharePoint et une base de données
Dans SharePoint, le paramétrage d’un type de contenu externe permet de récupérer les données d’une source (dans notre cas il s’agira des tables de la base de données SQL hébergé dans Azure), mais il est aussi possible d’en afficher le contenu sous forme d’une liste SharePoint.
Avant de pouvoir communiquer en lecture et écriture avec une base de données SQL hébergée dans Azure, il est nécessaire d’activer les Services Business Data Connectivity et le Service Banque d’information sécurisée (Secure Store Service) pour pouvoir créer un type de contenu externe. La documentation de Microsoft explique la marche à suivre sur cette page
Limitations liées à l’utilisation des types de contenus externes
En effet, les listes basées sur du contenu externe à SharePoint sont limitées à 2 000 lignes, au-delà de quoi le service retourne une erreur.
(Cette limitation ne peut être augmentée sur Office 365, mais il est possible de le faire sur une version On Premise de SharePoint via des commandes PowerShell).
La solution pour contourner cette limitation est de paramétrer un filtre lors de la création du type de contenu externe afin d’avoir un minimum de lignes retournées. La valeur de ce filtre pourra ensuite être changée via une requête CAML, envoyée depuis le formulaire pour faire remonter les informations voulues.
Après avoir mis en place les différentes listes basées sur le type de contenu externe, nous avons la possibilité de lire et écrire du contenu dans la base de données au travers de ces listes en nous appuyant sur l’API REST de SharePoint, requêtée via JavaScript depuis l’interface du formulaire.
(Pour avoir plus d’infos sur l’API REST, la documentation Microsoft est votre amie : msdn.microsoft.com)
Le développement d’un Webservice : automatiser la création de groupe Office 365 et la répartition des utilisateurs
Une autre problématique posée dans le cadre de ce projet fut de pouvoir créer des groupes Offices 365 à la validation d’un formulaire SharePoint. L’objectif étant d’ajouter automatiquement un utilisateur ayant rempli le formulaire SharePoint à un groupe Office 365 nouvellement créé.
Pour ce faire, la meilleure réponse pour réaliser cette demande fut l’utilisation d’un web service externe.
Cette passerelle nous permettant ainsi de faire le lien entre un appel Ajax depuis le formulaire SharePoint et l’exécution de commandes PowerShell vers Office 365, avec vérification au préalable de la bonne mise à jour du serveur.
Nous nous sommes tournés vers un webservice REST développé en c# avec l’outil Microsoft Visual Studio.
Pour rendre opérationnelle cette passerelle, le serveur doit disposer de :
- PowerShell 5.0 disponible avec le Windows Management framework 5.0
- Microsoft Online Services Sign-In Assistant (32bits ou 64bits)
- Microsoft Online Services Module for Windows PowerShell (32bits ou 64bits)
- De s’assurer que l’Execution Policy est bien configurée avec la valeur RemoteSigned
Si cette dernière n’est pas correctement configurée, il faudra changer l’Execution Policy à l’aide de la commande suivante :
Une fois l’ensemble installé, il est alors possible de tester si l’on peut se connecter correctement à son domaine Office 365, à l’aide des commandes PowerShell suivantes :
Une fois le serveur correctement configuré, il est maintenant possible de coder le web service proprement dit.
Sans rentrer dans les détails du web service en lui-même, la partie permettant d’exécuter des commandes PowerShell nécessitait d’utiliser la librairie System.Management.Automation afin de pouvoir accéder aux objets Runspace, PSObject, PSCredential et PsCommand
Voici un exemple de code permettant de s’authentifier :
En procédant de la même manière, il était facile de créer un groupe Office 365 en utilisant la commande PowerShell suivante :
Comment automatiser l’ajout de groupes Office 365 à la validation d’un formulaire SharePoint, en tant que groupe de sécurité dans un site SharePoint Online ?
Suite à cette demande, le client souhaitait également que l’on automatise l’ajout ce groupe Office 365 dans son site SharePoint Online.
Nous avons donc mis à jour ce même web Service, en utilisant cette fois-ci la librairie Microsoft.SharePoint.Client en version 16 afin d’avoir accès aux fonctionnalités de connexion sur SharePoint online. L’identification au SharePoint online se faisant grâce à l’utilisation de la classe clientContext puis en définissant les crédentials nécessaires à la connexion.
Exemple de code pour se connecter sur SharePoint online :
Il faut savoir que l’intégration d’un groupe Office 365 dans SharePoint online avec un rôle de lecture nécessite plusieurs actions :
- Charger la définition des rôles du webservice en cours
- Définir le groupe Office 365 à l’aide d’un objet UserCreationInformation
- Créer une nouvelle définition de rôle à l’aide de l’objet RoleDefinition
La récupération des rôles s’accomplira ensuite en chargeant leur définition comme ceci :
La création de l’objet UserCreationInformation nécessitera quant à lui de renseigner l’email, le nom du groupe ainsi que le loginName du groupe Office 365, de cette manière-ci :
Enfin l’ajout du groupe doit se faire au niveau du SiteUsers et l’affectation des droits au niveau du RoleAssignments sera mise en place, par exemple, de cette manière :
Et voilà, le web Service est maintenant prêt à être déployé sur IIS, il ne restera plus qu’à l’interroger côté SharePoint Online.
Pour ce faire nous avons opté pour l’utilisation de XMLHttpRequest en JavaScript de la manière suivante :
Dans cet exemple nous avons utilisé le protocole GET, mais il est tout à fait possible d’utiliser un POST.
La solution que nous avons apportée à ces différentes problématiques est aujourd’hui fonctionnelle, cependant les outils et l’écosystème Office 365 en constante évolution, permettent d’ouvrir d’autres axes de réflexion.
Nous aurions pu envisager par exemple l’utilisation de PowerApps et de Microsoft Flow. Ces derniers permettent d’utiliser différents connecteurs et offrent la possibilité d’agir sur les données de la suite Office 365, sur des bases de données externes ainsi que sur des dizaines d’applications (attention cependant, les fonctionnalités et connecteurs disponibles dépendent du type de licence de l’utilisateur).
Découvrez nos prestations sur SharePoint
Article co-écrit avec Bruno Thomé, Chef de projet technique Office 365.