Sdílet prostřednictvím


Rozhraní API rozšiřitelnosti nástroje Azure Data Studio

Azure Data Studio poskytuje rozhraní API, které rozšíření můžou používat k interakci s dalšími částmi nástroje Azure Data Studio, jako je například Průzkumník objektů. Tato rozhraní API jsou k dispozici v src/sql/azdata.d.ts souboru a jsou popsána níže.

Správa připojení

azdata.connection

Funkce nejvyšší úrovně

  • getCurrentConnection(): Thenable<azdata.connection.Connection>Získá aktuální připojení na základě aktivního editoru nebo Průzkumník objektů výběru.

  • getActiveConnections(): Thenable<azdata.connection.Connection[]> Získá seznam všech připojení uživatele, která jsou aktivní. Vrátí prázdný seznam, pokud taková připojení neexistují.

  • getCredentials(connectionId: string): Thenable<{ [name: string]: string }> Získá slovník obsahující přihlašovací údaje přidružené k připojení. Jinak by se tyto hodnoty vrátily jako součást slovníku možností v rámci objektu azdata.connection.Connection , ale z tohoto objektu by se odebraly.

Connection

  • options: { [name: string]: string } Slovník možností připojení
  • providerName: string Název poskytovatele připojení (např. MSSQL)
  • connectionId: string Jedinečný identifikátor připojení

Příklad kódu

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

Průzkumník objektů

azdata.objectexplorer

Funkce nejvyšší úrovně

  • getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode>Získejte Průzkumník objektů uzel odpovídající danému připojení a cestě. Pokud není k dispozici žádná cesta, vrátí uzel nejvyšší úrovně pro dané připojení. Pokud v dané cestě není žádný uzel, vrátí hodnotu undefined. Poznámka: Objekt nodePath pro objekt je generován back-endem služby SQL Tools Service a je obtížné sestavit ručně. Budoucí vylepšení rozhraní API vám umožní získat uzly na základě metadat, která poskytnete o uzlu, jako je název, typ a schéma.

  • getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode>Získejte všechny aktivní Průzkumník objektů uzly připojení.

  • findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>Vyhledejte všechny uzly Průzkumník objektů, které odpovídají zadaným metadatům. Argumenty schema, databasea parentObjectNames argumenty by měly být undefined , pokud nejsou použitelné. parentObjectNamesje seznam nadřazených objektů mimo databázi, od nejvyšší po nejnižší úroveň v Průzkumník objektů, že požadovaný objekt je pod. Například při hledání sloupce "column1", který patří do tabulky "schema1.table1" a databáze "database1" s ID connectionIdpřipojení , volání findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1']). Podívejte se také na seznam typů, které Azure Data Studio ve výchozím nastavení podporuje pro toto volání rozhraní API.

ObjectExplorerNode

  • connectionId: string ID připojení, ve které uzel existuje

  • nodePath: string Cesta uzlu, jak se používá pro volání getNode funkce.

  • nodeType: string Řetězec představující typ uzlu

  • nodeSubType: string Řetězec představující podtyp uzlu

  • nodeStatus: string Řetězec představující stav uzlu

  • label: stringPopisek uzlu, který se zobrazí v Průzkumník objektů

  • isLeaf: boolean Určuje, jestli je uzel listovým uzlem, a proto nemá žádné podřízené položky.

  • metadata: azdata.ObjectMetadata Metadata popisující objekt reprezentovaný tímto uzlem

  • errorMessage: string Zpráva zobrazená v případě, že je uzel v chybovém stavu

  • isExpanded(): Thenable<boolean>Jestli je uzel aktuálně rozbalený v Průzkumník objektů

  • setExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void> Nastavte, jestli je uzel rozbalený nebo sbalený. Pokud je stav nastaven na Žádné, uzel se nezmění.

  • setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void> Nastavte, zda je uzel vybrán. Pokud clearOtherSelections je true, zrušte při vytváření nového výběru všechny ostatní výběry. Pokud je false, ponechte všechny existující výběry. clearOtherSelections výchozí hodnota true, pokud selected je true a false, pokud selected je false.

  • getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Získejte všechny podřízené uzly tohoto uzlu. Vrátí prázdný seznam, pokud neexistují žádné podřízené položky.

  • getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Získejte nadřazený uzel tohoto uzlu. Vrátí nedefinovanou hodnotu, pokud neexistuje žádný nadřazený objekt.

Příklad kódu

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

Navrhovaná rozhraní API

Přidali jsme navrhovaná rozhraní API, která mimo jiné umožňují rozšířením zobrazovat vlastní uživatelské rozhraní v dialogových oknech, průvodcích a kartách dokumentů. Další dokumentaci najdete v souboru navrhovaných typů rozhraní API, ale mějte na paměti, že tato rozhraní API se můžou kdykoli změnit. Příklady použití některých z těchto rozhraní API najdete v ukázkovém rozšíření sqlservices.