Dela via


Utöknings-API:er för Azure Data Studio

Azure Data Studio tillhandahåller ett API som tillägg kan använda för att interagera med andra delar av Azure Data Studio, till exempel Object Explorer. Dessa API:er är tillgängliga från src/sql/azdata.d.ts filen och beskrivs nedan.

Anslutningshantering

azdata.connection

Funktioner på toppnivå

  • getCurrentConnection(): Thenable<azdata.connection.Connection> Hämtar den aktuella anslutningen baserat på det aktiva redigeringsprogrammet eller objektutforskarens val.

  • getActiveConnections(): Thenable<azdata.connection.Connection[]> Hämtar en lista över alla användares anslutningar som är aktiva. Returnerar en tom lista om det inte finns några sådana anslutningar.

  • getCredentials(connectionId: string): Thenable<{ [name: string]: string }> Hämtar en ordlista som innehåller de autentiseringsuppgifter som är associerade med en anslutning. Dessa skulle annars returneras som en del av alternativordlistan under ett azdata.connection.Connection objekt men tas bort från objektet.

Connection

  • options: { [name: string]: string } Ordlistan med anslutningsalternativ
  • providerName: string Namnet på anslutningsprovidern (t.ex. "MSSQL")
  • connectionId: string Den unika identifieraren för anslutningen

Exempelkod

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

Object Explorer

azdata.objectexplorer

Funktioner på toppnivå

  • getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode> Hämta en Object Explorer-nod som motsvarar den angivna anslutningen och sökvägen. Om ingen sökväg anges returnerar den noden på den översta nivån för den angivna anslutningen. Om det inte finns någon nod vid den angivna sökvägen returneras undefined. nodePath Obs! För ett objekt genereras av SQL Tools Service-serverdelen och är svår att konstruera för hand. Framtida API-förbättringar gör att du kan hämta noder baserat på metadata som du anger om noden, till exempel namn, typ och schema.

  • getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Hämta alla aktiva Object Explorer-anslutningsnoder.

  • findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Hitta alla Object Explorer-noder som matchar angivna metadata. Argumenten schema, databaseoch parentObjectNames bör vara undefined när de inte är tillämpliga. parentObjectNames är en lista över överordnade objekt som inte är överordnad databas, från den högsta till den lägsta nivån i Object Explorer, som önskat objekt är under. När du till exempel söker efter en kolumn "column1" som tillhör tabellen "schema1.table1" och databasen "database1" med anslutnings-ID connectionIdanropar du findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1']). Se även listan över typer som Azure Data Studio stöder som standard för det här API-anropet.

ObjectExplorerNode

  • connectionId: string ID:t för anslutningen som noden finns under

  • nodePath: string Sökvägen till noden, som används för ett anrop till getNode funktionen.

  • nodeType: string En sträng som representerar nodens typ

  • nodeSubType: string En sträng som representerar nodens undertyp

  • nodeStatus: string En sträng som representerar nodens status

  • label: string Etiketten för noden som den visas i Object Explorer

  • isLeaf: boolean Om noden är en lövnod och därför inte har några underordnade

  • metadata: azdata.ObjectMetadata Metadata som beskriver objektet som representeras av den här noden

  • errorMessage: string Meddelande som visas om noden är i ett feltillstånd

  • isExpanded(): Thenable<boolean> Om noden för närvarande är expanderad i Object Explorer

  • setExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void> Ange om noden ska expanderas eller komprimeras. Om tillståndet är inställt på Ingen ändras inte noden.

  • setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void> Ange om noden är markerad. Om clearOtherSelections är sant avmarkerar du alla andra val när du gör det nya valet. Om det är falskt lämnar du alla befintliga val. clearOtherSelections standardvärdet är sant när selected är sant och falskt när selected är falskt.

  • getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Hämta alla underordnade noder i den här noden. Returnerar en tom lista om det inte finns några underordnade objekt.

  • getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Hämta den överordnade noden för den här noden. Returnerar odefinierat om det inte finns någon överordnad.

Exempelkod

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

Föreslagna API:er

Vi har lagt till föreslagna API:er så att tillägg kan visa anpassat användargränssnitt i dialogrutor, guider och dokumentflikar, bland andra funktioner. Mer dokumentation finns i den föreslagna API-typfilen , men tänk på att dessa API:er kan komma att ändras när som helst. Exempel på hur du använder några av dessa API:er finns i exempeltillägget "sqlservices".