Ajouter un graphique
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
Découvrez comment ajouter des graphiques à vos extensions. Vous pouvez ajouter des graphiques à n’importe quelle extension Azure DevOps Services.
Conseil
Consultez notre documentation la plus récente sur le développement d’extensions à l’aide du Kit de développement logiciel (SDK) d’extension Azure DevOps.
Les graphiques sont faciles à créer, redimensionnables, interactifs et cohérents avec l’apparence Azure DevOps Services. Les types de graphiques suivants sont pris en charge :
- Courbes
- Barres
- Colonne
- Domaine
- Barres empilées
- Colonne empilée
- Aire empilée
- Pie
- Tableau croisé dynamique
- Histogramme
Si vous êtes pressé et que vous souhaitez mettre la main sur le code immédiatement, vous pouvez télécharger les exemples complets.
Une fois téléchargé, accédez au charts
dossier, puis suivez les instructions d’empaquetage et de publication pour publier l’exemple d’extension.
L’extension contient des exemples de widgets de graphique.
Comment organiser votre code
Pour ce tutoriel, nous créons un widget et y ajoutons un graphique.
Pour ce faire, dans le home
dossier de votre projet, créez un chart.html
fichier avec le contenu suivant :
Fichier HTML
<!DOCTYPE html>
<html>
<head>
<script src="sdk/scripts/VSS.SDK.js"></script>
<script src="scripts/pie-chart.js"></script>
</head>
<body>
<div class="widget">
<h2 class="title">Chart Widget</h2>
<div id="Chart-Container"></div>
</div>
</body>
</html>
Utilisez la commande npm install pour récupérer le Kit de développement logiciel (SDK) :
npm install vss-web-extension-sdk
. Pour en savoir plus sur le SDK, consultez la page GitHub du SDK client.
Vérifiez que le VSS.SDK.js
fichier se trouve dans le sdk/scripts
dossier afin que le chemin d’accès soit home/sdk/scripts/VSS.SDK.js
.
Images
Ajoutez des images à un img
dossier dans le répertoire de votre projet afin que le chemin d’accès soit home/img/logo.png
et home/img/CatalogIcon.png
.
Consultez notre documentation la plus récente, l’exemple de KIT de développement logiciel (SDK)Formula Design System et Azure DevOps.
Fichier manifeste d’extension
Dans le home
dossier de votre projet, créez votre fichier manifeste d’extension. Créez un fichier vss-extension.json
avec le contenu suivant :
{
"manifestVersion": 1,
"id": "samples-charts",
"version": "1.0.0",
"name": "Interactive Charts in Azure DevOps Services",
"description": "Samples of interactive charts from the Chart SDK.",
"publisher": "Fabrikam",
"targets": [
{
"id": "Microsoft.VisualStudio.Services"
}
],
"icons": {
"default": "img/logo.png"
},
"demands": ["contribution/ms.vss-dashboards-web.widget-sdk-version-2", "contribution/ms.vss-web.charts-service"],
"contributions": [
{
"id": "chart",
"type": "ms.vss-dashboards-web.widget",
"targets": [
"ms.vss-dashboards-web.widget-catalog"
],
"properties": {
"name": "Sample Chart",
"description": "A simple chart widget with no configuration and hard-coded data.",
"catalogIconUrl": "img/CatalogIcon.png",
"uri": "chart.html",
"supportedSizes": [
{
"rowSpan": 2,
"columnSpan": 2
}
],
"supportedScopes": [
"project_team"
]
}
}
],
"files": [
{
"path": "chart.html",
"addressable": true
},
{
"path": "sdk/scripts/VSS.SDK.js",
"addressable": true
},
{
"path": "img",
"addressable": true
},
{
"path": "scripts",
"addressable": true
}
],
"scopes": [
]
}
Avant de charger cette extension, vous devez mettre à jour le vers le publisher
vôtre.
Placez les extraits de code suivants dans un chart.js
fichier dans un scripts
dossier, afin que le chemin d’accès soit home/scripts/chart.js
.
Suivez ensuite les instructions d’empaquetage et de publication pour publier votre extension.
Graphiques
Graphique
Cet exemple affiche un graphique. Les data
et labelValues
ont été codés en dur ici, et doivent être modifiés pour les données que vous souhaitez visualiser.
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
VSS.require([
"TFS/Dashboards/WidgetHelpers",
"Charts/Services"
],
function (WidgetHelpers, Services) {
WidgetHelpers.IncludeWidgetStyles();
VSS.register("chart", function () {
return {
load:function() {
return Services.ChartsService.getService().then(function(chartService){
var $container = $('#Chart-Container');
var chartOptions = {
"hostOptions": {
"height": "290",
"width": "300"
},
"chartType": "pie",
"series": [{
"data": [11, 4, 3, 1]
}],
"xAxis": {
"labelValues": ["Design", "On Deck", "Completed", "Development"]
},
"specializedOptions": {
"showLabels": "true",
"size": 200
}
};
chartService.createChart($container, chartOptions);
return WidgetHelpers.WidgetStatusHelper.Success();
});
}
}
});
VSS.notifyLoadSucceeded();
});
Ici, la taille du graphique est définie dans hostOptions
. La propriété de série est un tableau et contient un objet unique contenant des données. L’objet xAxis
contient labelValues
, qui correspond à .data
Pour les graphiques en secteurs, nous avons également des options spéciales définies par la specializedOptions
propriété . Ici, nous activons explicitement les étiquettes de données pour le graphique en secteurs.
Nous devons également définir la taille du graphique en secteurs en spécifiant son diamètre externe.
Le graphique nécessite un conteneur, les options de graphique et un appel au service de graphique pour l’initialisation et le rendu. Pour plus d’informations sur les options de graphique, consultez vss-web-extension-sdk/typings/charts.
Graphique en aires empilées
L’exemple suivant affiche un graphique en aires empilées. Ce type de graphique est idéal pour comparer une relation de parties à un tout et mettre en évidence les tendances générales entre les catégories. Il est couramment utilisé pour comparer les tendances au fil du temps. Cet exemple spécifie également une couleur personnalisée pour l’une des séries rendues.
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
VSS.require([
"TFS/Dashboards/WidgetHelpers",
"Charts/Services"
],
function (WidgetHelpers, Services) {
WidgetHelpers.IncludeWidgetStyles();
VSS.register("StackedAreaChart", function () {
return {
load:function() {
return Services.ChartsService.getService().then(function(chartService){
var $container = $('#Chart-Container');
var chartOptions = {
"hostOptions": {
"height": "290",
"width": "300"
},
"chartType": "stackedArea",
"series": [
{
"name": "Completed",
"data": [1,3,4,3,6,1,9,0,8,11]
},
{
"name": "Development",
"data": [1,1,0,3,0,2,8,9,2,8]
},
{
"name": "Design",
"data": [0,0,0,6,1,1,9,9,1,9],
"color": "#207752"
},
{
"name": "On Deck",
"data": [1,2,4,5,4,2,1,7,0,6]
}
],
"xAxis": {
"labelFormatMode": "dateTime_DayInMonth",
"labelValues": [
"1/1/2016",
"1/2/2016",
"1/3/2016",
"1/4/2016",
"1/5/2016",
"1/6/2016",
"1/7/2016",
"1/8/2016",
"1/9/2016",
"1/10/2016"
]
}
}
chartService.createChart($container, chartOptions);
return WidgetHelpers.WidgetStatusHelper.Success();
});
}
}
});
VSS.notifyLoadSucceeded();
});
Tableau croisé dynamique
Cet exemple affiche un tableau croisé dynamique. Ce type de graphique permet d’organiser et de résumer des données complexes sous forme tabulaire.
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
VSS.require([
"TFS/Dashboards/WidgetHelpers",
"Charts/Services"
],
function (WidgetHelpers, Services) {
WidgetHelpers.IncludeWidgetStyles();
VSS.register("PivotTable", function () {
return {
load:function() {
return Services.ChartsService.getService().then(function(chartService){
var $container = $('#Chart-Container');
var chartOptions = {
"hostOptions": {
"height": "290",
"width": "300"
},
"chartType": "table",
"xAxis": {
"labelValues": ["Design","In Progress","Resolved","Total"]
},
"yAxis": {
"labelValues": ["P1","P2","P3","Total"]
},
"series": [
{
"name": "Design",
"data": [
[0,0,1],
[0,1,2],
[0,2,3]
]
},
{
"name": "In Progress",
"data": [
[1,0,4],
[1,1,5],
[1,2,6]
]
},
{
"name": "Resolved",
"data": [
[2,0,7],
[2,1,8],
[2,2,9]
]
},
{
"name": "Total",
"data": [
[3,0,12],
[3,1,15],
[3,2,18],
[0,3,6],
[1,3,15],
[2,3,24],
[3,3,10]
],
"color": "rgba(255,255,255,0)"
}
]
}
chartService.createChart($container, chartOptions);
return WidgetHelpers.WidgetStatusHelper.Success();
});
}
}
});
VSS.notifyLoadSucceeded();
});