API ekstensibilitas Azure Data Studio

Azure Data Studio menyediakan API yang dapat digunakan ekstensi untuk berinteraksi dengan bagian lain dari Azure Data Studio, seperti Object Explorer. API ini tersedia dari src/sql/azdata.d.ts file dan dijelaskan di bawah ini.

Manajemen Sambungan

azdata.connection

Fungsi tingkat atas

  • getCurrentConnection(): Thenable<azdata.connection.Connection> Mendapatkan koneksi saat ini berdasarkan editor aktif atau pilihan Object Explorer.

  • getActiveConnections(): Thenable<azdata.connection.Connection[]> Mendapatkan daftar semua koneksi pengguna yang aktif. Mengembalikan daftar kosong jika tidak ada koneksi tersebut.

  • getCredentials(connectionId: string): Thenable<{ [name: string]: string }> Mendapatkan kamus yang berisi kredensial yang terkait dengan koneksi. Jika tidak, ini akan dikembalikan sebagai bagian dari kamus opsi di bawah azdata.connection.Connection objek tetapi dilucuti dari objek tersebut.

Connection

  • options: { [name: string]: string } Kamus opsi koneksi
  • providerName: string Nama penyedia koneksi (misalnya "MSSQL")
  • connectionId: string Pengidentifikasi unik untuk koneksi

Contoh Kode

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

SQL Server Object Explorer

azdata.objectexplorer

Fungsi tingkat atas

  • getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode> Dapatkan simpul Object Explorer yang sesuai dengan koneksi dan jalur yang diberikan. Jika tidak ada jalur yang diberikan, jalur akan mengembalikan simpul tingkat atas untuk koneksi yang diberikan. Jika tidak ada simpul di jalur yang diberikan, simpul akan undefinedmengembalikan . Catatan: nodePath untuk objek dihasilkan oleh backend SQL Tools Service dan sulit dibangun secara manual. Peningkatan API di masa mendatang akan memungkinkan Anda mendapatkan simpul berdasarkan metadata yang Anda berikan tentang simpul, seperti nama, jenis, dan skema.

  • getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Dapatkan semua simpul koneksi Object Explorer aktif.

  • findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Temukan semua simpul Object Explorer yang cocok dengan metadata yang diberikan. Argumen schema, database, dan parentObjectNames harus undefined ketika tidak berlaku. parentObjectNames adalah daftar objek induk non-database, dari tingkat tertinggi hingga terendah di Object Explorer, yang di bawah objek yang diinginkan. Misalnya, saat mencari kolom "column1" yang termasuk dalam tabel "schema1.table1" dan database "database1" dengan ID connectionIdkoneksi , panggil findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1']). Lihat juga daftar jenis yang didukung Azure Data Studio secara default untuk panggilan API ini.

ObjectExplorerNode

  • connectionId: string Id koneksi tempat simpul ada di bawah

  • nodePath: string Jalur simpul, seperti yang digunakan untuk panggilan ke getNode fungsi.

  • nodeType: string String yang mewakili jenis simpul

  • nodeSubType: string String yang mewakili subjenis simpul

  • nodeStatus: string String yang mewakili status simpul

  • label: string Label untuk simpul seperti yang muncul di Object Explorer

  • isLeaf: boolean Apakah simpul adalah node daun dan karenanya tidak memiliki anak

  • metadata: azdata.ObjectMetadata Metadata yang menjelaskan objek yang diwakili oleh simpul ini

  • errorMessage: string Pesan ditampilkan jika simpul dalam status kesalahan

  • isExpanded(): Thenable<boolean> Apakah simpul saat ini diperluas di Object Explorer

  • setExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void> Atur apakah simpul diperluas atau diciutkan. Jika status diatur ke Tidak Ada, simpul tidak akan diubah.

  • setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void> Atur apakah simpul dipilih. Jika clearOtherSelections benar, hapus pilihan lain saat membuat pilihan baru. Jika salah, biarkan pilihan yang ada. clearOtherSelections default ke true ketika selected true dan false ketika selected false.

  • getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Dapatkan semua simpul anak dari simpul ini. Mengembalikan daftar kosong jika tidak ada anak.

  • getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Dapatkan simpul induk dari simpul ini. Mengembalikan tidak terdefinisi jika tidak ada induk.

Contoh Kode

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

API yang diusulkan

Kami telah menambahkan API yang diusulkan untuk memungkinkan ekstensi menampilkan UI kustom dalam tab dialog, wizard, dan dokumen, di antara kemampuan lainnya. Lihat file jenis API yang diusulkan untuk dokumentasi lebih lanjut, meskipun perlu diketahui bahwa API ini dapat berubah kapan saja. Contoh cara menggunakan beberapa API ini dapat ditemukan di ekstensi sampel "sqlservices".