Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce démarrage rapide montre comment vous connecter à Dataverse et utiliser l’API web avec les technologies suivantes :
Technologie | Description |
---|---|
JavaScript | Un langage de programmation pour le développement web, permettant un contenu interactif. Il s’exécute dans les navigateurs pour les scripts côté client et peut être utilisé côté serveur avec Node.js. |
Visual Studio Code | Un éditeur de code open source léger avec débogage, surbrillance syntaxique et prise en charge des plug-ins. |
Applications à une seule page (SPA) | Applications Web qui chargent une seule page HTML et mettent à jour dynamiquement le contenu lorsque l’utilisateur interagit avec l’application. Cette approche offre une expérience utilisateur plus fluide et plus rapide en réduisant le rechargement des pages et en améliorant les performances. |
Bibliothèque d’authentification Microsoft pour JavaScript (MSAL.js) | Une bibliothèque qui permet l’authentification et l’autorisation pour les applications Web utilisant les plateformes d’identité Microsoft. Il simplifie l’intégration de la connexion sécurisée et de l’acquisition de jetons pour accéder aux ressources protégées. |
Partage de ressources cross-origin (CORS) | Une application SPA peut utiliser JavaScript côté client avec l’API web Dataverse car CORS est activé. CORS est une fonctionnalité de sécurité dans les navigateurs Web qui permet un accès contrôlé aux ressources d’un serveur Web à partir d’une origine différente. Il permet aux applications web de contourner la stratégie de même origine, ce qui facilite le partage de données entre différents domaines. |
Goal
Ce démarrage rapide se concentre sur la connexion à l’API web Dataverse avec JavaScript en utilisant une application cliente SPA avec un nombre minimal d’étapes. Lorsque vous effectuez ce guide de démarrage rapide, vous pouvez :
- Ouvrir une session et vous connecter à Dataverse
- Appeler la fonction WhoAmI et afficher votre valeur
UserID
.
L’exécution de ce démarrage rapide vous permet d’essayer les exemples d’opérations de données de l’API web (JavaScript côté client) qui illustrent des fonctionnalités plus avancées.
Nonte
Ce guide de démarrage rapide ne s’applique pas aux scénarios JavaScript côté client suivants :
Scénario | En savoir plus |
---|---|
Scripts de l’application pilotée par modèle |
-
Appliquer la logique métier en utilisant le script client dans les applications pilotées par modèle avec Javascript - Xrm.WebApi (référence de l’API client) |
Power Apps component framework |
-
WebAPI des composants de code - Mise en œuvre du composant API web |
Portails Power Pages | Power PagesPortails API web |
Dans ces scénarios, le type d’application respectif vous permet d’envoyer des requêtes plutôt que d’utiliser directement l’API Fetch native JavaScript, comme indiqué dans ce démarrage rapide. Les scripts côté client dans les applications pilotées par modèle s’exécutent dans le contexte d’une application authentifiée, de sorte que chaque demande ne nécessite pas de jeton d’accès.
Prérequis
Le tableau suivant décrit les conditions préalables nécessaires pour exécuter ce guide de démarrage rapide et les exemples d’opérations de données de l’API web (JavaScript côté client).
Conditions préalables | Description |
---|---|
Privilèges pour créer un enregistrement d’application Entra | Vous ne pouvez pas exécuter ce démarrage rapide sans la possibilité de créer un enregistrement d’application Microsoft Entra pour l’activer. Si vous n’êtes pas sûr de pouvoir le faire, essayez la première étape pour Enregistrer une application SPA et découvrez-le. |
Visual Studio Code | Si Visual Studio Code n’est pas installé sur votre ordinateur, vous devez Télécharger et installer Visual Studio Code pour exécuter ce démarrage rapide. |
Node.js | Node.js est un environnement d’exécution qui vous permet d’exécuter JavaScript côté serveur. Ce guide de démarrage rapide crée une application SPA qui exécute JavaScript côté client dans un navigateur plutôt que le runtime Node.js. Mais Node Package Manager (npm) est installé avec Node.js et npm est nécessaire pour installer Parcel et la bibliothèque MSAL.js. |
Colis | Les applications Web modernes ont généralement de nombreuses dépendances aux bibliothèques open source distribuées à l’aide de npm et de scripts qui doivent être gérés et optimisés pendant le processus de génération. Ces outils sont appelés « bundlers ». Le plus courant est webpack. Ce démarrage rapide utilise Parcel car il offre une expérience simplifiée. Pour des démarrages rapides et des exemples qui montrent des applications SPA utilisant différents cadres et bundlers, consultez Exemples d’applications à une seule page Microsoft Entra. Vous pouvez adapter ces exemples pour utiliser l’API web Dataverse avec les informations présentées dans ce démarrage rapide. |
Technologies web | Une connaissance de HTML, JavaScript et CSS est nécessaire pour comprendre le fonctionnement de ce démarrage rapide. Il est essentiel de comprendre comment effectuer des requêtes réseau avec JavaScript. |
Enregistrer une application SPA
Cette étape est la première, car si vous ne pouvez pas enregistrer une application, vous ne pouvez pas effectuer ce démarrage rapide.
N’importe lequel des rôles Microsoft Entra privilégiés suivants inclut les autorisations requises :
Lorsque vous configurez l’application, vous avez besoin d’un ID d’application (client) et de l’ID de votre client Microsoft Entra. Vous devez également choisir un nom descriptif pour l’application afin que les utilisateurs sachent pourquoi l’application a été créée.
Enregistrer votre application
Vous pouvez enregistrer votre demande à l’aide de l’un des moyens suivants :
- Interface utilisateur de l’application web Microsoft Entra
- Applet de commande New-AzADApplication d’Azure PowerShell.
Créer l’enregistrement d’application
Connectez-vous au centre d’administration Microsoft Entra.
Si vous avez accès à plusieurs clients, utilisez l’icône Paramètres
dans le menu supérieur pour basculer vers le client dans lequel vous souhaitez enregistrer l’application à partir du menu Répertoires + abonnements.
Accédez à Identité>Applications>Enregistrements d’applications et sélectionnez Nouvel enregistrement.
Entrez un Nom pour l’application, par exemple
Dataverse Web API Quickstart SPA
.Pour Types de comptes pris en charge, sous Qui peut utiliser cette application ou accéder à cette API, sélectionnez Comptes dans ce repertoire organisationnel uniquement (<Le nom de votre client> - Client unique).
Pour URI de redirection (facultatif)
- Pour Sélectionner une plateforme, sélectionnez Application à une seule page (SPA).
- Entrez
http://localhost:1234
comme valeur.
Sélectionnez Enregistrer pour appliquer vos modifications.
Dans la fenêtre de l’enregistrement d’application que vous avez créé, dans l’onglet Vue d’ensemble, sous Essentiels, vous pouvez trouver ces valeurs :
- ID d’application (client)
- ID du répertoire (locataire)
Copiez ces valeurs, car vous en avez besoin lorsque vous créez le fichier .env pour utiliser les variables d’environnement.
Ajouter le privilège user_impersonation
de Dataverse
- Dans la zone Gérer, sélectionnez Autorisations de l’API.
- Sélectionnez Ajouter une autorisation.
- Dans la zone Demander les autorisations de l’API, sélectionnez l’onglet API utilisées par mon organisation.
- Tapez « Dataverse » pour trouver l’ID d’application (client)
00000007-0000-0000-c000-000000000000
. - Sélectionnez l’application Dataverse.
- Dans Sélectionner les autorisations,
user_impersonation
est la seule autorisation déléguée disponible. Sélectionnez-le. - Sélectionnez Ajouter des autorisations.
Nonte
Si vous n’avez pas les privilèges nécessaires pour créer un enregistrement d’application pour votre entreprise, obtenez votre propre client via le Plan pour développeur Power Apps.
Installer Node.js
Accédez à Télécharger Node.js.
Choisissez le programme d’installation approprié pour votre système d’exploitation (Windows, macOS ou Linux) et téléchargez-le.
Exécutez le programme d’installation. Assurez-vous d’accepter l’option par défaut pour : Installer npm, le gestionnaire de package recommandé pour Node.js.
Vérifiez l’installation en ouvrant un terminal ou une invite de commandes, en tapant ces commandes et en appuyant sur Entrée.
node -v
npm -v
Vous devriez voir un message similaire au suivant :
PS C:\Users\you> node -v v22.14.0 PS C:\Users\you> npm -v 9.5.0 PS C:\Users\you>
Créer un projet
Nonte
Vous pouvez ignorer ces étapes en clonant ou en téléchargeant le référentiel PowerApps-Samples. L'application complétée pour ces étapes est disponible à l’adresse /dataverse/webapi/JS/quickspa. Suivez les instructions du fichier LISEZMOI.
Les instructions de cette section vous aident à installer les dépendances à partir de npm, à créer la structure de dossiers et à ouvrir Visual Studio Code.
Ouvrez une fenêtre de terminal à l’emplacement où vous souhaitez créer un projet. Pour ces instructions, nous utilisons
C:\projects
.Tapez les commandes suivantes et appuyez sur Entrée pour effectuer les actions suivantes :
Command Action mkdir quickspa
Créez un dossier appelé quickspa
.cd quickspa
Accédez au nouveau dossier quickspa
.npm install --save-dev parcel
Installez Parcel et initialisez le projet. npm install @azure/msal-browser
Installez la bibliothèque MSAL.js. npm install dotenv
Installez dotenv pour accéder aux variables d’environnement qui stockent des données de configuration potentiellement sensibles. mkdir src
Créez un dossier src
dans lequel vous ajoutez des fichiers HTML, JS et CSS pour votre application dans les étapes suivantes.code .
Ouvrez Visual Studio Code dans le contexte du dossier quickspa
.
Votre projet devrait ressembler à ceci dans l’Explorateur Visual Studio Code :
Créer le fichier .env
Le stockage des données de configuration dans l’environnement, séparé du code, est une bonne pratique de sécurité.
Créez un nouveau fichier nommé
.env
dans la racine de votre dossierquickspa
.Collez les valeurs à partir de Enregistrer votre application pour remplacer les valeurs
CLIENT_ID
etTENANT_ID
ci-dessous.# The environment this application will connect to. BASE_URL=https://<yourorg>.api.crm.dynamics.com # The registered Entra application id CLIENT_ID=11112222-bbbb-3333-cccc-4444dddd5555 # The Entra tenant id TENANT_ID=aaaabbbb-0000-cccc-1111-dddd2222eeee # The SPA redirect URI included in the Entra application registration REDIRECT_URI=http://localhost:1234
Définissez la valeur
BASE_URL
sur l’URL de l’API web pour l’environnement auquel vous souhaitez vous connecter.
Nonte
Vous n’enregistrerez pas le fichier .env
. Dans Créer un fichier .gitignore
, vous l’exclurez. Mais vous souhaiterez peut-être créer un fichier .env.example
en utilisant les valeurs d’espace réservé afin que les utilisateurs sachent quelles données il doit contenir.
Créer une page HTML
Les instructions de cette section décrivent comment créer le fichier HTML qui fournit l’interface utilisateur de l’application SPA.
Créez un nouveau fichier dans le dossier
src
nomméindex.html
.Copiez et collez ce contenu sur la page
index.html
:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Dataverse Web API JavaScript Quick Start</title> <link rel="stylesheet" href="styles/style.css" /> </head> <body> <header> <h1>Dataverse Web API JavaScript Quick Start</h1> <button id="loginButton">Login</button> <button id="logoutButton" class="hidden">Logout</button> </header> <nav id="buttonContainer" class="disabled"> <button id="whoAmIButton">WhoAmI</button> </nav> <main id="container"></main> <script type="module" src="scripts/index.js"></script> </body> </html>
Cette page HTML fournit les éléments suivants :
ID de l’élément | Type d’élément | Description |
---|---|---|
loginButton |
bouton | Pour ouvrir la boîte de dialogue de connexion. |
logoutButton |
bouton | Pour ouvrir la boîte de dialogue de déconnexion. Masqué par défaut. |
buttonContainer |
nav | Contient des boutons qui nécessitent que l’utilisateur soit connecté pour être utilisés. Désactivé par défaut. |
whoAmIButton |
bouton | Exécute la fonction WhoAmI pour afficher l’ID de l’utilisateur. |
container |
principal | Zone où les informations peuvent être affichées à l’utilisateur. |
script | Charge le fichier index.js après le chargement du reste des éléments de la page. |
Créer un script JavaScript
Ce fichier contient toute la logique qui rend la page index.html
dynamique.
Créez un nouveau dossier dans le dossier
src
nomméscripts
.Créez un nouveau fichier dans le dossier
scripts
nomméindex.js
.Copiez et collez ce contenu dans la page
index.js
:import { PublicClientApplication } from "@azure/msal-browser"; import 'dotenv/config' // Load the environment variables from the .env file const config = { baseUrl: process.env.BASE_URL, clientId: process.env.CLIENT_ID, tenantId: process.env.TENANT_ID, redirectUri: process.env.REDIRECT_URI, }; // Microsoft Authentication Library (MSAL) configuration const msalConfig = { auth: { clientId: config.clientId, authority: "https://login.microsoftonline.com/" + config.tenantId, redirectUri: config.redirectUri, postLogoutRedirectUri: config.redirectUri, }, cache: { cacheLocation: "sessionStorage", // This configures where your cache will be stored storeAuthStateInCookie: true, }, }; // Create an instance of MSAL const msalInstance = new PublicClientApplication(msalConfig); // body/main element where messages are displayed const container = document.getElementById("container"); // Event handler for login button async function logIn() { await msalInstance.initialize(); if (!msalInstance.getActiveAccount()) { const request = { scopes: ["User.Read", config.baseUrl + "/user_impersonation"], }; try { const response = await msalInstance.loginPopup(request); msalInstance.setActiveAccount(response.account); // Hide the loginButton so it won't get pressed twice document.getElementById("loginButton").style.display = "none"; // Show the logoutButton const logoutButton = document.getElementById("logoutButton"); logoutButton.innerHTML = "Logout " + response.account.name; logoutButton.style.display = "block"; // Enable any buttons in the nav element document.getElementsByTagName("nav")[0].classList.remove("disabled"); } catch (error) { let p = document.createElement("p"); p.textContent = "Error logging in: " + error; p.className = "error"; container.append(p); } } else { // Clear the active account and try again msalInstance.setActiveAccount(null); this.click(); } } // Event handler for logout button async function logOut() { const activeAccount = await msalInstance.getActiveAccount(); const logoutRequest = { account: activeAccount, mainWindowRedirectUri: config.redirectUri, }; try { await msalInstance.logoutPopup(logoutRequest); document.getElementById("loginButton").style.display = "block"; this.innerHTML = "Logout "; this.style.display = "none"; document.getElementsByTagName("nav")[0].classList.remove("disabled"); } catch (error) { console.error("Error logging out: ", error); } } /** * Retrieves an access token using MSAL (Microsoft Authentication Library). * Set as the getToken function for the DataverseWebAPI client in the login function. * * @async * @function getToken * @returns {Promise<string>} The access token. * @throws {Error} If token acquisition fails and is not an interaction required error. */ async function getToken() { const request = { scopes: [config.baseUrl + "/.default"], }; try { const response = await msalInstance.acquireTokenSilent(request); return response.accessToken; } catch (error) { if (error instanceof msal.InteractionRequiredAuthError) { const response = await msalInstance.acquireTokenPopup(request); return response.accessToken; } else { console.error(error); throw error; } } } // Add event listener to the login button document.getElementById("loginButton").onclick = logIn; // Add event listener to the logout button document.getElementById("logoutButton").onclick = logOut; /// Function to get the current user's information /// using the WhoAmI function of the Dataverse Web API. async function whoAmI() { const token = await getToken(); const request = new Request(config.baseUrl + "/api/data/v9.2/WhoAmI", { method: "GET", headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json", Accept: "application/json", "OData-Version": "4.0", "OData-MaxVersion": "4.0", }, }); // Send the request to the API const response = await fetch(request); // Handle the response if (!response.ok) { throw new Error("Network response was not ok: " + response.statusText); } // Successfully received response return await response.json(); } // Add event listener to the whoAmI button document.getElementById("whoAmIButton").onclick = async function () { // Clear any previous messages container.replaceChildren(); try { const response = await whoAmI(); let p1 = document.createElement("p"); p1.textContent = "Congratulations! You connected to Dataverse using the Web API."; container.append(p1); let p2 = document.createElement("p"); p2.textContent = "User ID: " + response.UserId; container.append(p2); } catch (error) { let p = document.createElement("p"); p.textContent = "Error fetching user info: " + error; p.className = "error"; container.append(p); } };
Le script index.js
contient les constantes et les fonctions suivantes :
Item | Description |
---|---|
config |
Contient les données utilisées par la configuration de la bibliothèque d’authentification Microsoft (MSAL). |
msalConfig |
Configuration de la bibliothèque d’authentification Microsoft (MSAL) |
msalInstance |
Instance PublicClientApplication de MSAL. |
container |
Élément dans lequel les messages sont affichés. |
getToken |
Récupère un jeton d’accès à l’aide de MSAL. |
logIn |
Fonction d’écoute d’événements pour le bouton de connexion. Ouvre une boîte de dialogue de choix de compte. |
logOut |
Fonction d’écouteur d’événements pour le bouton de déconnexion. Ouvre une boîte de dialogue de choix de compte. |
whoAmI |
Fonction asynchrone qui appelle la fonction WhoAmI pour récupérer des données de Dataverse. |
Écouteur d’événements whoAmIButton |
Fonction qui appelle la fonction whoAmI et gère les modifications de l’interface utilisateur pour afficher le message. |
Créer une page CSS
Le fichier Feuille de style en cascade (CSS) rend la page HTML plus attrayante et joue un rôle dans le contrôle de la désactivation ou du masquage des contrôles.
Créez un nouveau dossier nommé
styles
dans le dossiersrc
.Créez un nouveau fichier nommé
style.css
dans le dossierstyles
.Copiez et collez ce texte dans le fichier
style.css
:.disabled { pointer-events: none; opacity: 0.5; /* Optional: to visually indicate the element is disabled */ } .hidden { display: none; } .error { color: red; } .expectedError { color: green; } body { font-family: 'Roboto', sans-serif; font-size: 16px; line-height: 1.6; color: #333; background-color: #f9f9f9; } h1, h2, h3 { color: #2c3e50; } button { background-color: #3498db; color: #fff; border: none; padding: 10px 20px; border-radius: 5px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); transition: background-color 0.3s ease; margin: 5px; /* Adjust the value as needed */ } button:hover { background-color: #2980b9; } header { padding-bottom: 10px; /* Adjust the value as needed */ }
Créer un fichier .gitignore
Lorsque votre application est enregistrée avec le contrôle de code source, l’ajout d’un fichier .gitignore
empêche l’enregistrement des fichiers et dossiers spécifiés.
Créez un fichier nommé
.gitignore
.Ajoutez le contenu suivant :
.parcel-cache dist node_modules .env
Les dossiers .parcel-cache
et dist
s’affichent lorsque vous exécutez l’application pour la première fois.
Ne pas enregistrer le fichier .env
est une bonne pratique de sécurité. Vous souhaiterez peut-être enregistrer un fichier .env.sample
d’espace réservé contenant des valeurs d’espace réservé.
Votre projet devrait ressembler à ceci dans l’Explorateur Visual Studio Code :
Configurer votre fichier package.json
Votre fichier package.json
doit ressembler à ce qui suit :
{
"devDependencies": {
"parcel": "^2.14.1",
},
"dependencies": {
"@azure/msal-browser": "^4.7.0",
"dotenv": "^16.4.7"
}
}
Ajoutez cet élément scripts
sous dependencies
:
"dependencies": {
"@azure/msal-browser": "^4.7.0",
"dotenv": "^16.4.7"
},
"scripts": {
"start": "parcel src/index.html"
}
Cette configuration vous permet de démarrer l’application en utilisant npm start
dans l'étape suivante.
Essayez-le
Dans Visual Studio Code, ouvrez une fenêtre de terminal
Tapez
npm start
, puis appuyez sur Entrée.Nonte
Il se peut qu’une sortie soit écrite dans le terminal lorsque le projet s’initialise pour la première fois. Parcel installe des modules Node.js supplémentaires pour atténuer les problèmes lors de l’utilisation de dotenv. Recherchez le fichier
package.json
et vous devriez voir de nouveaux éléments ajoutés àdevDependencies
.Vous devez vous attendre à une sortie vers le terminal qui ressemble à ceci :
Server running at http://localhost:1234 Built in 1.08s
Appuyez sur Ctrl + clic sur le lien http://localhost:1234 pour ouvrir votre navigateur.
Dans votre navigateur, sélectionnez le bouton Connexion.
La boîte de dialogue Se connecter à votre compte s’ouvre.
Dans la boîte de dialogue Se connecter à votre compte, sélectionnez le compte ayant accès à Dataverse.
La première fois que vous accédez en utilisant une nouvelle valeur d’ID d’application (client), cette boîte de dialogue Autorisations demandées s’affiche :
Sélectionnez Accepter dans la boîte de dialogue Autorisations demandées.
Sélectionnez le bouton WhoAmI.
Le message Félicitations ! Vous vous êtes connecté à Dataverse l’aide de l’API web. s’affiche avec votre valeur
UserId
du type complexe WhoAmIResponse.
Résolution des problèmes
Cette section contient des erreurs que vous pouvez rencontrer lors de l’exécution de ce démarrage rapide.
Nonte
Si vous rencontrez des problèmes lors de l’exécution des étapes de ce démarrage rapide, essayez de cloner ou de télécharger le référentiel PowerApps-Samples. L'application complétée pour ces étapes est disponible à l’adresse /dataverse/webapi/JS/quickspa. Suivez les instructions du fichier LISEZMOI. Si cela ne fonctionne pas, créez un problème GitHub faisant référence à cet exemple d’application quickspa
.
Le compte d’utilisateur sélectionné n’existe pas dans le client
Lorsque le compte que vous sélectionnez n’appartient pas au même client Microsoft Entra que l’application enregistrée, vous obtenez cette erreur dans la boîte de dialogue Choisir un compte :
Selected user account does not exist in tenant '{Your tenant name}' and cannot access the application '{Your application ID}' in that tenant. The account needs to be added as an external user in the tenant first. Please use a different account.
Résolution : assurez-vous de choisir l’utilisateur correct.
Étapes suivantes
Essayez d’autres exemples qui utilisent JavaScript côté client.
En savoir plus sur les fonctionnalités de l’API web Dataverse en comprenant les documents de service.