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 bawahazdata.connection.Connection
objek tetapi dilucuti dari objek tersebut.
Connection
options: { [name: string]: string }
Kamus opsi koneksiproviderName: 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 akanundefined
mengembalikan . 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. Argumenschema
,database
, danparentObjectNames
harusundefined
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 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 tempat simpul ada di bawahnodePath: 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. Jika status diatur ke Tidak Ada, simpul tidak akan diubah.setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void>
Atur apakah simpul dipilih. JikaclearOtherSelections
benar, hapus pilihan lain saat membuat pilihan baru. Jika salah, 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 "sqlservices".
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk