Make azure portal work from server area (#10699)

This commit is contained in:
Amir Omidi
2020-06-03 14:02:23 -07:00
committed by GitHub
parent 61dce39f5a
commit 3860f07cab
4 changed files with 74 additions and 13 deletions

View File

@@ -238,18 +238,13 @@ export function registerAzureResourceCommands(appContext: AppContext, tree: Azur
} }
}); });
appContext.apiWrapper.registerCommand('azure.resource.openInAzurePortal', async (node?: TreeNode) => { appContext.apiWrapper.registerCommand('azure.resource.openInAzurePortal', async (connectionProfile: azdata.IConnectionProfile) => {
if (!node) {
return;
}
const treeItem: azdata.TreeItem = await node.getTreeItem(); if (
if (!treeItem.payload) { !connectionProfile.azureResourceId ||
return; !connectionProfile.azurePortalEndpoint ||
} !connectionProfile.azureTenantId
let connectionProfile = Object.assign({}, treeItem.payload, { saveProfile: true }); ) {
if (!connectionProfile.azureResourceId) {
return; return;
} }

View File

@@ -43,6 +43,8 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
this._id = model.id; this._id = model.id;
this.azureTenantId = model.azureTenantId; this.azureTenantId = model.azureTenantId;
this.azureAccount = model.azureAccount; this.azureAccount = model.azureAccount;
this.azureResourceId = model.azureResourceId;
this.azurePortalEndpoint = model.azurePortalEndpoint;
if (this.capabilitiesService && model.providerName) { if (this.capabilitiesService && model.providerName) {
let capabilities = this.capabilitiesService.getCapabilities(model.providerName); let capabilities = this.capabilitiesService.getCapabilities(model.providerName);
if (capabilities && capabilities.connection && capabilities.connection.connectionOptions) { if (capabilities && capabilities.connection && capabilities.connection.connectionOptions) {
@@ -125,6 +127,22 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
this.options['azureAccount'] = value; this.options['azureAccount'] = value;
} }
public get azurePortalEndpoint() {
return this.options['azurePortalEndpoint'];
}
public set azurePortalEndpoint(value: string | undefined) {
this.options['azurePortalEndpoint'] = value;
}
public get azureResourceId() {
return this.options['azureResourceId'];
}
public set azureResourceId(value: string | undefined) {
this.options['azureResourceId'] = value;
}
public get registeredServerDescription(): string { public get registeredServerDescription(): string {
return this.options['registeredServerDescription']; return this.options['registeredServerDescription'];
} }
@@ -210,7 +228,9 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
saveProfile: this.saveProfile, saveProfile: this.saveProfile,
id: this.id, id: this.id,
azureTenantId: this.azureTenantId, azureTenantId: this.azureTenantId,
azureAccount: this.azureAccount azureAccount: this.azureAccount,
azurePortalEndpoint: this.azurePortalEndpoint,
azureResourceId: this.azureResourceId
}; };
return result; return result;

View File

@@ -5,14 +5,45 @@
import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions'; import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { MssqlNodeContext } from 'sql/workbench/services/objectExplorer/browser/mssqlNodeContext'; import { MssqlNodeContext } from 'sql/workbench/services/objectExplorer/browser/mssqlNodeContext';
import { ConnectionContextKey } from 'sql/workbench/services/connection/common/connectionContextKey';
import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands';
import { TreeViewItemHandleArg } from 'sql/workbench/common/views';
import { ObjectExplorerActionsContext } from 'sql/workbench/services/objectExplorer/browser/objectExplorerActions';
const openInAzureDECommandId: string = 'azure.openInAzureCoreDE';
MenuRegistry.appendMenuItem(MenuId.DataExplorerContext, { MenuRegistry.appendMenuItem(MenuId.DataExplorerContext, {
group: 'z-azurecore', group: 'z-azurecore',
order: 1, order: 1,
command: { command: {
id: 'azure.resource.openInAzurePortal', id: openInAzureDECommandId,
title: localize('azure.openInAzurePortal.title', "Open in Azure Portal") title: localize('azure.openInAzurePortal.title', "Open in Azure Portal")
}, },
when: MssqlNodeContext.CanOpenInAzurePortal when: MssqlNodeContext.CanOpenInAzurePortal
}); });
CommandsRegistry.registerCommand({
id: openInAzureDECommandId,
handler: (accessor, args: TreeViewItemHandleArg) => {
const commandService = accessor.get(ICommandService);
return commandService.executeCommand('azure.resource.openInAzurePortal', args.$treeItem.payload);
}
});
const openInAzureOECommandId: string = 'azure.openInAzureCoreOE';
MenuRegistry.appendMenuItem(MenuId.ObjectExplorerItemContext, {
group: 'z-azurecore',
order: 1,
command: {
id: openInAzureOECommandId,
title: localize('azure.openInAzurePortal.title', "Open in Azure Portal")
},
when: ConnectionContextKey.CanOpenInAzurePortal
});
CommandsRegistry.registerCommand({
id: openInAzureOECommandId,
handler: (accessor, args: ObjectExplorerActionsContext) => {
const commandService = accessor.get(ICommandService);
return commandService.executeCommand('azure.resource.openInAzurePortal', args.connectionProfile);
}
});

View File

@@ -14,12 +14,15 @@ export class ConnectionContextKey implements IContextKey<IConnectionProfile> {
static Database = new RawContextKey<string>('databaseName', undefined); static Database = new RawContextKey<string>('databaseName', undefined);
static Connection = new RawContextKey<IConnectionProfile>('connection', undefined); static Connection = new RawContextKey<IConnectionProfile>('connection', undefined);
static IsQueryProvider = new RawContextKey<boolean>('isQueryProvider', false); static IsQueryProvider = new RawContextKey<boolean>('isQueryProvider', false);
static CanOpenInAzurePortal = new RawContextKey<boolean>('canOpenInAzurePortal', false);
private _providerKey: IContextKey<string>; private _providerKey: IContextKey<string>;
private _serverKey: IContextKey<string>; private _serverKey: IContextKey<string>;
private _databaseKey: IContextKey<string>; private _databaseKey: IContextKey<string>;
private _connectionKey: IContextKey<IConnectionProfile>; private _connectionKey: IContextKey<IConnectionProfile>;
private _isQueryProviderKey: IContextKey<boolean>; private _isQueryProviderKey: IContextKey<boolean>;
private _canOpenInAzurePortal: IContextKey<boolean>;
constructor( constructor(
@IContextKeyService contextKeyService: IContextKeyService, @IContextKeyService contextKeyService: IContextKeyService,
@@ -30,9 +33,11 @@ export class ConnectionContextKey implements IContextKey<IConnectionProfile> {
this._databaseKey = ConnectionContextKey.Database.bindTo(contextKeyService); this._databaseKey = ConnectionContextKey.Database.bindTo(contextKeyService);
this._connectionKey = ConnectionContextKey.Connection.bindTo(contextKeyService); this._connectionKey = ConnectionContextKey.Connection.bindTo(contextKeyService);
this._isQueryProviderKey = ConnectionContextKey.IsQueryProvider.bindTo(contextKeyService); this._isQueryProviderKey = ConnectionContextKey.IsQueryProvider.bindTo(contextKeyService);
this._canOpenInAzurePortal = ConnectionContextKey.CanOpenInAzurePortal.bindTo(contextKeyService);
} }
set(value: IConnectionProfile) { set(value: IConnectionProfile) {
this.setCanOpenInPortal(value);
let queryProviders = this.queryManagementService.getRegisteredProviders(); let queryProviders = this.queryManagementService.getRegisteredProviders();
this._connectionKey.set(value); this._connectionKey.set(value);
this._providerKey.set(value && value.providerName); this._providerKey.set(value && value.providerName);
@@ -41,12 +46,22 @@ export class ConnectionContextKey implements IContextKey<IConnectionProfile> {
this._isQueryProviderKey.set(value && value.providerName && queryProviders.indexOf(value.providerName) !== -1); this._isQueryProviderKey.set(value && value.providerName && queryProviders.indexOf(value.providerName) !== -1);
} }
private setCanOpenInPortal(connectionProfile: IConnectionProfile): void {
if (connectionProfile &&
connectionProfile.azureResourceId &&
connectionProfile.azureTenantId &&
connectionProfile.azurePortalEndpoint) {
this._canOpenInAzurePortal.set(true);
}
}
reset(): void { reset(): void {
this._providerKey.reset(); this._providerKey.reset();
this._serverKey.reset(); this._serverKey.reset();
this._databaseKey.reset(); this._databaseKey.reset();
this._connectionKey.reset(); this._connectionKey.reset();
this._isQueryProviderKey.reset(); this._isQueryProviderKey.reset();
this._canOpenInAzurePortal.reset();
} }
public get(): IConnectionProfile { public get(): IConnectionProfile {