Condividi tramite


API di estendibilità Azure Data Studio

Importante

Azure Data Studio verrà ritirato il 28 febbraio 2026. È consigliabile usare Visual Studio Code. Per altre informazioni sulla migrazione a Visual Studio Code, vedere Che cosa accade in Azure Data Studio?

Azure Data Studio mette a disposizione un'API che le estensioni possono usare per interagire con altre parti di Azure Data Studio, ad esempio Esplora oggetti. Queste API sono disponibili dal file src/sql/azdata.d.ts e sono descritte di seguito.

Gestione delle connessioni

azdata.connection

Funzioni di primo livello per la gestione delle connessioni

  • getCurrentConnection(): Thenable<azdata.connection.Connection> Ottiene la connessione corrente in base all'editor attivo o alla selezione in Esplora oggetti.

  • getActiveConnections(): Thenable<azdata.connection.Connection[]> Ottiene un elenco di tutte le connessioni utente attive. Restituisce un elenco vuoto se non sono presenti connessioni di questo tipo.

  • getCredentials(connectionId: string): Thenable<{ [name: string]: string }> Ottiene un dizionario che contiene le credenziali associate a una connessione. In caso contrario, questi verranno restituiti come parte del dizionario delle opzioni in un oggetto data.connection.Connection ma rimossi da tale oggetto.

Connessione

  • options: { [name: string]: string } Dizionario delle opzioni di connessione
  • providerName: string Il nome del provider di connessione (ad esempio "MSSQL")
  • connectionId: string Identificatore univoco della connessione

Codice di esempio

> 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'
}

Esplora oggetti

azdata.objectexplorer

Funzioni di primo livello per Esplora oggetti

  • getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode> Ottiene un nodo Esplora oggetti corrispondente alla connessione e al percorso specificati. Se non viene specificato alcun percorso, viene restituito il nodo di primo livello per la connessione specificata. Se non è presente alcun nodo nel percorso specificato, restituisce undefined. Nota: la variabile nodePath per un oggetto viene generata dal back-end del servizio SQL Tools ed è difficile da creare manualmente. I miglioramenti futuri dell'API consentono di ottenere nodi in base ai metadati forniti sul nodo, ad esempio nome, tipo e schema.

  • getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Ottiene tutti i nodi di connessione di Esplora oggetti attivi.

  • findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Trova tutti i nodi di Esplora oggetti che corrispondono ai metadati specificati. Gli argomenti schema, databasee parentObjectNames devono essere undefined quando non sono applicabili. parentObjectNames è un elenco di oggetti padre non di database, dal livello più alto al più basso in Esplora oggetti, in cui si trova l'oggetto desiderato. Ad esempio, quando si cerca una colonna "column1" appartenente a una tabella "schema1.table1" e al database "database1" con ID di connessione connectionId, chiamare findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1']). Vedere anche l'elenco dei tipi supportati da Azure Data Studio per impostazione predefinita per questa chiamata API.

ObjectExplorerNode

  • connectionId: string ID della connessione in cui si trova il nodo

  • nodePath: string Percorso del nodo, come usato per una chiamata alla funzione getNode.

  • nodeType: string Stringa che rappresenta il tipo del nodo

  • nodeSubType: string Stringa che rappresenta il sottotipo del nodo

  • nodeStatus: string Stringa che rappresenta lo stato del nodo

  • label: string Etichetta del nodo come appare in Esplora oggetti

  • isLeaf: boolean Indica se il nodo è un nodo foglia e pertanto non ha elementi figlio

  • metadata: azdata.ObjectMetadata Metadati che descrivono l'oggetto rappresentato da questo nodo

  • errorMessage: string Messaggio visualizzato se il nodo è in stato di errore

  • isExpanded(): Thenable<boolean> Indica se il nodo è attualmente espanso in Esplora oggetti

  • setExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void> Impostare se il nodo è espanso o compresso. Il nodo non verrà modificato se lo stato è impostato su Nessuno.

  • setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void> Impostare se il nodo è selezionato. Se clearOtherSelections è true, deselezionare eventuali altre selezioni quando si effettua la nuova selezione. Se false, lasciare le selezioni esistenti. clearOtherSelections viene impostato su true per impostazione predefinita quando selected è true e su false quando selected è false.

  • getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Ottiene tutti i nodi figlio del nodo. Restituisce un elenco vuoto se non sono presenti elementi figlio.

  • getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Ottiene il nodo padre di questo nodo. Restituisce undefined se non c'è un genitore.

Codice di esempio

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

API proposte

Abbiamo aggiunto un elenco di API proposte per consentire alle estensioni di visualizzare l'interfaccia utente personalizzata in finestre di dialogo, procedure guidate e schede di documenti, tra le altre funzionalità. Per altre documentazioni, vedere l'file di tipi di API proposto, anche se tenere presente che queste API sono soggette a modifiche in qualsiasi momento. Esempi di come usare alcune di queste API sono disponibili nell'estensione di esempio "subservices".