Bagikan melalui


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 objek data.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 mengembalikan undefined. 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. Argumen schema, database, dan parentObjectNames harus undefined 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 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 di mana simpul berada di bawahnya

  • 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. Simpul tidak akan diubah jika status diatur ke Tidak Ada.

  • setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void> Atur apakah simpul dipilih. Jika clearOtherSelections benar, hapus pilihan lain saat membuat pilihan baru. Jika false, 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 "subservices" .