API d’extensibilité d’Azure Data Studio
Important
Azure Data Studio sera mis hors service le 28 février 2026. Nous vous recommandons d’utiliser Visual Studio Code. Pour plus d’informations sur la migration vers Visual Studio Code, visitez Qu’est-ce qui se passe dans 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 pour la gestion des connexions
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 utilisateur 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. Dans le cas contraire, elles seraient renvoyées en tant que partie du dictionnaire d’options sous un objetdata.connection.Connection
, mais elles seraient retirées de cet objet.
Connexion
options: { [name: string]: string }
Dictionnaire des options de connexionproviderName: string
Le nom du fournisseur de connexions (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 pour l’Explorateur d’objets
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 au niveau du chemin 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 améliorations futures de l’API vous permettent d’obtenir des nœuds en fonction des métadonnées que vous fournissez sur le nœud, comme 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 non base de données, du niveau le plus élevé au plus bas dans l’Explorateur d’objets, sous laquelle 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 sous 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. Le nœud ne sera pas modifié si l’état est défini sur Aucun.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, elle laisse 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 une valeur non définie s’il n’y a pas de 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. Consultez le fichier de types d’API proposés pour plus de documentations, mais sachez que ces API sont susceptibles de changer à tout moment. Vous trouverez des exemples d’utilisation de certaines de ces API dans l’exemple d’extension « sous-services ».