Udostępnij za pośrednictwem


Dodawanie wykresu

Azure DevOps Services | Azure DevOps Server 2022 r. — Azure DevOps Server 2019 r.

Dowiedz się, jak dodawać wykresy do rozszerzeń. Wykresy można dodać do dowolnego rozszerzenia Azure DevOps Services.

Porada

Zapoznaj się z naszą najnowszą dokumentacją dotyczącą tworzenia rozszerzeń przy użyciu zestawu SDK rozszerzenia usługi Azure DevOps.

Wykresy są łatwe do tworzenia, zmieniania rozmiaru, interakcyjnego i zgodnego z Azure DevOps Services wyglądem i działaniem. Obsługiwane są następujące typy wykresów:

  • Linia
  • Słupkowy
  • Kolumna
  • Warstwowy
  • Skumulowany
  • Skumulowana kolumna
  • Skumulowany obszar
  • Kołowy
  • Tabela przestawna
  • Histogram

Jeśli jesteś w pośpiechu i chcesz od razu uzyskać ręce na kodzie, możesz pobrać kompletne przykłady. Po pobraniu przejdź do charts folderu, a następnie postępuj zgodnie z instrukcjami dotyczącymi pakowania i publikowania , aby opublikować przykładowe rozszerzenie. Rozszerzenie zawiera przykładowe widżety wykresu.

Jak zorganizować kod

Na potrzeby tego samouczka utworzymy widżet i dodamy do niego wykres. W tym celu w home folderze projektu utwórz chart.html plik z następującą zawartością:

Plik 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>

Użyj polecenia npm install , aby pobrać zestaw SDK: npm install vss-web-extension-sdk. Aby dowiedzieć się więcej na temat zestawu SDK, odwiedź stronę github zestawu SDK klienta.

Upewnij się, że VSS.SDK.js plik znajduje się w folderze sdk/scripts , aby ścieżka to home/sdk/scripts/VSS.SDK.js.

Obrazy

Dodaj obrazy do img folderu w katalogu projektu, aby ścieżka to home/img/logo.png i home/img/CatalogIcon.png. Zapoznaj się z naszą najnowszą dokumentacją, przykładowym zestawem SDK systemu projektowania formuł i rozszerzenia Usługi Azure DevOps.

Plik manifestu rozszerzenia

home W folderze projektu utwórz plik manifestu rozszerzenia. vss-extension.json Utwórz plik z następującą zawartością:

{
    "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": [
    ]
}

Przed przekazaniem tego rozszerzenia należy zaktualizować element publisher do Twoich.

Umieść następujące fragmenty kodu w chart.js pliku w folderze scripts , aby ścieżka to home/scripts/chart.js. Następnie postępuj zgodnie z instrukcjami dotyczącymi pakowania i publikowania , aby opublikować rozszerzenie.

Wykresy

Wykres

Ten przykład renderuje wykres. Element data i labelValues zostały tutaj zakodowane na stałe i musiałyby zostać zmienione na dane, które chcesz wizualizować.

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();
});

W tym miejscu rozmiar wykresu jest zdefiniowany w elemecie hostOptions. Właściwość serii jest tablicą i zawiera pojedynczy obiekt z danymi. Obiekt xAxis zawiera labelValuesobiekt , który odpowiada elementowi data. W przypadku wykresów kołowych mamy również kilka specjalnych opcji zdefiniowanych przez specializedOptions właściwość . W tym miejscu jawnie włączamy etykiety danych dla wykresu kołowego. Musimy również ustawić rozmiar wykresu kołowego, określając jego średnicę zewnętrzną.

Wykres wymaga kontenera, opcji wykresu i wywołania usługi chart w celu zainicjowania i renderowania. Aby uzyskać więcej informacji na temat opcji wykresu, zobacz vss-web-extension-sdk/typings/charts.

Skumulowany wykres warstwowy

Poniższy przykład renderuje skumulowany wykres warstwowy. Ten typ wykresu jest idealny do porównywania relacji części z całością i wyróżniania ogólnych trendów w różnych kategoriach. Często jest używana do porównywania trendów w czasie. Ten przykład określa również niestandardowy kolor dla jednej z renderowanych serii.

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();
});

Tabela przestawna

Ten przykład renderuje tabelę przestawną. Ten typ wykresu pomaga rozmieścić i podsumować złożone dane w formie tabelarycznej.

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();
});