Interfejsy API rozszerzalności narzędzia 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
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żytkownika. 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 wazdata.connection.Connection
obiekcie, ale zostaną usunięte z tego obiektu.
Connection
options: { [name: string]: string }
Słownik opcji połączeniaproviderName: string
Nazwa dostawcy połączenia (np. "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
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 węzła, zwraca wartość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żliwią uzyskanie 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
wtedy, gdy nie mają zastosowania.parentObjectNames
to lista obiektów nadrzędnych innych niż baza danych, od najwyższego do najniższego poziomu w Eksplorator obiektów, w których 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. Jeśli stan ma wartość Brak, węzeł nie zostanie zmieniony.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 jest to fałsz, 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 niezdefiniowane, jeśli nie ma elementu nadrzędnego.
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. Zapoznaj się z proponowanym plikiem 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 przykładowym rozszerzeniu "sqlservices".