Udostępnij za pośrednictwem


Interfejsy API rozszerzalności narzędzia Azure Data Studio

Ważny

Usługa Azure Data Studio zostanie wycofana 28 lutego 2026 r.. Zalecamy używanie programu Visual Studio Code. Aby uzyskać więcej informacji na temat migracji do programu Visual Studio Code, odwiedź Co się dzieje z usługą Azure Data Studio?

Usługa Azure Data Studio udostępnia interfejs API, którego rozszerzenia mogą używać do interakcji z innymi częściami programu Azure Data Studio, takimi jak Eksplorator obiektów. Te interfejsy API są dostępne w src/sql/azdata.d.ts pliku i zostały opisane poniżej.

Zarządzanie połączeniami

azdata.connection

Funkcje najwyższego poziomu do zarządzania połączeniami

  • getCurrentConnection(): Thenable<azdata.connection.Connection>Pobiera bieżące połączenie na podstawie aktywnego edytora lub Eksplorator obiektów zaznaczenia.

  • getActiveConnections(): Thenable<azdata.connection.Connection[]> Pobiera listę wszystkich aktywnych połączeń użytkowników. Zwraca pustą listę, jeśli nie ma takich połączeń.

  • getCredentials(connectionId: string): Thenable<{ [name: string]: string }> Pobiera słownik zawierający poświadczenia skojarzone z połączeniem. W przeciwnym razie zostaną one zwrócone jako część słownika opcji pod obiektem data.connection.Connection, ale zostaną usunięte z tego obiektu.

Połączenie

  • options: { [name: string]: string } Słownik opcji połączenia
  • providerName: string Nazwa dostawcy połączenia (na przykład "MSSQL")
  • connectionId: string Unikatowy identyfikator połączenia

Przykładowy kod

> let connection = azdata.connection.getCurrentConnection();
connection: {
    providerName: 'MSSQL',
    connectionId: 'd97bb63a-466e-4ef0-ab6f-00cd44721dcc',
    options: {
        server: 'mairvine-sql-server',
        user: 'sa',
        authenticationType: 'sqlLogin',
        ...
 },
    ...
}
> let credentials = azdata.connection.getCredentials(connection.connectionId);
credentials: {
    password: 'abc123'
}

Eksplorator obiektów

azdata.objectexplorer

Funkcje najwyższego poziomu dla Eksploratora obiektów

  • getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode>Pobierz węzeł Eksplorator obiektów odpowiadający podanemu połączeniu i ścieżce. Jeśli nie podano żadnej ścieżki, zwraca węzeł najwyższego poziomu dla danego połączenia. Jeśli w podanej ścieżce nie ma żadnego węzła, zwraca undefined. Uwaga: nodePath obiekt dla obiektu jest generowany przez zaplecze usługi SQL Tools i jest trudny do utworzenia ręcznie. Przyszłe ulepszenia interfejsu API umożliwiają pobieranie węzłów na podstawie metadanych dotyczących węzła, takich jak nazwa, typ i schemat.

  • getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode>Pobierz wszystkie aktywne węzły połączenia Eksplorator obiektów.

  • findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>Znajdź wszystkie węzły Eksplorator obiektów zgodne z podanymi metadanymi. Argumenty schema, databasei parentObjectNames powinny być undefined, gdy nie mają zastosowania. parentObjectNames jest listą obiektów nadrzędnych poza bazą danych, od najwyższego do najniższego poziomu w Eksploratorze Obiektów, pod którymi znajduje się żądany obiekt. Na przykład podczas wyszukiwania kolumny "column1", która należy do tabeli "schema1.table1" i bazy danych "database1" z identyfikatorem connectionIdpołączenia , wywołaj metodę findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1']). Zobacz również listę typów, które usługa Azure Data Studio obsługuje domyślnie dla tego wywołania interfejsu API.

