Last active
February 3, 2023 23:05
-
-
Save waldothedeveloper/eb35dcde1f3952829c0ae4b402bbb036 to your computer and use it in GitHub Desktop.
Servicenow Catalog Client Script to add dynamic options to catalog variable of type choices
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// services categories for the applications that live in the cmdb_ci_services table | |
var categories = [ | |
{ | |
id: 0, | |
name: "Access Request", | |
}, | |
{ | |
id: 1, | |
name: "New Database Request", | |
}, | |
{ | |
id: 2, | |
name: "Add New Data Process", | |
}, | |
{ | |
id: 3, | |
name: "Report Request", | |
}, | |
{ | |
id: 4, | |
name: "New Application Request(<40 hrs)", | |
}, | |
{ | |
id: 5, | |
name: "Report Modification", | |
}, | |
{ | |
id: 6, | |
name: "New Project Request", | |
}, | |
{ | |
id: 7, | |
name: "Server Specs Request", | |
}, | |
{ | |
id: 8, | |
name: "Process Modification", | |
}, | |
{ | |
id: 9, | |
name: "New Sites", | |
}, | |
{ | |
id: 10, | |
name: "Modification to Data Process", | |
}, | |
{ | |
id: 11, | |
name: "Server Installs", | |
}, | |
{ | |
id: 12, | |
name: "Application Modification (<40 hrs)", | |
}, | |
{ | |
id: 13, | |
name: "New Org Request", | |
}, | |
{ | |
id: 14, | |
name: "Server Patches", | |
}, | |
]; | |
// little helper function to do something like: application_name_like_this_with_lowdash | |
function createChoicevalue(value) { | |
if (typeof value !== "string") { | |
return null; | |
} | |
return value.trim().toLowerCase().replaceAll(" ", "_"); | |
} | |
// this will return each of the fields that the GlideForm addOption method expects | |
function createChoice(choice) { | |
// choice should be a number always | |
if (isNaN(choice)) { | |
return null; | |
} | |
return { | |
choiceValue: createChoicevalue(categories[choice].name), | |
choiceLabel: categories[choice].name, | |
}; | |
} | |
function setValuesBasedOnTheApplication(newValue) { | |
//start of with an empty set of values | |
var values = []; | |
if (typeof newValue !== "string") { | |
return null; | |
} | |
//Define the values you want to conditionally create options for | |
switch (newValue) { | |
case "SQL Database": | |
values = [ | |
createChoice(1), | |
createChoice(7), | |
createChoice(14), | |
createChoice(11), | |
createChoice(0), | |
]; | |
break; | |
case "ADT Report Emails": | |
values = [createChoice(0)]; | |
break; | |
case "HIE Email Alerts Request": | |
values = [createChoice(0), createChoice(8)]; | |
break; | |
case "Archer Email Alerts Request": | |
values = [createChoice(0), createChoice(8)]; | |
break; | |
case "Share Point": | |
values = [createChoice(0), createChoice(9)]; | |
break; | |
case "Nominal Services": | |
values = [createChoice(0), createChoice(3), createChoice(12)]; | |
break; | |
case "Data Ingestion-Extraction Process": | |
values = [createChoice(2), createChoice(10)]; | |
break; | |
case "Contestations": | |
values = [createChoice(0), createChoice(3), createChoice(12)]; | |
break; | |
case "Center Ops Portal": | |
values = [createChoice(0), createChoice(3), createChoice(12)]; | |
break; | |
case "CD Reports Portal": | |
values = [createChoice(0), createChoice(3)]; | |
break; | |
case "Power Platform": | |
values = [createChoice(0), createChoice(4), createChoice(12)]; | |
break; | |
default: | |
break; | |
} | |
return values; | |
} | |
function onChange(control, oldValue, newValue, isLoading) { | |
if (isLoading || newValue == "") { | |
return; | |
} | |
// when this value changes we call setValuesBasedOnTheApplication to get the values we will need for the choice options list | |
var getApplicationName = g_form.getDisplayValue("application_name"); | |
// this will contain an array of objects that looks like this: | |
// [ {choiceValue: '', choiceLabel: ''}, {choiceValue: '', choiceLabel: ''}, {choiceValue: '', choiceLabel: ''}] | |
var applicationCategoriesArray = | |
setValuesBasedOnTheApplication(getApplicationName); | |
// alert(JSON.stringify(applicationCategoriesArray, null, 2)); | |
// making sure we have an array of categories and that is not empty | |
if ( | |
Array.isArray(applicationCategoriesArray) && | |
applicationCategoriesArray.length > 0 | |
) { | |
createDependentOptions("categories", applicationCategoriesArray, false); | |
} | |
} | |
//dependentField = name of the field you want to populate with options | |
//dependentValuesArray = an array of objects | |
//includeNone set to true or false. true will result in -- None -- being added as a label with no value to position 0 | |
function createDependentOptions( | |
dependentField, | |
dependentValuesArray, | |
includeNone | |
) { | |
var index = 0; | |
//Start by clearing the options | |
g_form.clearOptions(dependentField); | |
//If includeNone is true, add a label for none with a value of '' | |
if (includeNone) { | |
g_form.addOption(dependentField, "", "-- None --", 0); | |
//If none was added, increment the index | |
index++; | |
} | |
for (var i = 0; i < dependentValuesArray.length; i++) { | |
g_form.addOption( | |
dependentField, | |
dependentValuesArray[i].choiceValue, | |
dependentValuesArray[i].choiceLabel, | |
i + index | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment