Extraction liste Sharepoint online avec Talend

L’utilisation des listes Sharepoint est de plus en plus utilisée pour faciliter la mise à disposition de référentiels au métier et permet ainsi d’éviter de faire transiter des fichiers plats par FTP afin de mettre à disposition des sources pour les traitements ETL.

Ce post va vous permettre de mettre en place rapidement dans Talend un processus d’authentification à la plateforme Microsoft O365 et la récupération du contenu de listes Sharepoint Online.

 

Configuration Sharepoint

Afin d’extraire d’accéder au contenu d’un Sharepoint il est nécessaire de créer un compte d’accès API REST. Ceci n’est pas un compte classique Microsoft avec login / mot de passe mais bien un compte dédié pour l’utilisation de l’API Microsoft.

  • Se rendre sur à l’url suivante pour générer un token API : https://votre_domaine.sharepoint.com/sites/le_site_sharepoint/_layouts/15/appregnew.aspx

La page suivante s’affiche alors :

  • Cliquez sur les 2 boutons [Générer] pour générer l’identifiant et le mot de passe. Bien garder ces informations dans un coin !
  • Dans le champ « Titre » : indiquez une valeur permettant de comprendre à quoi correspond ce token
  • Dans le champ « Domaine d’application », indiquez « localhost » (cette valeur n’est pas utile pour notre utilisation)
  • Dans le champ « URL de redirection » indiquez « https://localhost » (cette valeur n’est pas utile pour notre utilisation)

Pour finir cliquez sur le bouton [Créer]

  • Se rendre à l’URL https://votre_domaine.sharepoint.com/sites/le_site_sharepoint/_layouts/15/appinv.aspx
La page suivante s’affiche alors :
  • Dans le champ « ID de l’application » renseignez la valeur « ID client » précédemment généré et cliquez sur le bouton [Recherche]. L’ensemble des champs suivants vont se pré-remplir.
  • Dans le champ « Code XML de la demande d’autorisation », indiquez :
				
					<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="Read"/>
</AppPermissionRequests>
				
			

Cette simple configuration permettra de lire et donc d’extraire le contenu des listes Sharepoint. Si par contre vous souhaitez faire plus et donc accorder plus de droits vous pouvez changer la configuration précédente. Pour ce faire aller sur le site de Microsoft pour en savoir plus.

  • Pour terminer cliquez sur le bouton [Créer] et approuver les informations de la page suivante
  • Il faut maintenant récupérer l’identifiant Azure AD appelé aussi « Tenant ID » disponible sur cette page : https://aad.portal.azure.com/#settings/directory (valeur de la dernière colonne de la ligne concernant votre domaine) :

La configuration Sharepoint est maintenant terminée. Nous pouvons passer au traitement Talend.

Job Talend

Le job Talend va être découpé en 2 parties :

  • Une partie pour l’authentification Microsoft
  • Une partie pour la récupération du contenu de la liste à extraire.

ATTENTION : Il vous faut une version Talend ESB pour permettre l’authentification à Microsoft car le composant tRestClient n’existe pas dans la version Talend Data Integration classique (d’ailleurs si j’ai un conseille  vous donner en passant : utilisez tout le temps la version ESB pour vos projet d’intégration de données car elle procure plus d’options et de composants !)

Authentification Microsoft

  • Dans un job Talend créez les variables de contexte suivantes :

CTX_SHAREPOINT_auth_relative_url=/tokens/Oauth/2
CTX_SHAREPOINT_resource_prefix=00000003-0000-0ff1-ce00-000000000000
CTX_SHAREPOINT_client_id=valeur_client_ID_créé_précédement
CTX_SHAREPOINT_tenant_id=tenant_id_récupéré_précédement
CTX_SHAREPOINT_client_secret=valeur_client_secret_créé_précédement
CTX_SHAREPOINT_auth_url=https://accounts.accesscontrol.windows.net
CTX_SHAREPOINT_auth_grant_type=client_credentials
CTX_SHAREPOINT_host=votre_domaine.sharepoint.com
CTX_SHAREPOINT_access_token=
CTX_SHAREPOINT_url_sp_list=
CTX_SHAREPOINT_site=nom_du_site_sharepoint

  • Ajouter ensuite le composant tRestClient et configurer comme suivant :
  • Ajouter un composant tExtractJSONFields en liaison de sortie avec le tRestClient et le configurer comme suivant afin de récupérer le token de session et permettre de l’utiliser pour l’extraction de la liste Sharepoint :
  • Ajouter un composant tJavaRow en sortie du composant tExtractJSONFields et un composant tContextLoad en sortie du composant tJavaRow
  • Schéma du tJavaRow  :
  • Contenu du tJavaRow :
				
					output_row.key = "CTX_SHAREPOINT_access_token";
output_row.value = input_row.access_token;
				
			

Vous devriez obtenir ceci :

  • Lancez le traitement pour vous assurer que cette première partie fonctionne

Extraction d’une liste Sharepoint

Les listes Sharepoint de votre site sont listées ici : https://votre_domaine.sharepoint.com/sites/votre_site_sharepoint/_api/web/lists

Ce n’est pas forcement très clair depuis un navigateur mais ça va vous aidez à comprendre que toute ce que vous pouvez extraire ce trouve ici !

  • Dans votre job Talend, ajoutez un composant tJava et configurez comme suivant afin de définir l’URL d’accès à la liste sharepoint :
				
					context.CTX_SHAREPOINT_url_sp_list = ("https://" + context.CTX_SHAREPOINT_host +"/sites/" +context.CTX_SHAREPOINT_site +"/_api/web/lists/GetByTitle('TRANSCO%20-%20Collection')/items?$select=Title,Collection_x0020_cible");
				
			

Au delà de la concaténation de l’URL on peut voir plusieurs choses :

  • le nom de la liste Sharepoint à récupérer. Ici « TRANSCO%20-%20Collection » => remplacez obligatoirement les espaces par des %20 !
  • les colonnes de la liste à récupérer. Ici : « Title et « Collection_x0020_cible » => Attention se sont les noms technique des champs à récupérer en accédant la la liste Sharepoint via l’URL suivante depuis un navigateur sans le paramètre $select : https://votre_domaine.sharepoint.com/sites/votre_site_sharepoint/_api/web/lists/GetByTitle(‘nom_de_la_liste_sharepoint‘)/items
  • ajoutez un composant tRest pour l’extraction de la liste configurée comme suivant :
  • liez le composant tRest à un composant tExtractJSONFields. Dans cet exemple on va extraire les données à l’écran via un tLogRow qu’il convient de lier au précédent composant. Configuration du tExtractJSONFields :

Vous devriez obtenir le contenu du job suivant :

Pour aller plus loin

Je pense qu’il est possible de se passer du composant tRestClient et ainsi éviter d’avoir à utiliser la version ESB de Talend pour la partie authentification. L’idée est d’utiliser à la place un composant tREST avec pour header Accept = « application/x-www-form-urlencoded » mais le souci est : comment construire le contenu de type form-data à passer au body de ce composant ? J’ai tenté beaucoup de chose mais rien de fonctionne. Si jamais vous avez la solution je suis preneur !

Sinon si vous voulez filtrer un peu plus le contenu à extraire je vous conseille cette lecture : https://docs.microsoft.com/fr-fr/sharepoint/dev/sp-add-ins/use-odata-query-operations-in-sharepoint-rest-requests

Laisser un commentaire