API ekstensibilitas Azure Data Studio
Penting
Azure Data Studio pensiun pada 28 Februari 2026. Kami menyarankan agar Anda menggunakan Visual Studio Code. Untuk informasi selengkapnya tentang migrasi ke Visual Studio Code, kunjungi Apa yang terjadi pada 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 koneksi
azdata.connection
Fungsi tingkat atas untuk manajemen koneksi
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 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. Seharusnya, ini akan dikembalikan sebagai bagian dari kamus opsi di bawah objekdata.connection.Connection
tetapi dihapus dari objek tersebut.
Sambungan
-
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 untuk Object Explorer
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, akan mengembalikanundefined
. Catatan:nodePath
untuk objek dihasilkan oleh backend SQL Tools Service dan sulit dibangun secara manual. Peningkatan API di masa mendatang 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. Argumenschema
,database
, danparentObjectNames
harusundefined
ketika tidak berlaku.parentObjectNames
adalah daftar objek induk nondatabase, 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 IDconnectionId
koneksi , panggilfindNodes(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 di mana simpul berada di bawahnyanodePath: string
Jalur simpul, seperti yang digunakan untuk panggilan kegetNode
fungsi.nodeType: string
String yang mewakili jenis simpulnodeSubType: string
String yang mewakili subjenis simpulnodeStatus: string
String yang mewakili status simpullabel: string
Label untuk simpul seperti yang muncul di Object ExplorerisLeaf: boolean
Apakah simpul adalah node daun dan karenanya tidak memiliki anakmetadata: azdata.ObjectMetadata
Metadata yang menjelaskan objek yang diwakili oleh simpul inierrorMessage: string
Pesan ditampilkan jika simpul dalam status kesalahanisExpanded(): Thenable<boolean>
Apakah simpul saat ini diperluas di Object ExplorersetExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void>
Atur apakah simpul diperluas atau diciutkan. Simpul tidak akan diubah jika status diatur ke Tidak Ada.setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void>
Atur apakah simpul dipilih. JikaclearOtherSelections
benar, hapus pilihan lain saat membuat pilihan baru. Jika false, biarkan pilihan yang ada.clearOtherSelections
default ke true ketikaselected
true dan false ketikaselected
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 "subservices" .