Dans cette série d’articles, nous verrons comment accéder aux documents contenus dans une bibliothèque SharePoint comme source de données pour Azure Data Factory. Azure Data Factory permet en standard de charger les données issues des listes SharePoint. Mais ici, je vais détailler comment lire les données de fichiers Excel et/ou CSV contenus dans une bibliothèque SharePoint car la procédure n’est pas aisée.
Comme cette procédure n’est pas en standard dans Azure Data Factory, les étapes à réaliser sont nombreuses et il est important de les suivre attentivement.
Voici les différentes étapes à réaliser
- Enregistrer une application dans Azure Active Directory
- Enregistrer les éléments de l’application enregistrée dans un Azure Key Vault
- Créer un environnement Azure Data Factory
- Donner les droits d’accès dans le site SharePoint
- Créer le pipeline pour récupérer les informations contenues dans un document (cet article)
- Bonus : accéder à une série de documents dans la bibliothèque SharePoint (article à venir)
Voici la dernière partie de notre série d’articles et il s’agit de l’article le plus complexe au regard du nombre d’opérations à réaliser.
Dans les précédents articles, nous avons créé toutes les ressources nécessaires et nous les avons paramétrés pour que notre projet fonctionne correctement.
Je rappelle ici les ressources du projet :
- Une application inscrite dans Aure Active Directory
- Une ressource Azure Key Vault
- Une ressource Azure Data Factory
- Une ressource Azure SQL Database
- Une bibliothèque SharePoint
Nous allons maintenant créer un pipeline dans Azure Data Factory avec les activités nécessaires pour intégrer les données incluses dans un fichier Excel inclus dans la bibliothèque SharePoint vers la base de données.
Pour accéder aux fichiers hébergés dans la plate-forme SharePoint Online, nous n’utiliserons pas de composants natifs car aucun ne correspond à notre besoin. Nous utiliserons à la place des composants pour attaquer les API de SharePoint : donc, dans ADF, il s’agit des composants HTTP ou Web.
La première chose à faire est évidemment d’ouvrir Azure Data Factory Studio.
Au préalable, pour plusieurs saisies, vous pouvez choisir de nommer les objets comme vous le souhaitez. Toutefois, je vais dans cet article copier les textes des contenus dynamiques ADF : si vous avez utilisé les mêmes libellés que moi, vous n’aurez qu’à faire des copier-coller. Sinon, il faut modifier lesdits textes en fonctions de vos propres saisies.
Nous disposons déjà de paramètres globaux créés précédemment comme le montre l’image suivante :

L’étape suivante sera de créer un nouveau service lié de type HTTP pour permettre l’accès au contenu des fichiers Excel.

Nous appellerons ce service lié SharePoint Online. Ensuite dans la section réglage, nous indiquons un nouveau paramètre de type String et nommé NomTenant. Le type d’authentification est Anonyme. Pour l’URL de base, il s’agit de rentrer le nom du service SharePoint, à savoir https://[votretenant].sharepoint.com/sites/ . Voici donc le texte à coller en guise de contenu dynamique pour l’URL de base :
@{concat('https://', linkedService().NomTenant, '.sharepoint.com/sites/')}
Voici le résultat après un test de connexion :

Comme toutes les modifications que nous réalisons, il est important de les sauvegarder en publiant notre projet Azure Data Factory. Ceci étant dit, pour ne pas charger cet article, je ne le repréciserai pas par la suite.
Une fois ce service lié, nous allons directement à la page Gérer pour ajouter deux nouveaux jeux de données : le premier est la source Excel et le second est la destination, à savoir une table Azure SQL Database.

Pour le jeu de données Excel, nous sélectionnons HTTP comme magasin de données et Excel comme type de format de données. Ensuite, nous nommons ce jeu de données Generic_Excel_depuis_SharePoint et préciser SharePoint Online comme service lié. Enfin, nous cochons la case Première ligne comme en-tête. Nous n’irons pas plus loin tout de suite et validons la saisie.



Nous allons directement dans l’onglet Réglages pour créer 6 entrées de type chaîne dont les noms sont les suivants :
- NomTenant
- NomSiteSharePoint
- NomListeSharePoint
- NomDossierSharePoint
- NomFichierSharePoint
- NomFeuilleExcel

