← Tous les articles
Extensions client·14 déc. 2024

Integrating SAP FSM with Microsoft Power BI: Step-by-Step Guide.

ELL'équipe Elephantis
Guide pas à pas pour connecter SAP Field Service Management à Power BI et transformer vos données terrain en insights exploitables.

Le problème : aucun connecteur standard

Power BI sait se brancher nativement sur Salesforce, S/4HANA, IBM et des dizaines d'autres sources. Pas sur SAP Field Service Management. Le blocage n'est pas la donnée — la Query API de FSM expose tout — mais l'authentification : FSM parle OAuth2 client_credentials, et Power Query ne sait pas négocier un token tout seul. Tout le reste de ce guide consiste à lui apprendre.

Fenêtre « Get Data » de Power BI : la liste des connecteurs disponibles — Excel, Text/CSV, XML, JSON, PDF, SharePoint, SQL Server, Oracle, IBM Db2, MySQL — sans aucune entrée Field Service Management.
Une liste fournie, où FSM ne figure pas.

Étape 1 · Créer le client OAuth2 dans FSM

Dans l'administration FSM, créez un client OAuth2 : c'est lui qui portera les droits de lecture utilisés par Power BI. Vous choisissez à cette occasion les permissions et la société auxquelles le Client ID donne accès — restreignez-les au strict nécessaire, ce compte n'a besoin que de lire.

  • Le clientSecret n'est affiché qu'une seule fois, à la création : copiez-le immédiatement dans votre coffre-fort de mots de passe.
  • Donnez au client les droits de lecture des seuls DTO que vos rapports consomment, et rien d'autre.
  • Notez le tenant (account) et la société (company) : ils seront des paramètres de la requête.
Écran « Create Client » de SAP FSM : un Client ID nommé FSM_PowerBI_Client, la case Active cochée, la méthode d'authentification réglée sur Client Secret, et la liste des Admin Policy Groups dont les permissions sont sur « no access ».
Un client dédié, dont les permissions partent de « no access ».

Étape 2 · La fonction qui récupère le token

Ouvrez un rapport Power BI vierge, « Transformer les données », puis « Nouvelle source › Requête vide ». Dans l'éditeur avancé, remplacez le contenu par la fonction ci-dessous et renommez la requête « GET Token ». Elle concatène l'identifiant et le secret, les encode en base64 et échange le tout contre un bearer token.

Power Query M
() =>
let
    // Concatène ClientID et Client Secret, puis encode en base64
    authKey = "Basic " & Binary.ToText(Text.ToBinary("CLIENTID:CLIENTSECRET"), 0),
    url = "https://eu.fsm.cloud.sap",
    // Appelle la méthode POST OAuth2/token de FSM pour obtenir un bearer token
    GetJson = Web.Contents(url,
        [RelativePath = "/api/oauth2/v2/token",
         Headers = [#"Authorization" = authKey,
                    #"Content-Type" = "application/x-www-form-urlencoded;charset=UTF-8"],
         Content = Text.ToBinary("grant_type=client_credentials")
        ]
    ),
    FormatAsJson = Json.Document(GetJson),
    // Extrait le token de la réponse JSON
    AccessToken = FormatAsJson[access_token],
    AccessTokenHeader = "bearer " & AccessToken
in
    AccessTokenHeader
Ruban du Power Query Editor de Power BI, avec une flèche pointant l'entrée « Advanced Editor » du groupe Query.
L'éditeur avancé, où se colle la fonction.

Si Power BI réclame des identifiants

Au premier lancement, Power BI affiche souvent un bandeau « Modifier les informations d'identification ». C'est attendu : l'authentification ne se joue pas au niveau de la source mais dans l'en-tête que la fonction construit elle-même. Choisissez « Anonyme », validez, et le token remonte. Adaptez aussi le domaine eu.fsm.cloud.sap si votre tenant est hébergé sur un autre cluster.

Bandeau d'avertissement jaune de Power BI : « We couldn't authenticate with the credentials provided. Please try again. », suivi d'un bouton « Edit Credentials ».
L'avertissement à ne pas prendre pour une erreur.
Fenêtre « Access Web content » pour l'URL https://eu.fsm.cloud.sap/api/oauth2/v2/token, l'onglet « Anonymous » sélectionné dans la colonne de gauche et le bouton « Connect » mis en évidence.
« Anonymous », puis Connect.
Barre de formule de Power Query affichant = "bearer " & AccessToken, et le jeton obtenu en dessous, floutée.
Le bearer token, obtenu.

Étape 3 · La fonction qui interroge FSM

Créez une seconde requête vide, collez la fonction suivante et nommez-la « FSM Query ». Elle appelle la Query API de FSM en réutilisant « GET Token » à chaque exécution — le token est donc toujours frais, sans manipulation de votre part.

  • query — la requête FSM à exécuter, en syntaxe Query API.
  • DTOs — la liste des DTO mobilisés par la requête, versions comprises.
  • companyName — la société FSM sur laquelle porte la requête.
  • tenantName — le tenant (account) de votre environnement FSM.
Power Query M
(query as text, DTOs as text, companyName as text, tenantName as text) =>
let
    Source = Json.Document(Web.Contents("https://eu.fsm.cloud.sap",
        [RelativePath = "/api/query/v1?dtos=" & DTOs & "&query=" & query
            & "&account=" & tenantName & "&company=" & companyName & "&useExternalIds=true",
         Headers = [Authorization = "" & #"GET Token"(),
                    #"Content-Type" = "application/json",
                    #"x-client-ID" = "cpi",
                    #"x-client-version" = "1.0"]])),
    data = Source[data]
in
    data
Power Query affichant la fonction enregistrée : le volet Queries liste « GET Token » et « Query2 », et le panneau « Enter Parameters » présente les quatre champs vides query, DTOs, companyName et tenantName, avec les boutons Invoke et Clear.
La fonction enregistrée, prête à être appelée.

Étape 4 · Invoquer et modéliser

Saisissez vos quatre paramètres, cliquez sur « Appeler » : une nouvelle requête apparaît à gauche, contenant le résultat brut renvoyé par FSM. À partir de là, vous êtes en terrain Power BI connu — développez les colonnes imbriquées, renommez, typez, ajoutez vos colonnes conditionnelles. Dupliquez la fonction autant de fois que vous avez de jeux de données à ramener.

Le panneau « Enter Parameters » rempli : query vaut SELECT sc FROM ServiceCall sc, DTOs vaut ServiceCall.25, companyName vaut myCompany et tenantName vaut myTenant, une flèche pointant le bouton Invoke.
Un premier appel : tous les service calls.
Résultat de la requête dans Power Query : une colonne de seize lignes « Record », repliées.
FSM répond — les enregistrements restent à développer.
Le même résultat après expansion : une grille de colonnes typées, aux valeurs floutées.
Une fois les colonnes développées, le modèle est prêt.

Le point de sécurité, qui compte

Cette méthode fonctionne, mais elle a un défaut à connaître avant de la diffuser : le Client ID et le secret vivent en clair dans le fichier .pbix. Quiconque reçoit le rapport reçoit aussi les identifiants. Pour un prototype ou une analyse ponctuelle, c'est acceptable ; pour un rapport partagé largement, il faut sortir le secret du fichier — passerelle avec identifiants gérés, ou couche d'accès intermédiaire. C'est précisément ce que résout notre connecteur Power BI, et SAP oriente de son côté vers SAP Analytics Cloud.

Une première version de cet article a paru sur le SAP Community Blog