API di estendibilità 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 connessioni
azdata.connection
Funzioni di primo livello
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 dell'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. Queste verrebbero altrimenti restituite come parte del dizionario delle opzioni in un oggettoazdata.connection.Connection
, ma rimosse da tale oggetto.
Connection
options: { [name: string]: string }
Dizionario delle opzioni di connessioneproviderName: string
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
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 nel percorso specificato non è presente alcun nodo, restituisceundefined
. Nota: la variabilenodePath
per un oggetto viene generata dal back-end del servizio SQL Tools ed è difficile da creare manualmente. I miglioramenti futuri dell'API consentiranno di ottenere i 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 argomentischema
,database
eparentObjectNames
devono essereundefined
se non sono applicabili.parentObjectNames
è un elenco di oggetti padre non di database, dal livello più alto a quello 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 connessioneconnectionId
, chiamarefindNodes(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 esiste il nodonodePath: string
Percorso del nodo, come usato per una chiamata alla funzionegetNode
.nodeType: string
Stringa che rappresenta il tipo del nodonodeSubType: string
Stringa che rappresenta il sottotipo del nodonodeStatus: string
Stringa che rappresenta lo stato del nodolabel: string
Etichetta del nodo come appare in Esplora oggettiisLeaf: boolean
Indica se il nodo è un nodo foglia e pertanto non ha elementi figliometadata: azdata.ObjectMetadata
Metadati che descrivono l'oggetto rappresentato da questo nodoerrorMessage: string
Messaggio visualizzato se il nodo è in stato di erroreisExpanded(): Thenable<boolean>
Indica se il nodo è attualmente espanso in Esplora oggettisetExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void>
Impostare se il nodo è espanso o compresso. Se lo stato è impostato su None, il nodo non verrà modificato.setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void>
Impostare se il nodo è selezionato. SeclearOtherSelections
è 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 quandoselected
è true e su false quandoselected
è 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 esiste alcun nodo padre.
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 informazioni, vedere il file dei tipi di API proposte, ma tenere presente che queste API sono soggette a modifica in qualsiasi momento. Esempi di come usare alcune di queste API sono disponibili nell'estensione di esempio "sqlservices".