Azure Data Studio 확장성 API
Azure Data Studio는 확장 프로그램이 개체 탐색기와 같은 Azure Data Studio의 다른 부분과 상호 작용하는 데 사용할 수 있는 API를 제공합니다. 이러한 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 }>
연결과 연결된 자격 증명을 포함하는 사전을 가져옵니다. 그렇지 않으면azdata.connection.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 Service 백 엔드에서 생성되며 직접 생성하기 어렵습니다. 향후 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
은 원하는 개체가 있는 데이터베이스가 아닌 부모 개체의 목록으로, 개체 탐색기에서 가장 높은 수준부터 가장 낮은 수준까지입니다. 예를 들어 연결 ID가connectionId
이고, "schema1.table1" 테이블 및 "database1" 데이터베이스에 속하는 "column1" 열을 검색할 경우findNodes(connectionId, 'Column', undefined, 'column1', 'database1', ['schema1.table1'])
을 호출합니다. 이 API 호출에 대해 Azure Data Studio가 기본적으로 지원하는 유형 목록도 참조하세요
ObjectExplorerNode
connectionId: string
노드가 있는 연결의 IDnodePath: 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
기본값은selected
가 true이면 true로,selected
가 false인 경우 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
확장에서 대화 상자, 마법사 및 문서 탭에 사용자 지정 UI를 표시할 수 있도록 제안된 API를 추가했습니다. 추가 설명서는 제안된 API 형식 파일을 참조하세요. 하지만 이러한 API는 언제든지 변경될 수 있습니다. 이러한 API 중 일부를 사용하는 방법의 예제는 "sqlservices" 샘플 확장에서 찾을 수 있습니다.