Partilhar 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 src/sql/azdata.d.ts arquivo e são descritas abaixo.

Gestão de ligações

azdata.connection

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

  • 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. Retorna uma lista vazia se não houver tais conexões.

  • getCredentials(connectionId: string): Thenable<{ [name: string]: string }> Obtém um dicionário contendo as credenciais associadas a uma conexão. Caso contrário, eles seriam retornados como parte do dicionário de opções sob um objeto data.connection.Connection, mas removidos desse objeto.

Ligaçã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 da 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'
}

Object Explorer

azdata.objectexplorer

Funções de nível superior para o 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 fornecida. Se não houver nenhum nó no caminho determinado, ele retornará undefined. Nota: O nodePath para um objeto é gerado pelo back-end do Serviço de Ferramentas SQL e é difícil de construir manualmente. Melhorias futuras da API permitem obter nós com base nos metadados fornecidos sobre o nó, como nome, tipo e esquema.

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

  • findNodes(connectionId: string, type: string, schema: string, name: string, database: string, parentObjectNames: string[]): Thenable<azdata.objectexplorer.ObjectExplorerNode[]> Localize todos os nós do Pesquisador de Objetos que correspondem aos metadados fornecidos. 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 se encontra. Por exemplo, ao procurar uma coluna "column1" que pertence a uma tabela "schema1.table1" e banco de dados "database1" com ID connectionIdde conexão , chame findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1']). Consulte também a lista de tipos que o Azure Data Studio suporta por padrão para esta chamada de API.

ObjectExplorerNode

  • connectionId: string A identificação da ligação sob a qual o nó existe

  • nodePath: string O caminho do nó, como usado para uma chamada para a getNode função.

  • 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 este nó

  • errorMessage: string Mensagem mostrada se o nó estiver 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 verdade, limpe quaisquer outras seleções ao fazer a nova seleção. Se for falso, deixe quaisquer seleções existentes. clearOtherSelections padrão para true quando selected é true e false quando selected é false.

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

  • getParent(): Thenable<azdata.objectexplorer.ObjectExplorerNode> Obtenha o nó pai deste nó. Retorna indefinido se não houver 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ção, embora deva ter em atenção que estas 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 «subserviços» .