Delen via


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 een azdata.connection.Connection object, maar worden verwijderd van dat object.

Connection

  • options: { [name: string]: string } De woordenlijst met verbindingsopties
  • providerName: 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 geretourneerd undefined. Opmerking: het nodePath 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. De schema, databaseen parentObjectNames argumenten moeten zijn undefined wanneer ze niet van toepassing zijn. parentObjectNamesis 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-id connectionId, roept u findNodes(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 bevindt

  • nodePath: string Het pad van het knooppunt, zoals wordt gebruikt voor een aanroep naar de getNode functie.

  • nodeType: string Een tekenreeks die het type van het knooppunt aangeeft

  • nodeSubType: string Een tekenreeks die het subtype van het knooppunt vertegenwoordigt

  • nodeStatus: string Een tekenreeks die de status van het knooppunt aangeeft

  • label: stringHet label voor het knooppunt zoals dit wordt weergegeven in Objectverkenner

  • isLeaf: boolean Of het knooppunt een leaf-knooppunt is en dus geen onderliggende items heeft

  • metadata: azdata.ObjectMetadata Metagegevens die het object beschrijven dat wordt vertegenwoordigd door dit knooppunt

  • errorMessage: string Bericht dat wordt weergegeven als het knooppunt de foutstatus heeft

  • isExpanded(): Thenable<boolean>Of het knooppunt momenteel is uitgevouwen in Objectverkenner

  • setExpandedState(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. Als clearOtherSelections 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 wanneer selected waar en onwaar wanneer selected 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.