ObjectExplorerNode

  • connectionId: string identyfikator połączenia, w ramach którego istnieje węzeł

  • nodePath: string Ścieżka węzła używana do wywołania getNode funkcji.

  • nodeType: string Ciąg reprezentujący typ węzła

  • nodeSubType: string Ciąg reprezentujący podtyp węzła

  • nodeStatus: string Ciąg reprezentujący stan węzła

  • label: stringEtykieta węzła wyświetlana w Eksplorator obiektów

  • isLeaf: boolean Czy węzeł jest węzłem liścia i dlatego nie ma elementów podrzędnych

  • metadata: azdata.ObjectMetadata Metadane opisujące obiekt reprezentowany przez ten węzeł

  • errorMessage: string Komunikat wyświetlany, jeśli węzeł jest w stanie błędu

  • isExpanded(): Thenable<boolean>Czy węzeł jest obecnie rozwijany w Eksplorator obiektów

  • setExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void> Określ, czy węzeł jest rozwinięty, czy zwinięty. Węzeł nie zostanie zmieniony, jeśli stan jest ustawiony na Wartość Brak.

  • setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void> Ustaw, czy węzeł jest wybrany. Jeśli clearOtherSelections to prawda, wyczyść inne opcje podczas wprowadzania nowego zaznaczenia. Jeśli wartość false, pozostaw wszystkie istniejące opcje. clearOtherSelections wartość domyślna to true, jeśli selected ma wartość true i false, gdy selected ma wartość false.

  • getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Pobierz wszystkie węzły podrzędne tego węzła. Zwraca pustą listę, jeśli nie ma żadnych elementów podrzędnych.

  • getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Pobierz węzeł nadrzędny tego węzła. Zwraca undefined, jeśli nie ma rodzica.

Przykładowy kod

private async interactWithOENode(selectedNode: azdata.objectexplorer.ObjectExplorerNode): Promise<void> {
    let choices = ['Expand', 'Collapse', 'Select', 'Select (multi)', 'Deselect', 'Deselect (multi)'];
    if (selectedNode.isLeaf) {
 choices[0] += ' (is leaf)';
 choices[1] += ' (is leaf)';
 } else {
        let expanded = await selectedNode.isExpanded();
        if (expanded) {
 choices[0] += ' (is expanded)';
 } else {
 choices[1] += ' (is collapsed)';
 }
 }
    let parent = await selectedNode.getParent();
    if (parent) {
 choices.push('Get Parent');
 }
    let children = await selectedNode.getChildren();
 children.forEach(child => choices.push(child.label));
    let choice = await vscode.window.showQuickPick(choices);
 let nextNode: azdata.objectexplorer.ObjectExplorerNode = undefined;
    if (choice === choices[0]) {
 selectedNode.setExpandedState(vscode.TreeItemCollapsibleState.Expanded);
 } else if (choice === choices[1]) {
 selectedNode.setExpandedState(vscode.TreeItemCollapsibleState.Collapsed);
 } else if (choice === choices[2]) {
 selectedNode.setSelected(true);
 } else if (choice === choices[3]) {
 selectedNode.setSelected(true, false);
 } else if (choice === choices[4]) {
 selectedNode.setSelected(false);
 } else if (choice === choices[5]) {
 selectedNode.setSelected(false, true);
 } else if (choice === 'Get Parent') {
 nextNode = parent;
 } else {
        let childNode = children.find(child => child.label === choice);
 nextNode = childNode;
 }
    if (nextNode) {
        let updatedNode = await azdata.objectexplorer.getNode(nextNode.connectionId, nextNode.nodePath);
        this.interactWithOENode(updatedNode);
 }
}

vscode.commands.registerCommand('mssql.objectexplorer.interact', () => {
 azdata.objectexplorer.getActiveConnectionNodes().then(activeConnections => {
 vscode.window.showQuickPick(activeConnections.map(connection => connection.label + ' ' + connection.connectionId)).then(selection => {
            let selectedNode = activeConnections.find(connection => connection.label + ' ' + connection.connectionId === selection);
            this.interactWithOENode(selectedNode);
 });
 });
});

Proponowane interfejsy API

Dodaliśmy proponowane interfejsy API, aby umożliwić rozszerzenia wyświetlania niestandardowego interfejsu użytkownika w oknach dialogowych, kreatorach i kartach dokumentów, między innymi. Zobacz plik proponowanych typów interfejsów API, aby uzyskać więcej dokumentacji, choć należy pamiętać, że te interfejsy API mogą ulec zmianie w dowolnym momencie. Przykłady użycia niektórych z tych interfejsów API można znaleźć w rozszerzeniu przykładów o nazwie "podusługi" .