API d’extensibilité d’Azure Data Studio
Azure Data Studio fournit une API que les extensions peuvent utiliser pour interagir avec d’autres parties d’Azure Data Studio, telles que l’Explorateur d’objets. Ces API sont disponibles à partir du fichier src/sql/azdata.d.ts
et sont décrites ci-dessous.
Gestion des connexions
azdata.connection
Fonctions de niveau supérieur
getCurrentConnection(): Thenable<azdata.connection.Connection>
Obtient la connexion actuelle en fonction de l’éditeur actif ou de la sélection de l’Explorateur d’objets.getActiveConnections(): Thenable<azdata.connection.Connection[]>
Obtient une liste de toutes les connexions de l’utilisateur qui sont actives. Retourne une liste vide s’il n’existe aucune connexion de ce type.getCredentials(connectionId: string): Thenable<{ [name: string]: string }>
Obtient un dictionnaire contenant les informations d’identification associées à une connexion. Elles seraient sinon renvoyées dans le dictionnaire d’options sous un objetazdata.connection.Connection
, mais supprimées de cet objet.
Connection
options: { [name: string]: string }
Dictionnaire des options de connexionproviderName: string
Nom du fournisseur de connexion (par exemple « mssql »)connectionId: string
Identificateur unique pour la connexion
Exemple de code
> 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'
}
Explorateur d’objets
azdata.objectexplorer
Fonctions de niveau supérieur
getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Obtient un nœud de l’Explorateur d’objets correspondant à la connexion et au chemin d’accès donnés. Si aucun chemin d’accès n’est fourni, retourne le nœud de niveau supérieur pour la connexion donnée. S’il n’y a aucun nœud dans le chemin d’accès donné, il retourneundefined
. Remarque : LenodePath
pour un objet est généré par le backend du service Outils SQL et est difficile à construire manuellement. Les futures améliorations de l’API vous permettront d’obtenir des nœuds basés sur les métadonnées que vous fournissez sur le nœud, telles que le nom, le type et le schéma.getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Obtient tous les nœuds de connexion actifs de l’Explorateur d’objets.findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>
Recherche tous les nœuds de l’Explorateur d’objets qui correspondent aux métadonnées fournies. Les argumentsschema
,database
etparentObjectNames
doivent êtreundefined
lorsqu’ils ne sont pas applicables.parentObjectNames
est une liste d’objets parents qui ne sont pas des bases de données, du plus haut au plus bas niveau de l’Explorateur d’objets, sous lesquels se trouve l’objet souhaité. Par exemple, lors de la recherche d’une colonne « Column1 » qui appartient à une table « schema1.table1» et à la base de données « Database1 » avec l’ID de connexionconnectionId
, appelezfindNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1'])
. Consultez également la liste des types qu’Azure Data Studio prend en charge par défaut pour cet appel d’API.
ObjectExplorerNode
connectionId: string
ID de la connexion dans laquelle le nœud existenodePath: string
Chemin d’accès du nœud, tel qu’il est utilisé pour un appel à la fonctiongetNode
.nodeType: string
Chaîne représentant le type du nœudnodeSubType: string
Chaîne représentant le sous-type du nœudnodeStatus: string
Chaîne représentant l’état du nœudlabel: string
L’étiquette du nœud tel qu’elle apparaît dans l’Explorateur d’objetsisLeaf: boolean
Si le nœud est un nœud terminal et n’a donc pas d’enfantsmetadata: azdata.ObjectMetadata
Métadonnées décrivant l’objet représenté par ce nœuderrorMessage: string
Message affiché si le nœud est dans un état d’erreurisExpanded(): Thenable<boolean>
Si le nœud est actuellement développé dans l’Explorateur d’objetssetExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void>
Définit si le nœud est développé ou réduit. Si l’état est défini sur None, le nœud ne sera pas modifié.setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void>
Définit si le nœud est sélectionné. SiclearOtherSelections
a la valeur true, effacez toutes les autres sélections lors de la création de la nouvelle sélection. Si la valeur est false, laissez les sélections existantes.clearOtherSelections
prend la valeur true par défaut quandselected
est true, et false lorsqueselected
a la valeur false.getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]>
Obtient tous les nœuds enfants de ce nœud. Retourne une liste vide s’il n’y a pas d’enfants.getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode>
Obtient le nœud parent de ce nœud. Retourne undefined s’il n’y a aucun parent.
Exemple de code
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 proposées
Nous avons ajouté des API proposées pour permettre aux extensions d’afficher une interface utilisateur personnalisée dans des boîtes de dialogue, des assistants et des onglets de document, entre autres fonctionnalités. Pour plus d’informations, consultez le fichier des types d’API proposées, mais gardez à l’esprit que ces API sont susceptibles d’être modifiées à tout moment. Vous trouverez des exemples d’utilisation de certaines de ces API dans l’exemple d’extension « sqlservices ».