Compartilhar via


APIs de extensibilidade do Azure Data Studio

Importante

O Azure Data Studio será desativado em 28 de fevereiro de 2026. Recomendamos que você use Visual Studio Code. Para obter mais informações sobre como migrar para o Visual Studio Code, visite O que está acontecendo com o Azure Data Studio?

O Azure Data Studio fornece uma API que as extensões podem usar para interagir com outras partes do Azure Data Studio, como o Pesquisador de Objetos. Essas APIs estão disponíveis no arquivo src/sql/azdata.d.ts e são descritas abaixo.

Gerenciamento de conexões

azdata.connection

Funções de nível superior para gerenciamento de conexões

  • O getCurrentConnection(): Thenable<azdata.connection.Connection> obtém a conexão atual com base no editor ativo ou na seleção do Pesquisador de Objetos.

  • getActiveConnections(): Thenable<azdata.connection.Connection[]> Obtém uma lista de todas as conexões de usuário ativas. Retornará uma lista vazia se não houver essas conexões.

  • O getCredentials(connectionId: string): Thenable<{ [name: string]: string }> obtém um dicionário que contém as credenciais associadas a uma conexão. De outra forma, eles seriam retornados como parte do dicionário de opções em um objeto data.connection.Connection, mas retirados desse objeto.

Conexão

  • options: { [name: string]: string } O dicionário de opções de conexão
  • providerName: string O nome do provedor de conexão (por exemplo, "MSSQL")
  • connectionId: string O identificador exclusivo para a conexão

Código de exemplo

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

Pesquisador de Objetos

azdata.objectexplorer

Funções de nível superior para Pesquisador de Objetos

  • getNode(connectionId: string, nodePath?: string): Thenable<azdata.objectexplorer.ObjectExplorerNode> Obtenha um nó do Pesquisador de Objetos correspondente à conexão e ao caminho fornecidos. Se nenhum caminho for fornecido, ele retornará o nó de nível superior para a conexão especificada. Se não houver nenhum nó no caminho fornecido, ele retornará undefined. Observação: O nodePath para um objeto é gerado pelo back-end do Serviço de Ferramentas do SQL e é difícil de construir manualmente. Os futuros aprimoramentos de API permitem que você obtenha nós com base nos metadados fornecidos sobre o nó, como nome, tipo e esquema.

  • getActiveConnectionNodes(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Obter todos os nós de conexão ativa do Pesquisador de Objetos.

  • findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Localiza todos os nós do Pesquisador de Objetos que correspondem aos metadados especificados. Os argumentos schema, databasee parentObjectNames devem ser undefined quando não forem aplicáveis. parentObjectNames é uma lista de objetos pai que não são de banco de dados, do nível mais alto ao mais baixo no Pesquisador de Objetos, sob os quais o objeto desejado está localizado. Por exemplo, ao procurar uma coluna "column1" que pertença a uma tabela "schema1.table1" e ao banco de dados "database1" com a ID de conexão connectionId, chame findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1']). Confira também a lista de tipos compatíveis por padrão com o Azure Data Studio para essa chamada à API.

ObjectExplorerNode

  • connectionId: string A ID da conexão na qual o nó existe

  • nodePath: string O caminho do nó, conforme usado para chamar a função getNode.

  • nodeType: string Uma cadeia de caracteres que representa o tipo do nó

  • nodeSubType: string Uma cadeia de caracteres que representa o subtipo do nó

  • nodeStatus: string Uma cadeia de caracteres que representa o status do nó

  • label: string O rótulo do nó como ele aparece no Pesquisador de Objetos

  • isLeaf: boolean Se o nó é um nó folha e, portanto, não tem filhos

  • metadata: azdata.ObjectMetadata Metadados que descrevem o objeto representado por esse nó

  • errorMessage: string Mensagem mostrada se o nó está em um estado de erro

  • isExpanded(): Thenable<boolean> Se o nó está atualmente expandido no Pesquisador de Objetos

  • setExpandedState(expandedState: vscode.TreeItemCollapsibleState): Thenable<void> Defina se o nó está expandido ou recolhido. O nó não será alterado se o estado estiver definido como Nenhum.

  • setSelected(selected: boolean, clearOtherSelections?: boolean): Thenable<void> Defina se o nó está selecionado. Se clearOtherSelections for verdadeiro, desmarque as outras seleções ao fazer a nova seleção. Se for falso, deixe as seleções existentes. clearOtherSelections usa verdadeiro como padrão quando selected é verdadeiro e falso quando selected é falso.

  • getChildren(): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Obtenha todos os nós filho deste nó. Retornará uma lista vazia se não houver nenhum filho.

  • getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Obtenha o nó pai deste nó. Retornará indefinido se não houver nenhum pai.

Código de exemplo

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);
 });
 });
});

APIs propostas

Adicionamos APIs propostas para permitir que as extensões exibam a interface do usuário personalizada em caixas de diálogo, assistentes e guias de documentos, entre outros recursos. Consulte o arquivo de tipos de API propostos para obter mais documentações, embora esteja ciente de que essas APIs estão sujeitas a alterações a qualquer momento. Exemplos de como usar algumas dessas APIs podem ser encontrados na extensão de exemplo "subsserviços".