Erweiterbarkeits-APIs für Azure Data Studio
Azure Data Studio bietet eine API, mit der Erweiterungen mit anderen Teilen von Azure Data Studio interagieren können, z. B. dem Objekt-Explorer. Diese APIs sind in der src/sql/azdata.d.ts
-Datei verfügbar und werden nachfolgend beschrieben.
Verbindungsverwaltung
azdata.connection
Funktionen der obersten Ebene
getCurrentConnection(): Thenable<azdata.connection.Connection>
Ruft die aktuelle Verbindung auf Grundlage des aktiven Editors oder der Objekt-Explorer-Auswahl ab.getActiveConnections(): Thenable<azdata.connection.Connection[]>
Ruft eine Liste aller aktiven Verbindungen des Benutzers ab. Gibt eine leere Liste zurück, wenn keine solchen Verbindungen vorhanden sind.getCredentials(connectionId: string): Thenable<{ [name: string]: string }>
Ruft ein Wörterbuch ab, das die einer Verbindung zugeordneten Anmeldeinformationen enthält. Diese würden andernfalls als Teil des Optionswörterbuchs unter einemazdata.connection.Connection
-Objekt zurückgegeben, aber aus diesem Objekt entfernt werden.
Connection
options: { [name: string]: string }
Das Wörterbuch der VerbindungsoptionenproviderName: string
Der Name des Verbindungsanbieters (z.B. „MSSQL“)connectionId: string
Der eindeutige Bezeichner für die Verbindung
Beispielcode
> 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'
}
Objekt-Explorer
azdata.objectexplorer
Funktionen der obersten Ebene
getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Abrufen eines Objekt-Explorer-Knotens, der der angegebenen Verbindung und dem angegebenen Pfad entspricht. Wenn kein Pfad angegeben wird, wird der Knoten der obersten Ebene für die angegebene Verbindung zurückgegeben. Wenn im angegebenen Pfad kein Knoten vorhanden ist, wirdundefined
zurückgegeben. Hinweis: DernodePath
für ein Objekt wird vom SQL Tools Service-Back-End generiert und ist schwer manuell zu konstruieren. Zukünftige API-Verbesserungen werden Ihnen ermöglichen, Knoten basierend auf Metadaten abzurufen, die Sie über den Knoten angeben, z.B. Name, Typ und Schema.getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Abrufen aller aktiven Objekt-Explorer-Verbindungsknoten.findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>
Suchen aller Objekt-Explorer-Knoten, die den angegebenen Metadaten entsprechen. Die Argumenteschema
,database
undparentObjectNames
solltenundefined
sein, wenn sie nicht anwendbar sind.parentObjectNames
ist eine Liste im Objekt-Explorer von übergeordneten Nicht-Datenbank-Objekten, unter denen sich das gewünschte Objekt befindet, von der höchsten bis zur niedrigsten Ebene. Wenn Sie z.B. nach der Spalte „column1“ suchen, die zur Tabelle „schema1.table1“ und der Datenbank „database1“ mit Verbindungs-IDconnectionId
gehört, rufen SiefindNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1'])
auf. Beachten Sie auch die Liste der Typen, die Azure Data Studio standardmäßig für diesen API-Aufruf unterstützt.
ObjectExplorerNode
connectionId: string
Die ID der Verbindung, unter der der Knoten vorhanden ist.nodePath: string
Der Pfad des Knotens, der für einen Aufruf dergetNode
-Funktion verwendet wird.nodeType: string
Eine Zeichenfolge, die den Typ des Knotens darstellt.nodeSubType: string
Eine Zeichenfolge, die den Untertyp des Knotens darstellt.nodeStatus: string
Eine Zeichenfolge, die den Status des Knotens darstellt.label: string
Die Bezeichnung für den Knoten, die im Objekt-Explorer angezeigt wird.isLeaf: boolean
Gibt an, ob der Knoten ein Blattknoten ist und daher keine untergeordneten Elemente aufweist.metadata: azdata.ObjectMetadata
Metadaten, die das von diesem Knoten dargestellte Objekt beschreiben.errorMessage: string
Meldung, die angezeigt wird, wenn sich der Knoten in einem Fehlerzustand befindet.isExpanded(): Thenable<boolean>
Gibt an, ob der Knoten derzeit im Objekt-Explorer erweitert ist.setExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void>
Festlegen, ob der Knoten erweitert oder reduziert wird. Wenn der Status auf „None“ (Keine) festgelegt ist, wird der Knoten nicht geändert.setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void>
Festlegen, ob der Knoten ausgewählt ist. WennclearOtherSelections
„true“ ist, löschen Sie jede andere Auswahl, wenn Sie die neue Auswahl treffen. Wenn der Wert „false“ ist, behalten Sie jede vorhandene Auswahl bei.clearOtherSelections
hat den Standardwert „true“, wennselected
„true“ ist, und „false“, wennselected
„false“ ist.getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>
Abrufen aller untergeordneten Knoten dieses Knotens. Gibt eine leere Liste zurück, wenn keine untergeordneten Knoten vorhanden sind.getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Abrufen des übergeordneten Knotens dieses Knotens. Gibt „undefined“ (undefiniert) zurück, wenn kein übergeordneter Knoten vorhanden ist.
Beispielcode
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);
});
});
});
Vorgeschlagene APIs
Wir haben vorgeschlagene APIs hinzugefügt, um Erweiterungen neben anderen Funktionen die Anzeige benutzerdefinierter Benutzeroberflächen in Dialogfeldern, Assistenten und Dokumentregisterkarten zu ermöglichen. Weitere Dokumentation finden Sie in der Datei der vorgeschlagenen API-Typen. Beachten Sie jedoch, dass diese APIs jederzeit geändert werden können. Beispiele für die Verwendung einiger dieser APIs finden Sie in der Beispielerweiterung „sqlservices“.