Nous revenons vers l’onglet Connexion pour préciser les valeurs suivantes en tant que contenu dynamique :
Champs | Valeurs du contenu dynamique |
---|---|
NomTenant | @dataset().NomTenant |
URL relative | @concat(dataset().NomSiteSharePoint, ‘/_api/web/GetFileByServerRelativeUrl( »/sites/’, dataset().NomSiteSharePoint, ‘/’, dataset().NomListeSharePoint, ‘/’, dataset().NomDossierSharePoint, ‘/’, dataset().NomFichierSharePoint, »’)/$value’) |
Nom de la feuille | @dataset().NomFeuilleExcel |

Nous appelons l’API SharePoint GetFileByServerRelativeUrl pour ce jeu de données. Voici le jeu de données Excel créé et paramétré.
Nous allons maintenant créer le jeu de données de type Azure SQL Database. Pour cela, nous sélectons Azure SQL Database comme Magasin de données. Ce jeu de données sera nommé Generic_SQL_table et le serveur lié est Base de données SQL destination. Nous réglerons les autres paramètres juste après.


Dans l’onglet Réglage, nous créons une nouvelle entrée de type Chaîne que nous nommerons NomTable.

Maintenant, allons dans l’onglet Connexion et modifions le champs Table. Dans le premier champ, nous indiquerons dbo comme nom de schéma et le contenu dynamique suivant pour le nom de la table :
@dataset().NomTable

Nous pouvons enfin créer le pipeline que nous nommerons Chargement de SharePoint vers SQL. Nous allons utiliser 4 activités Web et une activité de copie selon le schéma suivant :

Ancien nom de l’activité | Nouveau nom de l’activité |
---|---|
Web1 | Obtenir ID du tenant |
Web2 | Obtenir ID du client |
Web3 | Obtenir secret du client |
Web4 | Obtenir le token |
Copy data1 | Copie Excel vers SQL |

Pour ce pipeline, nous allons créer 3 variables de type Chaîne avec les propriétés suivantes :
Nom des variables | Type | Valeur par défaut |
---|---|---|
NomSiteSharePoint | Chaîne | Donnescharger |
NomListeSharePoint | Chaîne | BibliothqueDocuments |
NomDossierSharePoint | Chaîne | Doss1/Doss2 |

Nous allons maintenant paramétrer les trois activités les plus à gauche (Obtenir ID du tenant, Obtenir ID du client et Obtenir secret du client). Pour ce faire, nous allons chercher les valeurs qui sont stockés dans la ressource Azure Key Vault et cela en passant par le service Web dudit service.
Les trois activités ont des paramètres identiques, à savoir :
Paramètre | Valeur |
---|---|
Méthode | GET |
Authentification | Identité managée affectée par le système |
Ressource | https://vault.azure.net |
Par contre, l’URL est différente pour chacune des trois activités. Il faut préciser ces URL en tant que contenu dynamique :
Activités | Valeur de l’URL |
---|---|
Obtenir ID du tenant | @concat(pipeline().globalParameters.AKV_URL, ‘secrets/’, pipeline().globalParameters.AKV_Secret_IDAnnuaire, ‘?api-version=7.0’) |
Obtenir ID du client | @concat(pipeline().globalParameters.AKV_URL, ‘secrets/’, pipeline().globalParameters.AKV_Secret_IDApplication, ‘?api-version=7.0’) |
Obtenir secret du client | @concat(pipeline().globalParameters.AKV_URL, ‘secrets/’, pipeline().globalParameters.AKV_Secret_SecretApplication, ‘?api-version=7.0’) |
Voici le résultat pour la première activité, sachant que les deux autres sont sur le même modèle :

