Api's voor uitbreidbaarheid van Azure Data Studio
Azure Data Studio biedt een API die extensies kunnen gebruiken om te communiceren met andere onderdelen van Azure Data Studio, zoals Objectverkenner. Deze API's zijn beschikbaar in het src/sql/azdata.d.ts
bestand en worden hieronder beschreven.
Verbindingsbeheer
azdata.connection
Functies op het hoogste niveau
getCurrentConnection(): Thenable<azdata.connection.Connection>
Hiermee haalt u de huidige verbinding op op basis van de actieve editor of Objectverkenner selectie.getActiveConnections(): Thenable<azdata.connection.Connection[]>
Hiermee haalt u een lijst op van alle verbindingen van de gebruiker die actief zijn. Retourneert een lege lijst als er geen dergelijke verbindingen zijn.getCredentials(connectionId: string): Thenable<{ [name: string]: string }>
Hiermee haalt u een woordenlijst op met de referenties die zijn gekoppeld aan een verbinding. Deze worden anders geretourneerd als onderdeel van de woordenlijst met opties onder eenazdata.connection.Connection
object, maar worden verwijderd van dat object.
Connection
options: { [name: string]: string }
De woordenlijst met verbindingsoptiesproviderName: string
De naam van de verbindingsprovider (bijvoorbeeld 'MSSQL')connectionId: string
De unieke id voor de verbinding
Voorbeeldcode
> 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'
}
Objectverkenner
azdata.objectexplorer
Functies op het hoogste niveau
getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Haal een Objectverkenner knooppunt op dat overeenkomt met de opgegeven verbinding en het opgegeven pad. Als er geen pad wordt opgegeven, wordt het knooppunt op het hoogste niveau voor de opgegeven verbinding geretourneerd. Als er geen knooppunt op het opgegeven pad is, wordt het geretourneerdundefined
. Opmerking: hetnodePath
voor een object wordt gegenereerd door de back-end van de SQL Tools-service en is moeilijk met de hand te maken. Met toekomstige API-verbeteringen kunt u knooppunten ophalen op basis van metagegevens die u opgeeft over het knooppunt, zoals naam, type en schema.getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Alle actieve Objectverkenner verbindingsknooppunten ophalen.findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>
Zoek alle Objectverkenner knooppunten die overeenkomen met de opgegeven metagegevens. Deschema
,database
enparentObjectNames
argumenten moeten zijnundefined
wanneer ze niet van toepassing zijn.parentObjectNames
is een lijst met niet-database bovenliggende objecten, van hoogste naar laagste niveau in Objectverkenner, waaronder het gewenste object valt. Als u bijvoorbeeld zoekt naar een kolom 'kolom1' die deel uitmaakt van een tabel 'schema1.table1' en database 'database1' met verbindings-idconnectionId
, roept ufindNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1'])
aan. Zie ook de lijst met typen die Standaard door Azure Data Studio worden ondersteund voor deze API-aanroep.
ObjectExplorerNode
connectionId: string
De id van de verbinding waaronder het knooppunt zich bevindtnodePath: string
Het pad van het knooppunt, zoals wordt gebruikt voor een aanroep naar degetNode
functie.nodeType: string
Een tekenreeks die het type van het knooppunt aangeeftnodeSubType: string
Een tekenreeks die het subtype van het knooppunt vertegenwoordigtnodeStatus: string
Een tekenreeks die de status van het knooppunt aangeeftlabel: string
Het label voor het knooppunt zoals dit wordt weergegeven in ObjectverkennerisLeaf: boolean
Of het knooppunt een leaf-knooppunt is en dus geen onderliggende items heeftmetadata: azdata.ObjectMetadata
Metagegevens die het object beschrijven dat wordt vertegenwoordigd door dit knooppunterrorMessage: string
Bericht dat wordt weergegeven als het knooppunt de foutstatus heeftisExpanded(): Thenable<boolean>
Of het knooppunt momenteel is uitgevouwen in ObjectverkennersetExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void>
Instellen of het knooppunt is uitgevouwen of samengevouwen. Als de status is ingesteld op Geen, wordt het knooppunt niet gewijzigd.setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void>
Instellen of het knooppunt is geselecteerd. AlsclearOtherSelections
dit waar is, wist u alle andere selecties bij het maken van de nieuwe selectie. Als deze onwaar is, laat u bestaande selecties staan.clearOtherSelections
is standaard ingesteld op waar wanneerselected
waar en onwaar wanneerselected
onwaar is.getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>
Haal alle onderliggende knooppunten van dit knooppunt op. Retourneert een lege lijst als er geen onderliggende items zijn.getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Haal het bovenliggende knooppunt van dit knooppunt op. Retourneert niet-gedefinieerd als er geen bovenliggend item is.
Voorbeeldcode
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);
});
});
});
Voorgestelde API's
We hebben voorgestelde API's toegevoegd om uitbreidingen toe te staan om aangepaste gebruikersinterface weer te geven in dialoogvensters, wizards en documenttabbladen, en andere mogelijkheden. Zie het voorgestelde API-typebestand voor meer documentatie, maar houd er rekening mee dat deze API's op elk gewenst moment kunnen worden gewijzigd. Voorbeelden van het gebruik van sommige van deze API's vindt u in de voorbeeldextensie sqlservices.