Rozhraní API rozšiřitelnosti nástroje Azure Data Studio
Azure Data Studio poskytuje rozhraní API, které rozšíření můžou používat k interakci s dalšími částmi nástroje Azure Data Studio, jako je například Průzkumník objektů. Tato rozhraní API jsou k dispozici v src/sql/azdata.d.ts
souboru a jsou popsána níže.
Správa připojení
azdata.connection
Funkce nejvyšší úrovně
getCurrentConnection(): Thenable<azdata.connection.Connection>
Získá aktuální připojení na základě aktivního editoru nebo Průzkumník objektů výběru.getActiveConnections(): Thenable<azdata.connection.Connection[]>
Získá seznam všech připojení uživatele, která jsou aktivní. Vrátí prázdný seznam, pokud taková připojení neexistují.getCredentials(connectionId: string): Thenable<{ [name: string]: string }>
Získá slovník obsahující přihlašovací údaje přidružené k připojení. Jinak by se tyto hodnoty vrátily jako součást slovníku možností v rámci objektuazdata.connection.Connection
, ale z tohoto objektu by se odebraly.
Connection
options: { [name: string]: string }
Slovník možností připojeníproviderName: string
Název poskytovatele připojení (např. MSSQL)connectionId: string
Jedinečný identifikátor připojení
Příklad kódu
> 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'
}
Průzkumník objektů
azdata.objectexplorer
Funkce nejvyšší úrovně
getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Získejte Průzkumník objektů uzel odpovídající danému připojení a cestě. Pokud není k dispozici žádná cesta, vrátí uzel nejvyšší úrovně pro dané připojení. Pokud v dané cestě není žádný uzel, vrátí hodnotuundefined
. Poznámka: ObjektnodePath
pro objekt je generován back-endem služby SQL Tools Service a je obtížné sestavit ručně. Budoucí vylepšení rozhraní API vám umožní získat uzly na základě metadat, která poskytnete o uzlu, jako je název, typ a schéma.getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Získejte všechny aktivní Průzkumník objektů uzly připojení.findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>
Vyhledejte všechny uzly Průzkumník objektů, které odpovídají zadaným metadatům. Argumentyschema
,database
aparentObjectNames
argumenty by měly býtundefined
, pokud nejsou použitelné.parentObjectNames
je seznam nadřazených objektů mimo databázi, od nejvyšší po nejnižší úroveň v Průzkumník objektů, že požadovaný objekt je pod. Například při hledání sloupce "column1", který patří do tabulky "schema1.table1" a databáze "database1" s IDconnectionId
připojení , volánífindNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1'])
. Podívejte se také na seznam typů, které Azure Data Studio ve výchozím nastavení podporuje pro toto volání rozhraní API.
ObjectExplorerNode
connectionId: string
ID připojení, ve které uzel existujenodePath: string
Cesta uzlu, jak se používá pro volánígetNode
funkce.nodeType: string
Řetězec představující typ uzlunodeSubType: string
Řetězec představující podtyp uzlunodeStatus: string
Řetězec představující stav uzlulabel: string
Popisek uzlu, který se zobrazí v Průzkumník objektůisLeaf: boolean
Určuje, jestli je uzel listovým uzlem, a proto nemá žádné podřízené položky.metadata: azdata.ObjectMetadata
Metadata popisující objekt reprezentovaný tímto uzlemerrorMessage: string
Zpráva zobrazená v případě, že je uzel v chybovém stavuisExpanded(): Thenable<boolean>
Jestli je uzel aktuálně rozbalený v Průzkumník objektůsetExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void>
Nastavte, jestli je uzel rozbalený nebo sbalený. Pokud je stav nastaven na Žádné, uzel se nezmění.setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void>
Nastavte, zda je uzel vybrán. PokudclearOtherSelections
je true, zrušte při vytváření nového výběru všechny ostatní výběry. Pokud je false, ponechte všechny existující výběry.clearOtherSelections
výchozí hodnota true, pokudselected
je true a false, pokudselected
je false.getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>
Získejte všechny podřízené uzly tohoto uzlu. Vrátí prázdný seznam, pokud neexistují žádné podřízené položky.getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Získejte nadřazený uzel tohoto uzlu. Vrátí nedefinovanou hodnotu, pokud neexistuje žádný nadřazený objekt.
Příklad kódu
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);
});
});
});
Navrhovaná rozhraní API
Přidali jsme navrhovaná rozhraní API, která mimo jiné umožňují rozšířením zobrazovat vlastní uživatelské rozhraní v dialogových oknech, průvodcích a kartách dokumentů. Další dokumentaci najdete v souboru navrhovaných typů rozhraní API, ale mějte na paměti, že tato rozhraní API se můžou kdykoli změnit. Příklady použití některých z těchto rozhraní API najdete v ukázkovém rozšíření sqlservices.