Nous allons maintenant paramétrer l’activité Obtenir le token fourni par AAD. Cette activité va appeler le service Web de l’Azure Active Directory pour récupérer un jeton (token) correspondant à l’application inscrite.
Dans le tableau suivant, vous trouverez les valeurs à entrer dans l’onglet Paramètres de l’activité :
Paramètre | Type du saisie | Valeur |
---|---|---|
URL | Contenu dynamique | @concat(‘https://accounts.accesscontrol.windows.net/’, activity(‘Obtenir ID du tenant’).output.value, ‘/tokens/OAuth/2’) |
Méthode | Sélection dans une liste | POST |
En-têtes | Nouvelle ligne | Nom : Content-Type Valeur : application/x-www-form-urlencoded |
Corps | Contenu dynamique | @concat(‘grant_type=client_credentials&client_id=’, activity(‘Obtenir ID du client’).output.value, ‘@’, activity(‘Obtenir ID du tenant’).output.value, ‘&client_secret=’, activity(‘Obtenir secret du client’).output.value, ‘&resource=00000003-0000-0ff1-ce00-000000000000/’, pipeline().globalParameters.AKV_Secret_NomAnnuaire, ‘.sharepoint.com@’, activity(‘Obtenir ID du tenant’).output.value) |
Authentification | Sélection dans une liste | Aucun |
Voici le résultat un fois les paramètres saisies :

Il y a lieu à cette étape de sécuriser les données générées par les activités Web et ainsi que l’activité de copie (dont nous détaillerons par la suite les paramètres) que les données sensibles (valeur du secret de l’application inscrite ainsi que le token ne seront pas présents dans les journaux de log. Pour ce faire, nous activerons les entrées et sorties sécurisées présents dans l’onglet Général de toutes activités. Voici un exemple pour l’une des activités. Nota : un token est valable 24 heures :

Il est temps maintenant de nous occuper de l’activité de copie. Il s’agit donc de paramétrer comme source une feuille d’un fichier Excel héberger dans une bibliothèque SharePoint et comme destination, nous utiliserons ici une table d’une base de données Azure SQL Database.
Donc, commençons par la source. Voici les paramètres que nous saisissons :
Paramètre | Type de saisie | Valeur |
---|---|---|
Jeu de données source | Sélection dans une liste | Generic_Excel_depuis_SharePoint |
NomTenant | Contenu dynamique | @pipeline().globalParameters.AKV_Secret_NomAnnuaire |
NomSiteSharePoint | Contenu dynamique | @variables(‘NomSiteSharePoint’) |
NomListeSharePoint | Contenu dynamique | @variables(‘NomListeSharePoint’) |
NomDossierSharePoint | Contenu dynamique | @variables(‘NomDossierSharePoint’) |
NomFichierSharePoint | Saisie libre | [Le nom de votre fichier] |
NomFeuilleExcel | Saisie libre | [Le nom de la feuille] |
Méthode de demande | Sélection dans une liste | GET |
En-têtes supplémentaires | Contenu dynamique | @{concat(‘Authorization: Bearer ‘, activity(‘Obtenir le token’).output.access_token)} |
Voici le résultat de la saisie :

La dernière étape est de paramétrer l’onglet Récepteur de l’activité de copie :
Paramètre | Type de saisie | Valeur |
---|---|---|
Jeu de données de récepteur | Sélection dans une liste | Generic_SQL_table |
Nom de table | Saisie libre | [Nom de votre table] |
Option de table | Choix | Créer automatiquement un table |

Ici, nous avons fait le choix de créer automatiquement la table dans la base de données.
Nous pouvons maintenant lancer l’exécution du pipeline et constater son bon déroulement :

Et en interrogeant la base de données, les données sont bien présentes :

En clonant l’activité de copie est possible d’ajouter sans trop d’effort de nouveaux fichiers Excel et/ou de nouvelles feuilles pour copier les données vers notre base de données SQL Server.
En ajoutant un jeu de données de type DelimitedText et en inspirant du paramètrage du jeu de données Excel, il est tout aussi simple de charger des fichiers de type CSV :

Ainsi s’achève notre série d’articles sur ce sujet. Je vous propose un article bonus sur la façon de charger plusieurs fichiers issus de SharePoint dont on ne connaît pas le nom.
Références
Bien à vous.
4 réponses à « Accéder aux documents contenus dans une bibliothèque SharePoint comme source de données pour Azure Data Factory – Partie 5 »
[…] Créer le pipeline pour récupérer les informations contenues dans un document […]
J’aimeJ’aime
[…] Créer le pipeline pour récupérer les informations contenues dans un document […]
J’aimeJ’aime
[…] Créer le pipeline pour récupérer les informations contenues dans un document […]
J’aimeJ’aime
[…] Créer le pipeline pour récupérer les informations contenues dans un document […]
J’aimeJ’aime