Поделиться через


Интерфейсы API расширяемости Azure Data Studio

Важный

Azure Data Studio снимается с эксплуатации 28 февраля 2026 г.. Мы рекомендуем использовать Visual Studio Code. Дополнительные сведения о миграции в Visual Studio Code см. в Что происходит с Azure Data Studio?

Azure Data Studio предоставляет интерфейсы API, с помощью которых расширения могут взаимодействовать с другими компонентами Azure Data Studio, такими как обозреватель объектов. Эти интерфейсы API доступны в файле src/sql/azdata.d.ts и описываются ниже.

Управление подключениями

azdata.connection

Функции верхнего уровня для управления подключениями

  • getCurrentConnection(): Thenable<azdata.connection.Connection> — возвращает текущее подключение в соответствии с активным выбором в редакторе или обозревателе объектов.

  • getActiveConnections(): Thenable<azdata.connection.Connection[]> Возвращает список всех активных подключений пользователей. Если таких подключений нет, возвращается пустой список.

  • getCredentials(connectionId: string): Thenable<{ [name: string]: string }> — возвращает словарь, который содержит учетные данные, связанные с подключением. В противном случае они будут возвращены как часть словаря параметров в объекте data.connection.Connection, но удалены из этого объекта.

Связь

  • options: { [name: string]: string } — словарь параметров подключения.
  • providerName: string Имя поставщика подключений (например, MSSQL)
  • connectionId: string — уникальный идентификатор подключения.

Пример кода

> 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'
}

Обозреватель объектов

azdata.objectexplorer

Функции верхнего уровня для обозревателя объектов

  • getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode> — возвращает узел обозревателя объектов, соответствующий данному подключению и пути. Если путь не указан, возвращается узел верхнего уровня для данного подключения. Если на указанном пути нет узла, он возвращает undefined. Примечание. Объект nodePath создается серверной частью службы SQL Tools и сложно создать вручную. Будущие улучшения API позволяют получать узлы на основе метаданных, предоставляемых о узле, таких как имя, тип и схема.

  • getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode> — возвращает все активные узлы подключений в обозревателе объектов.

  • findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> — поиск всех узлов обозревателя объектов, соответствующих указанным метаданным. Аргументы schema, databaseи parentObjectNames должны быть undefined, если они не применимы. parentObjectNames — это список родительских объектов nondatabase, от самого высокого до самого низкого уровня в обозревателе объектов, под которым находится нужный объект. Например, для поиска столбца "column1", относящегося к таблице "schema1.table1" и базе данных "database1" с идентификатором подключения connectionId, выполните вызов findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1']). Кроме того, см. список типов, поддерживаемых по умолчанию в Azure Data Studio для этого вызова API.

ObjectExplorerNode

  • connectionId: string Идентификатор соединения, под которым находится узел

  • nodePath: string — путь к узлу, используемый для вызова функции getNode.

  • nodeType: string — строка, представляющая тип узла.

  • nodeSubType: string — строка, представляющая подтип узла.

  • nodeStatus: string — строка, представляющая состояние узла.

  • label: string — метка узла, отображаемая в обозревателе объектов.

  • isLeaf: boolean — является ли узел листовым, то есть не имеет дочерних узлов.

  • metadata: azdata.ObjectMetadata — метаданные, которые описывают объект, представленный этим узлом.

  • errorMessage: string — сообщение, которое выводится, если узел находится в состоянии ошибки.

  • isExpanded(): Thenable<boolean> — развернут ли узел в обозревателе объектов в настоящее время.

  • setExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void> — развертывание или свертывание узла. Узел не будет изменен, если для состояния задано значение None.

  • setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void> — задает состояние выбора узла. Если clearOtherSelections имеет значение true, при новом выборе текущий выбор отменяется. Если значение false, оставьте существующие выбранные элементы. clearOtherSelections по умолчанию имеет значение true, если selected имеет значение true, и false, если selected имеет значение false.

  • getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> — возвращает все дочерние узлы этого узла. Если дочерних узлов нет, возвращается пустой список.

  • getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode> — возвращает родительский узел этого узла. Возвращает неопределенное значение, если нет родительского элемента.

Пример кода

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

Мы добавили предлагаемые интерфейсы API, которые, помимо прочего, позволяют расширениям отображать настраиваемый пользовательский интерфейс в диалоговых окнах, мастерах и на вкладках документов. Ознакомьтесь с файлом предлагаемых типов API для получения дополнительных документаций, однако помните, что эти API могут изменяться в любое время. Примеры использования некоторых из этих API можно найти в примере расширения "подслужбы".