Udostępnij za pośrednictwem


Interfejsy API rozszerzalności narzędzia Azure Data Studio

Usługa Azure Data Studio udostępnia interfejs API, którego rozszerzenia mogą używać do interakcji z innymi częściami programu Azure Data Studio, takimi jak Eksplorator obiektów. Te interfejsy API są dostępne w src/sql/azdata.d.ts pliku i zostały opisane poniżej.

Zarządzanie połączeniami

azdata.connection

Funkcje najwyższego poziomu

  • getCurrentConnection(): Thenable<azdata.connection.Connection>Pobiera bieżące połączenie na podstawie aktywnego edytora lub Eksplorator obiektów zaznaczenia.

  • getActiveConnections(): Thenable<azdata.connection.Connection[]> Pobiera listę wszystkich aktywnych połączeń użytkownika. Zwraca pustą listę, jeśli nie ma takich połączeń.

  • getCredentials(connectionId: string): Thenable<{ [name: string]: string }> Pobiera słownik zawierający poświadczenia skojarzone z połączeniem. W przeciwnym razie zostaną one zwrócone jako część słownika opcji w azdata.connection.Connection obiekcie, ale zostaną usunięte z tego obiektu.

Connection

  • options: { [name: string]: string } Słownik opcji połączenia
  • providerName: string Nazwa dostawcy połączenia (np. "MSSQL")
  • connectionId: string Unikatowy identyfikator połączenia

Przykładowy kod

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

Eksplorator obiektów

azdata.objectexplorer

Funkcje najwyższego poziomu

  • getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode>Pobierz węzeł Eksplorator obiektów odpowiadający podanemu połączeniu i ścieżce. Jeśli nie podano żadnej ścieżki, zwraca węzeł najwyższego poziomu dla danego połączenia. Jeśli w podanej ścieżce nie ma węzła, zwraca wartość undefined. Uwaga: nodePath obiekt dla obiektu jest generowany przez zaplecze usługi SQL Tools i jest trudny do utworzenia ręcznie. Przyszłe ulepszenia interfejsu API umożliwią uzyskanie węzłów na podstawie metadanych dotyczących węzła, takich jak nazwa, typ i schemat.

  • getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode>Pobierz wszystkie aktywne węzły połączenia Eksplorator obiektów.

  • findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>Znajdź wszystkie węzły Eksplorator obiektów zgodne z podanymi metadanymi. Argumenty schema, databasei parentObjectNames powinny być undefined wtedy, gdy nie mają zastosowania. parentObjectNamesto lista obiektów nadrzędnych innych niż baza danych, od najwyższego do najniższego poziomu w Eksplorator obiektów, w których znajduje się żądany obiekt. Na przykład podczas wyszukiwania kolumny "column1", która należy do tabeli "schema1.table1" i bazy danych "database1" z identyfikatorem connectionIdpołączenia , wywołaj metodę findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1']). Zobacz również listę typów, które usługa Azure Data Studio obsługuje domyślnie dla tego wywołania interfejsu API.

ObjectExplorerNode

  • connectionId: string Identyfikator połączenia, w ramach którego istnieje węzeł

  • nodePath: string Ścieżka węzła używana do wywołania getNode funkcji.

  • nodeType: string Ciąg reprezentujący typ węzła

  • nodeSubType: string Ciąg reprezentujący podtyp węzła

  • nodeStatus: string Ciąg reprezentujący stan węzła

  • label: stringEtykieta węzła wyświetlana w Eksplorator obiektów

  • isLeaf: boolean Czy węzeł jest węzłem liścia i dlatego nie ma elementów podrzędnych

  • metadata: azdata.ObjectMetadata Metadane opisujące obiekt reprezentowany przez ten węzeł

  • errorMessage: string Komunikat wyświetlany, jeśli węzeł jest w stanie błędu

  • isExpanded(): Thenable<boolean>Czy węzeł jest obecnie rozwijany w Eksplorator obiektów

  • setExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void> Określ, czy węzeł jest rozwinięty, czy zwinięty. Jeśli stan ma wartość Brak, węzeł nie zostanie zmieniony.

  • setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void> Ustaw, czy węzeł jest wybrany. Jeśli clearOtherSelections to prawda, wyczyść inne opcje podczas wprowadzania nowego zaznaczenia. Jeśli jest to fałsz, pozostaw wszystkie istniejące opcje. clearOtherSelections wartość domyślna to true, jeśli selected ma wartość true i false, gdy selected ma wartość false.

  • getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Pobierz wszystkie węzły podrzędne tego węzła. Zwraca pustą listę, jeśli nie ma żadnych elementów podrzędnych.

  • getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Pobierz węzeł nadrzędny tego węzła. Zwraca niezdefiniowane, jeśli nie ma elementu nadrzędnego.

Przykładowy kod

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

Proponowane interfejsy API

Dodaliśmy proponowane interfejsy API, aby umożliwić rozszerzenia wyświetlania niestandardowego interfejsu użytkownika w oknach dialogowych, kreatorach i kartach dokumentów, między innymi. Zapoznaj się z proponowanym plikiem typów interfejsów API, aby uzyskać więcej dokumentacji, choć należy pamiętać, że te interfejsy API mogą ulec zmianie w dowolnym momencie. Przykłady użycia niektórych z tych interfejsów API można znaleźć w przykładowym rozszerzeniu "sqlservices".