Créer un tableau de bord dans Teams
Ce guide pas à pas vous aide à créer un onglet de tableau de bord, à ajouter un widget au tableau de bord et à implémenter l’API Graph. Vous voyez la sortie suivante :
Configuration requise
Installer | Pour utiliser |
---|---|
Visual Studio Code | Environnements de build JavaScript, TypeScript ou SharePoint Framework (SPFx). Utilisez la version 1.55 ou ultérieure. |
Teams Toolkit ou l’interface CLI TeamsFx | Extension Microsoft Visual Studio Code qui crée une structure de projet pour votre application. Utilisez Teams Toolkit v5. |
Programme de développement Microsoft 365 | Compte Teams disposant des autorisations appropriées pour installer une application. |
Node.js | Environnement runtime JavaScript principal. Pour plus d’informations, consultez Node.js table de compatibilité des versions pour le type de projet. |
Microsoft Teams | Microsoft Teams pour collaborer avec toutes les personnes avec lesquelles vous travaillez via des applications pour la conversation, les réunions et les appels dans un seul endroit. |
Microsoft Edge (recommandé) ou Google Chrome | Un navigateur avec des outils de développement. |
Créer un tableau de bord
Teams Toolkit prend en charge la création d’un tableau de bord et d’une structure.
Pour créer un tableau de bord :
Sélectionnez l’icône Teams Toolkit dans la barre d’activité de Visual Studio Code.
Sélectionnez Créer une application.
Sélectionnez Tab pour créer un projet d’onglet.
Sélectionnez Tableau de bord.
Sélectionnez TypeScript comme langage de programmation.
Sélectionnez Dossier par défaut pour stocker le dossier racine de votre projet à l’emplacement par défaut.
Entrez un nom approprié pour votre application, puis sélectionnez Entrée.
L’application d’onglet Teams est créée en quelques secondes.
Une fois votre application créée, le Kit de ressources Teams affiche le message suivant :
Sélectionnez l’icône Teams Toolkit dans la barre latérale.
Sélectionnez Se connecter à Microsoft 365.
Sélectionnez Connexion.
Sélectionnez le F5 pour exécuter l’application en mode débogage.
Sélectionnez Ajouter.
Le tableau de bord de l’application d’onglet est correctement créé dans Teams.
Teams prend également en charge différents thèmes, notamment les thèmes sombres et à contraste élevé.
L’image suivante montre l’utilisation du thème Sombre dans le client de bureau Teams :
Dans l’interface CLI TeamsFx,
Si vous préférez un mode interactif, exécutez
teamsfx new
la commande, puis utilisez le clavier pour passer par le même flux que dans Visual Studio Code.Si vous préférez le mode non interactif, entrez tous les paramètres requis dans une commande :
teamsfx new--interactive false--capabilities "dashboard-tab"--programming-language "TypeScript"--folder "./"--app-name dashboard-cli-001
Découvrez le code source de l’application
Après avoir créé le projet, vous pouvez afficher les dossiers et fichiers du projet dans l’Explorateur dans Visual Studio Code. L’implémentation principale du tableau de bord se trouve dans le dossier onglets.
Folder | Sommaire |
---|---|
.vscode |
Fichiers Visual Studio Code pour le débogage. |
appPackage |
Modèles pour le manifeste de l’application Teams. |
env |
Fichiers d’environnement. |
infra |
Modèles de provisionnement de ressources Azure. |
src |
Code source de l’application Teams du tableau de bord. |
Les fichiers suivants fournissent la logique métier de l’onglet tableau de bord. Vous pouvez mettre à jour les fichiers en fonction de vos besoins en matière de logique métier. L’implémentation par défaut fournit un point de départ pour vous aider à démarrer.
Fichier | Sommaire |
---|---|
src/models/chartModel.ts |
Modèle de données pour le widget de graphique. |
src/models/listModel.ts |
Modèle de données pour le widget de liste. |
src/services/chartService.ts |
Implémentation de la récupération de données pour le widget de graphique. |
src/services/listService.ts |
Implémentation de la récupération de données pour le widget de liste. |
src/dashboards/SampleDashboard.tsx |
Exemple d’implémentation de la disposition du tableau de bord. |
src/styles/ChartWidget.css |
Fichier de style de widget de graphique. |
src/styles/ListWidget.css |
Fichier de style de widget de liste. |
src/widgets/ChartWidget.tsx |
Implémentation de widget qui peut afficher un graphique. |
src/widgets/ListWidget.tsx |
Implémentation de widget qui peut afficher une liste. |
src/App.css |
Style de l’itinéraire de l’application. |
src/App.tsx |
Itinéraire de l’application. |
Les fichiers suivants sont des fichiers liés au projet. En règle générale, vous n’avez pas besoin de personnaliser ces fichiers.
Fichier | Sommaire |
---|---|
src/index.css |
Style du point d’entrée de l’application. |
src/index.tsx |
Point d’entrée de l’application. |
src/internal/addNewScopes.ts |
Implémentation de l’ajout de nouvelles étendues. |
src/internal/context.ts |
Contexte TeamsFx. |
src/internal/login.ts |
Implémentation de la connexion. |
src/internal/singletonContext.ts |
Implémentation du singleton d’instance TeamsUserCredential. |
Ajouter un widget au tableau de bord
Pour ajouter un nouveau widget au tableau de bord, procédez comme suit :
- Définir un modèle de données
- Créer un service de récupération de données
- Créer un fichier de widget
- Ajouter le widget au tableau de bord
Définir un modèle de données
Dans Visual Studio Code, accédez à Explorer>modèles src>.
Créez un fichier sampleModel.ts .
Ajoutez le code suivant dans le fichier sampleModel.ts :
export interface SampleModel { content: string; }
Créer un service de récupération de données
Remarque
Vous pouvez implémenter un service pour récupérer des données à partir du service principal ou de l’API Microsoft Graph.
Dans Visual Studio Code, accédez à Explorer>services src>.
Créez un fichier sampleService.ts .
Ajoutez le code suivant dans le fichier sampleService.ts :
import { SampleModel } from "../models/sampleModel"; export const getSampleData = (): SampleModel => { return { content: "Hello world!" }; };
Créer un fichier de widget
Dans Visual Studio Code, accédez à Explorer>src>widgets.
Créez un fichier SampleWidget.tsx .
Ajoutez le code suivant dans le fichier SampleWidget.tsx :
import { Button, Text } from "@fluentui/react-components"; import { BaseWidget } from "@microsoft/teamsfx-react"; import { SampleModel } from "../models/sampleModel"; import { getSampleData } from "../services/sampleService"; interface SampleWidgetState { data?: SampleModel; } export class SampleWidget extends BaseWidget<any, SampleWidgetState> { override async getData(): Promise<SampleWidgetState> { return { data: getSampleData() }; } override header(): JSX.Element | undefined { return <Text>Sample Widget</Text>; } override body(): JSX.Element | undefined { return <div>{this.state.data?.content}</div>; } override footer(): JSX.Element | undefined { return <Button>View Details</Button>; } }
Ajouter le widget au tableau de bord
Pour ajouter un widget au tableau de bord, procédez comme suit :
Dans Visual Studio Code, accédez à Explorer>src>dashboards>SampleDashboard.tsx.
Ajoutez le widget au tableau de bord en mettant à jour la
override layout()
méthode :override layout(): JSX.Element | undefined { return (<> <ListWidget /> <ChartWidget /> <SampleWidget /> </> ); }
Facultatif : reportez-vous au code suivant pour ajouter votre widget dans une colonne :
.one-column { display: grid; gap: 20 px; grid-template-rows: 1fr 1fr; }
override layout(): JSX.Element | undefined { return (<> <ListWidget /> <div className="one-column"> <ChartWidget /> <SampleWidget /> </div> </> ); }
Après avoir ajouté tous les détails pertinents pour la création d’un widget, enregistrez les fichiers respectifs.
Vous pouvez afficher la disposition modifiée et le widget calendrier sur le tableau de bord.
Ajouter l’authentification unique et l’appel de l’API Graph
Vous avez appris à créer un onglet de tableau de bord et à ajouter un widget au tableau de bord. Ajoutons l’authentification unique (SSO) et l’appel de l’API graph à l’onglet tableau de bord.
Ajouter l’authentification unique
Pour ajouter l’authentification unique, procédez comme suit :
1. Créez un manifeste d’application Microsoft Entra.
Pour créer un manifeste d’application Microsoft Entra, procédez comme suit :
Dans Visual Studio Code, accédez à EXPLORATEUR.
Créez un fichier aad.manifest.json .
Ajoutez le code suivant dans aad.manifest.json fichier :
{ "id": "${{AAD_APP_OBJECT_ID}}", "appId": "${{AAD_APP_CLIENT_ID}}", "name": "dashboardDemo", "accessTokenAcceptedVersion": 2, "signInAudience": "AzureADMyOrg", "optionalClaims": { "idToken": [], "accessToken": [ { "name": "idtyp", "source": null, "essential": false, "additionalProperties": [] } ], "saml2Token": [] }, "requiredResourceAccess": [ { "resourceAppId": "Microsoft Graph", "resourceAccess": [ { "id": "User.Read", "type": "Scope" } ] } ], "oauth2Permissions": [ { "adminConsentDescription": "Allows Teams to call the app's web APIs as the current user.", "adminConsentDisplayName": "Teams can access app's web APIs", "id": "${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}", "isEnabled": true, "type": "User", "userConsentDescription": "Enable Teams to call this app's web APIs with the same rights that you have", "userConsentDisplayName": "Teams can access app's web APIs and make requests on your behalf", "value": "access_as_user" } ], "preAuthorizedApplications": [ { "appId": "1fec8e78-bce4-4aaf-ab1b-5451cc387264", "permissionIds": ["${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}"] }, { "appId": "5e3ce6c0-2b1f-4285-8d4b-75ee78787346", "permissionIds": ["${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}"] }, { "appId": "d3590ed6-52b3-4102-aeff-aad2292ab01c", "permissionIds": ["${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}"] }, { "appId": "00000002-0000-0ff1-ce00-000000000000", "permissionIds": ["${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}"] }, { "appId": "bc59ab01-8403-45c6-8796-ac3ef710b3e3", "permissionIds": ["${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}"] }, { "appId": "0ec893e0-5785-4de6-99da-4ed124e5296c", "permissionIds": ["${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}"] }, { "appId": "4765445b-32c6-49b0-83e6-1d93765276ca", "permissionIds": ["${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}"] }, { "appId": "4345a7b9-9a63-4910-a426-35363201d503", "permissionIds": ["${{AAD_APP_ACCESS_AS_USER_PERMISSION_ID}}"] } ], "identifierUris": ["api://${{TAB_DOMAIN}}/${{AAD_APP_CLIENT_ID}}"], "replyUrlsWithType": [ { "url": "${{TAB_ENDPOINT}}/auth-end.html", "type": "Web" }, { "url": "${{TAB_ENDPOINT}}/auth-end.html?clientId=${{AAD_APP_CLIENT_ID}}", "type": "Spa" }, { "url": "${{TAB_ENDPOINT}}/blank-auth-end.html", "type": "Spa" } ] }
2. Mettre à jour le manifeste de l’application Teams.
Pour mettre à jour le manifeste de l’application Teams, procédez comme suit :
Dans Visual Studio Code, accédez àl’application EXPLORATEURPackage>>manifest.json.
Ajoutez le code suivant après la propriété domaines valide dans le fichier manifest.json :
"webApplicationInfo": { "id": "${{AAD_APP_CLIENT_ID}}", "resource": "api://${{TAB_DOMAIN}}/${{AAD_APP_CLIENT_ID}}" }
3. Mettre à jour les fichiers de configuration du Kit de ressources Teams.
Pour mettre à jour le code de configuration du Kit de ressources Teams dans les fichiers teamsapp.yml et teamsapp.local.yml , procédez comme suit :
Ajoutez le code sous
provision
.- uses: aadApp/create with: name: "YOUR_AAD_APP_NAME" generateClientSecret: true signInAudience: "AzureADMyOrg" writeToEnvironmentFile: clientId: AAD_APP_CLIENT_ID clientSecret: SECRET_AAD_APP_CLIENT_SECRET objectId: AAD_APP_OBJECT_ID tenantId: AAD_APP_TENANT_ID authority: AAD_APP_OAUTH_AUTHORITY authorityHost: AAD_APP_OAUTH_AUTHORITY_HOST - uses: aadApp/update with: manifestPath: "./aad.manifest.json" outputFilePath: ./build/aad.manifest.${{TEAMSFX_ENV}}.json
Ajoutez le code suivant, sous l’action
cli/runNpmCommand
et lebuild app
nom :env: REACT_APP_CLIENT_ID: ${{AAD_APP_CLIENT_ID}} REACT_APP_START_LOGIN_PAGE_URL: ${{TAB_ENDPOINT}}/auth-start.html
4. Mettre à jour le code source.
Créez des fichiersauth-start.html et auth-end.html dans un dossier public .
Ajoutez le code dans les fichiersauth-start.html et auth-end.html .
Ajoutez le code suivant dans auth-start.html:
<!--The Teams authentication flow process uses this file to assist with retrieval of the access token.--> <!--If you're not familiar with this process, don't alter or remove this file from your project.--> <html> <head> <title>Sign-in Start Page</title> <meta charset="utf-8" /> </head> <body> <script src="https://res.cdn.office.net/teams-js/2.7.1/js/MicrosoftTeams.min.js" integrity="sha384-4Gy2G+qxzDVdrdemcVqKVQvaSK1Ghg3x6xcsaMLPc/pw7KPtiogHGM97LTWF2PWg" crossorigin="anonymous"></script> <script type="text/javascript" src="https://alcdn.msauth.net/browser/2.21.0/js/msal-browser.min.js" integrity="sha384-s/NxjjAgw1QgpDhOlVjTceLl4axrp5nqpUbCPOEQy1PqbFit9On6uw2XmEF1eq0s" crossorigin="anonymous"> </script> <script type="text/javascript"> microsoftTeams.app.initialize().then(() => { microsoftTeams.app.getContext().then(async (context) => { // Generate random state string and store it, so we can verify it in the callback var currentURL = new URL(window.location); var clientId = currentURL.searchParams.get("clientId"); var scope = currentURL.searchParams.get("scope"); var loginHint = currentURL.searchParams.get("loginHint"); const msalConfig = { auth: { clientId: clientId, authority: `https://login.microsoftonline.com/${context.user.tenant.id}`, navigateToLoginRequestUrl: false }, cache: { cacheLocation: "sessionStorage", }, } const msalInstance = new msal.PublicClientApplication(msalConfig); const scopesArray = scope.split(" "); const scopesRequest = { scopes: scopesArray, redirectUri: window.location.origin + `/auth-end.html?clientId=${clientId}`, loginHint: loginHint }; await msalInstance.loginRedirect(scopesRequest); }); }); </script> </body> </html>
Vous avez ajouté les fichiers d’authentification unique à votre projet et vous devez ensuite appeler les API Graph.
Ajouter un appel d’API Graph
Pour ajouter l’API Graph, procédez comme suit :
Le Kit de développement logiciel (SDK) TeamsFx implémente l’appel d’API graph.
Dans Visual Studio Code, accédez à EXPLORER>services src>>listService.ts.
Mettez à jour le code suivant dans le listService.ts :
/** * Retrieve sample data * @returns data for list widget */ import {TeamsUserCredentialContext} from "../internal/singletonContext"; import { createMicrosoftGraphClientWithCredential, TeamsUserCredential, } from "@microsoft/teamsfx"; import { ListModel } from "../models/listModel"; import { loginAction } from "../internal/login"; export const getListData = async (): Promise<ListModel[]> => { await loginAction(["User.Read"]); let credential = TeamsUserCredentialContext.getInstance().getCredential(); const graphClient = createMicrosoftGraphClientWithCredential(credential, ["User.Read", ]); const me = await graphClient.api("/me").get(); return [ { id: me.id, title: me.displayName, content: me.mail, }, ]; // { // id: "id1", // title: "Sample title", // content: "Sample description", // }, // { // id: "id2", // title: "Sample title", // content: "Sample description", // }, // { // id: "id3", // title: "Sample title", // content: "Sample description", // }, }
Accédez à EXPLORER>src>widgets>ListWidget.tsx.
Mettez à jour le
export default class ListWidget()
widget pour ajouter un profil utilisateur.export default class ListWidget extends BaseWidget<any, IListWidgetState> { async getData(): Promise<IListWidgetState> { return { data: await getListData() };
L’authentification unique et l’API Graph affichent le profil utilisateur connecté dans le widget de liste.
Relever le défi
Tu as trouvé quelque chose comme ça ?
Félicitations !
Vous avez terminé le tutoriel !
Vous avez un défi avec cette section ? Si c'est le cas, faites-nous part de vos commentaires pour que nous puissions l'améliorer.