Utöknings-API:er för Azure Data Studio
Azure Data Studio tillhandahåller ett API som tillägg kan använda för att interagera med andra delar av Azure Data Studio, till exempel Object Explorer. Dessa API:er är tillgängliga från src/sql/azdata.d.ts
filen och beskrivs nedan.
Anslutningshantering
azdata.connection
Funktioner på toppnivå
getCurrentConnection(): Thenable<azdata.connection.Connection>
Hämtar den aktuella anslutningen baserat på det aktiva redigeringsprogrammet eller objektutforskarens val.getActiveConnections(): Thenable<azdata.connection.Connection[]>
Hämtar en lista över alla användares anslutningar som är aktiva. Returnerar en tom lista om det inte finns några sådana anslutningar.getCredentials(connectionId: string): Thenable<{ [name: string]: string }>
Hämtar en ordlista som innehåller de autentiseringsuppgifter som är associerade med en anslutning. Dessa skulle annars returneras som en del av alternativordlistan under ettazdata.connection.Connection
objekt men tas bort från objektet.
Connection
options: { [name: string]: string }
Ordlistan med anslutningsalternativproviderName: string
Namnet på anslutningsprovidern (t.ex. "MSSQL")connectionId: string
Den unika identifieraren för anslutningen
Exempelkod
> 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'
}
Object Explorer
azdata.objectexplorer
Funktioner på toppnivå
getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Hämta en Object Explorer-nod som motsvarar den angivna anslutningen och sökvägen. Om ingen sökväg anges returnerar den noden på den översta nivån för den angivna anslutningen. Om det inte finns någon nod vid den angivna sökvägen returnerasundefined
.nodePath
Obs! För ett objekt genereras av SQL Tools Service-serverdelen och är svår att konstruera för hand. Framtida API-förbättringar gör att du kan hämta noder baserat på metadata som du anger om noden, till exempel namn, typ och schema.getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Hämta alla aktiva Object Explorer-anslutningsnoder.findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>
Hitta alla Object Explorer-noder som matchar angivna metadata. Argumentenschema
,database
ochparentObjectNames
bör varaundefined
när de inte är tillämpliga.parentObjectNames
är en lista över överordnade objekt som inte är överordnad databas, från den högsta till den lägsta nivån i Object Explorer, som önskat objekt är under. När du till exempel söker efter en kolumn "column1" som tillhör tabellen "schema1.table1" och databasen "database1" med anslutnings-IDconnectionId
anropar dufindNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1'])
. Se även listan över typer som Azure Data Studio stöder som standard för det här API-anropet.
ObjectExplorerNode
connectionId: string
ID:t för anslutningen som noden finns undernodePath: string
Sökvägen till noden, som används för ett anrop tillgetNode
funktionen.nodeType: string
En sträng som representerar nodens typnodeSubType: string
En sträng som representerar nodens undertypnodeStatus: string
En sträng som representerar nodens statuslabel: string
Etiketten för noden som den visas i Object ExplorerisLeaf: boolean
Om noden är en lövnod och därför inte har några underordnademetadata: azdata.ObjectMetadata
Metadata som beskriver objektet som representeras av den här nodenerrorMessage: string
Meddelande som visas om noden är i ett feltillståndisExpanded(): Thenable<boolean>
Om noden för närvarande är expanderad i Object ExplorersetExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void>
Ange om noden ska expanderas eller komprimeras. Om tillståndet är inställt på Ingen ändras inte noden.setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void>
Ange om noden är markerad. OmclearOtherSelections
är sant avmarkerar du alla andra val när du gör det nya valet. Om det är falskt lämnar du alla befintliga val.clearOtherSelections
standardvärdet är sant närselected
är sant och falskt närselected
är falskt.getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>
Hämta alla underordnade noder i den här noden. Returnerar en tom lista om det inte finns några underordnade objekt.getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Hämta den överordnade noden för den här noden. Returnerar odefinierat om det inte finns någon överordnad.
Exempelkod
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);
});
});
});
Föreslagna API:er
Vi har lagt till föreslagna API:er så att tillägg kan visa anpassat användargränssnitt i dialogrutor, guider och dokumentflikar, bland andra funktioner. Mer dokumentation finns i den föreslagna API-typfilen , men tänk på att dessa API:er kan komma att ändras när som helst. Exempel på hur du använder några av dessa API:er finns i exempeltillägget "sqlservices".