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 obiektemdata.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, zwracaundefined
. 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. Argumentyschema
,database
iparentObjectNames
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 identyfikatoremconnectionId
połą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łaniagetNode
funkcji.nodeType: string
Ciąg reprezentujący typ węzłanodeSubType: string
Ciąg reprezentujący podtyp węzłanodeStatus: string
Ciąg reprezentujący stan węzłalabel: string
Etykieta węzła wyświetlana w Eksplorator obiektówisLeaf: boolean
Czy węzeł jest węzłem liścia i dlatego nie ma elementów podrzędnychmetadata: azdata.ObjectMetadata
Metadane opisujące obiekt reprezentowany przez ten węzełerrorMessage: string
Komunikat wyświetlany, jeśli węzeł jest w stanie błęduisExpanded(): Thenable<boolean>
Czy węzeł jest obecnie rozwijany w Eksplorator obiektówsetExpandedState(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śliclearOtherSelections
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śliselected
ma wartość true i false, gdyselected
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" .