Aasim/fix/sqldbtypos (#13130)

* fixed some easy typos on sql db wizard.

* Fixed some instructions in the notebook

* - Added option to enable or disable firewall rules

* converted toggle firewall dropdown to checkbox
This commit is contained in:
Aasim Khan
2020-10-29 11:53:56 -07:00
committed by GitHub
parent 66da2a46c5
commit e15ad17967
10 changed files with 142 additions and 75 deletions

View File

@@ -2,7 +2,8 @@
"metadata": { "metadata": {
"kernelspec": { "kernelspec": {
"name": "python3", "name": "python3",
"display_name": "Python 3" "display_name": "Python 3",
"language": "python"
}, },
"language_info": { "language_info": {
"name": "python", "name": "python",
@@ -29,7 +30,7 @@
"Steps of this procedure include:\n", "Steps of this procedure include:\n",
"1. Set variables and set up Notebook\n", "1. Set variables and set up Notebook\n",
"1. Connect to Azure account and subscription\n", "1. Connect to Azure account and subscription\n",
"1. Provision firewall rules to allow local access\n", "1. Provision firewall rules\n",
"1. Create SQL database resource" "1. Create SQL database resource"
], ],
"metadata": { "metadata": {
@@ -78,7 +79,7 @@
" try:\n", " try:\n",
" return json.loads(output)\n", " return json.loads(output)\n",
" except:\n", " except:\n",
" return output\r\n", " return output\r\n"
], ],
"metadata": { "metadata": {
"azdata_cell_guid": "c320ffe2-c488-4bd8-9886-c7deeae02996", "azdata_cell_guid": "c320ffe2-c488-4bd8-9886-c7deeae02996",
@@ -149,7 +150,8 @@
{ {
"cell_type": "code", "cell_type": "code",
"source": [ "source": [
"create_firewall_rule_result = run_command(\r\n", "if azure_sqldb_enable_firewall_rule == True:\r\n",
" create_firewall_rule_result = run_command(\r\n",
" 'az sql server firewall-rule create '\r\n", " 'az sql server firewall-rule create '\r\n",
" '--start-ip-address {0} '\r\n", " '--start-ip-address {0} '\r\n",
" '--end-ip-address {1} '\r\n", " '--end-ip-address {1} '\r\n",
@@ -172,9 +174,9 @@
{ {
"cell_type": "markdown", "cell_type": "markdown",
"source": [ "source": [
"## Create Azure SQL Database\r\n", "## Create Azure SQL Database\n",
"\r\n", "\n",
"The database will be created based on all the settings previously specified. [Learn more](https://docs.microsoft.com/en-us/cli/azure/sql/db?view=azure-cli-latest#az_sql_db_create) about additonal options for creating the database." "Learn more about the different [cost and performance options](https://go.microsoft.com/fwlink/?linkid=842067) and [other additional customizations](https://go.microsoft.com/fwlink/?linkid=2147212) for creating the database"
], ],
"metadata": { "metadata": {
"azdata_cell_guid": "b460ca8f-65a7-4d6c-94b7-6d7dd9655fad" "azdata_cell_guid": "b460ca8f-65a7-4d6c-94b7-6d7dd9655fad"

View File

@@ -70,10 +70,10 @@
"azure-sqlvm-password-label": "Password", "azure-sqlvm-password-label": "Password",
"azure-sqlvm-password-confirm-label": "Confirm password", "azure-sqlvm-password-confirm-label": "Confirm password",
"azure-sqlvm-vm-summary-page-label": "Summary", "azure-sqlvm-vm-summary-page-label": "Summary",
"azure-sqldb-display-name": "SQL Database on Azure Server", "azure-sqldb-display-name": "Azure SQL Database",
"azure-sqldb-description": "Create SQL Databases on Azure. Best for new applications or existing on-premises applications.", "azure-sqldb-description": "Create a SQL database, database server, or elastic pool in Azure.",
"azure-sqldb-portal-ok-button-text": "Create in Azure portal", "azure-sqldb-portal-ok-button-text": "Create in Azure portal",
"azure-sqldb-notebook-ok-button-text": "Script to Notebook", "azure-sqldb-notebook-ok-button-text": "Select",
"resource-type-display-name": "Resource Type", "resource-type-display-name": "Resource Type",
"sql-azure-single-database-display-name": "Single Database", "sql-azure-single-database-display-name": "Single Database",
"sql-azure-elastic-pool-display-name": "Elastic Pool", "sql-azure-elastic-pool-display-name": "Elastic Pool",

View File

@@ -20,6 +20,8 @@ export const kubeConfigFilePath = localize('kubeConfigClusterPicker.kubeConfigFi
export const clusterContextNotFound = localize('kubeConfigClusterPicker.clusterContextNotFound', "No cluster context information found"); export const clusterContextNotFound = localize('kubeConfigClusterPicker.clusterContextNotFound', "No cluster context information found");
export const signIn = localize('azure.signin', "Sign in…"); export const signIn = localize('azure.signin', "Sign in…");
export const refresh = localize('azure.refresh', "Refresh"); export const refresh = localize('azure.refresh', "Refresh");
export const yes = localize('azure.yes', "Yes");
export const no = localize('azure.no', "No");
export const createNewResourceGroup = localize('azure.resourceGroup.createNewResourceGroup', "Create a new resource group"); export const createNewResourceGroup = localize('azure.resourceGroup.createNewResourceGroup', "Create a new resource group");
export const NewResourceGroupAriaLabel = localize('azure.resourceGroup.NewResourceGroupAriaLabel', "New resource group name"); export const NewResourceGroupAriaLabel = localize('azure.resourceGroup.NewResourceGroupAriaLabel', "New resource group name");
export const realm = localize('deployCluster.Realm', "Realm"); export const realm = localize('deployCluster.Realm', "Realm");

View File

@@ -14,12 +14,12 @@ export const WizardDoneButtonLabel = localize('deployAzureSQLDB.ScriptToNotebook
export const MissingRequiredInformationErrorMessage = localize('deployAzureSQLDB.MissingRequiredInfoError', "Please fill out the required fields marked with red asterisks."); export const MissingRequiredInformationErrorMessage = localize('deployAzureSQLDB.MissingRequiredInfoError', "Please fill out the required fields marked with red asterisks.");
// Azure settings page constants // Azure settings page constants
export const AzureSettingsPageTitle = localize('deployAzureSQLDB.AzureSettingsPageTitle', "Azure SQL Database - Azure Account Settings"); export const AzureSettingsPageTitle = localize('deployAzureSQLDB.AzureSettingsPageTitle', "Azure SQL Database - Azure account settings");
export const AzureSettingsSummaryPageTitle = localize('deployAzureSQLDB.AzureSettingsSummaryPageTitle', "Azure Account Settings"); export const AzureSettingsSummaryPageTitle = localize('deployAzureSQLDB.AzureSettingsSummaryPageTitle', "Azure account settings");
export const AzureAccountDropdownLabel = localize('deployAzureSQLDB.AzureAccountDropdownLabel', "Azure Account"); export const AzureAccountDropdownLabel = localize('deployAzureSQLDB.AzureAccountDropdownLabel', "Azure account");
export const AzureAccountSubscriptionDropdownLabel = localize('deployAzureSQLDB.AzureSubscriptionDropdownLabel', "Subscription"); export const AzureAccountSubscriptionDropdownLabel = localize('deployAzureSQLDB.AzureSubscriptionDropdownLabel', "Subscription");
export const AzureAccountDatabaseServersDropdownLabel = localize('deployAzureSQLDB.AzureDatabaseServersDropdownLabel', "Server"); export const AzureAccountDatabaseServersDropdownLabel = localize('deployAzureSQLDB.AzureDatabaseServersDropdownLabel', "Server");
export const AzureAccountResourceGroupDropdownLabel = localize('deployAzureSQLDB.ResourceGroup', "Resource Group"); export const AzureAccountResourceGroupDropdownLabel = localize('deployAzureSQLDB.ResourceGroup', "Resource group");
//@todo alma1 9/8/20 Region label used for upcoming server creation feature. //@todo alma1 9/8/20 Region label used for upcoming server creation feature.
//export const AzureAccountRegionDropdownLabel = localize('deployAzureSQLDB.AzureRegionDropdownLabel', "Region (for Public IP Address)"); //export const AzureAccountRegionDropdownLabel = localize('deployAzureSQLDB.AzureRegionDropdownLabel', "Region (for Public IP Address)");
@@ -38,8 +38,10 @@ export const FirewallRuleNameLabel = localize('deployAzureSQLDB.FirewallRuleName
export const DatabaseNameLabel = localize('deployAzureSQLDB.DatabaseNameLabel', "SQL database name"); export const DatabaseNameLabel = localize('deployAzureSQLDB.DatabaseNameLabel', "SQL database name");
export const CollationNameLabel = localize('deployAzureSQLDB.CollationNameLabel', "Database collation"); export const CollationNameLabel = localize('deployAzureSQLDB.CollationNameLabel', "Database collation");
export const CollationNameSummaryLabel = localize('deployAzureSQLDB.CollationNameSummaryLabel', "Collation for database"); export const CollationNameSummaryLabel = localize('deployAzureSQLDB.CollationNameSummaryLabel', "Collation for database");
export const IpAddressInfoLabel = localize('deployAzureSQLDB.IpAddressInfoLabel', "Enter IP Addresses in IPv4 format."); export const IpAddressInfoLabel = localize('deployAzureSQLDB.IpAddressInfoLabel', "Enter IP addresses in IPv4 format.");
export const StartIpAddressLabel = localize('deployAzureSQLDB.StartIpAddressLabel', "Min IP Address in firewall Ip Range"); export const StartIpAddressLabel = localize('deployAzureSQLDB.StartIpAddressLabel', "Min IP address in firewall IP range");
export const EndIpAddressLabel = localize('deployAzureSQLDB.EndIpAddressLabel', "Max IP Address in firewall IP Range"); export const EndIpAddressLabel = localize('deployAzureSQLDB.EndIpAddressLabel', "Max IP address in firewall IP range");
export const StartIpAddressShortLabel = localize('deployAzureSQLDB.StartIpAddressShortLabel', "Min IP Address"); export const StartIpAddressShortLabel = localize('deployAzureSQLDB.StartIpAddressShortLabel', "Min IP address");
export const EndIpAddressShortLabel = localize('deployAzureSQLDB.EndIpAddressShortLabel', "Max IP Address"); export const EndIpAddressShortLabel = localize('deployAzureSQLDB.EndIpAddressShortLabel', "Max IP address");
export const FirewallRuleDescription = localize('deployAzureSQLDB.FirewallRuleDescription', "Create a firewall rule for your local client IP in order to connect to your database through Azure Data Studio after creation is completed.");
export const FirewallToggleLabel = localize('deployAzureSQLDB.FirewallToggleLabel', "Create a firewall rule");

View File

@@ -27,6 +27,7 @@ export class DeployAzureSQLDBWizardModel extends Model {
public endIpAddress!: string; public endIpAddress!: string;
public firewallRuleName!: string; public firewallRuleName!: string;
public databaseCollation!: string; public databaseCollation!: string;
public newFirewallRule!: boolean;
constructor() { constructor() {
@@ -41,11 +42,14 @@ export class DeployAzureSQLDBWizardModel extends Model {
statements.push(`azure_sqldb_server_name = '${this.azureServerName}'`); statements.push(`azure_sqldb_server_name = '${this.azureServerName}'`);
//statements.push(`azure_sqldb_database_edition = '${this.databaseEdition}'`); //@todo alma1 10/7/2020 used for upcoming datbase hardware creation feature. //statements.push(`azure_sqldb_database_edition = '${this.databaseEdition}'`); //@todo alma1 10/7/2020 used for upcoming datbase hardware creation feature.
statements.push(`azure_sqldb_database_name = '${this.databaseName}'`); statements.push(`azure_sqldb_database_name = '${this.databaseName}'`);
statements.push(`azure_sqldb_collation = '${this.databaseCollation}'`);
//statements.push(`azure_sqldb_location = '${this.azureRegion}'`); //@todo alma1 9/10/2020 used for upcoming server creation feature. //statements.push(`azure_sqldb_location = '${this.azureRegion}'`); //@todo alma1 9/10/2020 used for upcoming server creation feature.
statements.push(`azure_sqldb_enable_firewall_rule = ${(this.newFirewallRule) ? 'True' : 'False'}`);
if (this.newFirewallRule) {
statements.push(`azure_sqldb_ip_start = '${this.startIpAddress}'`); statements.push(`azure_sqldb_ip_start = '${this.startIpAddress}'`);
statements.push(`azure_sqldb_ip_end = '${this.endIpAddress}'`); statements.push(`azure_sqldb_ip_end = '${this.endIpAddress}'`);
statements.push(`azure_sqldb_firewall_name = '${this.firewallRuleName}'`); statements.push(`azure_sqldb_firewall_name = '${this.firewallRuleName}'`);
statements.push(`azure_sqldb_collation = '${this.databaseCollation}'`); }
// statements.push(`azure_sqldb_family = '${this.databaseFamily}'`); //@todo alma1 10/7/2020 used for upcoming datbase hardware creation feature. // statements.push(`azure_sqldb_family = '${this.databaseFamily}'`); //@todo alma1 10/7/2020 used for upcoming datbase hardware creation feature.
// statements.push(`azure_sqldb_vcore = '${this.vCoreNumber}'`); // statements.push(`azure_sqldb_vcore = '${this.vCoreNumber}'`);
// statements.push(`azure_sqldb_maxmemory = '${this.storageInGB}'`); // statements.push(`azure_sqldb_maxmemory = '${this.storageInGB}'`);

View File

@@ -12,6 +12,7 @@ import { azureResource } from 'azureResource';
import * as vscode from 'vscode'; import * as vscode from 'vscode';
import { BasePage } from './basePage'; import { BasePage } from './basePage';
import * as nls from 'vscode-nls'; import * as nls from 'vscode-nls';
import * as localizedConstants from '../../../localizedConstants';
const localize = nls.loadMessageBundle(); const localize = nls.loadMessageBundle();
export class AzureSettingsPage extends BasePage { export class AzureSettingsPage extends BasePage {
@@ -166,11 +167,11 @@ export class AzureSettingsPage extends BasePage {
}); });
this.signInButton = view.modelBuilder.button().withProperties<azdata.ButtonProperties>({ this.signInButton = view.modelBuilder.button().withProperties<azdata.ButtonProperties>({
label: 'Sign In', label: localizedConstants.signIn,
width: '100px' width: '100px'
}).component(); }).component();
this.refreshButton = view.modelBuilder.button().withProperties<azdata.ButtonProperties>({ this.refreshButton = view.modelBuilder.button().withProperties<azdata.ButtonProperties>({
label: 'Refresh', label: localizedConstants.refresh,
width: '100px' width: '100px'
}).component(); }).component();

View File

@@ -9,6 +9,7 @@ import { DeployAzureSQLDBWizard } from '../deployAzureSQLDBWizard';
import * as constants from '../constants'; import * as constants from '../constants';
import { BasePage } from './basePage'; import { BasePage } from './basePage';
import * as nls from 'vscode-nls'; import * as nls from 'vscode-nls';
import { createCheckbox, createFlexContainer, createLabel } from '../../modelViewUtils';
const localize = nls.loadMessageBundle(); const localize = nls.loadMessageBundle();
export class DatabaseSettingsPage extends BasePage { export class DatabaseSettingsPage extends BasePage {
@@ -24,6 +25,10 @@ export class DatabaseSettingsPage extends BasePage {
private _collationTextbox!: azdata.InputBoxComponent; private _collationTextbox!: azdata.InputBoxComponent;
private _collationTextRow!: azdata.FlexContainer; private _collationTextRow!: azdata.FlexContainer;
private _IpInfoText!: azdata.TextComponent; private _IpInfoText!: azdata.TextComponent;
private _firewallToggleDropdown!: azdata.CheckBoxComponent;
private _firewallToggleLabel!: azdata.TextComponent;
private _form!: azdata.FormContainer; private _form!: azdata.FormContainer;
@@ -39,6 +44,7 @@ export class DatabaseSettingsPage extends BasePage {
this.pageObject.registerContent(async (view: azdata.ModelView) => { this.pageObject.registerContent(async (view: azdata.ModelView) => {
await Promise.all([ await Promise.all([
this.createIpAddressText(view), this.createIpAddressText(view),
this.createFirewallToggle(view),
this.createFirewallNameText(view), this.createFirewallNameText(view),
this.createDatabaseNameText(view), this.createDatabaseNameText(view),
this.createCollationText(view) this.createCollationText(view)
@@ -52,6 +58,9 @@ export class DatabaseSettingsPage extends BasePage {
{ {
component: this._collationTextRow component: this._collationTextRow
}, },
{
component: createFlexContainer(view, [this._firewallToggleLabel, this._firewallToggleDropdown])
},
{ {
component: this._firewallRuleNameTextRow component: this._firewallRuleNameTextRow
}, },
@@ -128,6 +137,37 @@ export class DatabaseSettingsPage extends BasePage {
this._endIpAddressTextRow = this.wizard.createFormRowComponent(view, constants.EndIpAddressLabel, '', this._endIpAddressTextbox, true); this._endIpAddressTextRow = this.wizard.createFormRowComponent(view, constants.EndIpAddressLabel, '', this._endIpAddressTextbox, true);
} }
private createFirewallToggle(view: azdata.ModelView) {
this._firewallToggleDropdown = createCheckbox(view, {
initialValue: true,
label: '',
required: false
});
this._firewallToggleLabel = createLabel(view, {
text: constants.FirewallToggleLabel,
description: constants.FirewallRuleDescription,
required: false,
width: '250px',
cssStyles: {
'font-weight': '400',
'font-size': '13px',
}
});
this.wizard.model.newFirewallRule = true;
this._firewallToggleDropdown.onChanged((value) => {
let displayValue: 'block' | 'none' = (value) ? 'block' : 'none';
this.wizard.changeRowDisplay(this._firewallRuleNameTextRow, displayValue);
this.wizard.changeRowDisplay(this._endIpAddressTextRow, displayValue);
this.wizard.changeRowDisplay(this._startIpAddressTextRow, displayValue);
this.wizard.changeComponentDisplay(this._IpInfoText, displayValue);
this.wizard.model.newFirewallRule = value;
});
}
private createFirewallNameText(view: azdata.ModelView) { private createFirewallNameText(view: azdata.ModelView) {
this._firewallRuleNameTextbox = view.modelBuilder.inputBox().component(); this._firewallRuleNameTextbox = view.modelBuilder.inputBox().component();
@@ -173,6 +213,7 @@ export class DatabaseSettingsPage extends BasePage {
let databasename = this._databaseNameTextbox.value!; let databasename = this._databaseNameTextbox.value!;
let collationname = this._collationTextbox.value!; let collationname = this._collationTextbox.value!;
if (this.wizard.model.newFirewallRule) {
if (!(ipRegex.test(startipvalue))) { if (!(ipRegex.test(startipvalue))) {
errorMessages.push(localize('deployAzureSQLDB.DBMinIpInvalidError', "Min Ip address is invalid")); errorMessages.push(localize('deployAzureSQLDB.DBMinIpInvalidError', "Min Ip address is invalid"));
} }
@@ -191,7 +232,9 @@ export class DatabaseSettingsPage extends BasePage {
errorMessages.push(localize('deployAzureSQLDB.DBFirewallSpecialCharError', "Firewall name cannot contain special characters \/\"\"[]:|<>+=;,?*@&, .")); errorMessages.push(localize('deployAzureSQLDB.DBFirewallSpecialCharError', "Firewall name cannot contain special characters \/\"\"[]:|<>+=;,?*@&, ."));
} }
if (/[A-Z]/g.test(firewallname)) { if (/[A-Z]/g.test(firewallname)) {
errorMessages.push(localize('deployAzureSQLDB.DBFirewallUpperCaseError', "Upper case letters are not allowed for firealll name")); errorMessages.push(localize('deployAzureSQLDB.DBFirewallUpperCaseError', "Upper case letters are not allowed for firewall name"));
}
} }
if (/^\d+$/.test(databasename)) { if (/^\d+$/.test(databasename)) {

View File

@@ -7,6 +7,7 @@ import * as azdata from 'azdata';
import { WizardPageBase } from '../../wizardPageBase'; import { WizardPageBase } from '../../wizardPageBase';
import { DeployAzureSQLDBWizard } from '../deployAzureSQLDBWizard'; import { DeployAzureSQLDBWizard } from '../deployAzureSQLDBWizard';
import * as constants from '../constants'; import * as constants from '../constants';
import * as localizedConstants from '../../../localizedConstants';
import { SectionInfo, LabelPosition, FontWeight, FieldType } from '../../../interfaces'; import { SectionInfo, LabelPosition, FontWeight, FieldType } from '../../../interfaces';
import { createSection } from '../../modelViewUtils'; import { createSection } from '../../modelViewUtils';
@@ -136,6 +137,17 @@ export class AzureSQLDBSummaryPage extends WizardPageBase<DeployAzureSQLDBWizard
defaultValue: model.databaseCollation, defaultValue: model.databaseCollation,
labelCSSStyles: { fontWeight: FontWeight.Bold } labelCSSStyles: { fontWeight: FontWeight.Bold }
}, },
{
type: FieldType.ReadonlyText,
label: constants.FirewallToggleLabel,
defaultValue: model.newFirewallRule ? localizedConstants.yes : localizedConstants.no,
labelCSSStyles: { fontWeight: FontWeight.Bold }
}
]
};
if (model.newFirewallRule) {
databaseSettingSection.fields?.push(
{ {
type: FieldType.ReadonlyText, type: FieldType.ReadonlyText,
label: constants.FirewallRuleNameLabel, label: constants.FirewallRuleNameLabel,
@@ -153,9 +165,8 @@ export class AzureSQLDBSummaryPage extends WizardPageBase<DeployAzureSQLDBWizard
label: constants.EndIpAddressShortLabel, label: constants.EndIpAddressShortLabel,
defaultValue: model.endIpAddress, defaultValue: model.endIpAddress,
labelCSSStyles: { fontWeight: FontWeight.Bold } labelCSSStyles: { fontWeight: FontWeight.Bold }
});
} }
]
};
const createSectionFunc = async (sectionInfo: SectionInfo): Promise<azdata.FormComponent> => { const createSectionFunc = async (sectionInfo: SectionInfo): Promise<azdata.FormComponent> => {

View File

@@ -10,6 +10,7 @@ import { DeployAzureSQLVMWizard } from '../deployAzureSQLVMWizard';
import { apiService } from '../../../services/apiService'; import { apiService } from '../../../services/apiService';
import { azureResource } from 'azureResource'; import { azureResource } from 'azureResource';
import * as vscode from 'vscode'; import * as vscode from 'vscode';
import * as localizedConstants from '../../../localizedConstants';
export class AzureSettingsPage extends WizardPageBase<DeployAzureSQLVMWizard> { export class AzureSettingsPage extends WizardPageBase<DeployAzureSQLVMWizard> {
// <- means depends on // <- means depends on
@@ -105,11 +106,11 @@ export class AzureSettingsPage extends WizardPageBase<DeployAzureSQLVMWizard> {
}); });
this.signInButton = view.modelBuilder.button().withProperties<azdata.ButtonProperties>({ this.signInButton = view.modelBuilder.button().withProperties<azdata.ButtonProperties>({
label: 'Sign In', label: localizedConstants.signIn,
width: '100px' width: '100px'
}).component(); }).component();
this.refreshButton = view.modelBuilder.button().withProperties<azdata.ButtonProperties>({ this.refreshButton = view.modelBuilder.button().withProperties<azdata.ButtonProperties>({
label: 'Refresh', label: localizedConstants.refresh,
width: '100px' width: '100px'
}).component(); }).component();

View File

@@ -9,6 +9,7 @@ import * as constants from '../constants';
import { DeployAzureSQLVMWizard } from '../deployAzureSQLVMWizard'; import { DeployAzureSQLVMWizard } from '../deployAzureSQLVMWizard';
import { BasePage } from './basePage'; import { BasePage } from './basePage';
import * as nls from 'vscode-nls'; import * as nls from 'vscode-nls';
import * as localizedConstants from '../../../localizedConstants';
const localize = nls.loadMessageBundle(); const localize = nls.loadMessageBundle();
export class SqlServerSettingsPage extends BasePage { export class SqlServerSettingsPage extends BasePage {
@@ -167,11 +168,11 @@ export class SqlServerSettingsPage extends BasePage {
this._sqlAuthenticationDropdown = view.modelBuilder.dropDown().withProperties(<azdata.DropDownComponent>{ this._sqlAuthenticationDropdown = view.modelBuilder.dropDown().withProperties(<azdata.DropDownComponent>{
values: [ values: [
{ {
displayName: localize('deployAzureSQLVM.EnableSqlAuthenticationYesOption', "Yes"), displayName: localizedConstants.yes,
name: 'True' name: 'True'
}, },
{ {
displayName: localize('deployAzureSQLVM.EnableSqlAuthenticationNoOption', "No"), displayName: localizedConstants.no,
name: 'False' name: 'False'
} }
] ]