main e33c87f9eba2 cached
2956 files
4.6 MB
1.4M tokens
2297 symbols
1 requests
Download .txt
Showing preview only (5,623K chars total). Download the full file or copy to clipboard to get everything.
Repository: ServiceNowDevProgram/code-snippets
Branch: main
Commit: e33c87f9eba2
Files: 2956
Total size: 4.6 MB

Directory structure:
gitextract_wclm7_b1/

├── .github/
│   ├── pull_request_template.md
│   ├── scripts/
│   │   └── validate-structure.js
│   └── workflows/
│       ├── hacktrack.yml
│       ├── pages.yml
│       ├── pr-auto-unassign-stale.yml
│       └── validate-structure.yml
├── .gitignore
├── AGENTS.md
├── CONTRIBUTING.md
├── Client-Side Components/
│   ├── Catalog Client Script/
│   │   ├── Add Label For Attachment/
│   │   │   ├── README.md
│   │   │   └── add_label_for_attachment.js
│   │   ├── Add Rows in MRVS/
│   │   │   ├── README.md
│   │   │   └── addrows.js
│   │   ├── Auto Save Draft Feature/
│   │   │   ├── README.md
│   │   │   ├── advanced_implementation.js
│   │   │   ├── basic_implementation.js
│   │   │   └── script.js
│   │   ├── Auto-populate field from URL/
│   │   │   ├── README.md
│   │   │   └── popdatefromurl.js
│   │   ├── Autofilling the request details from previous request/
│   │   │   ├── Auto fill script include.JS
│   │   │   ├── Client script Autofill.js
│   │   │   └── Readme.md
│   │   ├── Autopopulate Department/
│   │   │   ├── README.md
│   │   │   └── autopopulateDepartment.js
│   │   ├── Autopopulate user information fields/
│   │   │   ├── ClientCallableScriptInclude.js
│   │   │   ├── README.md
│   │   │   └── onChangeClientScript.js
│   │   ├── Block Submit/
│   │   │   ├── README.md
│   │   │   └── block_submit.js
│   │   ├── Calculate age on based on date of birth/
│   │   │   ├── Calculate age based on dob.js
│   │   │   └── README.md
│   │   ├── Catalog Approval/
│   │   │   ├── Readme.md
│   │   │   ├── client script.js
│   │   │   └── script include.js
│   │   ├── Clear all fields/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Combine variables into Description/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Control all RITM variables in one go/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Currency Validation/
│   │   │   ├── README.md
│   │   │   └── currency_validation.js
│   │   ├── CustomAlert/
│   │   │   ├── README.md
│   │   │   ├── Screenshots/
│   │   │   │   └── README.md
│   │   │   ├── custom_alert.js
│   │   │   └── custom_alert_box.js
│   │   ├── Date Management/
│   │   │   ├── Date Management.js
│   │   │   └── README.md
│   │   ├── Document validation/
│   │   │   ├── Client script.JS
│   │   │   ├── Readme.md
│   │   │   └── Script include.js
│   │   ├── Dynamically Update Reference Qualifier/
│   │   │   ├── Catalog Item onLoad.js
│   │   │   ├── README.md
│   │   │   ├── Script Include.js
│   │   │   └── Variable Set onLoad.js
│   │   ├── Get Display Value of MRVS/
│   │   │   ├── README.md
│   │   │   └── mrvs.js
│   │   ├── Get MRVS Values from Parent/
│   │   │   ├── README.md
│   │   │   └── onload.js
│   │   ├── Hide Variables of Catalog Item on Order Guide/
│   │   │   ├── Hide Variables.js
│   │   │   └── README.md
│   │   ├── Hide attachment icon/
│   │   │   ├── Hide Attachment icon.js
│   │   │   └── README.md
│   │   ├── Incident Sentiment Detector (Using Simple Word Matching, No AI)/
│   │   │   ├── SentimentAnalyzer.js
│   │   │   ├── onChangeClientscript.js
│   │   │   └── readme.md
│   │   ├── MRVS Email Validation with Mutation Observer/
│   │   │   ├── EmailValidationOnCatalogUI.js
│   │   │   └── README.md
│   │   ├── MRVS Interact With Parent Form/
│   │   │   ├── Portal onLoad.js
│   │   │   ├── README.md
│   │   │   └── Write to Parent Form.js
│   │   ├── MRVS Loop Rows/
│   │   │   ├── README.md
│   │   │   └── loopRows.js
│   │   ├── MRVS Reference Qualifier from Catalog Item Variable/
│   │   │   ├── Catalog Client Script.js
│   │   │   ├── README.md
│   │   │   └── Script Include.js
│   │   ├── MRVS dependent ref qual 1st row/
│   │   │   ├── AccountUtils.js
│   │   │   ├── README.md
│   │   │   └── onLoad.js
│   │   ├── Make OOB Attachment Mandatory/
│   │   │   ├── README.md
│   │   │   └── onChange.js
│   │   ├── Mandatory Attachments with 'n' numbers/
│   │   │   ├── README.md
│   │   │   └── onSubmitClientScript.js
│   │   ├── Multi-User Collaboration/
│   │   │   ├── Readme.md
│   │   │   ├── Script include.JS
│   │   │   ├── client script.JS
│   │   │   ├── widget client controller.JS
│   │   │   └── widget server script.JS
│   │   ├── Normalise and Reset a MRVS based on Variable Changes/
│   │   │   ├── README.md
│   │   │   ├── mrvs_normalise_onchange.js
│   │   │   └── variant_reset_specific_columns.js
│   │   ├── Onsubmit validation/
│   │   │   ├── Readme.md
│   │   │   ├── on submit scriptinclude.JS
│   │   │   └── submit validation client script.js
│   │   ├── Open modal widget in an Onsubmit/
│   │   │   ├── README.md
│   │   │   └── openmodal.js
│   │   ├── PAN Validation/
│   │   │   ├── PAN Validation.js
│   │   │   └── README.md
│   │   ├── Passport Validation/
│   │   │   ├── README.md
│   │   │   └── passportvalidity.js
│   │   ├── Password Validation Script/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Percentage Symbol/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── PopulateDropdown/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Prevent duplicate records on MRVS/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Real time count of letters/
│   │   │   ├── Count letters.js
│   │   │   └── readme.md
│   │   ├── Remove reference icon from portal/
│   │   │   ├── README.md
│   │   │   └── remove-reference-icon-from-portal-onLoad.js
│   │   ├── Restrict Number of rows in Multi Row Variable/
│   │   │   ├── README.md
│   │   │   └── restrict_multi_row.js
│   │   ├── Return Date Validation/
│   │   │   ├── README.md
│   │   │   └── validateReturndate.js
│   │   ├── Reusable GlideAjax Client Script/
│   │   │   ├── DynamicTableQueryUtil.js
│   │   │   ├── Readme.md
│   │   │   └── clientscript.js
│   │   ├── Rounding Money or Price Field/
│   │   │   ├── README.md
│   │   │   ├── catalog_client_script.js
│   │   │   └── catalog_client_script_config.md
│   │   ├── Schedule Request/
│   │   │   ├── Readme.JS
│   │   │   ├── scheduled client script.js
│   │   │   ├── scheduled scriptinclude.JS
│   │   │   └── scheduled_job.JS
│   │   ├── Set User Field Values on Load/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Set and Lock Variable by Group/
│   │   │   ├── README.md
│   │   │   └── set_lock_variable_by_grp.js
│   │   ├── Set fields from URL Parameter 2/
│   │   │   ├── CatalogClientScript.js
│   │   │   ├── KMXOUtils.js
│   │   │   ├── README.md
│   │   │   └── UtilsAjax.js
│   │   ├── Set fields from URL Parameters/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Validate a Credit Card Number/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── catalog Draft/
│   │   │   ├── Readm.md
│   │   │   ├── Script include.JS
│   │   │   └── client script.js
│   │   ├── onCellEdit Catalog Task State Change Restriction/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── previous Request/
│   │   │   ├── Readme.MD
│   │   │   ├── previous request client script.js
│   │   │   └── previous request script include.js
│   │   └── spModal for Sweet Alerts/
│   │       ├── readme.md
│   │       └── spModalSweetAlerts.js
│   ├── Client Scripts/
│   │   ├── Abort action when description is empty/
│   │   │   ├── Code.js
│   │   │   └── ReadMe.md
│   │   ├── Abort direct incident closure without Resolve State/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Add Field Decoration/
│   │   │   ├── Add Field Decoration.js
│   │   │   └── README.md
│   │   ├── Add Image to Field Based on Company/
│   │   │   ├── AddImageToFieldBasedOnCompany.js
│   │   │   ├── README.md
│   │   │   └── SetCompanyScratchPadValue.js
│   │   ├── Adding Placeholder on Resolution Notes/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Auto Update Priority based on Impact and Urgency/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Auto-Populate Planned End Date/
│   │   │   ├── README.md
│   │   │   └── autoPopulatePlannedEndDate.js
│   │   ├── Auto-Populate Short Discription/
│   │   │   ├── Auto populate short description.js
│   │   │   ├── README.md
│   │   │   ├── Readme.md
│   │   │   └── autoPopulateSD.js
│   │   ├── Auto-populate watch_list based on company/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Call SI to recover User data/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Change Label of Field/
│   │   │   ├── Change Label of Field.js
│   │   │   └── README.md
│   │   ├── Change incident Number label color based on priority/
│   │   │   ├── Script.js
│   │   │   └── readme.md
│   │   ├── Check all mandatory fields using mandatoryCheck()/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Client Validation of Attachments by File Type and Count/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Client script using getMessage() function without filling Messages field/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Color-coded Priority field for improved UX/
│   │   │   ├── README.md
│   │   │   └── setColor.js
│   │   ├── Conditional Auto-Routing and Dynamic Mandatory Fields/
│   │   │   ├── Conditional_AutoRouting_Dynamic_Mandatory_Fields.js
│   │   │   └── Readme.md
│   │   ├── Conditional Form Section based on Role/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Control Form Behaviour from Reference Lookup/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Count Assigned To Field/
│   │   │   ├── README.md
│   │   │   └── getAssignedToCount.js
│   │   ├── Date Range Validation (Within 30 Days)/
│   │   │   ├── README.md
│   │   │   └── dateRangeValidation.js
│   │   ├── Detect oldValue newValue and Operation in Glide List Type Fields/
│   │   │   ├── detectOldValuenewValueOperation.js
│   │   │   ├── readme.md
│   │   │   └── watchListCandidatesUtil.js
│   │   ├── Display Custom Field Based on Incident Channel Field and populate with Caller Information/
│   │   │   ├── GlideAjaxCallerInfo.js
│   │   │   ├── README.md
│   │   │   └── clientScriptOnChangeCaller.js
│   │   ├── Display Incident Count of Assigned-To User When Field Changes/
│   │   │   ├── README.md
│   │   │   ├── clientScript.js
│   │   │   └── glideAjaxIncidentCount.js
│   │   ├── Display Section on State/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Display a Live Word Count for Description Field/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Dynamic Field Dependencies with GlideAjax/
│   │   │   ├── README.md
│   │   │   ├── ajax_script_include.js
│   │   │   ├── conditional_field_loader.js
│   │   │   └── dynamic_category_subcategory.js
│   │   ├── Dynamic Location Validation Approach/
│   │   │   ├── Readme.md
│   │   │   ├── User Location Validator.js
│   │   │   └── UserLocationUtils.js
│   │   ├── Dynamic Reference Qualifier with Filtering/
│   │   │   ├── README.md
│   │   │   └── reference_qual_dynamic.js
│   │   ├── Dynamic UI Actions/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Dynamic script to make fields read only/
│   │   │   ├── reame.md
│   │   │   └── script.js
│   │   ├── Dynamically Switch Form View Based on Field Value/
│   │   │   ├── README.md
│   │   │   └── dynamic-form-view-onchange.js
│   │   ├── Enable VIP and Senior VIP Checkboxes and read only/
│   │   │   ├── README.md
│   │   │   └── ScriptToEnableVIP_superVIP users
│   │   ├── End Date can't be before Start Date/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Expanding Info Message/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Field Completion Counter/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Field Placeholder/
│   │   │   ├── README.md
│   │   │   └── fieldplaceholder.js
│   │   ├── Field Validations/
│   │   │   ├── README.md
│   │   │   └── fieldValidation.js
│   │   ├── Form Dirty State Prevention/
│   │   │   ├── README.md
│   │   │   └── form_dirty_state_manager.js
│   │   ├── Get Field Value From List on Client/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Form Elements/
│   │   │   ├── README.MD
│   │   │   └── getFormElements.js
│   │   ├── Get Logged in User Information/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get URL Parameters/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Value from URL Parameter/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Health Scan Prevent Insert Update in Before BRs/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Hide Dependent Choice field if there no dependent choices/
│   │   │   ├── HideDepnedentField.js
│   │   │   ├── NumberOfDependentChoices.js
│   │   │   └── README.md
│   │   ├── Hide Work Notes section/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── How to adjust the Date format within a client script to align with the User Date format/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Incident Count of Selected CI with Clickable Link to Related Incidents/
│   │   │   ├── README.md
│   │   │   ├── clientScriptCiIncident.js
│   │   │   └── glideAjaxIncidentCiCount.js
│   │   ├── Live Character Counter and Validator/
│   │   │   ├── README.md
│   │   │   └── character_counter.js
│   │   ├── MRVS variables validations/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Major Incident Proposal/
│   │   │   ├── Client_Script.js
│   │   │   ├── README.md
│   │   │   └── Script_Include.js
│   │   ├── Make Variable Editor Read Only for Catalog Items containing MRVS/
│   │   │   ├── CheckMRVSDetails.js
│   │   │   ├── MakeVariableSetReadOnly.js
│   │   │   └── README.md
│   │   ├── Make all fields read only/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Make fields read only in specific states/
│   │   │   ├── Make fields read only in specific state.md
│   │   │   └── code.js
│   │   ├── Mandatory Field Highlighter/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── MultiSelect in Portal/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── On load Switch-Case Testing/
│   │   │   ├── README.md
│   │   │   └── Switch-Case code snippet.js
│   │   ├── Only number validation for input/
│   │   │   ├── OnChange.js
│   │   │   └── README.md
│   │   ├── Open Record in Agne Workspace Tab/
│   │   │   ├── README.md
│   │   │   └── openrecawtab.js
│   │   ├── Populate Jelly Slushbucket with Values/
│   │   │   ├── ClientScript.js
│   │   │   └── README.md
│   │   ├── Prevent Rejection Without Comments/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Price field restriction to one currency/
│   │   │   ├── README.md
│   │   │   └── price_field_restriction_to_one_currency.js
│   │   ├── Redact Sensitive Information/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Reinstate Error status/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Remove Option from Choice List/
│   │   │   ├── README.md
│   │   │   └── Remove Options from Choice List.js
│   │   ├── Require comment onPriority change/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Restrict Creation of P1, P2 Incidents/
│   │   │   ├── README.md
│   │   │   └── Restrict_Creation_Of_P1_P2_Incidents.js
│   │   ├── Restrict Fields on Template/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Set Severity, state & assigned to/
│   │   │   ├── README.md
│   │   │   ├── script.js
│   │   │   └── script_include.js
│   │   ├── Set Urgency to High onChange of caller field/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Set field style like font and background/
│   │   │   ├── OnLoad client script.js
│   │   │   └── README.md
│   │   ├── Show Current Domain/
│   │   │   ├── DomainCheckUtil.js
│   │   │   ├── Readme.md
│   │   │   └── Show Current Domain.js
│   │   ├── Show Message On Both Form and List/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Show field if x things are checked/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Smart-Field-Suggestions/
│   │   │   ├── README.md
│   │   │   └── Smart Field Suggestions Based on Keyword.js
│   │   ├── State changes to On Hold then worknotes should be mandatory/
│   │   │   ├── README.md
│   │   │   └── worknotes.js
│   │   ├── Sync Ajax with no getXMLWait/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Toggle Annotation On Forms With Script/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Toggle form section visibility/
│   │   │   ├── README.md
│   │   │   └── toggleFormSection.js
│   │   ├── Translate Message/
│   │   │   ├── README.md
│   │   │   └── getMessage.js
│   │   ├── Update Category from Short Description Keywords/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Use case of addOption() and removeOption()/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Validate Interaction record for FCR(First Call Resolution)/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Validate Short Description/
│   │   │   ├── README.md
│   │   │   ├── ShortDescriptionLength.js
│   │   │   ├── validShortDescription.js
│   │   │   └── validateSpecialChar.js
│   │   ├── Validate date is in future without GlideAjax/
│   │   │   ├── OnChange Client Script.js
│   │   │   └── README.md
│   │   ├── Verify if e-mail already exists with Ajax call/
│   │   │   ├── README.md
│   │   │   ├── clientScript.js
│   │   │   └── scriptInclude.js
│   │   ├── Verify whether a date falls within a hour range/
│   │   │   ├── README.md
│   │   │   └── verifyWhetherADateFallsWithinAHourRange.js
│   │   ├── Whitespace Validation/
│   │   │   ├── README.md
│   │   │   └── whitespaceValidation.js
│   │   ├── Zurich - Upgraded info messages/
│   │   │   ├── README.md
│   │   │   └── infoMessages.js
│   │   ├── field-character-counter/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── g_form console access in workspace/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── onfocus and onblur/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── state-edit-for-grpmem/
│   │   │   ├── README.md
│   │   │   └── grpmemstateedit.js
│   │   └── validate phone number/
│   │       ├── README.md
│   │       ├── Readme.md
│   │       ├── validate phone number.js
│   │       └── validate_phone_format_(123)_456-7890_no_regex.js.js
│   ├── UI Actions/
│   │   ├── Add Loggedin user as Incident assigned to/
│   │   │   ├── ReadMe.md
│   │   │   └── code.js
│   │   ├── Add Show Workflow Related link/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Add collapsible element in knowledge article/
│   │   │   ├── README.md
│   │   │   ├── UI_Action.js
│   │   │   └── add_collapsible.js
│   │   ├── Call Subflow/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── CallingPopUpBoxInListView/
│   │   │   ├── README.md
│   │   │   └── calling_pop_up_box_in_list_view.js
│   │   ├── Cancel Flow Executions/
│   │   │   ├── README.md
│   │   │   └── cancelFlow.js
│   │   ├── Cancel Incident/
│   │   │   ├── README.md
│   │   │   ├── SETUP.md
│   │   │   └── script.js
│   │   ├── Clone incident on Agent Workspace/
│   │   │   ├── README.md
│   │   │   ├── clone_incident.js
│   │   │   └── workspace_client_script.js
│   │   ├── Close Related HR cases & HR tasks/
│   │   │   ├── README.md
│   │   │   ├── Script Include.js
│   │   │   └── UI Action script.js
│   │   ├── Close child incident/
│   │   │   ├── README.md
│   │   │   ├── clientScript.js
│   │   │   └── serverScript.js
│   │   ├── CloseChildCases/
│   │   │   ├── CloseChildCases.js
│   │   │   └── README.md
│   │   ├── Convert Request to Incident/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Copy Bulk SysIDs/
│   │   │   ├── Copy Bulk Sysids.js
│   │   │   └── README.md
│   │   ├── Copy Variable Set/
│   │   │   ├── README.md
│   │   │   └── scripts.js
│   │   ├── Copy incident details and create a child incident/
│   │   │   ├── README.md
│   │   │   └── ui_action_script.js
│   │   ├── Create Incident from Record - Open in both Platform and Workspace/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create New blank incident from the incident/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create Problem Record from any Table/
│   │   │   ├── CreateProblemRecord.js
│   │   │   └── README.md
│   │   ├── Create Problem Task from the Problem/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create Update Set on DEV/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create incident task and relate to incident/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create story/
│   │   │   ├── Create story from other task.js
│   │   │   └── README.md
│   │   ├── Display a 2-choice confirmation dialog/
│   │   │   ├── README.md
│   │   │   └── choice_dialog.js
│   │   ├── Email Watermark Utility/
│   │   │   ├── GenericEmailUtility.js
│   │   │   ├── README.md
│   │   │   └── Send Email UI Action.js
│   │   ├── Expire Timer in Flows/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Field Review of User Record when on form using action button/
│   │   │   ├── README.md
│   │   │   └── actionButtonScript.js
│   │   ├── Force to Update Set/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Generate QR for Assets/
│   │   │   ├── ReadMe.md
│   │   │   └── ui-action-script.js
│   │   ├── Generate a PDF/
│   │   │   ├── README.md
│   │   │   └── serverscript.js
│   │   ├── GlideModalForm - Open New Record and Pass Query/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── GlideModalUiPagePopUp/
│   │   │   ├── README.md
│   │   │   └── glide_modal_ui_pop_up.js
│   │   ├── Go to Agent Workspace Home Page/
│   │   │   ├── README.md
│   │   │   └── ui_action_script.js
│   │   ├── Group Membership Admin Util/
│   │   │   ├── README.md
│   │   │   ├── addMeUIActionScript.js
│   │   │   └── removeMeUIActionScript.js
│   │   ├── Group dependency/
│   │   │   ├── README.md
│   │   │   ├── uiaction.js
│   │   │   └── uipage.js
│   │   ├── Kill flow timers/
│   │   │   ├── README.md
│   │   │   ├── UI action.js
│   │   │   └── UI page for ui action.js
│   │   ├── Knowledge Link Validator/
│   │   │   ├── Readme.md
│   │   │   ├── uiaction.js
│   │   │   └── uipage.js
│   │   ├── Mark Records Inactive - List Action/
│   │   │   ├── README.md
│   │   │   ├── listAction.js
│   │   │   └── scriptInclude.js
│   │   ├── Open Email Client using UI Action/
│   │   │   ├── README.md
│   │   │   └── open_email_client.js
│   │   ├── Open LIST UI Action/
│   │   │   ├── README.md
│   │   │   └── UIActionscript.js
│   │   ├── Open Record in Alternate Instance/
│   │   │   ├── README.md
│   │   │   ├── RESTMessageV2/
│   │   │   │   ├── sys_rest_message_config.md
│   │   │   │   └── sys_rest_message_fn_config.md
│   │   │   ├── Script Includes/
│   │   │   │   ├── README.md
│   │   │   │   ├── sys_script_include.js
│   │   │   │   └── sys_script_include_config.md
│   │   │   ├── Scripted REST API/
│   │   │   │   ├── sys_ws_definition_config.md
│   │   │   │   └── sys_ws_operation/
│   │   │   │       ├── sys_ws_operation.js
│   │   │   │       └── sys_ws_operation_config.md
│   │   │   └── UI Action/
│   │   │       ├── sys_ui_action.js
│   │   │       └── sys_ui_action_config.md
│   │   ├── Open Record producer from Form Button In Configurable workspace/
│   │   │   ├── OpenItem.js
│   │   │   ├── ParseUrl.js
│   │   │   └── README.md
│   │   ├── Open a new blank form/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Open in Service Operations Workspace/
│   │   │   ├── README.md
│   │   │   └── ui_action_script.js
│   │   ├── Populate Due Date based on Priority/
│   │   │   ├── Readme.md
│   │   │   ├── ScriptInclude.js
│   │   │   └── UI Action.js
│   │   ├── Preview context record during approval/
│   │   │   ├── README.md
│   │   │   ├── TestScriptInclude.js
│   │   │   └── UI_Action.js
│   │   ├── Printer Friendly Version/
│   │   │   ├── README.md
│   │   │   └── printer_friendly_verison.js
│   │   ├── Publish a Retired Knowledge Article again/
│   │   │   ├── README.md
│   │   │   └── publishretiredkb.js
│   │   ├── Select Random User From Group/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Send notification if the incident remains unassigned/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Send notification to the assigned user/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Set Incident Priority Critical/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Show Today Emails Logs/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Smart Assign to available member/
│   │   │   ├── README.md
│   │   │   └── smartAssigntoAvailablemember.js
│   │   ├── Test and Debug Scheduled Scripts/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Try Catalog item in Portal view/
│   │   │   ├── README.md
│   │   │   └── TryItInSP.js
│   │   ├── UI Action to Mark Incident as Escalated/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Variable Ownership/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   └── View in Portal Page/
│   │       ├── README.md
│   │       └── View in Portal Page.js
│   ├── UI Macros/
│   │   ├── Copy To Clipboard/
│   │   │   ├── README.md
│   │   │   └── copy_field_to_clipboard.xml
│   │   ├── FormBackground/
│   │   │   ├── form_background.xml
│   │   │   └── readme.md
│   │   ├── JSON Formatter and Viewer/
│   │   │   ├── README.md
│   │   │   └── json_formatter.xml
│   │   ├── Purchase Order Approval Summarizer/
│   │   │   ├── README.md
│   │   │   └── approval_summarizer_proc_po.xml
│   │   ├── Show Open Incident of Caller/
│   │   │   ├── Readme.md
│   │   │   └── macro.js
│   │   └── Variable Copy Context Options/
│   │       ├── README.md
│   │       └── element context.xml
│   ├── UI Pages/
│   │   ├── Add Multiple Items to Order Guide/
│   │   │   ├── README.md
│   │   │   ├── Script Include.js
│   │   │   ├── UI Action.js
│   │   │   └── UI Page.js
│   │   ├── BulkUpdate Worknotes/
│   │   │   ├── Readme.md
│   │   │   ├── UI Action.js
│   │   │   ├── UI Page_ClientScript.js
│   │   │   ├── UI Page_HTML.html
│   │   │   └── UI Page_ProcessingScript.js
│   │   ├── CMDB CI Management UI page/
│   │   │   ├── ci_client_script.js
│   │   │   ├── ci_lifecycle_ui_page.xml
│   │   │   └── ci_script_include.js
│   │   ├── Custom Alert using UI Page/
│   │   │   ├── README.md
│   │   │   ├── client script.js
│   │   │   └── custom alert.js
│   │   ├── Dynamic program status overview/
│   │   │   ├── Program details dynamic content block.xml
│   │   │   ├── README.md
│   │   │   ├── program_list.html
│   │   │   └── program_list.js
│   │   ├── EDM DocUnifiedSearch/
│   │   │   ├── EDMSearch.js
│   │   │   ├── README.md
│   │   │   ├── client script.js
│   │   │   └── code.html
│   │   ├── Edit Last WorkNotes/
│   │   │   ├── README.md
│   │   │   ├── UIaction.js
│   │   │   ├── scriptinclude.js
│   │   │   ├── uipage_client.html
│   │   │   └── uipage_clientcode.js
│   │   ├── Export UI pages to word docx/
│   │   │   ├── Export to word.js
│   │   │   └── README.md
│   │   ├── Fetch Table(Incident) fields in UI Page/
│   │   │   ├── Fetch incident fields.js
│   │   │   └── README.md
│   │   ├── Populate Glide List field/
│   │   │   ├── README.md
│   │   │   ├── populateGlideListClientScript.js
│   │   │   └── populateGlideListHTML.js
│   │   ├── Progress Loader/
│   │   │   ├── REAMDE.md
│   │   │   ├── example_use_GlideModal.js
│   │   │   └── loaderHTML.html
│   │   ├── Real time log watcher/
│   │   │   ├── README.md
│   │   │   ├── TestScriptInclude.js
│   │   │   └── log_watcher.js
│   │   ├── Resolve Incident UI Page/
│   │   │   ├── README.md
│   │   │   ├── UI_action.js
│   │   │   ├── scriptinclude.js
│   │   │   ├── ui_page_client.js
│   │   │   └── ui_page_html.html
│   │   ├── Send Email On Form Incident/
│   │   │   ├── EmailScript.js
│   │   │   ├── Notification.js
│   │   │   ├── Readme.md
│   │   │   ├── UIAction.js
│   │   │   ├── UIPage_Html.html
│   │   │   └── UIPage_ProcessingScript.js
│   │   ├── Share reports with users and groups/
│   │   │   ├── README.md
│   │   │   ├── UI Page/
│   │   │   │   ├── ui_page.html
│   │   │   │   ├── ui_page_client_script.js
│   │   │   │   └── ui_page_processing_script.js
│   │   │   └── ui_action_script.js
│   │   └── UI Page Auto Populate Assigned to based on Assignment group/
│   │       ├── README.md
│   │       ├── client_script.js
│   │       ├── jelly_script.xml
│   │       └── script_include.js
│   ├── UI Scripts/
│   │   ├── Custom Change Schedule/
│   │   │   ├── README.md
│   │   │   ├── change_soc.js
│   │   │   ├── config.js
│   │   │   └── data.js
│   │   ├── Disable Copy Paste For Portal/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Display number of created records/
│   │   │   ├── README.md
│   │   │   ├── onLoad.js
│   │   │   └── ui_script.js
│   │   ├── Make OOB Attachment Mandatory/
│   │   │   ├── README.md
│   │   │   └── setAttachmentMandatory.js
│   │   ├── Observe MRVS Events/
│   │   │   ├── MRVSUtils.js
│   │   │   └── README.md
│   │   ├── PersistentAnnouncementBanner/
│   │   │   ├── README.md
│   │   │   └── annoucement_banner.js
│   │   ├── Prevent right click on portals/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Restrict URL Hack using UI script/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   └── User acknowledgement Using UI script and user preferences/
│   │       ├── UIpage.js
│   │       ├── UIscript.js
│   │       └── readme.md
│   ├── UX Client Script Include/
│   │   ├── Access global object from page scripts/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Record Operation Utilities/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   └── Reusable Debounce/
│   │       ├── DebounceUtil.js
│   │       └── README.md
│   ├── UX Client Scripts/
│   │   ├── debug-event/
│   │   │   ├── README.md
│   │   │   └── debug-event.js
│   │   └── debug-state/
│   │       ├── README.md
│   │       └── debug-state.js
│   └── UX Data Broker Transform/
│       ├── FetchSysProperty/
│       │   ├── README.md
│       │   └── sysPropdataBroker.js
│       ├── create-update-user-preference/
│       │   ├── README.md
│       │   └── create-update-user-preference.js
│       └── starter-template/
│           ├── README.md
│           └── template.js
├── Core ServiceNow APIs/
│   ├── GlideAggregate/
│   │   ├── Count All Open Incidents Per Priority/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Count Inactive Users with Active incidents/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Count incidents based on category/
│   │   │   ├── Count incidents based on category.js
│   │   │   └── README.md
│   │   ├── Count open Incidents per Priority and State using GlideAggregate/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create Problem based on incident volume/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Find Oldest Open Incidents per Group/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Incident Count by Priority/
│   │   │   ├── README.md
│   │   │   └── get-incident-count-by-priority.js
│   │   ├── Get top 5 CIs with most number of Open Incidents/
│   │   │   ├── README.md
│   │   │   └── getCIwithmostActiveInc.js
│   │   ├── Group Count/
│   │   │   ├── GlideQuery.js
│   │   │   ├── GlideQuery_readme.md
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Grouping by three columns/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Improve incident handling/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Incident Analysis and Resolution Calculation using Glideaggregate/
│   │   │   ├── Incident_analysis_Resolution_Calculation_GlideAggregate.js
│   │   │   └── README.md
│   │   ├── Incident resolution percentile by assignment group/
│   │   │   ├── PercentileMetrics.js
│   │   │   ├── README.md
│   │   │   └── example_background_usage.js
│   │   ├── LicensedUserCount/
│   │   │   ├── licensed_user_count_by_role.js
│   │   │   └── readme.md
│   │   ├── List of Child Incident of All Incidents/
│   │   │   ├── README.md
│   │   │   └── allChildIncidents.js
│   │   ├── List of Managers in User Table/
│   │   │   ├── ListOfManagers.js
│   │   │   └── README.md
│   │   ├── List the incident priority count under each category/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── SLA Compliance Ratio by Assignment Group/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── SLA Count by Assignment Group/
│   │   │   ├── README.md
│   │   │   └── SLA Count by Assignment Group.js
│   │   ├── ScheduleJob by ExectionTime_perDay/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── SimpleGlideAggregate/
│   │   │   ├── Readme.md
│   │   │   └── SimpleGlideAggregate.js
│   │   ├── Tiered grouping of an integer column/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Top 5 Users with Most Incidents/
│   │   │   ├── README.md
│   │   │   └── top-five-users-with-most-incidents.js
│   │   ├── Using addHaving/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── addTrend/
│   │   │   ├── README.md
│   │   │   └── addTrend.js
│   │   ├── getCountAfterDate/
│   │   │   ├── README.md
│   │   │   └── getCountAfterDate.js
│   │   └── getTotal of aggregate value/
│   │       ├── README.md
│   │       └── getTotal.js
│   ├── GlideAjax/
│   │   ├── AjaxAsyncOnSubmit/
│   │   │   ├── README.md
│   │   │   ├── ajaxasynconsubmitclient.js
│   │   │   └── ajaxasynconsubmitserver.js
│   │   ├── Check Weekend - Client Side/
│   │   │   ├── README.md
│   │   │   └── WeekendChecker.js
│   │   ├── EfficientGlideRecord (Client-side)/
│   │   │   ├── ClientGlideRecordAJAX.js
│   │   │   ├── EfficientGlideRecord (minified) UI Script.js
│   │   │   ├── EfficientGlideRecord UI Script.js
│   │   │   ├── Example usage (client-side code).js
│   │   │   └── README.md
│   │   ├── Fetch Multiple Values in GlideAjax without JSON/
│   │   │   ├── ClientScript.js
│   │   │   ├── README.md
│   │   │   └── TestScriptInclude.js
│   │   ├── Get Field Values/
│   │   │   ├── GetFieldValuesAjax.js
│   │   │   └── README.md
│   │   ├── Get choices from Decision Table/
│   │   │   ├── GetChoicesFromDT.js
│   │   │   ├── README.md
│   │   │   └── addChoicesClient.js
│   │   ├── GlideAjax Example Template/
│   │   │   ├── README.md
│   │   │   ├── code.js
│   │   │   └── example from community.js
│   │   ├── Return Asset(s) for User/
│   │   │   ├── FindUserAsset.js
│   │   │   └── README.md
│   │   ├── ReturnMultipleProperties/
│   │   │   ├── README.md
│   │   │   └── ReturnMultipleProperties.js
│   │   ├── Reusable GlideAjax/
│   │   │   ├── README.md
│   │   │   ├── clientCallableScriptInclude.js
│   │   │   └── clientSideGlideAjax.js
│   │   └── Reusable glideajax table query/
│   │       ├── README.md
│   │       └── getTableColumnsClientSide.js
│   ├── GlideDate/
│   │   └── Convert text date to GlideDate Format/
│   │       ├── Extract and Convert Date in a Text or String to GlideDate Format.js
│   │       └── README.md
│   ├── GlideDateTime/
│   │   ├── AddDays/
│   │   │   ├── README.md
│   │   │   └── addDays.js
│   │   ├── Business time utilities (add, diff, next open, in schedule)/
│   │   │   ├── BusinessTimeUtils.js
│   │   │   ├── README.md
│   │   │   └── example_background_usage.js
│   │   ├── Calculate Due date using user defined schedules/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check if today is weekend/
│   │   │   ├── Check if today is weekend.js
│   │   │   └── README.md
│   │   ├── Convert UTC Time To Local Time/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Convert date format/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── ConvertTicksToGlideDateTime/
│   │   │   ├── ConvertTicksToGlideDateTime.js
│   │   │   └── README.md
│   │   ├── Current Date with Fixed Time/
│   │   │   ├── CurrentDateFixedTime.js
│   │   │   └── README.md
│   │   ├── Due date generation/
│   │   │   ├── README.md
│   │   │   └── duedate_generation.js
│   │   ├── Find Incidents Older Than X Days/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Get Date Difference/
│   │   │   ├── GetDiffernceBtnDates.js
│   │   │   └── README.md
│   │   ├── Get Next Monday Date/
│   │   │   ├── GetNextMondayDate.js
│   │   │   └── README.md
│   │   ├── Get last day of a month/
│   │   │   ├── README.md
│   │   │   └── getLastDayOfMonth.js
│   │   ├── Set time zone and date format to output string dates/
│   │   │   ├── README.md
│   │   │   └── output_string_dates.js
│   │   ├── Start, End, and Duration Updates/
│   │   │   ├── README.md
│   │   │   └── start_end_duration_updates.js
│   │   └── Use timezone in Scoped App/
│   │       ├── README.md
│   │       └── script.js
│   ├── GlideElement/
│   │   ├── Display available choices/
│   │   │   ├── DisplayAvailableChoices.js
│   │   │   └── README.md
│   │   ├── Display base table for each field/
│   │   │   ├── README.md
│   │   │   └── displayBaseTablesForEachField.js
│   │   ├── Smart Field Validation and Dependent Field Derivation Using getError() and setError()/
│   │   │   ├── README.md
│   │   │   ├── br_derive_dependent_fields.js
│   │   │   └── br_validate_short_description.js
│   │   └── getDependent/
│   │       ├── README.md
│   │       └── glideelement.js
│   ├── GlideFilter/
│   │   └── checkRecord/
│   │       ├── README.md
│   │       └── example.js
│   ├── GlideHTTPRequest/
│   │   └── Retrieve table records via GlideHTTPRequest/
│   │       ├── README.md
│   │       └── glidehttprequest.js
│   ├── GlideJsonPath/
│   │   ├── Basic-Example/
│   │   │   ├── README.md
│   │   │   └── examples.js
│   │   └── Create Critical P1 Incident from Alert using GlideJsonPath/
│   │       ├── README.md
│   │       └── script.js
│   ├── GlideModal/
│   │   ├── Add HTML Input Field in GlideModal Window/
│   │   │   ├── README.md
│   │   │   ├── UI Action
│   │   │   └── UI page
│   │   ├── Confirm Message/
│   │   │   ├── README.md
│   │   │   └── glide_confirm.js
│   │   └── Information Message/
│   │       ├── README.md
│   │       ├── glide_info.js
│   │       └── glide_warn.js
│   ├── GlideQuery/
│   │   ├── Basic Wrappers/
│   │   │   ├── README.md
│   │   │   ├── delete_records.js
│   │   │   ├── get_records.js
│   │   │   ├── insert_records.js
│   │   │   └── update_records.js
│   │   ├── Conditional Field Selection/
│   │   │   ├── README.md
│   │   │   └── conditional_field_selection.js
│   │   ├── Field Default/
│   │   │   ├── GlideQueryFieldDefault.js
│   │   │   └── README.md
│   │   ├── FlatMap to Nest New Queries/
│   │   │   ├── README.md
│   │   │   └── getIncidentInfoWithFlatMap.js
│   │   ├── Get Delegates/
│   │   │   ├── GlideQueryGetDelegates.js
│   │   │   └── README.md
│   │   ├── Get User's Roles from User Name/
│   │   │   ├── README.md
│   │   │   └── getUserRoles.js
│   │   ├── Nested WHERE orWHERE GlideQueries/
│   │   │   ├── README.md
│   │   │   └── nestedWhereQueries.js
│   │   └── Remote Table/
│   │       ├── README.md
│   │       └── remotetabldef.js
│   ├── GlideRecord/
│   │   ├── ACL enforcement using GlideRecord/
│   │   │   ├── README.md
│   │   │   └── glideRecordSecure.js
│   │   ├── Add n number of users to n number of groups using server scripts/
│   │   │   ├── AddUserstoGroups.js
│   │   │   └── README.md
│   │   ├── Archiving Old Incident Records to Improve Performance/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── CheckDuplicate-Server/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Choose Window for better performance/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Compare_2_records/
│   │   │   ├── README.md
│   │   │   └── compareRecords.js
│   │   ├── Conditional Batch Update/
│   │   │   ├── README.md
│   │   │   └── batchUpdate.js
│   │   ├── Count Records By Column/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Display list of records based on Users Location/
│   │   │   ├── README.md
│   │   │   └── listOfRecordsBasedOnLocation.js
│   │   ├── Fetch active incidents assigned to a specific group/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Fetch groups that have no members in them/
│   │   │   ├── README.md
│   │   │   └── fetchEmptyGroups.js
│   │   ├── Field Level Audit/
│   │   │   ├── README.md
│   │   │   └── fieldLevelAudit.js
│   │   ├── Find Date Overlapping/
│   │   │   ├── README.md
│   │   │   └── isSimilarDates.js
│   │   ├── Find No Of Days/
│   │   │   ├── README.md
│   │   │   └── findNoOfDays.js
│   │   ├── Get All Groups without Manager/
│   │   │   ├── README.md
│   │   │   └── getGroupsWithoutManager.js
│   │   ├── Get Contains role of a role/
│   │   │   ├── Get contains role of a role.js
│   │   │   └── README.md
│   │   ├── Get Record Fields in JSON/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Reference Record/
│   │   │   ├── README.md
│   │   │   ├── get_assignment_group_from_incident.js
│   │   │   └── get_requested_by_user.js
│   │   ├── Get Variables from RITM/
│   │   │   ├── README.md
│   │   │   └── getVariablesJSON.js
│   │   ├── Get all task records with at least on active child task/
│   │   │   ├── Get all task records with at least on active child task.md
│   │   │   └── code.js
│   │   ├── Get all user's group based on username/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get all users whose email is empty/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get field from GlideRecord/
│   │   │   ├── README.md
│   │   │   └── getField.js
│   │   ├── Get link for the Record/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get-task-containing-sensitive-data/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Gets the display value according to the specified language/
│   │   │   ├── README.md
│   │   │   └── specified_language.js
│   │   ├── GlideRecord to Object/
│   │   │   ├── README.md
│   │   │   └── _grToObject.js
│   │   ├── GlideRecord with Performance Enhancement Condtions/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── LEFT Join/
│   │   │   ├── README.md
│   │   │   ├── example.js
│   │   │   └── script.js
│   │   ├── List of Child Incidents/
│   │   │   ├── README.md
│   │   │   └── listofchildIncident.js
│   │   ├── Multi Row Variable Set(MRVS)/
│   │   │   ├── InsertMRVSRecords.js
│   │   │   └── README.md
│   │   ├── Performance Optimization Techniques/
│   │   │   ├── README.md
│   │   │   ├── indexed_field_queries.js
│   │   │   ├── optimized_batch_processing.js
│   │   │   └── query_performance_comparison.js
│   │   ├── Populate the type of device on any record/
│   │   │   ├── README.md
│   │   │   └── typeOfDevice.js
│   │   ├── Record Activity Collector/
│   │   │   ├── ActivityCollector.js
│   │   │   └── README.md
│   │   ├── Safe Bulk Delete/
│   │   │   ├── README.md
│   │   │   └── safeDelete.js
│   │   ├── Set Template/
│   │   │   ├── README.md
│   │   │   └── setTemplate.js
│   │   ├── Unique Record/
│   │   │   ├── README.md
│   │   │   └── uniquerecord.js
│   │   ├── UpdateMultiple/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Watch_List_functions/
│   │   │   ├── README.md
│   │   │   └── removeSpecificUser.js
│   │   ├── comments on gr.update/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── findDuplicate/
│   │   │   ├── GlideAggregateScript.js
│   │   │   └── README.md
│   │   ├── getEncodedQuery/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   └── isValidGlideRecord/
│   │       ├── README.md
│   │       └── isValidGlideRecord.js
│   ├── GlideSystem/
│   │   ├── Impersonate/
│   │   │   ├── README.md
│   │   │   └── impersonate.js
│   │   ├── Session/
│   │   │   ├── README.md
│   │   │   └── session.js
│   │   ├── Table/
│   │   │   ├── README.md
│   │   │   ├── tableExists.js
│   │   │   └── truncateTable.js
│   │   ├── Trigger Event/
│   │   │   ├── README.md
│   │   │   ├── eventQueue.js
│   │   │   └── eventQueueScheduled.js
│   │   ├── User/
│   │   │   ├── README.md
│   │   │   └── userID.js
│   │   ├── User Display Name/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── date-time/
│   │   │   ├── README.md
│   │   │   ├── beginningOfLastMonth.js
│   │   │   ├── minutesAgoEnd.js
│   │   │   ├── minutesAgoStart.js
│   │   │   ├── monthsAgo.js
│   │   │   ├── monthsAgoEnd.js
│   │   │   ├── monthsAgoStart.js
│   │   │   ├── quartersAgo.js
│   │   │   ├── quartersAgoEnd.js
│   │   │   ├── quartersAgoStart.js
│   │   │   ├── setDisplayValueInternalWithAlternates.js
│   │   │   ├── yearsAgo.js
│   │   │   └── yesterday.js
│   │   ├── hasRoleExactly/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   └── workflowFlush/
│   │       ├── README.md
│   │       └── workflowFlush.js
│   └── GlideTableDescriptor/
│       └── getFirstTableName()/
│           ├── GlideTableDescriptor.js
│           └── README.md
├── Integration/
│   ├── Attachments/
│   │   ├── Attachment to Base64/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Attachment to base64 in scope/
│   │   │   ├── README.md
│   │   │   └── attachmentToBase64Scope.js
│   │   ├── Base 64 to Attachment/
│   │   │   ├── README.md
│   │   │   └── base64toattachment.js
│   │   ├── CSVParser/
│   │   │   ├── README.md
│   │   │   ├── csvparser.js
│   │   │   └── script.js
│   │   ├── Calculate attachment hash code/
│   │   │   ├── README.md
│   │   │   └── calculateHash.js
│   │   ├── Convert KnowledgePage to PDF/
│   │   │   ├── Convert_KnowledgePage_to_PDF.js
│   │   │   └── README.md
│   │   ├── Create Attachments/
│   │   │   ├── Create attachment via script.js
│   │   │   └── README.md
│   │   ├── Delete RITM Attachment/
│   │   │   ├── README.md
│   │   │   └── deleteattachment.js
│   │   ├── ExportAttachmentsToMidServer/
│   │   │   ├── README.md
│   │   │   └── exportattachmentstomid.js
│   │   ├── ExportRecordsAnyFormat/
│   │   │   ├── README.md
│   │   │   └── exportRecords.js
│   │   ├── Send Attachment to MID Server/
│   │   │   ├── README.md
│   │   │   └── Send Attachment to MID Server.js
│   │   ├── Show RITM has Attachments/
│   │   │   ├── README.md
│   │   │   ├── ShowRITMhasAttachment_BR.js
│   │   │   └── ShowRITMhasAttachment_CS.js
│   │   └── attachmentToXMLParse/
│   │       ├── README.md
│   │       └── code.js
│   ├── AzureAD Integration/
│   │   └── Dynamically create reference records/
│   │       ├── Load_cmn_location.js
│   │       └── README.md
│   ├── Data Export to ML Pipeline/
│   │   └── Export Data for ML Training/
│   │       ├── README.md
│   │       ├── data_export_script_include.js
│   │       └── export_data_rest_api.js
│   ├── GraphQL Integration API/
│   │   └── Incident GraphQL resolvers/
│   │       ├── CI Resolver.js
│   │       ├── GraphQL schema.js
│   │       ├── Incident Resolver.js
│   │       ├── README.md
│   │       └── User Resolver.js
│   ├── ITSM/
│   │   └── Bulk task_ci REST API/
│   │       ├── README.md
│   │       └── liveCItoTAsk.js
│   ├── Import Set API/
│   │   └── Attachment Handler/
│   │       ├── README.md
│   │       ├── attachmentParser.js
│   │       └── attachmentParserUtil.js
│   ├── Import Sets/
│   │   ├── Import sets overview/
│   │   │   ├── ModelManufacture.README.md
│   │   │   ├── ModelManufacture.js
│   │   │   ├── README.md
│   │   │   ├── TriggerDataSource.README.md
│   │   │   └── TriggerDataSource.js
│   │   └── debug/
│   │       ├── README.md
│   │       └── debugImportSet.js
│   ├── Import Sets Debug/
│   │   └── Debug import set payloads/
│   │       ├── README.md
│   │       └── debugImportSet.js
│   ├── MIDServer/
│   │   └── API Class Examples/
│   │       ├── README.md
│   │       └── scripts.js
│   ├── Mail Scripts/
│   │   ├── Add Checklist/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Add HTML Table for Requested Item Variables/
│   │   │   ├── README.md
│   │   │   └── requested_items_detail.js
│   │   ├── Add Users in Watchlist to CC/
│   │   │   ├── Add Users in Watchlist to CC
│   │   │   └── README.md
│   │   ├── Add a link which opens ticket in Service Portal/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Call Script Include in Notification Mail Script/
│   │   │   ├── README.md
│   │   │   └── call_script_include.js
│   │   ├── Call UI Message or System Property in Notification Mail Script/
│   │   │   ├── README.md
│   │   │   └── call_UIMessage_or_sysProperty.js
│   │   ├── Configurer Approve Reject Buttons Using Email Scripts/
│   │   │   ├── Email Script.js
│   │   │   └── README.md
│   │   ├── Convert DateTime to Date/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Exclude DateTime details from Comments/
│   │   │   ├── README.md
│   │   │   └── commentsWithoutDateTime.js
│   │   ├── HTML Table Creation from ServiceNow Table/
│   │   │   ├── MailScript.js
│   │   │   └── README.md
│   │   ├── Open Survey In Portal/
│   │   │   ├── README.md
│   │   │   └── open_survey.js
│   │   ├── Print variables to mail/
│   │   │   ├── README.md
│   │   │   └── printVarsToMail.js
│   │   ├── PrintRecordDetailsinEmailBody/
│   │   │   ├── README.md
│   │   │   └── print_record_details_to_body.js
│   │   ├── RITM Reject Reason/
│   │   │   ├── README.md
│   │   │   └── reject_reason_new.js
│   │   ├── Redact PII from outbound email body/
│   │   │   ├── README.md
│   │   │   └── mail_redact_pii.js
│   │   └── cc all group members/
│   │       ├── README.md
│   │       └── cc all group members.js
│   ├── RESTMessageV2/
│   │   ├── API for Automatic Group creation/
│   │   │   ├── Automate Group Creation.js
│   │   │   └── README.md
│   │   ├── Aadhaar Verification/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   ├── Auth2 client credentials token cache with auto-refresh/
│   │   │   ├── OAuthClientCredsHelper.js
│   │   │   ├── README.md
│   │   │   └── example_background_usage.js
│   │   ├── AzureDevOps/
│   │   │   ├── README.md
│   │   │   └── azure.js
│   │   ├── Currency Conversion - Using CurrencyFreaks API/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── DynamicOutboundEnpoints/
│   │   │   ├── README.md
│   │   │   └── scriptinclude.js
│   │   ├── External ML Model Integration/
│   │   │   └── Call ML Prediction API/
│   │   │       ├── README.md
│   │   │       └── ml_prediction_script_include.js
│   │   ├── GET with backoff, telemetry, and simple pagination/
│   │   │   ├── README.md
│   │   │   ├── RestGetWithBackoff.js
│   │   │   └── example_background_usage.js
│   │   ├── Google-Chat/
│   │   │   ├── README.md
│   │   │   └── sendgchatmessage.js
│   │   ├── Integration Between 2 Instance/
│   │   │   ├── IntegrationBetweenTwoInstancesWithReturnoftheCreatedRecordNumber.js
│   │   │   └── README.md
│   │   ├── Jira/
│   │   │   ├── README.md
│   │   │   └── createJiraTask.js
│   │   ├── Reusable RESTMessageV2 retry pattern/
│   │   │   ├── README.md
│   │   │   └── ReusableRESTMesaageV2Retry.js
│   │   ├── Smart Incident Categorizer AI/
│   │   │   ├── README.md
│   │   │   └── smart-incident.js
│   │   ├── UPS Tracking/
│   │   │   ├── README.md
│   │   │   └── trackUPS.js
│   │   ├── Web Scraping REST Message/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   └── youtubeclient/
│   │       ├── README.md
│   │       └── youtubeclient.js
│   ├── Rest Integration Send Attachment Payload/
│   │   └── Send attachment payload via REST/
│   │       ├── DataLoaderFromIntuneAPI.js
│   │       ├── DataloaderFromIntuneAPI_README.md
│   │       ├── README.md
│   │       └── attachment_payload_script.js
│   ├── Scripted REST Api/
│   │   ├── Approval APIs/
│   │   │   ├── ApprovalRestResource.js
│   │   │   ├── README.md
│   │   │   ├── RejectRestResource.js
│   │   │   └── SRApprovalsAPI.js
│   │   ├── Approval on Behalf/
│   │   │   ├── README.md
│   │   │   └── approval_on_behalf.js
│   │   ├── CMDB API/
│   │   │   ├── CmdbApi.js
│   │   │   ├── CreateCIs.js
│   │   │   ├── CreateCiRelationship.js
│   │   │   ├── DeleteCI.js
│   │   │   ├── DeleteCiRelationship.js
│   │   │   ├── README.md
│   │   │   ├── RetrieveCiGroup.js
│   │   │   ├── RetrieveCis.js
│   │   │   ├── Retrieve_CI_Relationships.js
│   │   │   ├── RetriveCiRelationshipTypes.js
│   │   │   └── UpdateCi.js
│   │   ├── CURL Script to create incident via tableAPI/
│   │   │   ├── README.md
│   │   │   └── script.curl
│   │   ├── CopyAI Generative AI example/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create Catalog Items Dynamically/
│   │   │   ├── README.md
│   │   │   └── catalog.js
│   │   ├── Difference between two users/
│   │   │   ├── README.md
│   │   │   ├── output.txt
│   │   │   └── script.js
│   │   ├── DomainSeperation/
│   │   │   ├── README.md
│   │   │   └── create.js
│   │   ├── Get_Choices/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Group Membership API/
│   │   │   ├── README.md
│   │   │   └── group_membership.js
│   │   ├── MID Server status JSON endpoint/
│   │   │   ├── README.md
│   │   │   └── mid_server_status_api.js
│   │   ├── Promise API Call/
│   │   │   ├── README.md
│   │   │   └── promiseApiCall.js
│   │   ├── Retrieve all variables from RITM/
│   │   │   ├── CHVarUtils_ScriptInclude.js
│   │   │   ├── README.md
│   │   │   ├── output_example.js
│   │   │   └── scripted_rest_api.js
│   │   ├── Tag API/
│   │   │   ├── README.md
│   │   │   └── insert-tag.js
│   │   ├── Update the variables or fields in sc_task or RITM/
│   │   │   ├── README.md
│   │   │   └── Scripted_rest_api.js
│   │   ├── Webhook receiver with HMAC SHA-256 validation/
│   │   │   ├── HmacUtils.js
│   │   │   ├── README.md
│   │   │   └── WebhookHmacReceiver.js
│   │   └── compare roles/
│   │       ├── README.md
│   │       ├── output.txt
│   │       └── script.js
│   └── Scripted SOAP Incident Creation/
│       └── Scripted SOAP incident creation/
│           ├── README.md
│           └── Scripted SOAP incident creation.js
├── Modern Development/
│   ├── ECMASCript 2021/
│   │   └── Server-side ECMAScript 2021 examples/
│   │       ├── README.md
│   │       ├── arrowfunctions.js
│   │       ├── class.js
│   │       ├── const.js
│   │       ├── defaultparms.js
│   │       ├── destructuring.js
│   │       ├── forof.js
│   │       ├── let.js
│   │       ├── map.js
│   │       ├── set.js
│   │       ├── spread.js
│   │       ├── symbol.js
│   │       └── templatestringsandliterals.js
│   ├── GraphQL/
│   │   ├── Sample INC Details GraphQL Code Snippet/
│   │   │   ├── CMDB Resolver.js
│   │   │   ├── GetIncident_Details.gql
│   │   │   ├── Incident Resolver.js
│   │   │   ├── README.md
│   │   │   ├── User Resolver.js
│   │   │   └── resolver mapping.js
│   │   ├── Sample group query/
│   │   │   ├── README.md
│   │   │   ├── addUserToGroup.js
│   │   │   ├── add_user_to_group_broker_properties.json
│   │   │   ├── add_user_to_group_broker_query.gql
│   │   │   ├── getGroups.js
│   │   │   ├── get_groups_broker_query.gql
│   │   │   ├── resolver_mappings.json
│   │   │   └── schema.gql
│   │   └── Sample users query/
│   │       ├── README.md
│   │       ├── getUserGroups.js
│   │       ├── getUserObject.js
│   │       ├── getUserRoles.js
│   │       ├── get_user_broker_properties.json
│   │       ├── get_user_broker_query.gql
│   │       ├── resolver_mappings.json
│   │       └── schema.gql
│   ├── NOW Experience/
│   │   └── JSX Cheat Sheet/
│   │       └── README.md
│   ├── Service Portal/
│   │   ├── Active Tickets Dashboard/
│   │   │   ├── README.md
│   │   │   ├── active_tasks_service_script.js
│   │   │   ├── active_tickets_client_script.js
│   │   │   ├── active_tickets_dashboard.css
│   │   │   └── active_tickets_dashboard.html
│   │   ├── Search Sources/
│   │   │   ├── Approvals.html
│   │   │   ├── DataFetchScript.js
│   │   │   └── README.md
│   │   ├── dark-mode-switcher/
│   │   │   ├── README.md
│   │   │   ├── avatarDropDown.js
│   │   │   ├── dark_mode.scss
│   │   │   ├── portal_theme.scss
│   │   │   └── themeSwitcherMenu.js
│   │   ├── instance-badge/
│   │   │   └── README.md
│   │   ├── sn-avatar/
│   │   │   └── README.md
│   │   ├── sn-choice-list/
│   │   │   └── README.md
│   │   ├── sn-record-picker/
│   │   │   └── README.md
│   │   ├── sn-time-ago/
│   │   │   ├── README.md
│   │   │   └── sp_widget_sn_timeago_demo.xml
│   │   ├── sn-watchlist/
│   │   │   ├── README.md
│   │   │   └── snWatchListDirective.js
│   │   ├── sp-date-picker/
│   │   │   └── README.md
│   │   ├── sp-editable-field/
│   │   │   └── README.md
│   │   ├── sp-modal/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── spGlideAjax/
│   │   │   ├── README.md
│   │   │   └── spGlideAjaxService.js
│   │   ├── sparkling/
│   │   │   └── README.md
│   │   ├── userPreferences/
│   │   │   └── README.md
│   │   └── validate-data-field/
│   │       ├── README.md
│   │       └── script.js
│   └── Service Portal Widgets/
│       ├── Accordion Widget/
│       │   ├── CSS-SCSS.scss
│       │   ├── HTML Template.html
│       │   └── README.md
│       ├── AngularJS Directives and Filters/
│       │   ├── README.md
│       │   ├── client_script.js
│       │   ├── css.css
│       │   ├── html.html
│       │   └── server_script.js
│       ├── Animated Notification Badge/
│       │   ├── README.md
│       │   ├── notification-badge.css
│       │   ├── notification-badge.html
│       │   └── notification-badge.js
│       ├── ApplyCSSDynamically/
│       │   ├── README.md
│       │   ├── applycssdynamically.html
│       │   ├── applycssdynamicallyclient.js
│       │   └── applycssdynamicallyserver.js
│       ├── Batman Animation/
│       │   ├── README.md
│       │   ├── client_script.js
│       │   ├── html_template.html
│       │   └── style.css
│       ├── Calendar widget/
│       │   ├── README.md
│       │   ├── index.html
│       │   ├── script.js
│       │   └── style.css
│       ├── Card Image Link/
│       │   ├── README.md
│       │   ├── mm_card.html
│       │   ├── mm_card_client_script.js
│       │   ├── mm_card_css.css
│       │   ├── mm_card_server_script.js
│       │   └── mm_card_widget_schema.json
│       ├── Catalog Item Explorer/
│       │   ├── README.md
│       │   ├── client_script.js
│       │   ├── css.scss
│       │   ├── options_schema.json
│       │   ├── script.js
│       │   └── template.html
│       ├── Change Calendar Report/
│       │   ├── Body HTML template.html
│       │   ├── CSS
│       │   ├── Client Controller
│       │   ├── README.md
│       │   └── Server Side Script
│       ├── Change Notification Preferences/
│       │   ├── README.md
│       │   ├── client.js
│       │   ├── css.css
│       │   ├── html.html
│       │   ├── notification_preference.js
│       │   └── server.js
│       ├── Check if user has specific role inside the widget/
│       │   ├── ClientScript.js
│       │   └── README.md
│       ├── Clickable SVG Image/
│       │   ├── README.md
│       │   ├── client.js
│       │   ├── echarts.js
│       │   └── html.html
│       ├── Client side pagination/
│       │   ├── README.md
│       │   └── script.js
│       ├── Configurable Card Widget/
│       │   ├── CSS-SCSS.scss
│       │   ├── Client Script.js
│       │   ├── HTML Template.html
│       │   ├── README.md
│       │   └── Widget Options.json
│       ├── Create diagram using GoJS library/
│       │   ├── README.md
│       │   ├── body.html
│       │   ├── client.js
│       │   └── style.css
│       ├── Create diagram using Highcharts library/
│       │   ├── README.md
│       │   ├── body.html
│       │   └── client.js
│       ├── Custom Greetings in portal homepage/
│       │   ├── README.md
│       │   ├── homepage-search-client.js
│       │   └── homepage-search.html
│       ├── Custom attachment variable/
│       │   ├── README.md
│       │   ├── controller.js
│       │   └── template.html
│       ├── Digital Clock/
│       │   ├── README.md
│       │   ├── index.html
│       │   ├── script.js
│       │   └── style.css
│       ├── Drag & drop Widget/
│       │   ├── README.md
│       │   ├── client.js
│       │   ├── html.html
│       │   └── server.js
│       ├── Drawer Buttons/
│       │   ├── README.md
│       │   ├── html_template.html
│       │   └── style.css
│       ├── Dropdown Widget/
│       │   ├── README.md
│       │   ├── index.html
│       │   ├── script.js
│       │   └── style.css
│       ├── Dynamic Table and Record Selector/
│       │   ├── Client Side.js
│       │   ├── HTML.html
│       │   └── README.md
│       ├── Emoji Replacer Widget/
│       │   ├── CSS-SCSS.css
│       │   ├── Client Script.js
│       │   ├── HTML.html
│       │   └── README.md
│       ├── Export table in portal/
│       │   ├── README.md
│       │   ├── export.html
│       │   └── export.js
│       ├── Fill survey or item from url/
│       │   ├── README.md
│       │   └── Survey or form filler widget.js
│       ├── Floater Feedback Widget/
│       │   ├── README.md
│       │   └── feeback_floater.js
│       ├── Generate QrCode/
│       │   ├── Dependencies/
│       │   │   └── qrcode.js
│       │   ├── README.md
│       │   ├── qrcode.html
│       │   └── qrcode_client.js
│       ├── Guest Login Modal/
│       │   ├── README.md
│       │   ├── Service Portal - Guest Login Modal Widget.xml
│       │   ├── client.js
│       │   ├── ng-template.html
│       │   ├── optionSchema.json
│       │   └── server.js
│       ├── HR Task Progress Bar/
│       │   ├── CSS.js
│       │   ├── HTML.js
│       │   ├── README.md
│       │   ├── Server.js
│       │   └── client_script.js
│       ├── HTML List Table from GlideRecord with JSon/
│       │   ├── README.md
│       │   ├── ServerScript.js
│       │   └── html.html
│       ├── Image icon Menu/
│       │   ├── README.md
│       │   ├── Server.js
│       │   ├── client.js
│       │   ├── iconWidgetinstance.js
│       │   ├── iconmenu.css
│       │   └── iconmenu.html
│       ├── ImportXml/
│       │   ├── README.md
│       │   └── importXml.js
│       ├── Incident Sound Alerts/
│       │   ├── README.md
│       │   └── incident_alerts_widget.js
│       ├── JSON Beautifier/
│       │   ├── Client_side.js
│       │   ├── HTML.html
│       │   └── README.md
│       ├── Konami Code Easter Egg/
│       │   ├── KonamiCodeEasterEgg.js
│       │   ├── KonamiCodeEasterEggV2.js
│       │   └── README.md
│       ├── Language Selector/
│       │   ├── README.md
│       │   ├── language-selector.client.js
│       │   ├── language-selector.css
│       │   ├── language-selector.html
│       │   └── language-selector.server.js
│       ├── Live Ticket Counter Service Portal Widget/
│       │   ├── Client Controller
│       │   ├── Live Ticket Counter .css
│       │   ├── Live Ticket Counter.html
│       │   ├── README.md
│       │   └── Server Script
│       ├── Location hierarchy/
│       │   ├── README.md
│       │   ├── client controller.js
│       │   ├── css.css
│       │   ├── html.html
│       │   └── server script.js
│       ├── Manage Delegates Widget/
│       │   ├── README.md
│       │   ├── delegates.html
│       │   ├── delegates.scss
│       │   ├── delegates_client.css
│       │   └── delegates_server.js
│       ├── Mouse Effect/
│       │   ├── README.md
│       │   ├── index.html
│       │   ├── script.js
│       │   └── style.css
│       ├── My Assets/
│       │   ├── README.md
│       │   ├── my_assets.css
│       │   ├── my_assets.html
│       │   └── my_assets_server_side.js
│       ├── My Mentioned Items/
│       │   ├── CSS.js
│       │   ├── HTML.js
│       │   ├── README.md
│       │   └── server script.js
│       ├── My Reminders/
│       │   ├── README.md
│       │   ├── reminders.html
│       │   ├── reminders.scss
│       │   ├── reminders_client.js
│       │   └── reminders_server.js
│       ├── Open in Platform/
│       │   ├── README.md
│       │   ├── body.html
│       │   ├── css.js
│       │   ├── option schema.js
│       │   └── server.js
│       ├── Paginated Data/
│       │   ├── README.md
│       │   ├── paginated-data-server-script.js
│       │   └── paginated-data.html
│       ├── Pagination widget with next and previous button/
│       │   ├── CSS.css
│       │   ├── HTML_Script.html
│       │   ├── README.md
│       │   ├── client_controller.js
│       │   └── server_script.js
│       ├── Portal widgets Performance Test/
│       │   ├── README.md
│       │   └── code.js
│       ├── Recently Viewed Items/
│       │   ├── README.md
│       │   └── recently-viewed-items-widget.js
│       ├── Record process flow/
│       │   ├── PortalUtils.js
│       │   ├── PortalUtilsBase.js
│       │   ├── README.md
│       │   ├── body.html
│       │   ├── server.js
│       │   └── style.css
│       ├── RecordPickerForListReference/
│       │   ├── README.md
│       │   ├── recordpicker.html
│       │   ├── recordpickerclient.js
│       │   └── recordpickerserver.js
│       ├── Redirect to different portals based on browser/
│       │   ├── README.md
│       │   └── redirect_to_different_portals_based_on_browser.js
│       ├── Set Variables By Url/
│       │   ├── README.md
│       │   └── client.js
│       ├── Signature Pad Widget/
│       │   ├── Client Controller.js
│       │   ├── HTML File.html
│       │   └── README.md
│       ├── Spiderman Animation/
│       │   ├── README.md
│       │   ├── client_script.js
│       │   ├── html_template.html
│       │   └── style.css
│       ├── Squid Game Themed Incident-Request-Knowledge/
│       │   ├── README.md
│       │   ├── squid_game_irk.css
│       │   └── squid_game_irk.html
│       ├── Squid Game Themed Simple List/
│       │   ├── README.md
│       │   ├── squid_game_simple_list.css
│       │   └── squid_game_simple_list.html
│       ├── Squid Game Themed User Profile Card/
│       │   ├── README.md
│       │   ├── squid_game_user_profile_card.css
│       │   └── squid_game_user_profile_card.html
│       ├── Standard Ticket Header With On Hold Reason/
│       │   └── README.md
│       ├── Standard Ticket Page Enhanced Action Widget/
│       │   ├── README.md
│       │   └── sp_widget_std_action.xml
│       ├── Stepper/
│       │   ├── CSS.css
│       │   ├── HTML.html
│       │   ├── README.md
│       │   └── Server Script.js
│       ├── Sticky Notes/
│       │   ├── CSS-SCSS.css
│       │   ├── Client Script.js
│       │   ├── HTML.html
│       │   ├── README.md
│       │   └── Server Side.js
│       ├── Tab Panel Widget/
│       │   ├── CSS-SCSS.scss
│       │   ├── HTML Template.html
│       │   ├── Options.json
│       │   └── README.md
│       ├── Upload Files/
│       │   ├── README.md
│       │   ├── body.html
│       │   ├── client.js
│       │   ├── server.js
│       │   └── style.css
│       ├── custom404/
│       │   ├── HTML.js
│       │   ├── README.md
│       │   ├── css.js
│       │   └── server.js
│       ├── g_form on SP/
│       │   ├── README.md
│       │   ├── gform_on_sp.html
│       │   ├── gform_on_sp_client.js
│       │   └── gform_on_sp_server.js
│       └── iFrame/
│           ├── README.md
│           ├── Service Portal - iFrame Widget.xml
│           ├── client.js
│           ├── optionsSchema.json
│           ├── server.js
│           ├── style.scss
│           └── template.html
├── PAGES.md
├── README.md
├── Server-Side Components/
│   ├── Background Scripts/
│   │   ├── ACL Audit Utility/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Access Analysis Utility/
│   │   │   ├── Access alaysis script.js
│   │   │   └── README.md
│   │   ├── Add Bookmarks - ITIL Users/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Add Comments/
│   │   │   ├── README.md
│   │   │   └── addComment.js
│   │   ├── Add No Audit Attribute To Multiple Dictionary Entries/
│   │   │   ├── AddNoAuditAttributeToMultipleDictionaryEntries.js
│   │   │   └── README.md
│   │   ├── Add Standard Change Model/
│   │   │   ├── README.md
│   │   │   └── addStandardChgModel.js
│   │   ├── Adding bookmark to Favorites tab/
│   │   │   ├── Adding bookmark into Favorites tab.js
│   │   │   └── README.md
│   │   ├── Analyze user access UI page/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Approval Reminders/
│   │   │   ├── README.md
│   │   │   └── approvalReminderToDelegates.js
│   │   ├── Attach Workflow to Existing Record/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Attachment Size Audit/
│   │   │   ├── README.md
│   │   │   └── attachmentSizeAudit.js
│   │   ├── Auto-Deactivate Users Not Logged In for X Days/
│   │   │   ├── Auto_Deactivate_Users_Not_Logged_In_for_X_Days.js
│   │   │   └── README.md
│   │   ├── Bulk Change of Incident Priority Based on Category/
│   │   │   ├── Bulk Change of Incident Priority Based on Category.js
│   │   │   └── README.md
│   │   ├── Bulk Create Records in Multiple Tables/
│   │   │   ├── BulkCreateRecordsMultipleTables.js
│   │   │   └── README.md
│   │   ├── Bulk Delete Records in Multiple Tables with Conditions/
│   │   │   ├── BulkDeleteRecordsMultipleTablesWithConditions.js
│   │   │   └── README.md
│   │   ├── Bulk Resolve Old Incidents/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Bulk Role Assignment Based on Conditions/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Bulk Share - Reports/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Bulk Update Tables/
│   │   │   ├── BulkUpdateWithConditions.js
│   │   │   └── README.md
│   │   ├── Bulk Update of Fulfillment Group References in Published KB Articles/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Calculate Week/
│   │   │   ├── Readme.md
│   │   │   └── week_calculation.js
│   │   ├── Capitalize Title Words/
│   │   │   ├── CapitalizeTitleWords.js
│   │   │   └── README.md
│   │   ├── Capture Scheduled Job in an Update set/
│   │   │   ├── README.md
│   │   │   └── captureScheduledJob.js
│   │   ├── Capturing a record in to the current update set/
│   │   │   ├── Capturing a record in to the current update set using background script.js
│   │   │   └── README.md
│   │   ├── Change Approver/
│   │   │   ├── BgScript.js
│   │   │   └── README.md
│   │   ├── Change Update Set Application Scope/
│   │   │   ├── README.md
│   │   │   └── changeApplicationScope.js
│   │   ├── Check Record Creation over 90 days and output age/
│   │   │   ├── README.md
│   │   │   └── checkdateover90.js
│   │   ├── Check String is Valid JSON/
│   │   │   ├── README.md
│   │   │   └── checkStringisValidJson.js
│   │   ├── Check for duplicates on multiple criteria/
│   │   │   ├── README.md
│   │   │   └── check-for-ducplicates.js
│   │   ├── Clone User Groups/
│   │   │   ├── cloneUserGroups.js
│   │   │   └── readme.md
│   │   ├── Clone User Record/
│   │   │   ├── README.md
│   │   │   └── cloneUserRec.js
│   │   ├── Clone User with Roles and Groups/
│   │   │   ├── README.md
│   │   │   └── cloneUser.js
│   │   ├── Compare Roles Between Two Users/
│   │   │   ├── README.md
│   │   │   └── compare-roles-2-users.js
│   │   ├── Console timing API/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Convert Date Time/
│   │   │   ├── README.md
│   │   │   └── convertTimeZone.js
│   │   ├── Convert Incident Records to JSON/
│   │   │   ├── README.md
│   │   │   ├── Readme.md
│   │   │   ├── convert code.js
│   │   │   └── convert incidents to JSON.js
│   │   ├── Convert comma separated values in string to columns/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Copy Field Values and Insert in Target Record/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Copy Source User Group Memberships to Selected Users/
│   │   │   ├── Readme.md
│   │   │   └── copy_source_user_group_memberships_to_selected_users.js
│   │   ├── Copy table fields from one table to another/
│   │   │   ├── Copy fields from one table to another
│   │   │   └── README.md
│   │   ├── Copy table name list header action/
│   │   │   ├── README.md
│   │   │   ├── addMenuItem.js
│   │   │   └── removeMenuItem.js
│   │   ├── Currency Conversion/
│   │   │   ├── README.md
│   │   │   └── currencyConvert.js
│   │   ├── Currency Formatting/
│   │   │   ├── README.md
│   │   │   └── currencyFormatting.js
│   │   ├── Custom Table Usage/
│   │   │   ├── README.md
│   │   │   └── customTableUsage.js
│   │   ├── Deactivate groups with no members and inactive manager/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Decrypt Password Field/
│   │   │   ├── README.md
│   │   │   └── decryptfield.js
│   │   ├── Delete Attachments - Closed Approvals/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Discover Datacenters for Service Accounts/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Duplicate Client Script Audit for Tables/
│   │   │   ├── README.md
│   │   │   └── backGroundScriptDuplicateClientScript.js
│   │   ├── Duplicate Finder/
│   │   │   ├── findDuplicatesByCombination.js
│   │   │   ├── findDuplicatesBySingleField.js
│   │   │   └── readme.md
│   │   ├── Encode and Decode URI/
│   │   │   ├── README.md
│   │   │   └── encodeURIdecodeURI.js
│   │   ├── Encrypt & decrypt payload via base64/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Execute Logic on Weekdays/
│   │   │   ├── README.md
│   │   │   └── doTaskonWeekdays.js
│   │   ├── Extend Code Search Base/
│   │   │   ├── README.md
│   │   │   └── add_more_tables_to_code_search.js
│   │   ├── Extract Value from JSON/
│   │   │   ├── extractValueFromJSON.js
│   │   │   └── readme.md
│   │   ├── Fetch Active Groups list without members/
│   │   │   ├── README.md
│   │   │   └── activeGroupsWithoutMembers.js
│   │   ├── Find All Categories Related to a Knowledge Base/
│   │   │   ├── GetAllTheCategoriesRelatedToAKnowledgeBase.js
│   │   │   └── README.md
│   │   ├── Find Groups Without Members/
│   │   │   ├── Get Groups with no Members.js
│   │   │   └── README.md
│   │   ├── Find Similar Tickets/
│   │   │   ├── README.md
│   │   │   └── findSimilarTickets.js
│   │   ├── Find Top-Level Manager Hierarchy/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   ├── Find sys_id named records/
│   │   │   ├── README.md
│   │   │   └── findSysIdNamedFiles.js
│   │   ├── Finding groups with inactive managers/
│   │   │   ├── Finding groups with inactive managers.js
│   │   │   └── README.md
│   │   ├── Fix reference to Choice/
│   │   │   ├── README.md
│   │   │   ├── script_v1.js
│   │   │   └── script_v2.js
│   │   ├── FlushOutbox/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Force new value to read only or protected field/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Form Field Count/
│   │   │   ├── Form Field Count.js
│   │   │   └── README.md
│   │   ├── Generate JWT Token/
│   │   │   ├── README.md
│   │   │   └── generateJWTToken.js
│   │   ├── Generate Random Incident Records/
│   │   │   ├── README.md
│   │   │   └── generate_random_incident.js
│   │   ├── Generate statistics about events created today/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Active MID Servers/
│   │   │   ├── GetActiveMidServer.js
│   │   │   └── README.md
│   │   ├── Get Agent log from Mid Server/
│   │   │   ├── README.md
│   │   │   └── getMidServerAgentLog.js
│   │   ├── Get All Child Roles/
│   │   │   ├── GetAllChildRolesRecursive.js
│   │   │   └── README.md
│   │   ├── Get All the CI classes/
│   │   │   ├── README.md
│   │   │   └── getAllCiClasses.js
│   │   ├── Get Array of Records with Attachments/
│   │   │   ├── incHavingAttachments.js
│   │   │   └── readme.md
│   │   ├── Get Duplicate/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get GlideRecord Reference Field/
│   │   │   ├── README.md
│   │   │   └── get_glide_record_reference_field.js
│   │   ├── Get Installed Plugins details/
│   │   │   ├── README.md
│   │   │   └── getInstalledPluginInfo.js
│   │   ├── Get Instance DB Size/
│   │   │   ├── README.md
│   │   │   └── getInstDBSize.js
│   │   ├── Get Instance Info/
│   │   │   ├── README.md
│   │   │   └── getInstanceInfo.js
│   │   ├── Get Journal Entry as HTML Without Header/
│   │   │   ├── GetJournalEntryAsHTMLWithoutHeader.js
│   │   │   └── README.md
│   │   ├── Get My Groups/
│   │   │   ├── README.md
│   │   │   └── getMyGroups.js
│   │   ├── Get Outstanding Incidents/
│   │   │   ├── README.md
│   │   │   └── get-outstanding-incidents.js
│   │   ├── Get Risk and Controls in Project/
│   │   │   ├── README.md
│   │   │   └── risksandcontrolsinProject.js
│   │   ├── Get The Last Journal Comment Date/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get User's Favorite Hierarchy/
│   │   │   ├── GetUsersFavoriteHierarchy.js
│   │   │   └── README.md
│   │   ├── Get all users where manager is empty/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get current logged in user count in all nodes of instance/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get incident count based on priority/
│   │   │   ├── IncidentCount.js
│   │   │   └── README.md
│   │   ├── Get list of Update Set types/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get the current version of an application/
│   │   │   ├── README.md
│   │   │   └── currentversionscript.js
│   │   ├── GetFlowNames/
│   │   │   ├── README.md
│   │   │   └── getFlowNames.js
│   │   ├── GetRecordsFromMultipleTables/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── GreenHouse ServiceNow Integration Snippet/
│   │   │   ├── GreenHouse_SN_Snippet.js
│   │   │   └── README.md
│   │   ├── IRE Simulation/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Identification and Reconciliation/
│   │   │   ├── README.md
│   │   │   └── identificationReconciliationOnPayload.js
│   │   ├── Identify Inactive users with tickets/
│   │   │   ├── README.md
│   │   │   └── identify_inactive_users_with_open_tickets.js
│   │   ├── Incident Auto-Categorization Based on Keywords/
│   │   │   ├── Incident Auto-Categorization Based on Keywords.js
│   │   │   └── README.md
│   │   ├── Limit String and Add Elipses/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── List Stories and Tasks by User and Date Range/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── List fields in table/
│   │   │   ├── README.md
│   │   │   └── listFieldsInTable.js
│   │   ├── Logout User/
│   │   │   ├── README.md
│   │   │   └── logoutUser.js
│   │   ├── Merge Duplicate User Records Automatically/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   ├── Move Customer Updates/
│   │   │   ├── README.md
│   │   │   └── moveCustomerUpdates.js
│   │   ├── Notify User of Password Expiry/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Orphaned Users/
│   │   │   ├── README.md
│   │   │   └── Users with no groups and roles.js
│   │   ├── Parse ISO8601 Date/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Prevent unnecessary notifications from being sent out/
│   │   │   ├── Prevent_unnecessary_notifications_from_being_sent_out.js
│   │   │   └── README.md
│   │   ├── QuickCurrent/
│   │   │   ├── README.md
│   │   │   └── quickCurrent.js
│   │   ├── Read Encoded Query/
│   │   │   ├── README.md
│   │   │   └── readQuery.js
│   │   ├── Reassignment of Manager from Group and User Table/
│   │   │   ├── README.md
│   │   │   └── backgroundScriptManagerReassign.js
│   │   ├── Remove Inactive User/
│   │   │   ├── README.md
│   │   │   └── Remove Inactive user from active group.js
│   │   ├── Remove element from list field/
│   │   │   ├── README.md
│   │   │   └── removeFromList.js
│   │   ├── Remove roles from inactive user/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Rename reports - Avoid duplicate names/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Replace Text/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Restart RITM Flow/
│   │   │   ├── README.md
│   │   │   └── restart-ritm-flow.js
│   │   ├── Retiring KB articles in bulk/
│   │   │   ├── Readme.md
│   │   │   └── Retire Articles.js
│   │   ├── Retrieve Impersonation Insights/
│   │   │   ├── impersonationInsights.js
│   │   │   └── readme.md
│   │   ├── Retrieve MRVS Name and Value/
│   │   │   ├── RetrieveMRVSNameAndValue.js
│   │   │   └── readme.md
│   │   ├── Retrieve age of Incident/
│   │   │   ├── README.md
│   │   │   └── ageOfIncidents.js
│   │   ├── RetrieveAPIKey/
│   │   │   ├── Readme.md
│   │   │   └── getSubscriptionKey.js
│   │   ├── Run a Scheduled Job/
│   │   │   ├── README.md
│   │   │   └── run-scheduled-job.js
│   │   ├── SQL Checker/
│   │   │   ├── README.md
│   │   │   └── SQLChecker.js
│   │   ├── Safe Bulk Update with Logging/
│   │   │   ├── README.md
│   │   │   └── bulk_update_with_progress.js
│   │   ├── Set the status to Retired on Ec2 Instance/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Set update sets to Complete/
│   │   │   ├── README.md
│   │   │   └── set_update_sets_to_complete.js
│   │   ├── Silent update on GlideRecord/
│   │   │   ├── README.md
│   │   │   └── slientUpdateOnGlideRecord.js
│   │   ├── Stale Tasks Auto-Close/
│   │   │   ├── README.md
│   │   │   └── Stale Tasks Auto-Close.js
│   │   ├── Table Growth Analysis/
│   │   │   ├── README.md
│   │   │   └── tableGrowthAnalysis.js
│   │   ├── Tag Incident Outliers/
│   │   │   ├── README.md
│   │   │   └── tag_resolution_outliers.js
│   │   ├── To check incidents having a VIP caller/
│   │   │   ├── VIP-caller-incidents.js
│   │   │   └── readme.md
│   │   ├── Typed Array Elements/
│   │   │   ├── README.md
│   │   │   └── typed_array_elements.js
│   │   ├── Update All Store Apps/
│   │   │   ├── README.md
│   │   │   └── update_all_apps.js
│   │   ├── Update reference field from CI relationship/
│   │   │   ├── README.md
│   │   │   └── Reference field value update from CI relationship connection.js
│   │   ├── Updating a record in the sys_user table/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── User Access Tester/
│   │   │   ├── README.md
│   │   │   └── userAccessTester.js
│   │   ├── User Email mismatch with Cmn Notif device/
│   │   │   ├── README.md
│   │   │   └── userEmailMismatchwithcmnNotifDevice.js
│   │   ├── User Has Role Exactly/
│   │   │   ├── README.md
│   │   │   └── user_has_role_exactly.js
│   │   ├── Version Checker/
│   │   │   ├── README.md
│   │   │   └── VersionUpdateChecker.js
│   │   ├── Virtual Agent Conversation Analytics/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Virtual Agent Topic Coverage Report/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── add member to groups/
│   │   │   ├── Add the members to List of the Groups using GlideRecord.js
│   │   │   └── README.md
│   │   ├── encryptAndDecryptNonPasswordFields/
│   │   │   ├── README.md
│   │   │   └── encryptAndDecryptNonPasswordFields.js
│   │   ├── encryptAndDecryptPasswordFields/
│   │   │   ├── Encrypt and Decrypt Non-Password Fields.js
│   │   │   └── README.md
│   │   ├── findTableSize/
│   │   │   ├── README.md
│   │   │   └── findTableSize.js
│   │   └── inserting a new record into the sys_user table/
│   │       ├── README.md
│   │       └── script.js
│   ├── Business Rules/
│   │   ├── ATF Duplicate Execution Order/
│   │   │   ├── ATF_Duplicate_Execution_order.js
│   │   │   └── README.md
│   │   ├── Abort Parent Incident Closure When Child is Open/
│   │   │   ├── README.md
│   │   │   └── scriptBR.js
│   │   ├── Add HR task for HR case/
│   │   │   ├── Add HR Task for VIP HR Case.js
│   │   │   └── README.md
│   │   ├── Add itil role to ootb user query to also see inactive users/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Add notes on tag addition or removal/
│   │   │   ├── README.md
│   │   │   ├── update_notes_tag_addition.js
│   │   │   └── update_notes_tag_removal.js
│   │   ├── Add or remove a tag from the ticket whenever the comments are updated/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Add woknotes for 75 percent SLA/
│   │   │   ├── README.md
│   │   │   └── addWorknotesForSLA.js
│   │   ├── Add work notes for relevant Change Requests for Incident/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── After-BR to generate approvals for catalog tasks/
│   │   │   ├── README.md
│   │   │   └── approval.js
│   │   ├── Allow only unique insert/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Approval Matrix/
│   │   │   ├── Matrix.js
│   │   │   └── README.md
│   │   ├── Assign specific role to user/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Async REST Call/
│   │   │   ├── README.md
│   │   │   └── callAsynREST.js
│   │   ├── Attachment Variable from Activity Stream to Clip Icon/
│   │   │   ├── Attachment Variable Fix.js
│   │   │   └── README.md
│   │   ├── AttachmentFormatValidator/
│   │   │   ├── AttachmentFormatValidator.js
│   │   │   └── Readme.md
│   │   ├── Attachments check High-Risk or High-Impact Change request/
│   │   │   ├── README.md
│   │   │   └── attachmentcheckonhighriskimpactChange.js
│   │   ├── Auto Approve VIP Approvals/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Auto Create Problem Records for Recurring Incidents/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Auto Incident Notification and Escalation/
│   │   │   ├── README.md
│   │   │   └── incident_notification.js
│   │   ├── Auto Tag VTB Based on Record States/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Auto add email recipients to the message body when Email Override is on/
│   │   │   ├── IncludeEmailRecipientsInBody.js
│   │   │   └── README.md
│   │   ├── Auto approve if previously approved/
│   │   │   ├── Auto_approve approvals.js
│   │   │   └── README.md
│   │   ├── Auto close incident if all related changes are closed/
│   │   │   ├── Readme.md
│   │   │   └── auto_close_incident_if_all_related_change_requests_closed.js
│   │   ├── Auto tag incident/
│   │   │   ├── Auto_Tag_Incident.js
│   │   │   └── README.md
│   │   ├── Auto-Assign Incident Based on Keywords, CI, and Department/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   ├── Auto-Generate Knowledge Article for Resolved Incidents/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Auto-approved opened by is approver/
│   │   │   ├── ReadMe.md
│   │   │   └── code.js
│   │   ├── Auto-assign and notify owners of Affected CIs/
│   │   │   ├── BRScript.js
│   │   │   └── README.md
│   │   ├── AutoApplyTemplateOnRecord/
│   │   │   ├── README.md
│   │   │   └── auto_apply_template_on_record.js
│   │   ├── AutoAssignment/
│   │   │   ├── Auto Assign Incident.js
│   │   │   └── README.md
│   │   ├── AutoCreation of Problem from Incident/
│   │   │   ├── README.md
│   │   │   └── whenMajorIncidentIsTrueCreateProblem.js
│   │   ├── Automate Role Assignment for New User/
│   │   │   ├── README.md
│   │   │   └── autoRoleAssignment.js
│   │   ├── Automated Incident Categorization Based on Keywords/
│   │   │   ├── Automated Incident Categorization Based on Keywords.js
│   │   │   └── README.md
│   │   ├── Automated SLA Monitoring and Escalation/
│   │   │   ├── Automated SLA Monitoring and Escalation.js
│   │   │   └── README.md
│   │   ├── Automatic Group Membership Updates via API/
│   │   │   ├── README.md
│   │   │   └── autoGroupMembershipUpdate.js
│   │   ├── Automatic Relationship Builder/
│   │   │   ├── README.md
│   │   │   └── relationship.js
│   │   ├── Automatically Populate Incident with Work Order Number/
│   │   │   ├── README.md
│   │   │   └── businessRuleFsmUsecase.js
│   │   ├── Automatically Throttle Incidents Raised by Same User Within Short Timeframe/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Backup Critical Table Data/
│   │   │   ├── README.md
│   │   │   └── backupCriticalTableData.js
│   │   ├── Block Attachments for specific conditions/
│   │   │   ├── Block Attachments.js
│   │   │   └── README.md
│   │   ├── CMDB Auto-Relationship Builder/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Calculate Incident Duration and Validation/
│   │   │   ├── Duration.js
│   │   │   └── Readme.md
│   │   ├── Call JavaScript Probe/
│   │   │   ├── Call JavaScript Probe.js
│   │   │   └── README.md
│   │   ├── Cancel Incomplete Playbooks on Closure/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Capture Implementation Status of Change Request/
│   │   │   ├── Implementation Status of Change Request.js
│   │   │   └── Readme.js
│   │   ├── Captures the time it took to assign a task/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Cascade Priority Change from Parent to Child Incidents/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Cascade Problem Worknote to Origin Task/
│   │   │   ├── Readme.md
│   │   │   └── cascade.js
│   │   ├── Change Lead Time Calculations/
│   │   │   ├── README.md
│   │   │   └── change_lead_time_calculations.js
│   │   ├── Change Risk Assesment mandatory before state change/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check domain of record against user session/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check for active tickets before inactivating user/
│   │   │   ├── Check for active tickets before inactivating user.js
│   │   │   └── README.md
│   │   ├── Close parent RITM when SC Task is Closed/
│   │   │   ├── README.md
│   │   │   └── closeParentRITMwhenSCTaskisClosed.js
│   │   ├── Compare two date fields/
│   │   │   ├── README.md
│   │   │   └── compareTwoDateFields.js
│   │   ├── Copy Attachment INC to Case/
│   │   │   ├── README.md
│   │   │   └── copyAttachement.js
│   │   ├── Copy Attachment on Email/
│   │   │   ├── README.md
│   │   │   └── copyAttachment.js
│   │   ├── Copy Comments from RITM to SCTASK Vice versa/
│   │   │   ├── README.md
│   │   │   └── copyCommentsfromRitmToSctask.js
│   │   ├── Copy MRVS to SC Task/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Copy Worknotes/
│   │   │   ├── read.md
│   │   │   └── script.js
│   │   ├── Copy attachments from idea to demand/
│   │   │   ├── README.md
│   │   │   └── copy attach from idea to demand.js
│   │   ├── Copy details to Request/
│   │   │   ├── Move Sc_task Assign group and assigne to Request.js
│   │   │   └── README.md
│   │   ├── Copy fields from Employee from/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Copy latest comment from RITM to SCTASK/
│   │   │   ├── CopyComments.js
│   │   │   └── README.md
│   │   ├── Copy worknotes from SCTASK to RITM comments/
│   │   │   ├── README.md
│   │   │   └── sctaskToRitmAdditionalComments.js
│   │   ├── CopyAttachmentsFromApprovalToChange/
│   │   │   ├── CopyAttachmentsApprovalToChange.js
│   │   │   └── README.md
│   │   ├── Count Associated Incidents in Problem/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create a copy of incident in another servicenow instance/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create catalog task for each row of MRVS/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create choice sets if required for new choices/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create comment on referenced record/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Cross-Table Dependency Analyzer/
│   │   │   ├── businessrule.js
│   │   │   ├── readme.md
│   │   │   └── scriptInclude.js
│   │   ├── Currency conversion to USD/
│   │   │   ├── currenct_Converstion_to_USD.js
│   │   │   ├── currency conversion usd.js
│   │   │   └── readme.md
│   │   ├── DeleteUserRole/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Display BR to get groupInfo of logged in User/
│   │   │   ├── README.md
│   │   │   ├── displayBr.js
│   │   │   └── onLoadClientScript.js
│   │   ├── Display current user display name on top of form/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Display warning message when peer reviewer and Requested by are same person/
│   │   │   ├── README.md
│   │   │   └── Warningmessage_Business rule.jss
│   │   ├── Due date calculation based on priority/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Dynamic Business Rule to Update User Roles Based on Department Changes/
│   │   │   ├── Dynamic Business Rule to Update User Roles Based on Department Changes.js
│   │   │   └── README.md
│   │   ├── Dynamic Field Population from CMDB/
│   │   │   ├── beforeBusinessRule.js
│   │   │   ├── readme.md
│   │   │   └── scriptinclude.js
│   │   ├── Dynamic GlideList Field Sync/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Emergency Change Cannot be closed without AttachedIncident/
│   │   │   ├── README.md
│   │   │   └── Review to Close Without Incident.js
│   │   ├── Enforce CI maintenance window on Change schedule/
│   │   │   ├── README.md
│   │   │   └── br_enforce_ci_maintenance_window.js
│   │   ├── Enforce File Upload Restrictions for HR Document Submission/
│   │   │   ├── Code.js
│   │   │   └── README.md
│   │   ├── Enforce Percentage/
│   │   │   ├── README.md
│   │   │   └── enforce_percentage.js
│   │   ├── Enforce Single Attachment Rule for HR Core Tasks/
│   │   │   ├── README.md
│   │   │   └── codingfile.js
│   │   ├── Enforce Unique Rank/
│   │   │   ├── README.md
│   │   │   └── UniqueRank.js
│   │   ├── Enforce a 1-1 relationship/
│   │   │   ├── README.md
│   │   │   └── enforce_1_1.js
│   │   ├── EnhanceIncidentWithProblem/
│   │   │   ├── EnhanceIncidentWithProblem.js
│   │   │   └── README.md
│   │   ├── Exclude Redundant Email Recipients/
│   │   │   ├── README.md
│   │   │   └── exclude_redundant_email_recipients.js
│   │   ├── Fetching reference field value from higher-level parents/
│   │   │   ├── Fetching reference field value from higher-level parents.js
│   │   │   └── README.md
│   │   ├── Field Validation based on form view in Server side/
│   │   │   ├── README.md
│   │   │   └── fieldValidationinBR.js
│   │   ├── Find MRVS Total/
│   │   │   ├── mrvs_total_sum.js
│   │   │   └── readme.md
│   │   ├── GRC Policy Retirement Gaurd/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Generate event/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Group Manager changes, remove old manager & add new manager/
│   │   │   ├── Code.js
│   │   │   └── ReadMe.md
│   │   ├── Hide from Interceptor/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── If Conflicts are there restrict change resquest to move further/
│   │   │   ├── README.md
│   │   │   └── ifConflictStopChangeRequestToAssessState.js
│   │   ├── Incident Root Cause Suggestion/
│   │   │   ├── business rule.js
│   │   │   ├── readme.md
│   │   │   └── script include.js
│   │   ├── Make Attachment Mandatory/
│   │   │   ├── MakeAttachmentMandatory.js
│   │   │   └── README.md
│   │   ├── Mandatory Attachment/
│   │   │   ├── README.md
│   │   │   └── threeAttachementsMandatory.js
│   │   ├── Manipulating system properties values/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Mark an Email High Importance initiated from Email Client/
│   │   │   ├── Mark an Email High Importance
│   │   │   └── README.md
│   │   ├── Mask Sensitive Data in Description Field/
│   │   │   ├── maskData.js
│   │   │   └── readme.md
│   │   ├── Move attachment from variable to record/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Name Change Profile Update/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Notification/
│   │   │   ├── README.md
│   │   │   └── Send Notification on New Incident Creation.js
│   │   ├── Pass Attachments/
│   │   │   ├── read.md
│   │   │   └── script.js
│   │   ├── Pass server info to client/
│   │   │   ├── README.md
│   │   │   └── passServerInfo.js
│   │   ├── Pdf Letter create/
│   │   │   ├── README.md
│   │   │   └── letter.js
│   │   ├── Preserve enhancement when deleting project/
│   │   │   ├── Preserve enhancement when deleting project.js
│   │   │   └── README.md
│   │   ├── Prevent Duplicate CI (Configuration Item) Names/
│   │   │   ├── README.md
│   │   │   └── code_snippets.js
│   │   ├── Prevent Duplicate Incident Creation within 24 Hours/
│   │   │   ├── BeforeBRScript.js
│   │   │   └── README.md
│   │   ├── Prevent Invalid User ID/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Prevent RITM to get closed/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Prevent adding user to group if manager is inactive/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Prevent closure if change tasks are open/
│   │   │   ├── Before_BR.js
│   │   │   └── README.md
│   │   ├── Prevent duplicate update sets/
│   │   │   ├── README.md
│   │   │   └── preventDuplcateUpdateSets.js
│   │   ├── Prevent invalid fiscal period in cost plan breakdown/
│   │   │   ├── Prevent invalid fiscal period on cost plan breakdown.js
│   │   │   └── README.md
│   │   ├── Preventing Recursive Updates from Integrations/
│   │   │   ├── README.md
│   │   │   └── prevent_continous_update.js
│   │   ├── Previous Approval Check/
│   │   │   ├── README.md
│   │   │   └── previous_approval_check.js
│   │   ├── QueryBR-restrict users to see their company records/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── RITM Assignment Sync/
│   │   │   ├── Populate_Assigned _To_on_RITMs_for_Specific_Catalog_Item.js
│   │   │   └── README.md
│   │   ├── RITM state change/
│   │   │   ├── README.md
│   │   │   └── Related_task_state_update.js
│   │   ├── RITM_to_SCTASK/
│   │   │   ├── README.md
│   │   │   └── RITM_to_SCTASK.js
│   │   ├── Randomly distrubite events between custom queues/
│   │   │   ├── DistrubuteEvents.js
│   │   │   └── README.md
│   │   ├── ReRank item/
│   │   │   ├── README.md
│   │   │   └── rerank.js
│   │   ├── Read Workspace URL/
│   │   │   ├── README.md
│   │   │   └── ReadWS_URL.js
│   │   ├── Reassign Tasks When Assigned User is Inactive/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Recursive logic/
│   │   │   ├── README.md
│   │   │   └── Recursive BR.js
│   │   ├── Reduce syslog query/
│   │   │   ├── README.md
│   │   │   └── reduce_syslog_query.js
│   │   ├── Replace KB Author with Manager/
│   │   │   ├── README.md
│   │   │   └── Replace Script.js
│   │   ├── Restrict Service Account to Query data/
│   │   │   ├── README.md
│   │   │   └── restrictedDataQuery.js
│   │   ├── RoleUpdateOnGroupManagerChange/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Round Robin for Incident Assignment/
│   │   │   ├── README.md
│   │   │   └── Round Robin method for Incident Assignment.js
│   │   ├── SCTASK_to_RITM/
│   │   │   ├── README.md
│   │   │   └── SCTASK_to_RITM.js
│   │   ├── Set program business duration/
│   │   │   ├── PPM_Utils.js
│   │   │   ├── README.md
│   │   │   └── set pgm business duration.js
│   │   ├── Smart Attachment Size Limiter/
│   │   │   ├── Readme.md
│   │   │   └── Smart Attachment Size Limiter.js
│   │   ├── Sync CI operational status with child related CIs/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Sync Fields for two tables/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Sync Integer Field/
│   │   │   ├── README.md
│   │   │   └── sync_integer_field.js
│   │   ├── Synchronize RITM comments to Active tasks/
│   │   │   ├── README.md
│   │   │   └── synccommentfromritmtotask.js
│   │   ├── Track Tag Removal Using Delete Business Rule/
│   │   │   ├── BusinessRule.js
│   │   │   └── readme.md
│   │   ├── Transform Data from Attachment/
│   │   │   ├── README.md
│   │   │   └── data_xform_from_attachment.js
│   │   ├── Trigger Event when a member is added to a list/
│   │   │   ├── README.md
│   │   │   └── Trigger an event when user is added to field.js
│   │   ├── Update CI status on Change Request closure/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Update Child Incident based on Parent Incident/
│   │   │   ├── README.md
│   │   │   └── Update_Child_Incident.js
│   │   ├── Update Incident Description on Insert with Telephone Icon Concatenated/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Update Locked Out field when Active field changes on User record/
│   │   │   ├── README.md
│   │   │   └── update_locked_out_field.js
│   │   ├── Update Related Tasks When Parent Changes/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   ├── Update Set Scope Validation/
│   │   │   ├── README.md
│   │   │   └── ValidateScopesForUpdateSet.js
│   │   ├── Update worknotes of Ptask to parent Problem record/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── UpdateFavouritedKnowledgeArticleWhenItIsUpgradedToNewVersion/
│   │   │   ├── README.md
│   │   │   └── update_favourited_knowledge_artice.js
│   │   ├── Use_case_Base64-Encode-Before-Save-And-Decode-on-Display/
│   │   │   ├── Before_BR_script.js
│   │   │   ├── Display_BR_script.js
│   │   │   └── Readme.md
│   │   ├── User Activity Log Tracking/
│   │   │   ├── README.md
│   │   │   └── userActivityLog.js
│   │   ├── User Impersonation Activity Logger/
│   │   │   ├── README.md
│   │   │   └── UserImpersonationActiityLogger.js
│   │   ├── User Profile Field Validation/
│   │   │   ├── README.md
│   │   │   └── userProfileValidation.js
│   │   ├── Validate Checklist items/
│   │   │   ├── README.md
│   │   │   └── incompleteChkListShowErrMsg.js
│   │   ├── Validate Email on Import/
│   │   │   ├── README.md
│   │   │   └── validateEmailOnImport.js
│   │   ├── Validate JSON Property/
│   │   │   ├── README.md
│   │   │   └── jsonPropertyValidator.js
│   │   ├── Warn for changed OOTB artifacts/
│   │   │   ├── README.md
│   │   │   └── warn_for_changed_ootb_artifacts.js
│   │   ├── When Group is making inactive/
│   │   │   ├── Code.js
│   │   │   └── ReadMe.md
│   │   ├── duplicateattachments/
│   │   │   ├── AvoidduplicateattachmentsonIncident.js
│   │   │   └── README.md
│   │   ├── openAI/
│   │   │   ├── README.md
│   │   │   └── chatGpt.js
│   │   ├── setting future week dates/
│   │   │   ├── README.md
│   │   │   └── setting future dates.js
│   │   └── user-activity-logger/
│   │       ├── README.md
│   │       └── user-activity-logger.js
│   ├── Extension Points/
│   │   ├── CustomNotificationHandlerInterfaceExtension.js
│   │   ├── CustomNotificationHandlerInterfaceImplementation.js
│   │   ├── ExtensionPointCallingExample.js
│   │   └── README.md
│   ├── Inbound Actions/
│   │   ├── Advanced Scripts/
│   │   │   ├── README.md
│   │   │   ├── cancel_catalog_item_from_email.js
│   │   │   ├── create_catalog_item_from_email.js
│   │   │   └── update_catalog_item_from_email.js
│   │   ├── Auto Incident Creation from Case Email/
│   │   │   ├── README.md
│   │   │   └── create_incident_from_case_email.js
│   │   ├── Auto Reply Email/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Automate creation of incidents through inbound actions/
│   │   │   ├── README.md
│   │   │   └── incidentCreation.js
│   │   ├── Duplicate Incident Detection and Creation/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Email Text as Attachment/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Inbound Email Action to Create User and Assign Groups/
│   │   │   ├── Readme.md
│   │   │   └── auto_create_user_through_inbound_email_action.js
│   │   ├── Incident Creation from Email with Attachments Handling/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   └── Reply Task/
│   │       ├── README.md
│   │       └── reply.js
│   ├── Processors/
│   │   └── Dynamic Sitemap/
│   │       ├── README.md
│   │       └── dynamicSitemapProcessor.js
│   ├── Scheduled Jobs/
│   │   ├── API Token Expiry Warning/
│   │   │   ├── API Token Expiry Warning.js
│   │   │   └── Readme.md
│   │   ├── Approval Reminder/
│   │   │   ├── README.md
│   │   │   ├── change_reminder_scheduled_job.js
│   │   │   ├── requested_item_approval_reminder_approver.js
│   │   │   └── requested_item_approval_reminder_requestor.js
│   │   ├── Auto Disable account/
│   │   │   ├── Disable Service accounts due to inactivity
│   │   │   └── Readme.md
│   │   ├── Auto close changes requests updated 30 days prior/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Auto upgrade store applications/
│   │   │   ├── Readme.md
│   │   │   ├── script.js
│   │   │   └── sysproperty.js
│   │   ├── Auto-Assign Unassigned Incidents Older Than 30 Minutes/
│   │   │   ├── Readme.md
│   │   │   └── auto_assign_unassigned_incidents_via_scheduled_job.js
│   │   ├── Bucket Group Reporting/
│   │   │   ├── Bucket Group Age Calculation.js
│   │   │   └── readme.md
│   │   ├── Calculate Ticket's Aging/
│   │   │   ├── Calculate Ticket's Aging.js
│   │   │   └── README.md
│   │   ├── CancelApproval/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Clean up Inactive User access/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Condition script to trigger the scheduled job on Quarterly basis/
│   │   │   ├── Condition script to trigger the scheduled job on Quarterly basis.js
│   │   │   └── README.md
│   │   ├── Create Scheduled Imports Graphviz file/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create send reminders weekly/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Daily Summary Email/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Daily detection of customer updates made in 'Default' update set/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Deactivate INC in 90 days/
│   │   │   ├── 90daysInactiveScript.js
│   │   │   └── README.md
│   │   ├── Deactivate Inactive Users and Notify Managers/
│   │   │   ├── Readme.md
│   │   │   └── auto_deactivate_inactive_users.js
│   │   ├── Deactivate Memberless Group/
│   │   │   ├── README.md
│   │   │   └── deactivate group.js
│   │   ├── Deactive and Reactivate Catalog Items/
│   │   │   ├── README.md
│   │   │   └── schedule-deactivation.js
│   │   ├── Delete Retired CI Rel/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Employee Probation case/
│   │   │   ├── Probation.js
│   │   │   └── README.md
│   │   ├── Export Filtered Records to CSV Automatically/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Get All Catalog Tasks without Request items/
│   │   │   ├── catalogTaskWithoutReqItem.js
│   │   │   └── catalogTaskWithoutReqItem.md
│   │   ├── Licensed User Access Job/
│   │   │   ├── Weekly_LicensedUser_Access_Revoke_90Days.js
│   │   │   └── readme.md
│   │   ├── Lock out users who have not logged into the system longer than 30 days/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Paginated Export/
│   │   │   ├── Paginated Export.md
│   │   │   └── paginatedExport.js
│   │   ├── PostUserDisabledActivity/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Proactive Change Request Reminder/
│   │   │   ├── README.md
│   │   │   └── proactive_change_reminder.js
│   │   ├── Reject approvals created before an year/
│   │   │   ├── README.md
│   │   │   └── Reject Approvals Created Before an Year.js
│   │   ├── Remove Inactive and locked out users from All Groups and Roles/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Role Usage Analyzer/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── ScheduleAtSpecificDaysAndTimes/
│   │   │   ├── README.md
│   │   │   └── schedulejobcondition.js
│   │   ├── Scheduled Data Import for Groups Population(Support and Managed By) for CMDB Classes/
│   │   │   ├── ReadMe.md
│   │   │   └── post-script.js
│   │   ├── Scheduled Job to Email Incident Count Report by Category/
│   │   │   ├── Readme.md
│   │   │   └── Send_monthly_incident_category_count_report.js
│   │   ├── Submit catalog item/
│   │   │   ├── README.md
│   │   │   └── submit_catalog_item.js
│   │   ├── Survey Trigger Scheduled Script/
│   │   │   ├── README.md
│   │   │   └── survey_trigger_sj.js
│   │   ├── Top10jobsbyprocessingtime/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Unpublish Public Reports/
│   │   │   ├── README.md
│   │   │   └── UnpublishReports.js
│   │   ├── Update Inactive Application Owner/
│   │   │   ├── README.md
│   │   │   └── Update Inactive Application Owner.js
│   │   ├── Weekly Incident Trend Analysis/
│   │   │   ├── README.md
│   │   │   └── incident_trend_analyzer.js
│   │   └── trigger on weekday/
│   │       ├── read.md
│   │       └── script.js
│   ├── Script Actions/
│   │   ├── Attachment Downloads Logger/
│   │   │   ├── README.md
│   │   │   └── scriptActionCode.js
│   │   ├── Custom Table Helper/
│   │   │   ├── README.md
│   │   │   └── Script Action.js
│   │   └── Deactivate Inactive Users and Notify Managers/
│   │       ├── Readme.md
│   │       └── user_deactivation_notify_manager_script_action.js
│   ├── Script Includes/
│   │   ├── API Model Template for New Application/
│   │   │   ├── AbstractStrategy.js
│   │   │   ├── AbstractStrategyBase.js
│   │   │   ├── ApplicationCore.js
│   │   │   ├── ApplicationCoreBase.js
│   │   │   ├── Engine.js
│   │   │   ├── EngineBase.js
│   │   │   ├── ExampleObject.js
│   │   │   ├── ExampleObjectBase.js
│   │   │   ├── ExampleStrategy1.js
│   │   │   ├── ExampleStrategy1Base.js
│   │   │   ├── ExampleStrategy2.js
│   │   │   ├── ExampleStrategy2Base.js
│   │   │   └── README.md
│   │   ├── Add Business Days/
│   │   │   ├── README.md
│   │   │   └── addBusinessDays.js
│   │   ├── Add and Remove Group Member/
│   │   │   ├── README.md
│   │   │   └── groupMember.js
│   │   ├── Advanced REST API Integration with Retry Logic/
│   │   │   ├── README.md
│   │   │   ├── RESTIntegrationExample.js
│   │   │   └── RESTIntegrationHandler.js
│   │   ├── Approval Rule Builder/
│   │   │   ├── ApprovalRuleBuilder.js
│   │   │   └── README.md
│   │   ├── Array prototypes/
│   │   │   ├── ArrayPrototypes.js
│   │   │   └── README.md
│   │   ├── ArrayUtil/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Assign role for a day Util/
│   │   │   ├── AssignRoleToUserForADay.js
│   │   │   └── README.md
│   │   ├── Auto Execute Import Set on File Attachment/
│   │   │   ├── CreateImportSetAndRunTransform.js
│   │   │   ├── CreateSysTrigger.js
│   │   │   └── README.md
│   │   ├── Autopopulate caller location in short description/
│   │   │   ├── README.md
│   │   │   ├── getCallerLocation.js
│   │   │   └── updateCallerLocationinShortDesc.js
│   │   ├── BackfillAssignmentGroup/
│   │   │   ├── BackfillAssignmentGroup.js
│   │   │   └── README.md
│   │   ├── BenchmarkRunner/
│   │   │   ├── BenchmarkRunner.js
│   │   │   └── README.md
│   │   ├── CSV Parser/
│   │   │   ├── CSVParser.js
│   │   │   └── README.md
│   │   ├── CacheHelper/
│   │   │   ├── CacheHelper.js
│   │   │   └── README.md
│   │   ├── Calculate Business days dynamically/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Catalog Item Pricing/
│   │   │   ├── README.md
│   │   │   └── calculate_catalog_item_price.js
│   │   ├── CatalogUtils/
│   │   │   ├── CatalogUtils.js
│   │   │   └── README.md
│   │   ├── Check User Criteria for Catalog Item/
│   │   │   ├── README.md
│   │   │   └── checkUserCriteria.js
│   │   ├── Check User Has Role/
│   │   │   ├── README.md
│   │   │   └── UserHasRole.js
│   │   ├── Check Valid Choice/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check writer/
│   │   │   ├── CheckWriter.js
│   │   │   └── README.md
│   │   ├── Client and Server Callable Script Include/
│   │   │   ├── README.md
│   │   │   └── script include.js
│   │   ├── Collect Field Values from Any One Table Record/
│   │   │   └── universalRecordCollector.js
│   │   ├── Collect Field Values from Any Table/
│   │   │   └── README.md
│   │   ├── CommandInjectionChecker/
│   │   │   ├── CommandInjectionChecker.js
│   │   │   └── README.md
│   │   ├── ConnectionCredentialsUtils/
│   │   │   ├── ConnectionCredentialUtils.js
│   │   │   └── README.md
│   │   ├── ConversationUtils/
│   │   │   ├── ConversationUtils.js
│   │   │   └── README.md
│   │   ├── Convert base64 to Hex (Object GUID)/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Convert image into base64/
│   │   │   ├── Convert image into base63 encoded string.js
│   │   │   └── README.md
│   │   ├── Copy record Attachment to Email Client/
│   │   │   ├── CopyAttachmentToEmailClient.js.js
│   │   │   └── ReadMe.md
│   │   ├── Count Assigned To Field/
│   │   │   ├── README.md
│   │   │   └── countAssignedUtil.js
│   │   ├── Create Multiple RITMS from MRVS/
│   │   │   ├── CreateMultipleRITMSFromMRVS.js
│   │   │   └── README.md
│   │   ├── Custom Discovery Schedule With Freeze Periods/
│   │   │   ├── DiscoveryScheduleWithFreezePriod.js
│   │   │   └── README.md
│   │   ├── CustomArrayUtils/
│   │   │   ├── CustomArrayUtils.js
│   │   │   └── README.md
│   │   ├── CustomDateUtils/
│   │   │   ├── CustomDateUtils.js
│   │   │   └── README.md
│   │   ├── CustomObjectUtils/
│   │   │   ├── CustomObjectUtils.js
│   │   │   └── README.md
│   │   ├── CustomUserUtils/
│   │   │   ├── CustomUserUtils.js
│   │   │   └── README.md
│   │   ├── Data Lookup Table Utils/
│   │   │   ├── DataLookupUtils.js
│   │   │   └── README.md
│   │   ├── Data Normalizer/
│   │   │   ├── README.md
│   │   │   └── dataNormalizer.js
│   │   ├── Delete Multiple Records Async/
│   │   │   ├── DeleteMultipleRecordsAsync.js
│   │   │   └── README.md
│   │   ├── Deprecate Field/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Developer Debug Utility/
│   │   │   ├── DeveloperDebugUtility.js
│   │   │   └── README.md
│   │   ├── Dynamic Dropdown List/
│   │   │   ├── Client.js
│   │   │   ├── README.md
│   │   │   └── UtilScript.js
│   │   ├── Dynamic Record Archiving/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Emotion-Aware/
│   │   │   ├── EmotionAnalyzer.js
│   │   │   └── README.md
│   │   ├── EvtMgmtCustom_PostTransformHandler/
│   │   │   ├── EvtMgmtCustom_PostTransformHandler.js
│   │   │   └── README.md
│   │   ├── Excel Attachment Via script/
│   │   │   ├── README.md
│   │   │   └── excelAttachment.js
│   │   ├── Excel Parser/
│   │   │   ├── README.md
│   │   │   └── excelParser.js
│   │   ├── Execution Time Tracker/
│   │   │   ├── README.md
│   │   │   └── execution_time_tracker.js
│   │   ├── Extending OOB TableUtils/
│   │   │   ├── EXT_TablesUtils.js
│   │   │   └── README.md
│   │   ├── Filter record/
│   │   │   ├── read.md
│   │   │   └── script.js
│   │   ├── Financial Service Utilities/
│   │   │   ├── FinancialServiceUtilities.js
│   │   │   └── README.md
│   │   ├── Find months between two dates/
│   │   │   ├── DateUtil.js
│   │   │   └── README.md
│   │   ├── Generate QR Code and attach to RITM/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Approvers of a Ticket/
│   │   │   ├── GetApproversForATicket.js
│   │   │   └── README.md
│   │   ├── Get Choice Display Value/
│   │   │   ├── README.md
│   │   │   └── getChoiceDisplayValue.js
│   │   ├── Get Current User Information/
│   │   │   ├── README.md
│   │   │   └── getCurrentUserInformation.js
│   │   ├── Get Field Label in Specific Language/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Group Members/
│   │   │   ├── README.md
│   │   │   └── getGroupMembers.js
│   │   ├── Get Profile Picture/
│   │   │   ├── README.md
│   │   │   └── getProfilePicture.js
│   │   ├── Get Reference Display Value/
│   │   │   ├── README.md
│   │   │   └── getReferenceDisplayValue.js
│   │   ├── Get User Data by Id/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── GetCallerDetails/
│   │   │   ├── Calling Script Include from client.js
│   │   │   ├── README.md
│   │   │   └── scriptinclude.js
│   │   ├── GetClickableURL/
│   │   │   ├── readme.md
│   │   │   └── scipt.js
│   │   ├── GetServiceDeskAgentHelpAIUtil/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── GlideDateTimeUtils/
│   │   │   ├── ClientDateTimeUtils.js
│   │   │   └── README.md
│   │   ├── GlideRecord to JSON/
│   │   │   ├── README.md
│   │   │   └── gr2obj.js
│   │   ├── GlideRecordHelper/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── GroupMembershipUtils for client and server/
│   │   │   ├── groupMembershipUtils.js
│   │   │   └── readme.md
│   │   ├── HTMLUtils/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Hybrid Script Include for AJAX or Server Side Parameters/
│   │   │   ├── README.md
│   │   │   └── ScriptInclude.js
│   │   ├── Inactive User/
│   │   │   ├── InactiveUserCleanup.js
│   │   │   └── README.md
│   │   ├── Install base items with active cases/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── JSON Mapping for Incident Creation/
│   │   │   ├── JsonMapping.js
│   │   │   └── README.md
│   │   ├── JSONPath/
│   │   │   ├── JSONPath.js
│   │   │   └── README.md
│   │   ├── JSONtoYAML/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── KBArticleExpPDF/
│   │   │   ├── ArticlePDFHelper.js
│   │   │   └── README.md
│   │   ├── ListFieldUtil/
│   │   │   ├── ListFieldUtil.js
│   │   │   └── README.md
│   │   ├── Log Utils/
│   │   │   ├── Code.js
│   │   │   └── README.md
│   │   ├── Logger/
│   │   │   ├── Logger.js
│   │   │   └── README.md
│   │   ├── ManagerRecursiveUtil/
│   │   │   ├── README.md
│   │   │   └── RecursiveByManager.js
│   │   ├── Match URL with a String/
│   │   │   ├── MatchURLByRegex.js
│   │   │   └── README.md
│   │   ├── Next Business Window Calculator/
│   │   │   ├── README.md
│   │   │   └── next_business_window.js
│   │   ├── Non Prod Instance Password Reset/
│   │   │   ├── README.md
│   │   │   └── passwordReset.js
│   │   ├── NonProdLogUtils/
│   │   │   ├── LogUtilsNonProd.js
│   │   │   └── README.md
│   │   ├── NotificationUtil/
│   │   │   ├── NotificationUtil.js
│   │   │   └── README.md
│   │   ├── Number Padding/
│   │   │   ├── README.md
│   │   │   └── numberPadding.js
│   │   ├── OAuth token helper/
│   │   │   ├── OAuthTokenHelper.js
│   │   │   └── README.md
│   │   ├── OrderedRecords/
│   │   │   ├── README.md
│   │   │   └── orderedRecords.js
│   │   ├── PII Redactor/
│   │   │   ├── README.md
│   │   │   └── piiRedaction.js
│   │   ├── Password Generator with specific length/
│   │   │   ├── PasswordGenerator.js
│   │   │   └── README.md
│   │   ├── PerformanceAnalyticsUtils/
│   │   │   ├── PerformanceAnalyticsUtils.js
│   │   │   └── README.md
│   │   ├── Populate MRVS from Excel/
│   │   │   ├── ParsingScript.js
│   │   │   └── README.md
│   │   ├── Prevent circular dependencies in task relationships/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Project Base Line/
│   │   │   ├── README.md
│   │   │   └── latestPlannedBaseline.js
│   │   ├── Public Script Include search/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── PullEmptySerialNumberAssetRecords/
│   │   │   ├── README.md
│   │   │   └── pull_empty_serial_number_record.js
│   │   ├── Query ldap server/
│   │   │   ├── LDAPquery.js
│   │   │   └── README.md
│   │   ├── Read CSV file from Mid Server/
│   │   │   ├── CSVReaderUtil.js
│   │   │   └── README.md
│   │   ├── RecordProducerVariableUtils/
│   │   │   ├── README.md
│   │   │   ├── RecordProducerVariableUtils_v1.0.xml
│   │   │   └── script.js
│   │   ├── Records Calculator/
│   │   │   ├── README.md
│   │   │   └── RecordsCalculator.js
│   │   ├── Recursive GlideRecord Fetcher/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Regex utils/
│   │   │   ├── README.md
│   │   │   └── RegexUtils.js
│   │   ├── Reparent Table/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Request Approval Helper/
│   │   │   ├── README.md
│   │   │   └── RequestApprovalHelper.js
│   │   ├── RequestNotificationUtil/
│   │   │   ├── README.md
│   │   │   └── RequestNotificationUtil.js
│   │   ├── RestMessageUtils/
│   │   │   ├── README.md
│   │   │   └── RestMessageUtils.js
│   │   ├── Retrieve Last Comment by Ticket/
│   │   │   ├── README.md
│   │   │   └── RetrieveLastCommentByTicket.js
│   │   ├── Return Object/
│   │   │   ├── README.md
│   │   │   └── ReturnObject.js
│   │   ├── Role Checker Util/
│   │   │   ├── README.md
│   │   │   └── checkUserRole.js
│   │   ├── Root-Cause Predictor/
│   │   │   ├── README.md
│   │   │   └── incident.js
│   │   ├── SCIM Custom Mapping Handler/
│   │   │   ├── README.md
│   │   │   └── SCIMCustomMappingHandler.js
│   │   ├── SCIM Payload Generator/
│   │   │   ├── GenerateSCIMPayload.js
│   │   │   └── README.md
│   │   ├── SQLInjectionChecker/
│   │   │   ├── README.md
│   │   │   └── SQLInjectionChecker.js
│   │   ├── SRAPIUtil/
│   │   │   ├── README.md
│   │   │   └── SRAPIUtil.js
│   │   ├── Safe Bulk Update Runner/
│   │   │   ├── README.md
│   │   │   └── safe_bulk_update_runner.js
│   │   ├── Scheduled Recursion/
│   │   │   ├── README.md
│   │   │   ├── background_script.js
│   │   │   └── scheduled_recursion.js
│   │   ├── Script Include Usage Tracker/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Sends Slack/
│   │   │   └── Teams notifications when specific fields change on configured tables/
│   │   │       ├── README.md
│   │   │       └── code.js
│   │   ├── Single Sign-On (SSO) Direct Login URL Generator/
│   │   │   ├── README.md
│   │   │   └── UserHelper.js
│   │   ├── Slack JSON Block Factory/
│   │   │   ├── README.md
│   │   │   ├── Slacktory.js
│   │   │   └── sys_script_include_config.md
│   │   ├── SmartData/
│   │   │   ├── SmartData.scriptinclude.js
│   │   │   ├── SmartDataAjax.scriptinclude.js
│   │   │   └── readme.md
│   │   ├── Standard Change Creator/
│   │   │   ├── README.md
│   │   │   ├── sys_script_include.js
│   │   │   └── sys_script_include_config.md
│   │   ├── StarterPack/
│   │   │   ├── AjaxClientScript.js
│   │   │   ├── AjaxSI.js
│   │   │   ├── README.md
│   │   │   ├── classless.js
│   │   │   ├── constants.js
│   │   │   ├── reference.js
│   │   │   └── utilsExample.js
│   │   ├── Stopwatch/
│   │   │   ├── README.md
│   │   │   └── Stopwatch.js
│   │   ├── Store data in User Session/
│   │   │   ├── README.md
│   │   │   └── storeDataInSession.js
│   │   ├── StripHTML/
│   │   │   ├── README.md
│   │   │   └── StripHTML.js
│   │   ├── SubProdLogger/
│   │   │   ├── README.md
│   │   │   └── SubProdLogger.js
│   │   ├── Table List Copy Context Options/
│   │   │   ├── Copy Field Display Value Context Menu.js
│   │   │   ├── Copy Field Name Context Menu.js
│   │   │   ├── Copy Field Value Context Menu.js
│   │   │   ├── README.md
│   │   │   └── Script Include.js
│   │   ├── TableUtils Extension/
│   │   │   ├── Enhanced_TableUtils.js
│   │   │   └── README.md
│   │   ├── Testing Script Include Using Jasmine/
│   │   │   ├── README.md
│   │   │   ├── Sample Calculator Script Include.js
│   │   │   └── Sample Jasmine Script.js
│   │   ├── TimeZoneUtils/
│   │   │   ├── README.md
│   │   │   └── TimeZoneUtils.js
│   │   ├── TinyURLHelper/
│   │   │   ├── README.md
│   │   │   └── TinyUrlHelper.js
│   │   ├── TranslationUtil/
│   │   │   ├── README.md
│   │   │   └── translationUtil.js
│   │   ├── Translations Import/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── UnloadXml/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── UpdateWatchlistFromJSON/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── UserCriteriaUtil/
│   │   │   ├── README.md
│   │   │   └── UserCriteriaUtil.js
│   │   ├── UserUtil/
│   │   │   ├── README.md
│   │   │   └── UserUtil.js
│   │   ├── Validate Data Before Insert/
│   │   │   ├── DataValidationUtils.js
│   │   │   └── README.md
│   │   ├── VariableHelper/
│   │   │   ├── README.md
│   │   │   └── variableHelper.js
│   │   ├── VariableToDescription/
│   │   │   ├── README.md
│   │   │   └── VariableToDescription.js
│   │   ├── attachments/
│   │   │   ├── README.md
│   │   │   └── attachment.js
│   │   ├── get field values for multiple records from a table/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── getCountFunction/
│   │   │   ├── README.md
│   │   │   ├── callingSI.js
│   │   │   └── code.js
│   │   ├── getGlideRecordObject/
│   │   │   ├── README.md
│   │   │   └── getGlideRecordObject.js
│   │   └── regexCheckerScript/
│   │       ├── README.md
│   │       └── regexCheckerScript.js
│   ├── Server Side/
│   │   ├── CallScriptIncludeWithParameters/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── CheckTableExtension/
│   │   │   ├── README.md
│   │   │   └── istableextended.js
│   │   ├── Create Admin Users/
│   │   │   ├── README.md
│   │   │   └── create_admin_user.js
│   │   ├── Create Tiny Url with API's/
│   │   │   ├── README.md
│   │   │   └── tinyUrl.js
│   │   ├── CreateUpdateCIThroughIRE/
│   │   │   ├── README.md
│   │   │   └── createupdateciinire.js
│   │   ├── Custom Relationship/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── DiscoveryDeviceHistory/
│   │   │   ├── devicehistory.js
│   │   │   └── readme.me
│   │   ├── Dynamic Catalog Task Creation/
│   │   │   ├── README.md
│   │   │   └── dynamic_catalog_task.js
│   │   ├── Email Bounce Alert System/
│   │   │   ├── Email_Bounce_Alert_System.js
│   │   │   └── README.md
│   │   ├── ExecuteWorkOnMidServer/
│   │   │   ├── README.md
│   │   │   └── executeworkonmid.js
│   │   ├── Fetch dynamic value from decision table/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── FetchJSONObject/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Generate Attachment and add it to the email/
│   │   │   ├── README.md
│   │   │   └── emailAttachment.js
│   │   ├── Get all Catalog items associated to variable set/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get all variables of catalog item/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── MarkInactiveUsersonList/
│   │   │   ├── README.md
│   │   │   └── fieldStyleforListfields.js
│   │   ├── Parse csv file and read each row/
│   │   │   ├── README.md
│   │   │   └── read csv logic.js
│   │   ├── Phone Number formating(US Region)/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Random Password generator/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Record as Link/
│   │   │   ├── README.md
│   │   │   ├── example-pdf-generation.js
│   │   │   └── recordAsLink.js
│   │   ├── Remove HTML Tags/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Restart Flow on RITM/
│   │   │   ├── README.md
│   │   │   └── restartFlow.js
│   │   ├── Restart a workflow via any server side script/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Trigger Assessments through Script/
│   │   │   ├── README.md
│   │   │   └── trigger assessment.js
│   │   ├── Update Sets Scopes Issues Fix Automation/
│   │   │   ├── FixUpdatesScope.js
│   │   │   ├── PreventCompletiononScopeConflict.js
│   │   │   ├── README.md
│   │   │   └── UpdateSetUtilCustom.js
│   │   ├── Update Variable Choices/
│   │   │   ├── README.md
│   │   │   └── updateVariableChoices.js
│   │   ├── Use System Property as an Object to Store Multiple Values and Retrieve Attributes When Needed/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── User Criteria/
│   │   │   ├── Does User Match Criteria(s).js
│   │   │   └── README.md
│   │   ├── Version 4 UUID Generator/
│   │   │   ├── README.md
│   │   │   └── uuid_generator.js
│   │   └── getUserGroupMembers/
│   │       ├── README.md
│   │       └── script.js
│   └── Transform Map Scripts/
│       ├── Check if the Import file is valid/
│       │   ├── README.md
│       │   └── script.js
│       ├── Choice Field Validator/
│       │   ├── README.md
│       │   └── choiceValidatorUtil.js
│       ├── Conditional Coalesce/
│       │   ├── README.md
│       │   └── conditional_coalasce.js
│       ├── Email Formatter/
│       │   ├── README.md
│       │   └── emailFormatterValidator
│       ├── Global Variable in Transform Map/
│       │   ├── README.md
│       │   ├── manager_email_to_sysid_map_onStartScript.js
│       │   └── onBefore_transform_script.js
│       ├── Incident Priority Set on Insert Only/
│       │   ├── README.md
│       │   └── onBefore_set_priority_insert_only.js
│       └── Verify headers of a CSV attached file/
│           ├── README.md
│           ├── example.csv
│           └── verifyCSVHeaders.js
├── Specialized Areas/
│   ├── ATF Steps/
│   │   ├── Count table records/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   └── Validate RITM Due Date/
│   │       ├── README.md
│   │       └── atf_ritm_due_date_script.js
│   ├── Advanced Conditions/
│   │   ├── Exclude Email Reply Comment Notifications by Group/
│   │   │   ├── README.md
│   │   │   └── exclude_email_reply_comment_notifications_by_group.js
│   │   └── Group Approval Check/
│   │       ├── README.md
│   │       └── group_approval_check.js
│   ├── Agile Development/
│   │   └── Burndown Chart/
│   │       ├── README.md
│   │       ├── requirements.txt
│   │       └── sprint_burndown_chart.py
│   ├── Browser Bookmarklets/
│   │   ├── Copy URL to ServiceNow Journal/
│   │   │   ├── README.md
│   │   │   └── copy url to servicenow journal.js
│   │   ├── Create new update set/
│   │   │   ├── README.md
│   │   │   └── create_update_set.js
│   │   ├── Create story task/
│   │   │   ├── README.md
│   │   │   └── create_story_task.js
│   │   ├── Highlight Mandatory fields on form/
│   │   │   ├── Highlight mandatory fields on form.js
│   │   │   └── README.md
│   │   ├── Impersonation/
│   │   │   ├── README.md
│   │   │   └── impersonation.js
│   │   ├── Load List with Query/
│   │   │   ├── listquery.html
│   │   │   └── readme.md
│   │   ├── Open copied record/
│   │   │   ├── README.md
│   │   │   └── open copied record bookmarklet.js
│   │   ├── Open g_form modal/
│   │   │   ├── Open modal to use g_form.js
│   │   │   └── README.md
│   │   ├── Open record in another instance/
│   │   │   ├── Open record in another instance.js
│   │   │   └── README.md
│   │   ├── Open tinymce for journal/
│   │   │   ├── Open tinymce editor in modal for journal fields.js
│   │   │   └── README.md
│   │   ├── Quick Notes/
│   │   │   ├── README.md
│   │   │   └── quick_note.html
│   │   ├── Quick login to current instance/
│   │   │   ├── Quick login.js
│   │   │   └── README.md
│   │   ├── ServiceNow Instance Collection/
│   │   │   ├── README.md
│   │   │   └── bookmarklets.html
│   │   └── Show Logged-in User roles/
│   │       ├── readme.md
│   │       └── user_info_bookmarklet.js
│   ├── Browser Utilities/
│   │   └── Custom Search Engines/
│   │       └── README.md
│   ├── CMDB/
│   │   ├── CMDB CI Deduplication Task Generator/
│   │   │   ├── CI Deduplication Tasks Generation with UI Action.js
│   │   │   └── README.md
│   │   ├── CMDB Dynamic Status Update Function/
│   │   │   ├── README.md
│   │   │   └── updateCMDBOperationalStatus.js
│   │   ├── CMDB Get CI Relationships/
│   │   │   ├── README.md
│   │   │   └── getCIRelationships.js
│   │   ├── CMDB Health Check/
│   │   │   ├── README.md
│   │   │   └── health_check.js
│   │   ├── CMDB Utility Scripts/
│   │   │   ├── README.md
│   │   │   ├── ReadME.md
│   │   │   ├── TechTrekwithAJ-AutoPopulateManufacturer.js
│   │   │   ├── detectDuplicateCIs.js
│   │   │   ├── populateMissingManufacturers.js
│   │   │   ├── softwareCreation.js
│   │   │   ├── softwareCreationREADME.md
│   │   │   └── unUsedCIs.js
│   │   ├── CMDB record count/
│   │   │   ├── README.md
│   │   │   ├── TechTrekwithAJ-CMDBCIcountonclass.js
│   │   │   ├── TechTrekwithAJ-readme.md
│   │   │   └── cmdb-record-count.js
│   │   ├── CSDM Maturity Report/
│   │   │   ├── README.md
│   │   │   └── csdm-maturity-report.js
│   │   ├── IRE Errors/
│   │   │   ├── IRE Errors.js
│   │   │   └── README.md
│   │   ├── IRE Queridentify/
│   │   │   ├── Identify and query with IRE.js
│   │   │   └── README.md
│   │   ├── Mandatory Field Analysis/
│   │   │   ├── README.md
│   │   │   ├── TechTrekwithAJ-CMDBMandatoryfieldanalysis.js
│   │   │   ├── TechTrekwithAJ-cmdbmandatoryfielddescription_readme.md
│   │   │   └── mandatory-field-analysis.js
│   │   └── UnsyncCI from Asset/
│   │       ├── readme.md
│   │       └── script.js
│   ├── Cost Optimization/
│   │   └── Instance Cost Analyzer/
│   │       ├── README.md
│   │       ├── cost_analyzer.js
│   │       └── scheduled_job.js
│   ├── Data Quality/
│   │   └── Similarity Calculator/
│   │       ├── Change Table/
│   │       │   ├── README.md
│   │       │   └── similarity_change_calculator.js
│   │       └── Incident Table/
│   │           ├── README.md
│   │           └── similarity_incident_calculator.js
│   ├── Dynamic Filters/
│   │   └── getMyDirectReports/
│   │       ├── README.md
│   │       └── getMyReportsUtil.js
│   ├── Fix scripts/
│   │   ├── Add Fields On All List Views/
│   │   │   ├── AddFieldsToLists.js
│   │   │   └── README.md
│   │   ├── Add Variable set to multiple catalog items/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Add bulk users to VTB/
│   │   │   ├── README.md
│   │   │   └── addBulkUsersToVTB.js
│   │   ├── Adjust Variable Order on Catalog Item/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Anonymise Data/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Assign user list to a specific group/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Authenticate using ScriptedRESTAPI/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── AutoNumberIssueFix/
│   │   │   ├── README.md
│   │   │   └── autonumberingcode.js
│   │   ├── Bulk Update Catalog Item Images/
│   │   │   ├── README.md
│   │   │   └── bulk-cat-item-image-update.js
│   │   ├── Calculate Business Duration/
│   │   │   ├── README.md
│   │   │   └── calculate-business-duration.js
│   │   ├── Cancel Struck Slack Conversations/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Cancel Workflow/
│   │   │   ├── Cancel Workflow Context.js
│   │   │   └── README.md
│   │   ├── Cancel in progress flow executions using flow name/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check if Fiscal Year is safe for deletion/
│   │   │   ├── Check if Fiscal Year is safe for deletion
│   │   │   └── README.md
│   │   ├── Clean update set/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Copy favourite to other users/
│   │   │   ├── README.md
│   │   │   └── favCopy.js
│   │   ├── CreateMultipleRecords/
│   │   │   ├── Add Manager to Group
│   │   │   ├── README.md
│   │   │   └── create_multiple_records.js
│   │   ├── De-Provision Admin user (configurable)/
│   │   │   ├── README.md
│   │   │   └── deprovisionAdmin.js
│   │   ├── Delete Change Conflict/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Delete Duplicate Mobile records/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Employee document management/
│   │   │   ├── read.md
│   │   │   └── regenerate_document.js
│   │   ├── Find Reports Assigned to inactive Groups/
│   │   │   ├── README.md
│   │   │   └── reportAssignedToInactiveGroups.js
│   │   ├── Find duplicate records/
│   │   │   ├── Find duplicate records.js
│   │   │   ├── README.md
│   │   │   ├── TechTrekwithAJ_DuplicateCIreadme.md
│   │   │   └── TechTrekwithAJ_FindDuplicateonCMDB_CI.JS
│   │   ├── Find the reports assigned to Inactive Users/
│   │   │   ├── README.md
│   │   │   └── reportsassignedtoinactiveusers.js
│   │   ├── Fiscal period renamer/
│   │   │   ├── README.md
│   │   │   └── fiscal period renamer.js
│   │   ├── Fix model names after enabling glide.cmdb_model.display_name.shorten/
│   │   │   ├── README.md
│   │   │   └── fixModelNames.js
│   │   ├── Fix teams token/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Format JSON in String Fields/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Catalog Items not used in last few months/
│   │   │   ├── README.md
│   │   │   └── getUnusedCatItems.js
│   │   ├── Group Sync Script/
│   │   │   ├── README.md
│   │   │   └── fix_script.js
│   │   ├── Ignore outbound emails/
│   │   │   ├── README.md
│   │   │   └── ignoremail.js
│   │   ├── Install Base PDI Plugins/
│   │   │   ├── README.md
│   │   │   └── install_plugins.js
│   │   ├── Install Demo Data/
│   │   │   ├── InstallDemoData.js
│   │   │   └── README.md
│   │   ├── Log out active User sessions/
│   │   │   ├── README.md
│   │   │   └── log_out_active_user_sessions.js
│   │   ├── Mass Email Domain Update/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Mass Update RITM Variable/
│   │   │   ├── README.md
│   │   │   └── Update RITM Variable.js
│   │   ├── Measure code time execution/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Merge stages or choice/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Migrate data from one table to another/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Multiply records from filer breadcrumbs/
│   │   │   ├── Multiply records.js
│   │   │   └── README.md
│   │   ├── Post-clone Clear Email Queue/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Post-clone Email Properties Script/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Post-clone Set Banner Name/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Post-clone Set Instance Banner/
│   │   │   ├── README.md
│   │   │   └── set_instance_banner.js
│   │   ├── Reject RITM via fix script/
│   │   │   ├── README.md
│   │   │   └── Reject RITM.js
│   │   ├── Remove User Groups/
│   │   │   ├── README.md
│   │   │   └── removeuser.js
│   │   ├── Remove extra spaces/
│   │   │   ├── readme.md
│   │   │   └── removeSpaces.js
│   │   ├── Remove leading and trailing spaces/
│   │   │   ├── README.md
│   │   │   └── RemoveLeadingTrailingSpaces.js
│   │   ├── Replace inactive group managers with group members/
│   │   │   └── script.js
│   │   ├── Restart Flow (CatalogItem)/
│   │   │   ├── README.md
│   │   │   └── restart_flow.js
│   │   ├── Restore From Audit History/
│   │   │   ├── README.md
│   │   │   └── restore_from_audit_fix.js
│   │   ├── Run Subscription Job On Demand/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── SchemaGenerator/
│   │   │   ├── README.md
│   │   │   ├── cmdb_ci_server_schema.json
│   │   │   └── schemaGenerator.js
│   │   ├── Search Results Weight/
│   │   │   ├── README.md
│   │   │   └── sr_weight.js
│   │   ├── Swiss German Language Update/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Sync Data Between Instances/
│   │   │   ├── README.md
│   │   │   └── SyncData.js
│   │   ├── Syslog_top10Contributors/
│   │   │   ├── README.md
│   │   │   └── syslog_script.js
│   │   ├── Update field with value in sys_audit/
│   │   │   ├── README.md
│   │   │   └── updateFromAudit.js
│   │   ├── Updateset checker/
│   │   │   ├── README.md
│   │   │   └── Updateset_checker.js
│   │   ├── cleanupOrphanedWorkflowContexts/
│   │   │   ├── README.md
│   │   │   └── cleanupOrphanedWorkflowContexts.js
│   │   ├── deleteMultiple/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── get Groups without Member/
│   │   │   ├── README.md
│   │   │   └── getGroupsWithoutMember.js
│   │   ├── update variable role/
│   │   │   ├── README.md
│   │   │   └── updateWriteRolesOfVariables.js
│   │   └── updateMultipleRecords/
│   │       ├── README.md
│   │       ├── readme.md
│   │       ├── update_multiple_records.js
│   │       └── update_multiple_records_v2.js
│   ├── Flow Actions/
│   │   ├── Add signature and update fields to a fillable PDF document/
│   │   │   ├── README.md
│   │   │   └── pdf_signature.js
│   │   ├── Adhoc Assessment Generator Flow Action/
│   │   │   ├── Assessment.js
│   │   │   └── README.md
│   │   ├── Assign Role/
│   │   │   ├── README.md
│   │   │   └── assignRole.js
│   │   ├── Calculate Ticket Age/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check MID Server Availability/
│   │   │   ├── README.md
│   │   │   └── check_mid_server_availablility.js
│   │   ├── Create Student Weekday Pickup Schedule/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Data Stream/
│   │   │   ├── README.md
│   │   │   └── pagination-setup.js
│   │   ├── Extract JSON Key without Flow Transformation/
│   │   │   ├── README.md
│   │   │   └── remove-html-tags.js
│   │   ├── Generate unique value based on sequence/
│   │   │   ├── README.md
│   │   │   └── next-unique-sequence.js
│   │   ├── Get Days difference/
│   │   │   ├── README.md
│   │   │   └── getDaysDifference.js
│   │   ├── Get KB Article Permalink/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Property/
│   │   │   ├── README.md
│   │   │   └── getPropertyFlowAction.js
│   │   ├── Get choice field value (mitigating known error)/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── GetIPRange/
│   │   │   ├── README.md
│   │   │   └── getIPRange.js
│   │   ├── Group Similar Assessments Using Flow Designer Action Native UI/
│   │   │   ├── FlowAction.js
│   │   │   └── readme.md
│   │   ├── How to refer MID server cluster in integration flow step/
│   │   │   ├── MID Server Cluster.js
│   │   │   └── README.md
│   │   ├── Look Up MRVS Rows/
│   │   │   ├── LookUpMrvsRowIndex.js
│   │   │   └── README.md
│   │   ├── Look up Support group of CI/
│   │   │   ├── LookUpSupportGroupFromCI.js
│   │   │   └── README.md
│   │   ├── Milliseconds to Duration/
│   │   │   ├── README.md
│   │   │   └── millisecondsToDuration.js
│   │   ├── Remove HTML Tags from a String in a Flow/
│   │   │   ├── README.md
│   │   │   └── removeHtmlTags.js
│   │   ├── Runscript activities/
│   │   │   ├── CatalogvariablesSummary.js
│   │   │   └── README.md
│   │   ├── Scheduled data import trigger/
│   │   │   ├── README.md
│   │   │   └── Scheduled data import trigger.js
│   │   ├── ShuffleArrayMatches/
│   │   │   ├── README.md
│   │   │   └── Shuffle Array Matches.js
│   │   ├── Trigger event action/
│   │   │   ├── README.md
│   │   │   └── trigger event flow action.js
│   │   ├── Validate MID servers status inside cluster/
│   │   │   ├── MID Server Availibility inside MID Server Cluster.js
│   │   │   └── README.md
│   │   └── get Catalog Variables as JSON/
│   │       ├── README.md
│   │       └── getCatVarsAsJson.js
│   ├── Formula Builder/
│   │   ├── Formula builder overview/
│   │   │   └── README.md
│   │   └── Get Age From Birthdate/
│   │       ├── README.md
│   │       └── script.js
│   ├── ITOM/
│   │   ├── Bulk Location Update/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Discovery/
│   │   │   ├── Pre README.md
│   │   │   ├── PrePost Pattern designer.js
│   │   │   ├── README.md
│   │   │   └── Script to trigger quick discovery from workflow or flow.js
│   │   ├── Generate Discovery Schedule/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   └── Track Discovery Status/
│   │       ├── CheckDiscoveryStatus.js
│   │       ├── ReadME.md
│   │       ├── discovery_ip_status.js
│   │       └── readme.md
│   ├── Notifications/
│   │   ├── Add KB Article Link Dynamic Email Script to Notification/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Conditional Trigger/
│   │   │   ├── Notification_AdvancedCondition.js
│   │   │   └── README.md
│   │   ├── Modern Email Layout Designs/
│   │   │   ├── Readme.md
│   │   │   └── script.html
│   │   └── Notify Users on Specific Date/
│   │       ├── NotifyUsers.js
│   │       └── README.md
│   ├── On-Call Calendar/
│   │   └── Show group on-call schedule/
│   │       ├── README.md
│   │       └── show_group_on_call_schedule.js
│   ├── Performance Analytics/
│   │   └── Configure Indicators in Batch/
│   │       ├── ConfigurePAIndicators.js
│   │       └── README.md
│   ├── Predictive Intelligence/
│   │   └── Training Data Preparer/
│   │       ├── CMDB Configuration Items/
│   │       │   ├── README.md
│   │       │   └── analyze_cmdb_data_training_quality.js
│   │       ├── Change Table/
│   │       │   ├── README.md
│   │       │   └── analyze_change_data_training_quality.js
│   │       ├── Incident Table/
│   │       │   ├── README.md
│   │       │   └── analyze_incident_data_training_quality.js
│   │       └── Problem Table/
│   │           ├── README.md
│   │           └── analyze_problem_data_training_quality.js
│   ├── Project Management/
│   │   └── Create Explain Project EAC (Estimate At Completion) Value/
│   │       ├── Create Explain Project EAC (Estimate At Completion) Value
│   │       └── README.md
│   ├── Record Producer/
│   │   ├── Create Records By Import Set/
│   │   │   ├── README.md
│   │   │   └── createRecordsByImportSet.js
│   │   └── Update Incident Record from Record Producer/
│   │       ├── README.md
│   │       └── code_snippet.js
│   ├── Regular Expressions/
│   │   ├── Adhaar validation/
│   │   │   ├── Adhaar Validation Script.js
│   │   │   └── README.md
│   │   ├── Allow Characters + - ) ( for Phone numbers/
│   │   │   ├── README.md
│   │   │   └── allowsCharsForPhnNumber.js
│   │   ├── AllowAnyLanguage/
│   │   │   ├── README.md
│   │   │   └── allowanylanguage.js
│   │   ├── Check for special characters/
│   │   │   ├── readme.md
│   │   │   └── specialcharacter.js
│   │   ├── Check if number has 10 digits/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Consecutive duplicate words/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Credit Card Number Validator/
│   │   │   ├── README.md
│   │   │   └── validateCreditCard.js
│   │   ├── Email Address Validation/
│   │   │   ├── README.md
│   │   │   └── isEmail.js
│   │   ├── Encode spaces for URLs/
│   │   │   ├── README.md
│   │   │   └── convert.js
│   │   ├── Ethiopia country code/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Extracting Product Codes and Prices from a String/
│   │   │   ├── Extracting Product Codes and Prices from a String.js
│   │   │   └── README.md
│   │   ├── Find Emoji/
│   │   │   ├── README.md
│   │   │   └── index.js
│   │   ├── Format mobile into Australian mobile format/
│   │   │   ├── Format phone in Australian mobile format.js
│   │   │   └── README.md
│   │   ├── Hashtag & Mention Extractor/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Hexadecimal color/
│   │   │   ├── README.md
│   │   │   └── validateHexColor.js
│   │   ├── IP Address Validation/
│   │   │   ├── README.md
│   │   │   ├── getIP4OrIPV6address.js
│   │   │   └── validateIPInput.js
│   │   ├── ISBN Validator/
│   │   │   ├── README.md
│   │   │   └── validateISBN.js
│   │   ├── Img Tag Regex validator/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Indian Mobile Numbers/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Match URL's from ServiceNow domain/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Negative RegExp for Condition Builder/
│   │   │   ├── NegativeRegExExample.js
│   │   │   └── README.md
│   │   ├── PAN Card Validation Script/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Password Strength Checker/
│   │   │   ├── README.md
│   │   │   └── passwordStrength.js
│   │   ├── Poland country code/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Positive int with 2 decimals/
│   │   │   ├── Allow positive and decimal values.js
│   │   │   └── readme.md
│   │   ├── Regular-expression-for-alphanumeric-characters/
│   │   │   ├── AlphanumericCharacters.js
│   │   │   └── README.md
│   │   ├── Remove Extra Spaces/
│   │   │   ├── README.md
│   │   │   └── index.js
│   │   ├── Remove all HTML Tags/
│   │   │   ├── README.md
│   │   │   └── Remove all html tags.js
│   │   ├── Remove newline and carriage return/
│   │   │   ├── README.md
│   │   │   └── remove cr and nl.js
│   │   ├── SSN Formatting/
│   │   │   ├── Index.js
│   │   │   └── README.md
│   │   ├── UK Country Code/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── URL Validation/
│   │   │   ├── README.md
│   │   │   └── validateURL.js
│   │   ├── Username validation/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   └── Validate IPv6 Address/
│   │       ├── README.md
│   │       └── script.js
│   ├── Resource Management/
│   │   └── Resource Capacity And Availability Viewer (Daily Basis)/
│   │       ├── README.md
│   │       └── ResourceCapacityAndAvailabilityViewerDailyBasis.js
│   └── Styles/
│       ├── Add Background Color to a field/
│       │   ├── README.md
│       │   └── style.css
│       ├── Add attachment icon-list view/
│       │   ├── README.md
│       │   ├── style.css
│       │   └── value.js
│       ├── Change text color of a field/
│       │   ├── README.md
│       │   └── style.css
│       ├── Hide MRVS Buttons/
│       │   ├── README.md
│       │   └── styles.html
│       ├── ServiceNow Custom Style/
│       │   ├── README.md
│       │   └── style.css
│       └── Zoom Catalog Image on Hover/
│           ├── CSS.js
│           └── README.md
├── _config.yml
├── assets/
│   ├── css/
│   │   └── custom.css
│   ├── footer.js
│   └── js/
│       └── site.js
├── count-files.js
├── index.html
├── pages/
│   ├── client-side-components.html
│   ├── core-apis.html
│   ├── integration.html
│   ├── modern-development.html
│   ├── server-side-components.html
│   └── specialized-areas.html
└── sitemap.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/pull_request_template.md
================================================
# PR Description: 
replace this with your description

# Pull Request Checklist

## Overview
- [x] Put an x inside of the square brackets to check each item.
- [ ] I have read and understood the [CONTRIBUTING.md](CONTRIBUTING.md) guidelines
- [ ] My pull request has a descriptive title that accurately reflects the changes and the description has been filled in above.
- [ ] I've included only files relevant to the changes described in the PR title and description
- [ ] I've created a new branch in my forked repository for this contribution

## Code Quality
- [ ] My code is relevant to ServiceNow developers
- [ ] My code snippets expand meaningfully on official ServiceNow documentation (if applicable)
- [ ] I've disclosed use of ES2021 features (if applicable)
- [ ] I've tested my code snippets in a ServiceNow environment (where possible)

## Repository Structure Compliance
- [ ] I've placed my code snippet(s) in one of the required top-level categories:
  - `Core ServiceNow APIs/`
  - `Server-Side Components/`
  - `Client-Side Components/`
  - `Modern Development/`
  - `Integration/`
  - `Specialized Areas/`
- [ ] I've used appropriate sub-categories within the top-level categories
- [ ] Each code snippet has its own folder with a descriptive name

## Documentation
- [ ] I've included a README.md file for each code snippet
- [ ] The README.md includes:
  - Description of the code snippet functionality
  - Usage instructions or examples
  - Any prerequisites or dependencies
  - (Optional) Screenshots or diagrams if helpful

## Restrictions
- [ ] My PR does not include XML exports of ServiceNow records
- [ ] My PR does not contain sensitive information (passwords, API keys, tokens)
- [ ] My PR does not include changes that fall outside the described scope


================================================
FILE: .github/scripts/validate-structure.js
================================================
#!/usr/bin/env node

const { execSync } = require('child_process');

const allowedCategories = new Set([
  'Core ServiceNow APIs',
  'Server-Side Components',
  'Client-Side Components',
  'Modern Development',
  'Integration',
  'Specialized Areas'
]);

function resolveDiffRange() {
  if (process.argv[2]) {
    return process.argv[2];
  }

  const inCI = process.env.GITHUB_ACTIONS === 'true';
  if (!inCI) {
    return 'origin/main...HEAD';
  }

  const base = process.env.GITHUB_BASE_REF ? `origin/${process.env.GITHUB_BASE_REF}` : 'origin/main';
  const head = process.env.GITHUB_SHA || 'HEAD';
  return `${base}...${head}`;
}

function getChangedFiles(diffRange) {
  let output;
  try {
    output = execSync(`git diff --name-only --diff-filter=ACMR ${diffRange}`, {
      encoding: 'utf8',
      stdio: ['ignore', 'pipe', 'pipe']
    });
  } catch (error) {
    console.error('Failed to collect changed files. Ensure the base branch is fetched.');
    console.error(error.stderr?.toString() || error.message);
    process.exit(1);
  }

  return output
    .split('\n')
    .map((line) => line.trim())
    .filter(Boolean);
}

function validateFilePath(filePath) {
  const normalized = filePath.replace(/\\/g, '/');
  const segments = normalized.split('/');

  // Check for invalid characters that break local file systems
  for (let i = 0; i < segments.length; i++) {
    const segment = segments[i];

    // Check for trailing periods (invalid on Windows)
    if (segment.endsWith('.')) {
      return `Invalid folder/file name '${segment}' in path '${normalized}': Names cannot end with a period (.) as this breaks local file system sync on Windows.`;
    }

    // Check for trailing spaces (invalid on Windows)
    if (segment.endsWith(' ')) {
      return `Invalid folder/file name '${segment}' in path '${normalized}': Names cannot end with a space as this breaks local file system sync on Windows.`;
    }

    // Check for reserved Windows names
    const reservedNames = ['CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9'];
    const nameWithoutExt = segment.split('.')[0].toUpperCase();
    if (reservedNames.includes(nameWithoutExt)) {
      return `Invalid folder/file name '${segment}' in path '${normalized}': '${nameWithoutExt}' is a reserved name on Windows and will break local file system sync.`;
    }

    // Check for invalid characters (Windows and general file system restrictions)
    const invalidChars = /[<>:"|?*\x00-\x1F]/;
    if (invalidChars.test(segment)) {
      return `Invalid folder/file name '${segment}' in path '${normalized}': Contains characters that are invalid on Windows file systems (< > : " | ? * or control characters).`;
    }
  }

  if (!allowedCategories.has(segments[0])) {
    return null;
  }

  // Files must live under: Category/Subcategory/SpecificUseCase/<file>
  if (segments.length < 4) {
    return `Move '${normalized}' under a valid folder hierarchy (Category/Subcategory/Use-Case/your-file). Files directly inside '${segments[0]}' or its subcategories are not allowed.`;
  }

  return null;
}

function main() {
  const diffRange = resolveDiffRange();
  const changedFiles = getChangedFiles(diffRange);

  if (changedFiles.length === 0) {
    console.log('No relevant file changes detected.');
    return;
  }

  const problems = [];

  for (const filePath of changedFiles) {
    const issue = validateFilePath(filePath);
    if (issue) {
      problems.push(issue);
    }
  }

  if (problems.length > 0) {
    console.error('Folder structure violations found:');
    for (const msg of problems) {
      console.error(` - ${msg}`);
    }
    process.exit(1);
  }

  console.log('Folder structure looks good.');
}

main();


================================================
FILE: .github/workflows/hacktrack.yml
================================================
#This file is for ServiceNow Dev Program Hacktoberfest Tracking and can be ignored or deleted.

name: Record Hacktrack Event
on:
  push:
    branches: main
  fork:
    branches: main
  issues:
    types: [opened, closed]
    branches: main
  pull_request_target:
    types: [opened, closed]
    branches: main
jobs:
  deployment:
    if: github.repository == 'ServiceNowDevProgram/code-snippets'
    runs-on: ubuntu-latest
    steps:
#     - name: Log payload
#       env:
#         GITHUB_CONTEXT: ${{ toJson(github) }}
#       run: |
#         echo "$GITHUB_CONTEXT"
    - name: Contact DPR
      id: myRequest
      uses: fjogeleit/http-request-action@v1.8.1
      with:
        url: ${{ format('https://{0}.service-now.com/api/x_snc_hacktrack/hacktrack', secrets.HT_INSTANCE_NAME) }}
        method: 'POST'
        contentType: application/json
        data: ${{ toJson(github) }}
        username: ${{ secrets.DPRD_USERNAME }}
        password: ${{ secrets.DPRD_PASSWORD }}
    - name: Show Response
      run: echo ${{ steps.myRequest.outputs.response }}


================================================
FILE: .github/workflows/pages.yml
================================================
# GitHub Pages deployment workflow
name: Deploy GitHub Pages

on:
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: pages-${{ github.ref }}
  cancel-in-progress: true

jobs:
  # Build and optimize job
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'
          cache: 'npm'

      - name: Install build dependencies
        run: |
          npm init -y
          npm install --save-dev html-minifier-terser clean-css-cli terser html-validate

      - name: Validate HTML files
        run: |
          echo "Validating HTML files..."
          npx html-validate *.html pages/*.html || echo "HTML validation completed with warnings"

      - name: Optimize assets
        run: |
          echo "Optimizing HTML files..."
          # Create backup directory
          mkdir -p .backup
          
          # Minify HTML files (preserve original structure)
          find . -name "*.html" -not -path "./node_modules/*" -not -path "./.backup/*" | while read file; do
            echo "Minifying: $file"
            npx html-minifier-terser \
              --collapse-whitespace \
              --remove-comments \
              --remove-optional-tags \
              --remove-redundant-attributes \
              --remove-script-type-attributes \
              --remove-style-link-type-attributes \
              --minify-css \
              --minify-js \
              "$file" -o "$file.tmp" && mv "$file.tmp" "$file"
          done
          
          # Minify CSS files if any exist
          if find . -name "*.css" -not -path "./node_modules/*" -not -path "./.backup/*" | grep -q .; then
            echo "Optimizing CSS files..."
            find . -name "*.css" -not -path "./node_modules/*" -not -path "./.backup/*" | while read file; do
              echo "Minifying: $file"
              npx cleancss "$file" -o "$file"
            done
          fi
          
          # Remove build dependencies from final artifact
          rm -rf node_modules package*.json

      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v4

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: '.'

  # Deployment job
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

================================================
FILE: .github/workflows/pr-auto-unassign-stale.yml
================================================
name: Auto-unassign stale PR assignees

on:
  schedule:
    - cron: "*/15 * * * *"   # run every 15 minutes
  workflow_dispatch:
    inputs:
      enabled:
        description: "Enable this automation"
        type: boolean
        default: true
      max_age_minutes:
        description: "Unassign if assigned longer than X minutes"
        type: number
        default: 60
      dry_run:
        description: "Preview only; do not change assignees"
        type: boolean
        default: false

permissions:
  pull-requests: write
  issues: write

env:
  # Defaults (can be overridden via workflow_dispatch inputs)
  ENABLED: "true"
  MAX_ASSIGN_AGE_MINUTES: "60"
  DRY_RUN: "false"

jobs:
  sweep:
    runs-on: ubuntu-latest
    steps:
      - name: Resolve inputs into env
        run: |
          # Prefer manual run inputs when present
          if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
            echo "ENABLED=${{ inputs.enabled }}" >> $GITHUB_ENV
            echo "MAX_ASSIGN_AGE_MINUTES=${{ inputs.max_age_minutes }}" >> $GITHUB_ENV
            echo "DRY_RUN=${{ inputs.dry_run }}" >> $GITHUB_ENV
          fi
          echo "Effective config: ENABLED=$ENABLED, MAX_ASSIGN_AGE_MINUTES=$MAX_ASSIGN_AGE_MINUTES, DRY_RUN=$DRY_RUN"

      - name: Exit if disabled
        if: ${{ env.ENABLED != 'true' && env.ENABLED != 'True' && env.ENABLED != 'TRUE' }}
        run: echo "Disabled via ENABLED=$ENABLED. Exiting." && exit 0

      - name: Unassign stale assignees
        uses: actions/github-script@v7
        with:
          script: |
            const owner = context.repo.owner;
            const repo  = context.repo.repo;

            const MAX_MIN = parseInt(process.env.MAX_ASSIGN_AGE_MINUTES || "60", 10);
            const DRY_RUN = ["true","True","TRUE","1","yes"].includes(String(process.env.DRY_RUN));
            const now = new Date();

            core.info(`Scanning open PRs. Threshold = ${MAX_MIN} minutes. DRY_RUN=${DRY_RUN}`);

            // List all open PRs
            const prs = await github.paginate(github.rest.pulls.list, {
              owner, repo, state: "open", per_page: 100
            });

            let totalUnassigned = 0;

            for (const pr of prs) {
              if (!pr.assignees || pr.assignees.length === 0) continue;

              const number = pr.number;
              core.info(`PR #${number}: "${pr.title}" — assignees: ${pr.assignees.map(a => a.login).join(", ")}`);

              // Pull reviews (to see if an assignee started a review)
              const reviews = await github.paginate(github.rest.pulls.listReviews, {
                owner, repo, pull_number: number, per_page: 100
              });

              // Issue comments (general comments)
              const issueComments = await github.paginate(github.rest.issues.listComments, {
                owner, repo, issue_number: number, per_page: 100
              });

              // Review comments (file-level)
              const reviewComments = await github.paginate(github.rest.pulls.listReviewComments, {
                owner, repo, pull_number: number, per_page: 100
              });

              // Issue events (to find assignment timestamps)
              const issueEvents = await github.paginate(github.rest.issues.listEvents, {
                owner, repo, issue_number: number, per_page: 100
              });

              for (const a of pr.assignees) {
                const assignee = a.login;

                // Find the most recent "assigned" event for this assignee
                const assignedEvents = issueEvents
                  .filter(e => e.event === "assigned" && e.assignee && e.assignee.login === assignee)
                  .sort((x, y) => new Date(y.created_at) - new Date(x.created_at));

                if (assignedEvents.length === 0) {
                  core.info(`  - @${assignee}: no 'assigned' event found; skipping.`);
                  continue;
                }

                const assignedAt = new Date(assignedEvents[0].created_at);
                const ageMin = (now - assignedAt) / 60000;

                // Has the assignee commented (issue or review comments) or reviewed?
                const hasIssueComment = issueComments.some(c => c.user?.login === assignee);
                const hasReviewComment = reviewComments.some(c => c.user?.login === assignee);
                const hasReview = reviews.some(r => r.user?.login === assignee);

                const eligible =
                  ageMin >= MAX_MIN &&
                  !hasIssueComment &&
                  !hasReviewComment &&
                  !hasReview &&
                  pr.state === "open";

                core.info(`  - @${assignee}: assigned ${ageMin.toFixed(1)} min ago; commented=${hasIssueComment || hasReviewComment}; reviewed=${hasReview}; open=${pr.state==='open'} => ${eligible ? 'ELIGIBLE' : 'skip'}`);

                if (!eligible) continue;

                if (DRY_RUN) {
                  core.notice(`Would unassign @${assignee} from PR #${number}`);
                } else {
                  try {
                    await github.rest.issues.removeAssignees({
                      owner, repo, issue_number: number, assignees: [assignee]
                    });
                    totalUnassigned += 1;
                    // Optional: leave a gentle heads-up comment
                    await github.rest.issues.createComment({
                      owner, repo, issue_number: number,
                      body: `👋 Unassigning @${assignee} due to inactivity (> ${MAX_MIN} min without comments/reviews). This PR remains open for other reviewers.`
                    });
                    core.info(`    Unassigned @${assignee} from #${number}`);
                  } catch (err) {
                    core.warning(`    Failed to unassign @${assignee} from #${number}: ${err.message}`);
                  }
                }
              }
            }

            core.summary
              .addHeading('Auto-unassign report')
              .addRaw(`Threshold: ${MAX_MIN} minutes\n\n`)
              .addRaw(`Total unassignments: ${totalUnassigned}\n`)
              .write();

          result-encoding: string


================================================
FILE: .github/workflows/validate-structure.yml
================================================
name: Validate Folder Structure

on:
  pull_request_target:
    branches:
      - main

permissions:
  contents: read
  pull-requests: write

concurrency:
  group: folder-structure-${{ github.event.pull_request.number || github.run_id }}
  cancel-in-progress: true

jobs:
  structure:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout base repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Cache validation script
        run: cp .github/scripts/validate-structure.js "$RUNNER_TEMP/validate-structure.js"

      - name: Fetch pull request head
        id: fetch_head
        env:
          PR_REMOTE_URL: https://github.com/${{ github.event.pull_request.head.repo.full_name }}.git
          PR_HEAD_REF: ${{ github.event.pull_request.head.ref }}
        run: |
          git remote remove pr >/dev/null 2>&1 || true
          git remote add pr "$PR_REMOTE_URL"
          if git fetch pr "$PR_HEAD_REF":pr-head --no-tags; then
            git checkout pr-head
            git fetch origin "${{ github.event.pull_request.base.ref }}"
            echo "fetched=true" >> "$GITHUB_OUTPUT"
          else
            echo "::warning::Unable to fetch fork repository. Skipping structure validation."
            echo "fetched=false" >> "$GITHUB_OUTPUT"
          fi

      - name: Use Node.js 18
        uses: actions/setup-node@v4
        with:
          node-version: 18

      - name: Validate folder layout
        if: ${{ steps.fetch_head.outputs.fetched == 'true' }}
        id: validate
        run: |
          set -euo pipefail

          tmp_output=$(mktemp)
          tmp_error=$(mktemp)

          set +e
          node "$RUNNER_TEMP/validate-structure.js" origin/${{ github.event.pull_request.base.ref }}...HEAD >"$tmp_output" 2>"$tmp_error"
          status=$?
          set -e

          cat "$tmp_output"
          cat "$tmp_error" >&2

          if grep -q 'Folder structure violations found' "$tmp_output" "$tmp_error"; then
            # Save validation output for use in PR comment
            cat "$tmp_output" "$tmp_error" > "$RUNNER_TEMP/validation_output.txt"
            echo "status=failed" >> "$GITHUB_OUTPUT"
            exit 0
          fi

          if [ $status -ne 0 ]; then
            echo "::warning::Structure validation skipped because the diff could not be evaluated (exit code $status)."
            echo "status=skipped" >> "$GITHUB_OUTPUT"
            exit 0
          fi

          echo "status=passed" >> "$GITHUB_OUTPUT"

      - name: Close pull request on failure
        if: ${{ steps.validate.outputs.status == 'failed' }}
        uses: actions/github-script@v6
        with:
          github-token: ${{ github.token }}
          script: |
            const pullNumber = context.payload.pull_request.number;
            const owner = context.repo.owner;
            const repo = context.repo.repo;

            const fs = require('fs');
            const output = fs.readFileSync(process.env.RUNNER_TEMP + '/validation_output.txt', 'utf8');

            let commentBody = `Thank you for your contribution. However, it doesn't comply with our contributing guidelines.\n\n`;

            // Check if the error is about invalid file/folder names
            if (output.includes('Names cannot end with a period') ||
                output.includes('Names cannot end with a space') ||
                output.includes('is a reserved name on Windows') ||
                output.includes('Contains characters that are invalid')) {
              commentBody += `**❌ Invalid File/Folder Names Detected**\n\n`;
              commentBody += `Your contribution contains file or folder names that will break when syncing to local file systems (especially Windows):\n\n`;
              commentBody += `\`\`\`\n${output}\n\`\`\`\n\n`;
              commentBody += `**Common issues:**\n`;
              commentBody += `- Folder/file names ending with a period (.) - not allowed on Windows\n`;
              commentBody += `- Folder/file names ending with spaces - not allowed on Windows\n`;
              commentBody += `- Reserved names like CON, PRN, AUX, NUL, COM1-9, LPT1-9 - not allowed on Windows\n`;
              commentBody += `- Invalid characters: < > : " | ? * or control characters\n\n`;
              commentBody += `Please rename these files/folders to be compatible with all operating systems.\n\n`;
            } else {
              commentBody += `As a reminder, the general requirements (as outlined in the [CONTRIBUTING.md file](https://github.com/ServiceNowDevProgram/code-snippets/blob/main/CONTRIBUTING.md)) are the following: follow the folder+subfolder guidelines and include a README.md file explaining what the code snippet does.\n\n`;
              commentBody += `**Validation errors:**\n\`\`\`\n${output}\n\`\`\`\n\n`;
            }

            commentBody += `Review your contribution against the guidelines and make the necessary adjustments. Closing this for now. Once you make additional changes, feel free to re-open this Pull Request or create a new one.`;

            await github.rest.issues.createComment({
              owner,
              repo,
              issue_number: pullNumber,
              body: commentBody.trim()
            });

            await github.rest.pulls.update({
              owner,
              repo,
              pull_number: pullNumber,
              state: 'closed'
            });

      - name: Mark job as failed if validation failed
        if: ${{ steps.validate.outputs.status == 'failed' }}
        run: exit 1


================================================
FILE: .gitignore
================================================
.DS_Store

# Claude Code settings
.claude/
settings.local.json


================================================
FILE: AGENTS.md
================================================
# AGENTS.md

This file provides guidance to AI Coding Agents when working with code in this repository.

## Repository Overview

This is the **ServiceNow Developer Program's Code Snippets Repository** - a community-driven collection of ServiceNow development code examples and utilities. The repository contains 900+ code snippets organized into 50+ categories covering all aspects of ServiceNow platform development.

## Repository Structure and Organization

### Directory Structure
All code snippets follow a standardized four-level structure:
```
Top-Level Category/
├── Sub-Category/
│   ├── Specific-Use-Case/
│   │   ├── README.md           # Description and usage instructions
│   │   ├── script.js           # Main code implementation
│   │   └── variant.js          # Optional code variations
```

### Top-Level Categories (REQUIRED Structure)
The repository is organized into **6 major categories**. All contributions MUST use these categories:

- **Core ServiceNow APIs/**: Essential ServiceNow JavaScript APIs
  - `GlideRecord/`, `GlideAjax/`, `GlideSystem/`, `GlideDate/`, `GlideDateTime/`, `GlideElement/`, `GlideFilter/`, `GlideAggregate/`, `GlideHTTPRequest/`, `GlideModal/`, `GlideQuery/`, `GlideTableDescriptor/`

- **Server-Side Components/**: Server-executed code
  - `Background Scripts/`, `Business Rules/`, `Script Includes/`, `Script Actions/`, `Scheduled Jobs/`, `Transform Map Scripts/`, `Server Side/`, `Inbound Actions/`, `Processors/`

- **Client-Side Components/**: Browser-executed code
  - `Client Scripts/`, `Catalog Client Script/`, `UI Actions/`, `UI Scripts/`, `UI Pages/`, `UI Macros/`, `UX Client Scripts/`, `UX Client Script Include/`, `UX Data Broker Transform/`

- **Modern Development/**: Modern ServiceNow frameworks
  - `Service Portal/`, `Service Portal Widgets/`, `NOW Experience/`, `GraphQL/`, `ECMASCript 2021/`

- **Integration/**: External systems and data exchange
  - `Integration/` (original), `RESTMessageV2/`, `Import Set API/`, `Scripted REST Api/`, `Mail Scripts/`, `MIDServer/`, `Attachments/`

- **Specialized Areas/**: Domain-specific functionality
  - `CMDB/`, `ITOM/`, `Performance Analytics/`, `ATF Steps/`, `Agile Development/`, `Advanced Conditions/`, `Browser Bookmarklets/`, `Browser Utilities/`, `Dynamic Filters/`, `Fix scripts/`, `Flow Actions/`, `Formula Builder/`, `Notifications/`, `On-Call Calendar/`, `Record Producer/`, `Regular Expressions/`, `Styles/`

## Development Guidelines

### Code Quality Standards
- Each snippet must include comprehensive README.md documentation
- Code should be relevant to ServiceNow developers
- ES2021 features are allowed but should be clearly documented
- Examples should expand meaningfully on official ServiceNow documentation
- Quality over quantity - low-effort submissions are rejected

### Contribution Requirements
- **Mandatory Category Structure**: All contributions MUST use the 6 top-level categories. PRs with incorrect structure will be rejected.
- **Descriptive Structure**: Changes must match pull request scope exactly
- **No XML Exports**: Avoid ServiceNow record exports in favor of JavaScript code
- **Documentation**: Every code snippet requires accompanying README.md
- **Proper Categorization**: Place snippets in appropriate existing sub-categories within the required top-level structure

### File Organization
- Use descriptive folder names that clearly indicate functionality
- Group related code variations in the same folder
- Include screenshots or examples when helpful for understanding
- Maintain consistent naming conventions across similar snippets

## Common ServiceNow Development Patterns

### GlideRecord Usage
- Most snippets demonstrate proper GlideRecord query patterns
- Security considerations with ACL enforcement examples
- Performance optimization through proper query construction
- Reference field handling and relationship traversal

### Integration Patterns
- REST API consumption and production examples
- Authentication handling for external systems
- Data transformation and mapping utilities
- Error handling and logging best practices

### Business Logic Implementation
- Business Rules for event-driven processing
- Background Scripts for administrative tasks
- Client Scripts for form behavior and validation
- UI Actions for custom user interactions

## Testing and Validation

### Code Verification
- Test all code snippets in development environments before submission
- Validate against multiple ServiceNow versions when possible
- Consider security implications and access controls
- Document any prerequisites or dependencies

### Community Review Process
- All contributions undergo peer review by Developer Advocates
- Changes outside described scope result in rejection
- Multiple submissions require separate branches in forked repositories

## Security Considerations

- Never include sensitive information (passwords, API keys, tokens)
- Consider security implications of all code examples
- Demonstrate proper access control patterns where applicable
- Include warnings for potentially dangerous operations

## Repository Maintenance

### Branch Management
- Main branch contains all approved code snippets
- Use descriptive branch names for contributions
- Create separate branches for different feature additions

### File Management
- No build processes or compilation required
- Direct GitHub editing supported
- Git-enabled IDEs like VS Code recommended for larger contributions
- Standard .gitignore excludes only .DS_Store files

This repository serves as a comprehensive reference for ServiceNow developers at all skill levels, emphasizing practical, tested solutions for real-world development scenarios.


================================================
FILE: CONTRIBUTING.md
================================================
# How to Contribute

We welcome contributions to the **ServiceNow Developer Program's Code Snippets Repository**! Follow these steps to get involved:

## Steps to Contribute

1. **Fork the Repository**: Click the "Fork" button on the top right of this page to create your own copy of the repository.

2. **Create a New Branch**: 
   - Name your branch according to the functionality you are adding (e.g., `feature/new-snippet` or `bugfix/fix-issue`).
   - Switch to your new branch from the main branch dropdown.

3. **Add or Edit Code Snippets**:
   - Navigate to the appropriate folders and files to add, edit, or reorganize code snippets.
   - Commit your changes to your forked repository.

4. **Submit a Pull Request**:
   - Go to the original repository and click on the "Pull Requests" tab.
   - Click "New Pull Request" and select your branch.
   - Ensure your pull request has a descriptive title and comment that outlines what changes you made.
   - Only include files relevant to the changes described in the pull request title and description.
   - Avoid submitting XML exports of ServiceNow records.

That's it! A Developer Advocate or a designated approver from the ServiceNow Dev Program will review your pull request. If approved, it will be merged into the main repository for everyone's benefit!

### Note on Multiple Submissions
If you plan to submit another pull request while your original is still pending, make sure to create a new branch in your forked repository first.

## General Requirements

- **Descriptive Pull Request Titles**: Your pull request must have explicit and descriptive titles that accurately represent the changes made.
- **Scope Adherence**: Changes that fall outside the described scope will result in the entire pull request being rejected.
- **Quality Over Quantity**: Low-effort or spam pull requests will be marked accordingly.
- **Expanded Snippets**: Code snippets reused from the [ServiceNow Documentation](https://docs.servicenow.com/) or [API References](https://developer.servicenow.com/dev.do#!/reference/) are acceptable only if they are expanded in a meaningful way (e.g., with additional context, documentation, or variations). Remember: *"QUANTITY IS FUN, QUALITY IS KEY."*
- **Relevance**: Code should be relevant to ServiceNow Developers.
- **ES2021 Compatibility**: While ES2021 is allowed, we encourage you to disclose if your code is using ES2021 features, as not everyone may be working with ES2021-enabled applications.

## Core Documentation File Changes

**IMPORTANT**: For changes to core documentation files (README.md, CONTRIBUTING.md, LICENSE, etc.), contributors must:

1. **Submit an Issue First**: Before making any changes to core documentation files, create an issue describing:
   - What you intend to edit
   - Why the change is needed
   - Your proposed approach

2. **Get Assignment**: Wait to be assigned to the issue by a maintainer before submitting a PR.

3. **Reference the Issue**: Include the issue number in your PR title and description.

This process helps prevent merge conflicts when multiple contributors want to update the same documentation files and ensures all changes align with the project's direction.

## Repository Structure

**IMPORTANT**: The repository has been reorganized into major categories. All new contributions MUST follow this structure for PR approval.

Please follow this directory structure when organizing your code snippets:

- **Top-Level Categories**: These are fixed categories that represent major areas of ServiceNow development:
  - `Core ServiceNow APIs/` - GlideRecord, GlideAjax, GlideSystem, GlideDate, etc.
  - `Server-Side Components/` - Background Scripts, Business Rules, Script Includes, etc.
  - `Client-Side Components/` - Client Scripts, Catalog Client Scripts, UI Actions, etc.
  - `Modern Development/` - Service Portal, NOW Experience, GraphQL, ECMAScript 2021
  - `Integration/` - RESTMessageV2, Import Sets, Mail Scripts, MIDServer, etc.
  - `Specialized Areas/` - CMDB, ITOM, Performance Analytics, ATF Steps, etc.

- **Sub-Categories**: Each top-level category contains sub-folders for specific ServiceNow technologies or use cases.
- **Snippet Folders**: Each sub-category contains folders for **each code snippet**.
- **Snippet Folder Contents**: Within each snippet folder, include:
  - A `README.md` file that describes the code snippet.
  - Individual files for each variant of the code snippet.

### New Structure Example

```
Core ServiceNow APIs/
  ├── GlideRecord/
  │   ├── Query Performance Optimization/
  │   │   ├── README.md         # Description of the optimization snippet
  │   │   ├── basic_query.js    # Basic query example
  │   │   └── optimized_query.js # Performance-optimized version
  │   └── Reference Field Handling/
  │       ├── README.md         # Description of reference handling
  │       └── reference_query.js # Reference field query example
  └── GlideAjax/
      ├── Async Data Loading/
      │   ├── README.md         # Description of async loading
      │   ├── client_script.js  # Client-side implementation
      │   └── script_include.js # Server-side Script Include
Server-Side Components/
  ├── Business Rules/
  │   ├── Auto Assignment Logic/
  │   │   ├── README.md         # Description of auto assignment
  │   │   └── assignment_rule.js # Business rule implementation
```

### Category Placement Guidelines

- **Core ServiceNow APIs**: All Glide* APIs and core ServiceNow JavaScript APIs
- **Server-Side Components**: Code that runs on the server (Business Rules, Background Scripts, etc.)
- **Client-Side Components**: Code that runs in the browser (Client Scripts, UI Actions, etc.)
- **Modern Development**: Modern ServiceNow development approaches and frameworks
- **Integration**: External system integrations, data import/export, and communication
- **Specialized Areas**: Domain-specific functionality (CMDB, ITOM, Testing, etc.)

## Final Checklist

Before submitting your pull request, ensure that:
- All code snippet files are in the appropriate folders.
- Each folder is correctly placed within its category.
- Your code snippet is accompanied by a `readme.md` file that describes it.

Thank you for contributing! Your efforts help create a richer resource for the ServiceNow development community.


================================================
FILE: Client-Side Components/Catalog Client Script/Add Label For Attachment/README.md
================================================
Code Snippet to add a label to the attachment for a Catalog Item on the Portal.

================================================
FILE: Client-Side Components/Catalog Client Script/Add Label For Attachment/add_label_for_attachment.js
================================================
function onLoad() {
    var attachmentElement = top.document.querySelectorAll('[ng-if="c.showAttachments()"]');
    
	if (attachmentElement[0]) {
		var label = top.document.createElement('label');
		label.innerHTML = 'LABEL COMES HERE';
		attachmentElement[0].prepend(label);
	}
}

================================================
FILE: Client-Side Components/Catalog Client Script/Add Rows in MRVS/README.md
================================================
With this simple script you can through a client script add rows in the MRVS if you like. Ex. you want to prefill a few rows that you get from a GlideAjax call depending on what the user choosed in another variable


================================================
FILE: Client-Side Components/Catalog Client Script/Add Rows in MRVS/addrows.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
	if (isLoading)
		return;

	var obj = (g_form.getValue('multi_test').length != 0) ? JSON.parse(g_form.getValue('multi_test')): [];//Get the MRVS

  //Push in what you want
	obj.push({var_one: 'test1',
			  var_two: 'test2'});
	g_form.setValue('multi_test', JSON.stringify(obj));//And set the value again

}


================================================
FILE: Client-Side Components/Catalog Client Script/Auto Save Draft Feature/README.md
================================================
# Auto Save Draft Feature for Catalog Items

This snippet provides automatic draft saving functionality for ServiceNow Catalog Items, helping prevent data loss by automatically saving form data at regular intervals.

## Overview

The feature includes two implementations:
1. Basic Implementation (`basic_implementation.js`)
2. Advanced Implementation (`advanced_implementation.js`)

## Basic Implementation

### Features
- Auto-saves form data every minute
- Stores single draft in sessionStorage
- Provides draft restoration on form load
- Basic error handling and user feedback

### Usage
```javascript
// Apply in Catalog Client Script
// Select "onLoad" for "Client script runs"
// Copy content from basic_implementation.js
```

## Advanced Implementation

### Enhanced Features
- Multiple draft support (keeps last 3 drafts)
- Advanced draft management
- Draft selection dialog
- Detailed metadata tracking
- Improved error handling
- User-friendly notifications

### Usage
```javascript
// Apply in Catalog Client Script
// Select "onLoad" for "Client script runs"
// Copy content from advanced_implementation.js
```

## Technical Details

### Dependencies
- ServiceNow Platform UI Framework
- GlideForm API
- GlideModal (advanced implementation only)

### Browser Support
- Modern browsers with sessionStorage support
- ES5+ compatible

### Security Considerations
- Uses browser's sessionStorage (cleared on session end)
- No sensitive data transmission
- Instance-specific storage

## Implementation Guide

1. Create a new Catalog Client Script:
   - Table: Catalog Client Script [catalog_script_client]
   - Type: onLoad
   - Active: true

2. Choose implementation:
   - For basic needs: Copy `basic_implementation.js`
   - For advanced features: Copy `advanced_implementation.js`

3. Apply to desired Catalog Items:
   - Select applicable Catalog Items
   - Test in dev environment first

## Best Practices

1. Testing:
   - Test with various form states
   - Verify draft restoration
   - Check browser storage limits

2. Performance:
   - Default 60-second interval is recommended
   - Adjust based on form complexity
   - Monitor browser memory usage

3. User Experience:
   - Clear feedback messages
   - Confirmation dialogs
   - Error notifications

## Limitations

- Browser session dependent
- Storage size limits
- Form field compatibility varies

## Troubleshooting

Common issues and solutions:
1. Draft not saving
   - Check browser console for errors
   - Verify sessionStorage availability
   - Check form modification detection

2. Restoration fails
   - Validate stored data format
   - Check browser storage permissions
   - Verify form field compatibility

## Version Information

- Compatible with ServiceNow: Rome and later
- Browser Requirements: Modern browsers with ES5+ support
- Last Updated: October 2025

================================================
FILE: Client-Side Components/Catalog Client Script/Auto Save Draft Feature/advanced_implementation.js
================================================
/**
 * Advanced Auto-save Draft Implementation with Enhanced Features
 * This version adds multi-draft support and advanced error handling
 */

function onLoad() {
    var autosaveInterval = 60000; // 1 minute
    var maxDrafts = 3; // Maximum number of drafts to keep
    
    // Initialize draft manager
    initializeDraftManager();
    
    // Try to restore previous draft
    restoreLastDraft();
    
    // Set up auto-save interval
    setInterval(function() {
        if (g_form.isModified()) {
            saveAdvancedDraft();
        }
    }, autosaveInterval);
}

function initializeDraftManager() {
    window.draftManager = {
        maxDrafts: 3,
        draftPrefix: 'catalogDraft_' + g_form.getUniqueValue() + '_',
        
        getAllDrafts: function() {
            var drafts = [];
            for (var i = 0; i < sessionStorage.length; i++) {
                var key = sessionStorage.key(i);
                if (key.startsWith(this.draftPrefix)) {
                    drafts.push({
                        key: key,
                        data: JSON.parse(sessionStorage.getItem(key))
                    });
                }
            }
            return drafts.sort((a, b) => b.data.timestamp - a.data.timestamp);
        },
        
        cleanup: function() {
            var drafts = this.getAllDrafts();
            if (drafts.length > this.maxDrafts) {
                drafts.slice(this.maxDrafts).forEach(function(draft) {
                    sessionStorage.removeItem(draft.key);
                });
            }
        }
    };
}

function saveAdvancedDraft() {
    try {
        var draftData = {};
        g_form.serialize(draftData);
        
        // Add metadata
        var draftKey = window.draftManager.draftPrefix + new Date().getTime();
        var draftInfo = {
            timestamp: new Date().getTime(),
            data: draftData,
            user: g_user.userName,
            catalog_item: g_form.getTableName(),
            fields_modified: g_form.getModifiedFields()
        };
        
        sessionStorage.setItem(draftKey, JSON.stringify(draftInfo));
        window.draftManager.cleanup();
        
        // Show success message with draft count
        var remainingDrafts = window.draftManager.getAllDrafts().length;
        g_form.addInfoMessage('Draft saved. You have ' + remainingDrafts + ' saved draft(s).');
        
    } catch (e) {
        console.error('Error saving draft: ' + e);
        g_form.addErrorMessage('Failed to save draft: ' + e.message);
    }
}

function restoreLastDraft() {
    try {
        var drafts = window.draftManager.getAllDrafts();
        
        if (drafts.length > 0) {
            // If multiple drafts exist, show selection dialog
            if (drafts.length > 1) {
                showDraftSelectionDialog(drafts);
            } else {
                promptToRestoreDraft(drafts[0].data);
            }
        }
    } catch (e) {
        console.error('Error restoring draft: ' + e);
        g_form.addErrorMessage('Failed to restore draft: ' + e.message);
    }
}

function showDraftSelectionDialog(drafts) {
    var dialog = new GlideModal('select_draft_dialog');
    dialog.setTitle('Available Drafts');
    
    var html = '<div class="draft-list">';
    drafts.forEach(function(draft, index) {
        var date = new Date(draft.data.timestamp).toLocaleString();
        html += '<div class="draft-item" onclick="selectDraft(' + index + ')">';
        html += '<strong>Draft ' + (index + 1) + '</strong> - ' + date;
        html += '<br>Modified fields: ' + draft.data.fields_modified.join(', ');
        html += '</div>';
    });
    html += '</div>';
    
    dialog.renderWithContent(html);
}

function promptToRestoreDraft(draftInfo) {
    var timestamp = new Date(draftInfo.timestamp);
    if (confirm('A draft from ' + timestamp.toLocaleString() + ' was found. Would you like to restore it?')) {
        Object.keys(draftInfo.data).forEach(function(field) {
            g_form.setValue(field, draftInfo.data[field]);
        });
        g_form.addInfoMessage('Draft restored from ' + timestamp.toLocaleString());
    }
}

================================================
FILE: Client-Side Components/Catalog Client Script/Auto Save Draft Feature/basic_implementation.js
================================================
/**
 * Basic Auto-save Draft Implementation
 * This version provides core functionality for auto-saving catalog item form data
 */

function onLoad() {
    var autosaveInterval = 60000; // 1 minute
    
    // Try to restore previous draft
    restoreLastDraft();
    
    // Set up auto-save interval
    setInterval(function() {
        if (g_form.isModified()) {
            saveDraft();
        }
    }, autosaveInterval);
}

function saveDraft() {
    try {
        var draftData = {};
        g_form.serialize(draftData);
        
        var draftKey = 'catalogDraft_' + g_form.getUniqueValue();
        sessionStorage.setItem(draftKey, JSON.stringify({
            timestamp: new Date().getTime(),
            data: draftData
        }));
        
        g_form.addInfoMessage('Draft saved automatically');
    } catch (e) {
        console.error('Error saving draft: ' + e);
    }
}

function restoreLastDraft() {
    try {
        var draftKey = 'catalogDraft_' + g_form.getUniqueValue();
        var savedDraft = sessionStorage.getItem(draftKey);
        
        if (savedDraft) {
            var draftData = JSON.parse(savedDraft);
            var timestamp = new Date(draftData.timestamp);
            
            if (confirm('A draft from ' + timestamp.toLocaleString() + ' was found. Would you like to restore it?')) {
                Object.keys(draftData.data).forEach(function(field) {
                    g_form.setValue(field, draftData.data[field]);
                });
                g_form.addInfoMessage('Draft restored from ' + timestamp.toLocaleString());
            } else {
                sessionStorage.removeItem(draftKey);
            }
        }
    } catch (e) {
        console.error('Error restoring draft: ' + e);
    }
}

================================================
FILE: Client-Side Components/Catalog Client Script/Auto Save Draft Feature/script.js
================================================
/**
 * Auto-save draft feature for Catalog Client Script
 * 
 * This script automatically saves form data as a draft in the browser's sessionStorage
 * every minute if changes are detected. It also provides functionality to restore
 * the last saved draft when the form is loaded.
 */

// Executes when the form loads
function onLoad() {
    var autosaveInterval = 60000; // 1 minute
    
    // Try to restore previous draft
    restoreLastDraft();
    
    // Set up auto-save interval
    setInterval(function() {
        if (g_form.isModified()) {
            saveDraft();
        }
    }, autosaveInterval);
}

// Saves the current form state as a draft
function saveDraft() {
    try {
        var draftData = {};
        g_form.serialize(draftData);
        
        var draftKey = 'catalogDraft_' + g_form.getUniqueValue();
        sessionStorage.setItem(draftKey, JSON.stringify({
            timestamp: new Date().getTime(),
            data: draftData
        }));
        
        g_form.addInfoMessage('Draft saved automatically');
    } catch (e) {
        console.error('Error saving draft: ' + e);
    }
}

// Restores the last saved draft if available
function restoreLastDraft() {
    try {
        var draftKey = 'catalogDraft_' + g_form.getUniqueValue();
        var savedDraft = sessionStorage.getItem(draftKey);
        
        if (savedDraft) {
            var draftData = JSON.parse(savedDraft);
            var timestamp = new Date(draftData.timestamp);
            
            // Ask user if they want to restore the draft
            if (confirm('A draft from ' + timestamp.toLocaleString() + ' was found. Would you like to restore it?')) {
                Object.keys(draftData.data).forEach(function(field) {
                    g_form.setValue(field, draftData.data[field]);
                });
                g_form.addInfoMessage('Draft restored from ' + timestamp.toLocaleString());
            } else {
                // Clear the draft if user chooses not to restore
                sessionStorage.removeItem(draftKey);
            }
        }
    } catch (e) {
        console.error('Error restoring draft: ' + e);
    }
}

================================================
FILE: Client-Side Components/Catalog Client Script/Auto-populate field from URL/README.md
================================================
This piece of code is designed for an usecase where you might want to populate a field value that you're passing as a query in the URL which redirects to a catalog item.
In this case, a custom field 'u_date' is chosen as an example to be shown:

1. You open a catalog item record via a URL that carries a date in the query string.
Example:
https://your-instance.service-now.com/your_form.do?sysparm_u_date=2025-10-31
-(This URL includes a parameter named sysparm_u_date with the value 2025-10-31.)


2. The catalog client script reads the page URL and extracts that specific parameter which returns the value "2025-10-31".

3. If the parameter is present, the script populates the form field.
Calling g_form.setValue('u_date', '2025-10-31') sets the date field on the form to 31 October 2025.


Result:
The date field in the form is prefilled from the URL


================================================
FILE: Client-Side Components/Catalog Client Script/Auto-populate field from URL/popdatefromurl.js
================================================
//Logic to fetch the u_date field value passed in the url and setting it in the actual field.


var fetchUrl = top.location.href; //get the URL

var setDate = new URLSearchParams(gUrl).get("sysparm_u_date");  //fetch the value of date from the query parameter

g_form.setValue('u_date', setDate);   //set the value to the actual field


================================================
FILE: Client-Side Components/Catalog Client Script/Autofilling the request details from previous request/Auto fill script include.JS
================================================
var GetRecentRequestValues = Class.create();
GetRecentRequestValues.prototype = Object.extendsObject(AbstractAjaxProcessor, {
  getValues: function() {
    var userID = this.getParameter('sysparm_user');
    var itemID = this.getParameter('sysparm_item');
    var result = { found: false, values: {} };

    var gr = new GlideRecord('sc_req_item');
    gr.addQuery('requested_for', userID);
    gr.addQuery('cat_item', itemID);
    gr.orderByDesc('sys_created_on');
    gr.setLimit(1);
    gr.query();

    if (gr.next()) {
      result.found = true;

     
      var vars = gr.variables;
      result.values = {
        'requested_for': vars.requested_for + '',
        'location': vars.location + '',
        'department': vars.department + ''
      };
    }

    return JSON.stringify(result);
  }
});



================================================
FILE: Client-Side Components/Catalog Client Script/Autofilling the request details from previous request/Client script Autofill.js
================================================
function onLoad() {
  var user = g_user.userID;
  var itemID = g_form.getUniqueValue();

  var ga = new GlideAjax('GetRecentRequestValues');
  ga.addParam('sysparm_name', 'getValues');
  ga.addParam('sysparm_user', user);
  ga.addParam('sysparm_item', itemID);
  ga.getXMLAnswer(function(response) {
    var data = JSON.parse(response);
    if (data && data.found) {
      var confirmFill = confirm("We found a similar request. Do you want to autofill fields?");
      if (confirmFill) {
        for (var field in data.values) {
          if (g_form.getControl(field)) {
            g_form.setValue(field, data.values[field]);
            console.log("Set " + field + " to " + data.values[field]);
          } else {
            console.log("Field not found: " + field);
          }
        }
      }
    } else {
      console.log("No previous request found.");
    }
  });
}


================================================
FILE: Client-Side Components/Catalog Client Script/Autofilling the request details from previous request/Readme.md
================================================
Recent Request Autofill for ServiceNow Catalog.it automatically offers to fill in fields based on the user's most recent similar request.
 Features
- Detects previous requests for the same catalog item
- Prompts user to reuse values from their last submission
- Autofills fields like location, department, and justification

<img width="878" height="395" alt="image" src="https://github.com/user-attachments/assets/33ceabf5-2bbc-43e3-8792-f1f9a99699d2" />





================================================
FILE: Client-Side Components/Catalog Client Script/Autopopulate Department/README.md
================================================
# Autopopulate Department Catalog Client Script

Use this onChange catalog client script to populate a **department** variable in a catalog item based on a modifiable **requested_for**. Both variables must be reference type pointing to their respective tables.

## Use case

The GlideUser API (g_user) does not provide a way to retrieve a user's department in a client-side script. Here is a small snippet using `g_form.getReference()` to retrieve the user from the **requested_for** variable and populate the **department** variable in a catalog item while allowing the submitter to still change the department if the data is incorrect.

Attach this client script to a variable set for easy reuse. It can be augmented with a number of other fields from the user record such as email, phone number, manager, etc. Just be mindful of field types and whether the desired field will return a sys_id or display text.


================================================
FILE: Client-Side Components/Catalog Client Script/Autopopulate Department/autopopulateDepartment.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
  g_form.getReference("requested_for", function (gr) {
    g_form.setValue("department", gr.department);
    g_form.setValue("email", gr.email);
    g_form.setValue("phone", gr.phone);
  });
}


================================================
FILE: Client-Side Components/Catalog Client Script/Autopopulate user information fields/ClientCallableScriptInclude.js
================================================
/*
* The following is a client callable script include. This can be used with the onChange Client script to be able to gather the data on the server side
*/

var ReferenceQualifierAjaxHelper = Class.create();
ReferenceQualifierAjaxHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, {
  getUserInformation : function() {
    var userID = this.getParameter('sysparm_user');
    var userRec = new GlideRecord('sys_user');

    if(userRec.get(userID)) {
      var results = {
        "email" : userRec.getValue('email'),
        "department" : userRec.getValue('department'),
        "title" : userRec.getValue('title'),
        "phone" : userRec.getValue('phone')
      };

      return JSON.stringify(results)
    }

  },
  
  type: 'ReferenceQualifierAjaxHelper'
});


================================================
FILE: Client-Side Components/Catalog Client Script/Autopopulate user information fields/README.md
================================================
## Overview
This onchange catalog client script and script inlcude work together autopopulate the user fields that might show up on a catalog item. In the 
global scope you will have to create the client callable script include to be able to use the Ajax call that is in the on change client script.
In this example we use the OOB Requested For field that already auto populates the user that is logged in then we go to the server to get that 
users information. The fields that are brough back are the ones that are in the code but you can modify to bring back more or less fields if needed.



================================================
FILE: Client-Side Components/Catalog Client Script/Autopopulate user information fields/onChangeClientScript.js
================================================
/*
* In order for this to work make sure to have an onChange catalog client script on a variable that is type Requested For. This variable
* already autopopulates the logged in user with its OOB functionality. In the updateUserFields function you can add any other user fields
* that you might need. 
*/

function onChange(control, oldValue, newValue, isLoading) {
  //This variable will store the sys_id of the user that populates in your requested for variable
  var userID = newValue;

  var ga = new GlideAjax(ReferenceQualifierAjaxHelper);
  ga.addParam('sysparm_name', 'getUserInformation');
  ga.addParam('sysparm_user', userID);
  ga.getXMLAnswer(updateUserFields);

  function updateUserFields(response) {
    var returnedData = JSON.parse(response);
    g_form.setValue("email", returnedData.email);
    g_form.setValue("department", returnedData.department);
    g_form.setValue("title", returnedData.title);
    g_form.setValue("phone", returnedData.phone);
  }
}


================================================
FILE: Client-Side Components/Catalog Client Script/Block Submit/README.md
================================================
Code Snippet to block submission of catalog item based on answer to other yes/no variable.

#update
To fix a task from issue #745
Replace JavaScript alert() method to GlideModal() API.



================================================
FILE: Client-Side Components/Catalog Client Script/Block Submit/block_submit.js
================================================
//Block the user from submitting the form based on variable answer
function onSubmit() {
  var someVariable = g_form.getValue("someVariable");
  if(someVariable == 'No'){
	var gm = new GlideModal('glide_warn',false);
        gm.setTitle("Submit Blocked! You can only use this form for someReason.  Review someInstructions");
        gm.render();
    	return false; // this stops user from submitting the form
    }
  return true; // allow form submit
}



================================================
FILE: Client-Side Components/Catalog Client Script/Calculate age on based on date of birth/Calculate age based on dob.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
       return;
    }
 
 function calculateAge(dateOfBirth) {
     if (!dateOfBirth || isNaN(Date.parse(dateOfBirth))) {
         alert('Invalid date of birth provided.');
         return;
     }
     var dob = new Date(dateOfBirth);
     var currentDate = new Date();
     var age = calculateAgeDifference(dob, currentDate);
     var ageString = '';
 
     if (age.years > 0) {
         ageString += age.years + ' years';
         if (age.months > 0 || age.days > 0) {
             ageString += ', ';
         }
     }
 
     if (age.months > 0) {
         ageString += age.months + ' months';
         if (age.days > 0) {
             ageString += ', ';
         }
     }
 
     if (age.days > 0) {
         ageString += age.days + ' days';
     }
      return ageString;
 }
 
 function calculateAgeDifference(startDate, endDate) {
     var years = endDate.getFullYear() - startDate.getFullYear();
     var months = endDate.getMonth() - startDate.getMonth();
     var days = endDate.getDate() - startDate.getDate();
 
     if (days < 0) {
         months--;
         days += new Date(endDate.getFullYear(), endDate.getMonth(), 0).getDate();
     }
 
     if (months < 0) {
         years--;
         months += 12;
     }
 
     return { years: years, months: months, days: days };
 }
 
 var dateOfBirth = newValue;
 var age = calculateAge(dateOfBirth);
 g_form.setValue('age', age);
 }

================================================
FILE: Client-Side Components/Catalog Client Script/Calculate age on based on date of birth/README.md
================================================
# Age Calculator - On Change Client Script

This script is designed to calculate a person's age based on their date of birth.

## Functions

- `calculateAge(dateOfBirth)`: Calculates the age in years, months, and days based on the provided date of birth.
- `calculateAgeDifference(startDate, endDate)`: Computes the difference in years, months, and days between two dates.

## Sample Input and Output

![age_calculator](image.png)

================================================
FILE: Client-Side Components/Catalog Client Script/Catalog Approval/Readme.md
================================================
This project adds a dynamic preview feature to Service Catalog items, allowing users to see the full approval chain before submitting a request. It improves transparency, reduces confusion, and helps users understand who will be involved in the approval process based on their selections.


================================================
FILE: Client-Side Components/Catalog Client Script/Catalog Approval/client script.js
================================================
function onLoad() {
  var ga = new GlideAjax('ApprovalChainHelper');
  ga.addParam('sysparm_name', 'getApprovers');
  ga.addParam('sysparm_item_id', g_form.getUniqueValue());
  ga.getXMLAnswer(function(response) {
    var approvers = JSON.parse(response);
    var message = 'This request will be approved by: ' + approvers.join(', ');
    g_form.showFieldMsg('requested_for', message, 'info');
  });
}


================================================
FILE: Client-Side Components/Catalog Client Script/Catalog Approval/script include.js
================================================
var ApprovalChainHelper = Class.create();
ApprovalChainHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, {
  getApprovers: function() {
    var itemId = this.getParameter('sysparm_item_id');
    var userId = gs.getUserID();

    var approvers = [];

    // Example logic: fetch approval rules based on item and user
    var ruleGR = new GlideRecord('sysapproval_approver');
    ruleGR.addQuery('document_id', 80f8920bc3e4b2105219daec050131e3);
    ruleGR.query();

    while (ruleGR.next()) {
      approvers.push(ruleGR.approver.name.toString());
    }

    return JSON.stringify(approvers);
  }
});


================================================
FILE: Client-Side Components/Catalog Client Script/Clear all fields/README.md
================================================
# Clear all fields on a catalog item form

This function clears all editable fields on a form, except those explicitly excluded.  
It works on both the native platform (Classic UI) and Service Portal / Mobile.  
Typically used with an OnChange catalog client script when you want to clear all fields after a certain variable changes.

The function returns an array of the field names that were cleared, which can be used for logging or further processing.

### Exclusion Support

You can pass an array of field names to exclude from being cleared.  
This is useful when you want to preserve the value of the field that triggered the change or other important fields.

### Example
```
clearFields(['short_description', 'priority']);
```
// Clears all fields except 'short_description' and 'priority'


================================================
FILE: Client-Side Components/Catalog Client Script/Clear all fields/script.js
================================================
/**
 * Clears or resets all editable fields on a form, except those explicitly excluded.
 * Compatible with Classic UI and Service Portal/Mobile.
 * Intended for use in onChange client scripts.
 *
 * @function clearFields
 * @param {Array} dontClearFieldsArray - Array of field names to exclude from clearing.
 * @returns {Array} - Array of field names that were cleared.
 *
 * @example
 * // Clears all fields except 'short_description' and 'priority'
 * clearFields(['short_description', 'priority']);
 */
function clearFields(dontClearFieldsArray) {
    // Ensure the exclusion list is defined and is an array
    dontClearFieldsArray = Array.isArray(dontClearFieldsArray) ? dontClearFieldsArray : [];

    // Helper function to check if a field should be cleared
    function shouldClear(fieldName) {
        return dontClearFieldsArray.indexOf(fieldName) === -1;
    }

    var clearedFields = [];

    try {
        // Classic UI: use g_form.nameMap to get all fields
        var allFields = g_form.nameMap;
        allFields.forEach(function(field) {
            var fieldName = field.prettyName;
            if (shouldClear(fieldName)) {
                g_form.clearValue(fieldName);
                clearedFields.push(fieldName);
            }
        });
    } catch (e) {
        // Service Portal or Mobile: use getEditableFields()
        var editableFields = g_form.getEditableFields();
        editableFields.forEach(function(fieldName) {
            if (shouldClear(fieldName)) {
                g_form.clearValue(fieldName);
                clearedFields.push(fieldName);
            }
        });
    }

    return clearedFields;
}


================================================
FILE: Client-Side Components/Catalog Client Script/Combine variables into Description/README.md
================================================
OnSUbmit Catalog Client script is created to Combine all variable values required and display in Description field.
Steps:
1. Navigate to your instance open catalog client script table [catalog_script_client]
2. Create new catalog client script -> click new
3. Provide following values:
      - Name: Any relevant to your script
      - Applies to: A catalog Item
      - UI Type: All
      - Isolated script: checked
      - Application: Application scope applies to
      - Type: onSubmit
      - Catalog item: select your catalog item
 4. create the script as per script.js file.  


================================================
FILE: Client-Side Components/Catalog Client Script/Combine variables into Description/script.js
================================================
// Combine variables into Description
// Type: onSubmit

function onSubmit()
{
  
  // Combine provided all fields to Description field
  
  var description = g_form.getValue ('description');
  var first = g_form.getDisplayValue ('first_variable');
  var second = g_form.getDisplayValue ('second_variable');
  var third = g_form.getDisplayValue ('third_variable');
  
  g_form.setValue('description', ''+ description + '\n\nType: ' + first + '\n Text: ' + second + '\nText: ' + third);
  return true;
}


================================================
FILE: Client-Side Components/Catalog Client Script/Control all RITM variables in one go/README.md
================================================
# Control all RITM variables in one go

Requirement : We need to make all the variables on the RITM (sc_req_item) form read only or editable

Problem : If there are so many variables then it becomes difficult to write multiple UI policies or writing multiple lines of code in catalog client script for each variable seperately.

Solution : With the above code snippet you can control(make read-only or editable) all the variables in the RITM form with very minimal code)


================================================
FILE: Client-Side Components/Catalog Client Script/Control all RITM variables in one go/script.js
================================================
function onLoad()
{
  
   g_form.setVariablesReadOnly(true); //if you want to make all variables read-only
  
   g_form.setVariablesReadOnly(false); //if you want to make all variables editable
  
}


================================================
FILE: Client-Side Components/Catalog Client Script/Currency Validation/README.md
================================================
## Currency Validation 

Use this catalog client script to validate the value of a variable used to get currency. As of now 3 things are being checked in the script but you can make changes as per requirement.

1) Characters after the $ sign should be numerics.
2) Entered value should have a decimal point.
3) There must be 2 digits only after the decimal.


================================================
FILE: Client-Side Components/Catalog Client Script/Currency Validation/currency_validation.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }

    var cost = g_form.getValue('variable_name'); //update variable name used for currency
    cost = cost.trim();
    // first character should be dollar sign
    var firstChar = cost.substring(0, 1);
    if (firstChar != '$') {
        validationAlert(oldValue);
    }

    // characters after the $ sign should be numerics
    var costType = isNaN(cost.substring(1));
    if (costType == true) {
        validationAlert(oldValue);
    }

    // entered value should have a decimal point
    var num = cost.substring(1);
    if (num.indexOf('.') == -1) {
        validationAlert(oldValue);
    }

    // there must be 2 digits only after the decimal
    var decNum = num.substring(num.indexOf('.') + 1, num.length);
    if (decNum.length != 2) {
        validationAlert(oldValue);
    }
}

function validationAlert(oldValue) {
    g_form.setValue("variable_name", oldValue);
    var gm = new GlideModal("glide_warn");
    gm.setTitle("Currency formatting problem");
    gm.setPreference("title", "Please enter cost in $0.00 format");
    gm.render();
    return;
}


================================================
FILE: Client-Side Components/Catalog Client Script/CustomAlert/README.md
================================================
These scripts helps you to create custom popup easily. follow the below steps to implement it on your instance.

Steps
1. Create UI page with name "custom_alert_box"
2. Copy HTML section from customn_alert_box.js to HTML field of UI Page
3. Copy Client Script section from customn_alert_box.js to Client Script field of UI Page
4. UI Page is ready to be used.
5. Refer the "custom_alert.js" to create client script or catalog client script to alert HTML messages or links in custom alert format.
6. Refer the screenshots folder for quick look.


================================================
FILE: Client-Side Components/Catalog Client Script/CustomAlert/Screenshots/README.md
================================================
Please see the example Screenshots


================================================
FILE: Client-Side Components/Catalog Client Script/CustomAlert/custom_alert.js
================================================
function onLoad() {
    // Function to show a custom link in a GlideModal
    function showCustomLinkInGlideModal() {
        // Create an instance of GlideModal using the 'custom_alert_box' UI page
        // The second parameter 'true' indicates that the modal should be a dialog,
        // and '600' sets the width of the modal to 600 pixels.
        var gm = new GlideModal("custom_alert_box", true, 600);

        // Set the modal's title to anything you want
        gm.setTitle('Important Information'); //for e.g. Important Information
        
        // Set a preference for the modal indicating the type of alert
        // This can be used to style the modal or control its behavior.
        // available choices {info, danger, warning, success}
        gm.setPreference('alertType', 'danger');

        // Custom HTML content to be displayed in the modal
        // This includes a paragraph and a link to an external website.
        var htmlContent = '<p>Please visit the following link:</p>' +
            '<a href="https://example.com" target="_blank">Click here to go to Example.com</a>';

        // Set the HTML content of the modal using the 'infoText' preference.
        // We disable escaping since we're providing our own HTML.
        gm.setPreference('infoText', htmlContent);

        // Render the modal on the screen
        gm.render();
    }

    // Call the function to display the modal when the form loads
    showCustomLinkInGlideModal();
}


================================================
FILE: Client-Side Components/Catalog Client Script/CustomAlert/custom_alert_box.js
================================================
*****************HTML Section Start*****************
<style>
    /* dialog styles */
    .dialog_content {
        width: 100%;
        height: 100px;
        vertical-align: middle;
        min-width: 300px;
        padding: 0 10px 10px 10px;
    }

    .dialog_buttons {
        display: inline;
        text-align: right;
        vertical-align: bottom;
        white-space: nowrap;
    }

    .modal-header {
        background-color: #d9edf7;
        color: #31708f;
    }

    .modal-content {
        border-color: #bce8f1;
        border-width: medium !important;
    }
</style>
<g:ui_form onsubmit="return invokePromptCallBack();">
    <g2:evaluate>
        var infoText = "${RP.getWindowProperties().get('infoText')}";
        infoText = new GlideStringUtil().unEscapeHTML(infoText);
        var warning = "${RP.getWindowProperties().get('warning')}";
        warning = new GlideStringUtil().unEscapeHTML(warning);
        var alertType = "${RP.getWindowProperties().get('alertType')}";
    </g2:evaluate>
    <j2:if test="$[alertType == 'warning']">
        <style>
            .modal-header {
                background-color: #fcf8e3;
                color: #8a6d3b;
            }

            .modal-content {
                border-color: #faebcc;
                border-width: medium !important;
            }
        </style>
    </j2:if>
	<j2:if test="$[alertType == 'danger']">
        <style>
            .modal-header {
                background-color: #f2dede;
                color: #a94442;
            }

            .modal-content {
                border-color: #ebccd1;
                border-width: medium !important;
            }
        </style>
    </j2:if>
	<j2:if test="$[alertType == 'success']">
        <style>
            .modal-header {
                background-color: #dff0d8;
                color: #3c763d;
            }

            .modal-content {
                border-color: #d6e9c6;
                border-width: medium !important;
            }
        </style>
    </j2:if>
    <table border="0" width="100%">
        <tr>
            <td>
                <table border="0" width="100%">
                    <tr>
                        <td class="dialog_content" id="bodycell"></td>
                    </tr>
                    <tr>
                        <td class="dialog_buttons">
                            <g:dialog_button_ok ok="invokePromptCallBack();" ok_type="button" />
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
</g:ui_form>
*****************HTML Section End*****************

*****************Client Script Start*****************
function unescapeHTML(html) {
    var textarea = document.createElement('textarea');
    textarea.innerHTML = html; // Set the HTML content
    return textarea.value; // Return the unescaped text
}

var infoText = "${RP.getWindowProperties().get('infoText')}";
infoText = unescapeHTML(infoText); // Unescape the HTML

// Now set the title to your dialog or display it
document.getElementById('bodycell').innerHTML = infoText; // Assuming there's a titleCell in your HTML

function invokePromptCallBack() {
    var gdw = GlideDialogWindow.get();
    gdw.destroy();
    return false;
}

var gdw = GlideDialogWindow.get();
gel('ok_button').focus();
*****************Client Script Start*****************


================================================
FILE: Client-Side Components/Catalog Client Script/Date Management/Date Management.js
================================================
//Various useful ways to interact with dates on the client without needing to make a trip to the server


//Use the following to take a date / date time variable and turn it to a JS Date value
/*newValue = date(/time) variable value, i.e from an onChange script
/*getDateFromFormat = This is a ServiceNow provided function loaded into the browser
/*g_user_date_format = a variable loaded into the browser on session load that stores the users date format
*/
var date = new Date(getDateFromFormat(newValue, g_user_date_format));


//Validate a value is a date
//This is a function loaded into the browser by ServiceNow
//i.e isDate(newValue , g_user_date_format);
//Returns a Boolean

var checkDate = isDate(value , format);


//Compare two dates
//This is a function loaded into the browser by ServiceNow
//i.e compareDates("29-10-2021" , "dd-MM-yyyy" , "20-10-2021" , "dd-MM-yyyy");
//Returns -1 if either date value is not a valid date
//Returns 1 if date1 is greater than date2
//Returns 0 otherwise

var isSecondDateLarger = compareDates("29-10-2021" , "dd-MM-yyyy" , "20-10-2021" , "dd-MM-yyyy");


//Format a date value to the user session format to save in a variable/field

var date = formatDate(date,format);

/*Exampe of the above in use*/
var dateNumber = getDateFromFormat(newValue , g_user_date_format);
var date = new Date(dateNumber);
date.setDate(date.getDate() - 1);
g_form.setValue('date' , formatDate(date , g_user_date_format));


================================================
FILE: Client-Side Components/Catalog Client Script/Date Management/README.md
================================================
#### Useful ways to interact with variable date/time values without needing to make a trip to the server

The following functions and variables are defined by ServiceNow and loaded at run-time. They are accessible from within the client script without the need to turn off script isolation.

- g_user_date_format
- g_user_date_time_format
- isDate()
- compareDates()
- formatDate()
- getDateFromFormat()


================================================
FILE: Client-Side Components/Catalog Client Script/Document validation/Client script.JS
================================================
function onSubmit() {
  var ga = new GlideAjax('DocumentValidationHelper');
  ga.addParam('sysparm_name', 'validateAttachments');
  ga.addParam('sysparm_item_id', g_form.getUniqueValue());
  ga.getXMLAnswer(function(response) {
    if (response !== 'valid') {
      alert('Document validation failed: ' + response);
      return false;
    }
  });
  return true;
}


================================================
FILE: Client-Side Components/Catalog Client Script/Document validation/Readme.md
================================================
This project enhances a Service Catalog item by allowing users to upload supporting documents (e.g., ID proof, approval letters) and validating them before the request is submitted. It ensures compliance, completeness, and proper documentation for sensitive or regulated requests.


================================================
FILE: Client-Side Components/Catalog Client Script/Document validation/Script include.js
================================================
var DocumentValidationHelper = Class.create();
DocumentValidationHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, {
  validateAttachments: function() {
    var itemId = this.getParameter('sysparm_item_id');
    var attachmentGR = new GlideRecord('sys_attachment');
    attachmentGR.addQuery('table_name', 'sc_req_item');
    attachmentGR.addQuery('table_sys_id', itemId);
    attachmentGR.query();

    while (attachmentGR.next()) {
      var fileName = attachmentGR.file_name.toLowerCase();
      if (!fileName.endsWith('.pdf') && !fileName.endsWith('.docx')) {
        return 'Only PDF or DOCX files are allowed.';
      }
      if (attachmentGR.size_bytes > 5 * 1024 * 1024) {
        return 'File size exceeds 5MB limit.';
      }
    }

    return 'valid';
  }
});


================================================
FILE: Client-Side Components/Catalog Client Script/Dynamically Update Reference Qualifier/Catalog Item onLoad.js
================================================
function onLoad() {
	var filterString = 'sys_class_name=cmdb_ci_ip_router^ORsys_class_name=cmdb_ci_ip_switch^ORsys_class_name=cmdb_ci_vpn' //Reference qualifier for this Catalog Item
	//alternate method for Service Portal only
	// if (window == null){ //Service Portal method
	// 	var setfilter = g_list.get('v_configuration_item');
	// 	setfilter.setQuery(filterString);
	// } else { //native UI method
		var ga = new GlideAjax('refQualUtils'); //Client callable Script Include Name
		ga.addParam('sysparm_name', 'setSysProp'); //Function in Script Include
		ga.addParam('sysparm_sys_prop_name', 'sr.ref_qual.ci'); //System Property Name used in Reference qualifier 
		ga.addParam('sysparm_sys_prop_value', filterString);
		ga.getXML(getResponse);
			
		function getResponse(response) { //to avoid Service Portal 'There is a JavaScript error in your browser console'
			var answer = response.responseXML.documentElement.getAttribute("answer"); 
		}
	//}
}


================================================
FILE: Client-Side Components/Catalog Client Script/Dynamically Update Reference Qualifier/README.md
================================================
When we have a reference variable that is used in a (single row) variable set, sometimes we want to update the Reference qualifier only for specific Catalog Item(s).

In this example, I have a Configuration item (named v_configuration_item) reference variable (cmdb_ci table) in a single row variable set that has been included in a number of Catalog Items.  The simple Reference qualifier for this variable is:
sys_class_name=cmdb_ci_ip_router^ORsys_class_name=cmdb_ci_ip_switch

Let's say for one particular Catalog Item, I also want to include the class of VPN (cmdb_ci_vpn).

To do this without having to create another variable with the new qualifier and hiding the variable set variable, there are some preparation steps, including those which ensure that the other Catalog Items using the variable set are not disrupted:

1) Change the advanced reference qualifier on the variable to: **javascript: gs.getProperty("sr.ref_qual.ci");**
using a System Property Name of your choice

2) Create a System Property with the same Name used in the Reference qualifier, leaving the Value empty.

3) Add the included 'Variable Set onLoad' Catalog Client Script that applies to the Variable set with...

4) The included Client Callable Script Include to update the System Property Value to the Reference Qualifier that was replaced.  This Script Include uses parameters for the System Property Name and Value, so it can be re-used in every instance of this solution.

Now that the other Catalog Items using the variable set are still working as they were, all you need to do to update the Reference qualifier on certain Catalog Item(s) is:

5) Add the included 'Catalog Item onLoad' Catalog Client Script that applies to the Catalog Item. Set the Order of this script to a high number (10,000) so that it runs after the variable set one.

This solution works in both the Native UI and Service Portal. The Catalog Client scripts contain an alternate Service Portal only approach in the commented if block that can be used in conjunction with the native UI approach in the else block. This alternate Service Portal solution was developed in collaboration with Chris Perry.


================================================
FILE: Client-Side Components/Catalog Client Script/Dynamically Update Reference Qualifier/Script Include.js
================================================
var refQualUtils = Class.create();
refQualUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
   
   	setSysProp: function(){
		var propertyName = this.getParameter('sysparm_sys_prop_name');
		var propertyValue =  this.getParameter('sysparm_sys_prop_value');
		var property = gs.getProperty(propertyName);
		gs.setProperty(propertyName, propertyValue);
		return;
	},
		
    type: 'refQualUtils'
});


================================================
FILE: Client-Side Components/Catalog Client Script/Dynamically Update Reference Qualifier/Variable Set onLoad.js
================================================
function onLoad() {
	var filterString = 'sys_class_name=cmdb_ci_ip_router^ORsys_class_name=cmdb_ci_ip_switch' //Reference qualifier that was replaced
	//alternate method for Service Portal only
	// if (window == null){ //Service Portal method
	// 	var setfilter = g_list.get('v_configuration_item');
	// 	setfilter.setQuery(filterString);
	// } else { //native UI method
		var ga = new GlideAjax('refQualUtils'); //Client callable Script Include Name
		ga.addParam('sysparm_name', 'setSysProp'); //Function in Script Include
		ga.addParam('sysparm_sys_prop_name', 'sr.ref_qual.ci'); //System Property Name used in Reference qualifier 
		ga.addParam('sysparm_sys_prop_value', filterString);
		ga.getXML(getResponse);
			
		function getResponse(response) { //to avoid Service Portal 'There is a JavaScript error in your browser console'
			var answer = response.responseXML.documentElement.getAttribute("answer"); 
		}
	//}
}


================================================
FILE: Client-Side Components/Catalog Client Script/Get Display Value of MRVS/README.md
================================================
## Get Display Value of MultiRow Variableset (MRVS)

While there are different ways to do this, the easiest of them is to leverage an out of box script named **'VariableUtil'**. 

The script is present in the global scope and contains an function named getDisplayValue aptly. This function seems to work on both the normal variable as well as multirow variableset. You just need to pass the sysid of the variable or the multirow variableset and its corresponding value.

**new VariableUtil().getDisplayValue('sys_id of variable or MRVS','value of variable/MRVS');**


================================================
FILE: Client-Side Components/Catalog Client Script/Get Display Value of MRVS/mrvs.js
================================================

var script = new global.VariableUtil();
var gr = new GlideRecord("sc_req_item");
gr.addEncodedQuery("sys_id=<Copy & Paste RITM Sys ID>");
gr.query();
if (gr.next()) {
    gs.info(script.getDisplayValue('<MRVS Variableset SYSID>', gr.variables.MRVSName)); //MRVS Display Value
}


================================================
FILE: Client-Side Components/Catalog Client Script/Get MRVS Values from Parent/README.md
================================================
# Get Multi-row Variable Set Values from parent form

Sometimes you need to query the current set of values for a MRVS from the actual MRVS or another MRVS. 
This requires getting the data from the parent form, the method to retrieve and the format of the data is different
when running on the platform or portal.

This script gives a way of getting the values regardless of the platform in use.

On the platform (backend) this could be moved to a global UI Script, but that is not available to portal scripts.

Make sure the UI Type is All, and Isolate Script is false (unchecked).


================================================
FILE: Client-Side Components/Catalog Client Script/Get MRVS Values from Parent/onload.js
================================================
function onLoad() {

    /*
     * work out the parent form based on platform and return the given MRVS data
     * This could go in a global UI script but that wouldn't work for Portal, 
     * would love anyone to suggest an alternative for portal :)
     */
    function getMRVSDataFromParent(mrvsName) {
        var parent_g_form = g_service_catalog.parent; // default for backend/platform
        if (parent.angular) {
            // this is portal so get a different way
            var parentItem = parent.angular.element(parent.$('#sc_cat_item').find('sp-variable-layout')[0]).scope();
            parent_g_form = parentItem.getGlideForm();
        }
        var vmData = parent_g_form.getValue(mrvsName);
        // on portal we get back an empty string rather than an empty array so convert
        return vmData == '' ? [] : JSON.parse(vmData);
    }

    var vmJSONData = getMRVSDataFromParent('virtual_machine');
    console.log("JSON " + JSON.stringify(vmJSONData, '', 3));
}


================================================
FILE: Client-Side Components/Catalog Client Script/Hide Variables of Catalog Item on Order Guide/Hide Variables.js
================================================
function onLoad(){
  if(g_service_catalog.isOrderGuide()){
    //variable_name1, varaible_name2 are the fields already present on the Order guide, hence hiding below fields on the catalog form when the catalog form is used through an order guide.
    g_form.setDisplay('varible_name1',false);
    g_form.setDisplay('varible_name2',false);
  }


================================================
FILE: Client-Side Components/Catalog Client Script/Hide Variables of Catalog Item on Order Guide/README.md
================================================
1. The onLoad catalog client script can be used to hide the catalog varaibles on catalog form when the catalog item is being used on OrderGuide and cascade varaibles field is enabled on Order guide.
2. Cascading enables the transfer of values entered for variables in the initial order form to their corresponding variables in the catalog items that have been ordered.
3. Assume that the variables variable_name1, varaible_name2 are already present on the order guide form, hence hiding these variables on the catalog form when the catalog form is opened through an order guide using the function isOrderGuide().


================================================
FILE: Client-Side Components/Catalog Client Script/Hide attachment icon/Hide Attachment icon.js
================================================
//Hide attachment icon on catalog item
function onLoad() {
    var document = document || top.document;
    (jQuery || top.jQuery)("#sc_attachment_button, #catItemTop > div > div.wrapper-md.row.no-margin.ng-scope > label").hide();
}


================================================
FILE: Client-Side Components/Catalog Client Script/Hide attachment icon/README.md
================================================
# Hide Attachment Icon on Catalog Items

## Use Case / Requirement
Hide the attachment icon on a specific catalog item when the end user should not submit supporting documents. This can reduce confusion and prevent oversized uploads.

## Solution
Use an onLoad catalog client script to target the attachment button rendered on the Service Portal form and hide it with jQuery. The snippet works for both classic and Service Portal experiences.

## Implementation
1. Create a new catalog client script with Type set to onLoad.
2. Copy the contents of Hide Attachment icon.js into the script field.
3. Adjust the selector if your catalog item uses a custom portal or markup.

## Notes
- Requires jQuery, which is available on standard Service Portal forms.
- The DOM can change between releases; retest after theme or layout updates.
- Remove the script if the catalog item later requires attachments.


================================================
FILE: Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/SentimentAnalyzer.js
================================================
var SentimentAnalyzer = Class.create();
SentimentAnalyzer.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getSentiment: function() {
        var text = (this.getParameter('sysparm_text') || '').toLowerCase();
        var positive = ['thanks', 'great', 'resolved', 'appreciate'];
        var negative = ['issue', 'error', 'not working', 'fail', 'problem'];

        var score = 0;
        positive.forEach(function(word) { if (text.includes(word)) score++; });
        negative.forEach(function(word) { if (text.includes(word)) score--; });

        if (score > 0) return 'Positive';
        if (score < 0) return 'Negative';
        return 'Neutral';
    }
});


================================================
FILE: Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/onChangeClientscript.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || !newValue) return;

    var ga = new GlideAjax('SentimentAnalyzer');
    ga.addParam('sysparm_name', 'getSentiment');
    ga.addParam('sysparm_text', newValue);
    ga.getXMLAnswer(function(sentiment) {
        g_form.addInfoMessage('Sentiment: ' + sentiment);
        g_form.setValue('u_sentiment', sentiment);
    });
}


================================================
FILE: Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/readme.md
================================================
Incident Sentiment Detector (No AI, Pure JavaScript)

A lightweight ServiceNow utility that detects sentiment (Positive / Negative / Neutral) of an Incident’s short description or comments using simple keyword matching — no AI APIs or external libraries required.

Useful for support teams to auto-tag sentiment and analyze user frustration or satisfaction trends without expensive integrations.

🚀 Features

✅ Detects sentiment directly inside ServiceNow ✅ Works without external APIs or ML models ✅ Instant classification on form update ✅ Adds detected sentiment to a custom field (u_sentiment) ✅ Simple to extend — just add more positive/negative keywords

🧩 Architecture Overview

The solution consists of two main scripts:

Component Type Purpose SentimentAnalyzer Script Include Processes text and returns sentiment Client Script (onChange) Client Script Calls SentimentAnalyzer via GlideAjax on short description change 🧱 Setup Instructions 1️⃣ Create Custom Field

Create a new field on the Incident table:

Name: u_sentiment

Type: Choice

Choices: Positive, Neutral, Negative


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS Email Validation with Mutation Observer/EmailValidationOnCatalogUI.js
================================================
/**
 * This is a client script that validates the email address in the MRVS field.
 * It uses MutationObserver to observe the changes in the MRVS field.
 * UseCase: Validate the email address in the catalog whenever user is going to add another email, 
 * and show an error message if a duplicate email address is found. 
 */
function onLoad() {
    var document = document || top.document;

    var duplicateErrorMessageStatus = false; //adding this as corner case as observer will be called multiple times

    setTimeout(function () {
        var tbody = document.querySelector("#user_details > div > tbody");

        if (tbody) {
            var observer = new MutationObserver(function (m, o) {

                var users = g_form.getValue('user_details');

                var hasDuplicateEmails = validateUserDetails();

                if (!users || hasDuplicateEmails) {
                    if (hasDuplicateEmails && !duplicateErrorMessageStatus) {
                        g_form.addErrorMessage('Duplicate email address found');
                        duplicateErrorMessageStatus = true;
                    }
                    //disable the submit button
                } else {
                    duplicateErrorMessageStatus = false;
                    g_form.clearMessages();
                    //enable the submit button
                }

            });
            observer.observe(tbody, {
                attributes: true,
                childList: true,
                subtree: true
            });
        }
    }, 3000);

}

// MRVS contains the user details in the form of JSON
function validateUserDetails() {
    var userDetailsMRVS = g_form.getValue('user_details');
    if (userDetailsMRVS) {
        var multiRowData = JSON.parse(userDetailsMRVS);
        var emailSet = new Set();

        for (var i = 0; i < multiRowData.length; i++) {
            var row = multiRowData[i];

            var email = row.email.trim().toLowerCase();

            if (emailSet.has(email)) {

                return true;
            }
            emailSet.add(email);
        }
    }
    return false;
}

================================================
FILE: Client-Side Components/Catalog Client Script/MRVS Email Validation with Mutation Observer/README.md
================================================
# Email Validation on Catalog UI

This file contains a client script that validates email addresses in the MRVS (Multi-Row Variable Set) field using a MutationObserver. The script ensures that duplicate email addresses are not allowed in the catalog.

## File Structure

- `/code-snippets/Catalog Client Script/MRVS Email Validation with Mutation Observer/EmailValidationOnCatalogUI.js`

## Description

The script observes changes in the MRVS field and validates the email addresses whenever a user attempts to add another email. If a duplicate email address is found, an error message is displayed, and the submit button is disabled.

## Usage

1. **onLoad Function**: This function initializes the MutationObserver to watch for changes in the MRVS field.
2. **validateUserDetails Function**: This function checks for duplicate email addresses in the MRVS field.

## How It Works

1. The `onLoad` function sets up a MutationObserver on the MRVS field.
2. When changes are detected, the `validateUserDetails` function is called to check for duplicate email addresses.
3. If duplicates are found, an error message is displayed, and the submit button is disabled.


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS Interact With Parent Form/Portal onLoad.js
================================================
//Using this Catalog Client Script that Applies to the Catalog Item will enable g_form methods like setValue and clearValue which affect Catalog Item variables from a Catalog Client Script that applies to the multi-row variable set
function onLoad() {
	if (this) {//we only need to do this for Service Portal
		//We need to make the g_form object for the parent item available from the MRVS window
		this.cat_g_form = g_form;
	}
}


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS Interact With Parent Form/README.md
================================================
Use this code snippet to interact with the parent form (i.e the main Cataloge Item) from within a Catalog Client Script that applies to a multi-row variable set.

The g_service_catalog object allows for accessing the "parent" GlideForm (g_form) object for getValue only (for now?)
To affect a variable in the main catalogue item using setValue, clearValue, etc. parent.g_form... is available in the native UI, and this.cat_g_form... can be used for Service Portal, etc if an additional Catalog Client Script is used, this one onLoad that Applies to the Catalog Item (not the MRVS).


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS Interact With Parent Form/Write to Parent Form.js
================================================
//These methods can be used onLoad, onChange, or onSubmit in a script that Applies to the MRVS 

//Retrieve a variable value from the parent form - works in native UI as well as Service Portal, etc.
g_service_catalog.parent.getValue('variable_name');

//With this approach, you can set a variable value on the parent form - use similar code for other g_form methods like clearValue
//Service Portal method requires an additional Catalog Client Script onLoad that Applies to the Catalog Item
if (this) { //Service Portal method
		this.cat_g_form.clearValue('variable_name');
	} else { //native UI method
		parent.g_form.clearValue('variable_name');
	}


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS Loop Rows/README.md
================================================
Use this to loop through a Multi Row Variable Set and create an array of objects with the variables in it.


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS Loop Rows/loopRows.js
================================================
var mrvsObj = [];
var multiRow = variable.mrvsName; //replace with the actual name of the mrvs
if (multiRow.getRowCount()) { //if there are any entries on the MRVS loop through it
	var eachRow = multiRow.getRowCount();
	for (var i = 0; i < eachRow; i++) {
		var row = multiRow.getRow(i);
		var rowVars = {};
		rowVars.var1 = row.var1; //replace with the variables in the mrvs
		rowVars.var2 = row.var2;
		rowVars.var3 = row.var3;
		// ... add rows as appropriate for your mrvs
		mrvsObj.push(rowVars); // creates an array of objects of the above fields from the MRVS
	}
}


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS Reference Qualifier from Catalog Item Variable/Catalog Client Script.js
================================================
function onLoad() {
	var mgr = g_service_catalog.parent.getValue('v_manager'); //if using this script onLoad of the MRVS
	//var mgr = newValue; // if using this script onChange of the Catalog Item variable
	var filterString = 'active=true^manager=' + mgr; //Reference qualifier following the 'javascript:'
	//alternate method for Service Portal only
	// if (window == null){ //Service Portal method
	// 	var setfilter = g_list.get('v_employee');
	// 	setfilter.setQuery(filterString);
	// } else { //native UI method
		var ga = new GlideAjax('refQualUtils'); //Client callable Script Include Name
		ga.addParam('sysparm_name', 'setSysProp'); //Function in Script Include
		ga.addParam('sysparm_sys_prop_name', 'sr.mrvs.ref_qual.emp'); //System Property Name used in MRVS variable Reference qualifier 
		ga.addParam('sysparm_sys_prop_value', filterString);
		ga.getXML(getResponse);
			
		function getResponse(response) { //to avoid Service Portal 'There is a JavaScript error in your browser console'
			var answer = response.responseXML.documentElement.getAttribute("answer"); 
		}
	//}
}


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS Reference Qualifier from Catalog Item Variable/README.md
================================================
On a reference variable in a multi-row variable set, sometimes you want the reference qualifier to include the value of a variable that is part of the Catalog Item, not within the MRVS.

In this simplified example, I have a Manager (v_manager) reference variable (sys_user table) that belongs to the Catalog Item.  In the MRVS, I have an Employee (v_employee) reference variable (sys_user table).  I only want to be able to select user records that are active, and the Manager is the user I selected on the Catalog Item variable.

1) Set the advanced reference qualifier on the MRVS variable to
   javascript: gs.getProperty("sr.mrvs.ref_qual.emp");
   using a System Property Name of your choice

2) Use the included onLoad Catalog Client Script that applies to the Variable set, or you can also use this onChange of the Catalog Item variable in a script that applies to the Catalog Item.

3) Add the included Client callable Script Include for the Catalog Client Script to call via GlideAjax.  This Script Include uses parameters for the System Property Name and Value, so it can be re-used in every instance of this solution.

This solution works in both the Native UI and Service Portal.  The script contains an alternate Service Portal only approach in the commented if block that can be used in conjunction with the native UI approach in the else block.  This alternate Service Portal solution was developed in collaboration with Chris Perry.


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS Reference Qualifier from Catalog Item Variable/Script Include.js
================================================
var refQualUtils = Class.create();
refQualUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
   
   	setSysProp: function(){
		var propertyName = this.getParameter('sysparm_sys_prop_name');
		var propertyValue =  this.getParameter('sysparm_sys_prop_value');
		var property = gs.getProperty(propertyName);
		gs.setProperty(propertyName, propertyValue);
		return;
	},
		
    type: 'refQualUtils'
});


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS dependent ref qual 1st row/AccountUtils.js
================================================
var AccountUtils = Class.create();
AccountUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    //Populate the department name from the account in the session data for the reference qualifier to use:
    
    setSessionData: function() {
        var acct = this.getParameter('sysparm_account');
		    var dept = '';
		    var acctGR = new GlideRecord('customer_account'); //reference table for Account variable
		    if (acctGR.get(acct)) {
			      dept = '^dept_name=' + acctGR.dept_name; //department field name on account table
		    }
		
		    var session = gs.getSession().putClientData('selected_dept', dept);
        return;
    },

    type: 'AccountUtils'
});


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS dependent ref qual 1st row/README.md
================================================
This Catalog Client Script and Script Include are used with a reference qualifier similar to
javascript: 'disable=false' + session.getClientData('selected_dept');

The scenario is a MRVS with a reference variable to the customer account table.  When an (active) account is selected in the first row, subsequent rows should only be able to select active accounts in the same department as the first account.

The Catalog Client Script will pass the first selected account (if there is one) to a Script Include each time a MRVS row is added or edited.  The Script Include will pass the department name to the reference qualifier.


================================================
FILE: Client-Side Components/Catalog Client Script/MRVS dependent ref qual 1st row/onLoad.js
================================================
function onLoad() {
    //applies to MRVS, not Catalog Item. This will pass the first selected account (if there is one) to a Script Include each time a MRVS row is added or edited
    var mrvs = g_service_catalog.parent.getValue('my_mrvs'); //MRVS internal name
	var acct = '';
	if (mrvs.length > 2) { //MRVS is not empty
		var obj = JSON.parse(mrvs);
       	acct = obj[0].account_mrvs;
	}
	var ga = new GlideAjax('AccountUtils');
    ga.addParam('sysparm_name', 'setSessionData');
    ga.addParam('sysparm_account', acct);
    ga.getXMLAnswer(getResponse);
}

function getResponse(response) { 
    //do nothing 
}


================================================
FILE: Client-Side Components/Catalog Client Script/Make OOB Attachment Mandatory/README.md
================================================
# Make out of the box attahcment mandatory onChange of a field in Catalog Item

This scripts makes the out of the box attachments to mandatory on the Service Portal for any Catalog Item.

Usage:

Step #1 - Create the UI Script 
* [Click here for script](UI Scripts/Make OOB Attachment Mandatory/setAttachmentMandatory.js)

Step #2 - Include the UI Script in the Portal Theme under JS Includes

Step #3 - Create a Catalog Client Script for the respective Catalog Item where you want to make the OOB attachment mandatory for certain criteria

* [Click here for script](Catalog Client Script/Make OOB Attachment Mandatory/onChange.js)

================================================
FILE: Client-Side Components/Catalog Client Script/Make OOB Attachment Mandatory/onChange.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == 'No') {
		setAttachmentMandatory(false);
        return;
    }

    if (newValue == 'Yes') setAttachmentMandatory(true);
}

================================================
FILE: Client-Side Components/Catalog Client Script/Mandatory Attachments with 'n' numbers/README.md
================================================
# Enable Mandatory Attachments Count wtih 'n' numbers on Service Catalog item
**Problem:** Check if exact 'n' number of attachments are added or not when user submit a request through service catalog from Portal/Platform UI.

**For example:** We need to ensure there are exact 3 attachments added before submission

**Note:** Ensure Isolate Script field is set to False for this Catalog Client Script to ensure DOM manipulation works

* [Click here for script](onSubmitClientScript.js)


================================================
FILE: Client-Side Components/Catalog Client Script/Mandatory Attachments with 'n' numbers/onSubmitClientScript.js
================================================
function onSubmit() {
	//Type appropriate comment here, and begin script below

var count = 3; //Pass the number to ensure given number of attachments are added
var alertMsg="You must add "+count+" attachments before submitting this request.";
	if(window == null){
		// Service portal validation, Make sure Isolate Script is set to False
		if(this.document.getElementsByClassName('get-attachment').length != count) {
			spModal.alert(alertMsg);
			return false;
		}
	}
	else{
		// Platform View
         var length = $j("li.attachment_list_items").find("span").length;
		if(length != count){
			alertWindow(alertMsg);
			return false;
		}
	}
}
function alertWindow(message) {
    var modal = new GlideModal("glide_warn");
    modal.setTitle("Attachment issue");
    modal.setPreference("title", message);
    modal.render();
}

================================================
FILE: Client-Side Components/Catalog Client Script/Multi-User Collaboration/Readme.md
================================================
This project introduces a collaboration feature for Service Catalog requests, allowing multiple users to contribute to a single request. It’s ideal for scenarios like team onboarding, shared resource provisioning, or cross-functional workflows.


================================================
FILE: Client-Side Components/Catalog Client Script/Multi-User Collaboration/Script include.JS
================================================
var CollaboratorHandler = Class.create();
CollaboratorHandler.prototype = Object.extendsObject(AbstractAjaxProcessor, {
  addCollaborators: function() {
    var requestId = this.getParameter('sysparm_request_id');
    var users = this.getParameter('sysparm_users').split(',');

    users.forEach(function(userId) {
      var gr = new GlideRecord('x_your_scope_collaborators');
      gr.initialize();
      gr.request = requestId;
      gr.collaborator = userId;
      gr.status = 'Pending';
      gr.insert();
    });

    return 'Collaborators added successfully';
  }
});


================================================
FILE: Client-Side Components/Catalog Client Script/Multi-User Collaboration/client script.JS
================================================
function onSubmit() {
  var collaborators = g_form.getValue('collaborators'); // Multi-user reference field
  if (collaborators) {
    var ga = new GlideAjax('CollaboratorHandler');
    ga.addParam('sysparm_name', 'addCollaborators');
    ga.addParam('sysparm_request_id', g_form.getUniqueValue());
    ga.addParam('sysparm_users', collaborators);
    ga.getXMLAnswer(function(response) {
      alert('Collaborators added: ' + response);
    });
  }
  return true;
}


================================================
FILE: Client-Side Components/Catalog Client Script/Multi-User Collaboration/widget client controller.JS
================================================
function($scope, $http) {
  $scope.approve = function(sysId) {
    $http.post('/api/x_your_scope/collab_action', {
      action: 'approve',
      sys_id: sysId
    }).then(function(response) {
      $scope.server.update();
    });
  };

  $scope.reject = function(sysId) {
    $http.post('/api/x_your_scope/collab_action', {
      action: 'reject',
      sys_id: sysId
    }).then(function(response) {
      $scope.server.update();
    });
  };
}


================================================
FILE: Client-Side Components/Catalog Client Script/Multi-User Collaboration/widget server script.JS
================================================
(function() {
  var collabs = [];
  var gr = new GlideRecord('x_your_scope_collaborators');
  gr.addQuery('request', $sp.getParameter('request_id'));
  gr.query();
  while (gr.next()) {
    collabs.push({
      sys_id: gr.getUniqueValue(),
      name: gr.collaborator.name.toString(),
      status: gr.status.toString(),
      comments: gr.comments.toString()
    });
  }
  data.collaborators = collabs;
})();


================================================
FILE: Client-Side Components/Catalog Client Script/Normalise and Reset a MRVS based on Variable Changes/README.md
================================================
# MRVS - Normalise and Reset Rows on Change

## What this solves
When a controlling variable changes (for example, Environment), existing MRVS rows may no longer be valid. This client script:
- Clears or normalises specific MRVS columns
- Deduplicates rows
- Optionally sorts rows for a cleaner UX
- Works entirely client-side using MRVS JSON

## Where to use
Catalog Item → OnChange client script on your controlling variable.

## How it works
- Reads the MRVS value as JSON via `g_form.getValue('my_mrvs')`
- Applies transforms (clear columns, unique by key, sort)
- Writes back the JSON with `g_form.setValue('my_mrvs', JSON.stringify(rows))`

## Setup
1. Replace `CONTROLLING_VARIABLE` with your variable name.
2. Replace `MY_MRVS` with your MRVS variable name.
3. Adjust `COLUMNS_TO_CLEAR`, `UNIQUE_KEY`, and `SORT_BY` as needed.

## Notes
- To clear the MRVS entirely, set `rows = []` before `setValue`.
- Works with Catalog Client Scripts; no server call required.

## References
- GlideForm API (client): `getValue`, `setValue`, `clearValue`  
  https://www.servicenow.com/docs/bundle/zurich-api-reference/page/app-store/dev_portal/API_reference/GlideForm/concept/c_GlideFormAPI.html
- Working with MRVS values on the client (community examples)  
  https://www.servicenow.com/community/developer-articles/accessing-multi-row-variable-set-value-outside-the-multi-row/ta-p/2308876


================================================
FILE: Client-Side Components/Catalog Client Script/Normalise and Reset a MRVS based on Variable Changes/mrvs_normalise_onchange.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
  if (isLoading) return;

  var MRVS_NAME = 'MY_MRVS';                 // your MRVS variable name
  var COLUMNS_TO_CLEAR = ['env', 'owner'];   // MRVS column names to clear
  var UNIQUE_KEY = 'hostname';               // MRVS column that should be unique
  var SORT_BY = 'hostname';                  // MRVS column to sort by

  try {
    var raw = g_form.getValue(MRVS_NAME);
    var rows = raw ? JSON.parse(raw) : [];
    if (!Array.isArray(rows)) rows = [];

    // Clear specified columns
    rows.forEach(function(row) {
      COLUMNS_TO_CLEAR.forEach(function(col) { if (row.hasOwnProperty(col)) row[col] = ''; });
    });

    // Deduplicate by UNIQUE_KEY
    if (UNIQUE_KEY) {
      var seen = {};
      rows = rows.filter(function(row) {
        var key = String(row[UNIQUE_KEY] || '').toLowerCase();
        if (!key || seen[key]) return false;
        seen[key] = true;
        return true;
      });
    }

    // Sort (case-insensitive)
    if (SORT_BY) {
      rows.sort(function(a, b) {
        var A = String(a[SORT_BY] || '').toLowerCase();
        var B = String(b[SORT_BY] || '').toLowerCase();
        if (A < B) return -1;
        if (A > B) return 1;
        return 0;
      });
    }

    g_form.setValue(MRVS_NAME, JSON.stringify(rows));
  } catch (e) {
    console.error('MRVS normalise failed', e);
  }
}


================================================
FILE: Client-Side Components/Catalog Client Script/Normalise and Reset a MRVS based on Variable Changes/variant_reset_specific_columns.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
  if (isLoading) return;

  var MRVS_NAME = 'MY_MRVS';
  var COLUMNS_TO_CLEAR = ['env', 'region'];

  var rows = [];
  try { rows = JSON.parse(g_form.getValue(MRVS_NAME) || '[]'); } catch (e) {}
  if (!Array.isArray(rows)) rows = [];

  rows.forEach(function(row) {
    COLUMNS_TO_CLEAR.forEach(function(col) { if (row.hasOwnProperty(col)) row[col] = ''; });
  });

  g_form.setValue(MRVS_NAME, JSON.stringify(rows));
}



================================================
FILE: Client-Side Components/Catalog Client Script/Onsubmit validation/Readme.md
================================================
This project adds pre-validation for hardware availability in ServiceNow Catalog Items. Before submitting a request, the system checks if the requested hardware is available in inventory and blocks submission if stock is insufficient. we can easy to extend  other validations (budget, licenses, etc.).Improves user experience by validating before approval.Prevents unnecessary approvals and fulfillment.


================================================
FILE: Client-Side Components/Catalog Client Script/Onsubmit validation/on submit scriptinclude.JS
================================================
var HardwareValidationUtils = Class.create();
HardwareValidationUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    validateHardware: function() {
        var hardware = this.getParameter('sysparm_hardware');
        var qty = parseInt(this.getParameter('sysparm_quantity'), 10);

        if (!hardware || isNaN(qty)) {
            return 'Invalid input!';
        }

        var gr = new GlideRecord('u_hardware_inventory');
        if (gr.get(hardware)) {
            var availableQty = parseInt(gr.getValue('available_quantity'), 10);
            if (availableQty >= qty) {
                return 'OK';
            } else {
                return 'Not enough stock available!';
            }
        }
        return 'Hardware not found!';
    },

    type: 'HardwareValidationUtils'
});


================================================
FILE: Client-Side Components/Catalog Client Script/Onsubmit validation/submit validation client script.js
================================================
function onSubmit() {
    

    var hardware = g_form.getValue('hardware_name');
    var qty = g_form.getValue('quantity');

   
    var ga = new GlideAjax('HardwareValidationUtils');
    ga.addParam('sysparm_name', 'validateHardware');
    ga.addParam('sysparm_hardware', hardware);
    ga.addParam('sysparm_quantity', qty);

    
    ga.getXMLAnswer(function(response) {
        

        if (response !== 'OK') {
            alert(response);
            
            g_form.addErrorMessage(response); // Optional inline error
            g_form.setSubmit(false); // Prevent submission in Service Portal
        } else {
          
            g_form.setSubmit(true); // Allow submission
        }
    });

    return false; 
}


================================================
FILE: Client-Side Components/Catalog Client Script/Open modal widget in an Onsubmit/README.md
================================================
Code snippet to stop submission of a form in an Onsubmit Client Script, use an asynchronous call, and open a Widget in Modal view. In the script provided, there are two buttons in the modal. The first continues with the submission to create a new record and the second one cancels it. We can use a Script Include to get some value that we want and based on that open the modal or continue with submission.


================================================
FILE: Client-Side Components/Catalog Client Script/Open modal widget in an Onsubmit/openmodal.js
================================================
    function onSubmit() {

      
        if (g_scratchpad.isFormValid)
            return true;

      //We can do some check using a Client Callable script include
        var getAnswer = new GlideAjax('example');
        getAnswer.addParam('sysparm_name', 'checkFor');
        getAnswer.addParam('sysparm_input1', g_user.userID);
        getAnswer.addParam('sysparm_input2', g_form.getUniqueValue());

        getAnswer.getXML(parsing);

        function parsing(response) {

            var answer = response.responseXML.documentElement.getAttribute('answer');
            if (answer) {
                var data = JSON.parse(answer);
          
                if (data == true) {

                    spModal.open({
                        title: "Test title",
                        widget: "mywidget",
                        buttons: [{
                                label: 'Close',
                                value: 'close'
                            },
                            {
                                label: 'Create New Record',
                                value: 'create'
                            }
                        ],
                        size: 'md'
                    }).then(function(answer) {
                      //if button pressed is "create" then submit the form
                        if (answer.value == 'create') {
                            g_scratchpad.isFormValid = true;
                            g_form.submit();
                        }
                    });
                } else {
                    g_scratchpad.isFormValid = true;
                    g_form.submit();
                }

            }

        }
      //Dont submit the form
        return false;
    }


================================================
FILE: Client-Side Components/Catalog Client Script/PAN Validation/PAN Validation.js
================================================
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    var panNumber = g_form.getValue("pan_number"); //Get the PAN card information
    var panRegex = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/; // Regex for the PAN Card

    if (panRegex.test(panNumber)) {
        g_form.showFieldMsg("pan_number", "Valid PAN card number.", true); //Valid PAN card enterd populates this message 
    } else {
        g_form.showErrorBox("pan_number", "InValid PAN card number.", true); //In Valid PAN card details enterd populate this message 
    }
}


================================================
FILE: Client-Side Components/Catalog Client Script/PAN Validation/README.md
================================================
PAN is a ten-digit unique alphanumeric number issued by the Income Tax Department.
Indian PAN (Permanent Account Number) card based on its standardized format. 
A PAN number is a unique 10-character alphanumeric identifier issued by the Indian government, and it follows a specific structure:
First 5 characters: Uppercase English letters (A-Z).
Next 4 characters: Numeric digits (0-9). 
Last character: A single uppercase English letter (A-Z).
 ![image](https://github.com/user-attachments/assets/37a6490b-912e-499c-9c41-c0cdf79491a5)

When we provide the information in the mentioned format it validates as a valid PAN Card
Eg: ABCDE1234F
Result  
![image](https://github.com/user-attachments/assets/779757b9-2d46-439b-bc8c-a468a5c0264a)

Mentioned formate was not used it will give an error message to the field
Eg:abcde1234f  
![image](https://github.com/user-attachments/assets/1dd214b8-aaf5-405d-aefb-8e46b786be3c)

Eg: 1234ABCDEF  
![image](https://github.com/user-attachments/assets/08f538b7-d1ac-4d26-8579-8342ca757c8c)




================================================
FILE: Client-Side Components/Catalog Client Script/Passport Validation/README.md
================================================
This OnChange Catalog Client Script is for validating passport number, date of issue, and date of expiry. 

It follows the specified rules(As per indian passport):- 
- The passport number should be 8 characters long, with the first character as an uppercase letter, the second and third characters as numbers (1-9 for the first digit, 0-9 for the second digit).
- The date of expiry should be calculated based on the date of issue:
- 1. If the user is an adult (18 years or older), the expiry date should be exactly 5 years from the date of issue.
  2. If the user is under 18, the expiry date should be exactly 10 years from the date of issue.
        
Passport Number Validation:
The passportPattern uses a regular expression:
^[A-Z] – The first character must be an uppercase letter.
[1-9][0-9] – The second and third characters are numbers; the first is between 1-9, and the second between 0-9.
[A-Z0-9]{5}$ – The last five characters are alphanumeric.
If the passport number does not match this pattern, the script displays an error message and clears the field.

Date of Expiry Calculation:
- After the date of issue and age are provided, the script calculates the expiry date by adding 5 years for adults (18 or older) or 10 years for minors (under 18).
- The calculated expiry date is automatically set in the date_of_expiry field in the yyyy-MM-dd format.
- Prompts are displayed if necessary fields like date_of_issue or age are missing before attempting the expiry date calculation.

This Client Script will ensure that the entered passport information and expiry date meet the requirements, providing a seamless and guided experience for the user.


================================================
FILE: Client-Side Components/Catalog Client Script/Passport Validation/passportvalidity.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading) return;
  
    var passportNumber = g_form.getValue('passport_number');
    var dateOfIssue = g_form.getValue('date_of_issue');
    var age = parseInt(g_form.getValue('age'), 10);
    var dateOfExpiry = g_form.getValue('date_of_expiry');
  
    // Passport Number Validation
    var passportPattern = /^[A-Z][1-9][0-9][A-Z0-9]{5}$/;
    if (passportNumber && !passportPattern.test(passportNumber)) {
        g_form.showFieldMsg('passport_number', "The entered number is invalid passport number format. It must be 8 characters long, start with an uppercase letter, followed by a number between 1-9, then 0-9, and the rest alphanumeric.", "error");
        g_form.clearValue('passport_number');
    } else {
        g_form.hideFieldMsg('passport_number');
    }
  
    // Date of Expiry Calculation based on date of issue
    if (dateOfIssue && age) {
        var issueDate = new GlideDate();
        issueDate.setValue(dateOfIssue);
        var expiryDate = new GlideDate();
        expiryDate.setValue(issueDate);
      
        if (age >= 18) {
            expiryDate.addYears(5); // Adult - add 5 years
        } else {
            expiryDate.addYears(10); // Under 18 - add 10 years
        }
      
        g_form.setValue('date_of_expiry', expiryDate.getByFormat('yyyy-MM-dd')); // Set expiry date in correct format
        g_form.hideFieldMsg('date_of_expiry');
    } else if (!dateOfIssue) {
        g_form.showFieldMsg('date_of_issue', "Please enter the Date of Issue first.", "info");
    } else if (!age) {
        g_form.showFieldMsg('age', "Please enter your age first.", "info");
    }
}


================================================
FILE: Client-Side Components/Catalog Client Script/Password Validation Script/README.md
================================================
Description of the Combined Password Validation Script
Purpose
The script validates the password entered by the user in a ServiceNow catalog item form. It ensures that the password meets strong security criteria and does not include the user's first or last name, enhancing overall security.

Validation Criteria
Strong Password Requirements:

At least 8 characters long.
Contains at least one uppercase letter.
Contains at least one lowercase letter.
Contains at least one digit.
Contains at least one special character (e.g., @$!%*?&).
First and Last Name Restrictions:

The password cannot contain the user's first name or last name.


================================================
FILE: Client-Side Components/Catalog Client Script/Password Validation Script/Script.js
================================================
function onSubmit() {
    // Get the password value from the field
    var password = g_form.getValue('password'); // Change 'password' to your field name
    // Get the first and last name values from the fields
    var firstName = g_form.getValue('first_name'); // Change 'first_name' to your field name
    var lastName = g_form.getValue('last_name'); // Change 'last_name' to your field name
    // Define the regex pattern for a strong password
    var passwordPattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
    
    // Check if the password contains the first or last name
    if (password.includes(firstName) || password.includes(lastName)) {
        // Display an error message if validation fails
        g_form.showFieldMsg('password', 'Password cannot contain your first or last name.', 'error');
        return false; // Prevent form submission
    }
  // Validate the password against the pattern
    if (!passwordPattern.test(password)) {
        // Display an error message if validation fails
        g_form.showFieldMsg('password', 'Password must be at least 8 characters long, contain at least one uppercase letter, one lowercase letter, one digit, and one special character.', 'error');
        return false; // Prevent form submission
    }


    return true; // Allow form submission if all validations pass
}


================================================
FILE: Client-Side Components/Catalog Client Script/Percentage Symbol/readme.md
================================================
Sets the field value to the formatted percentage string (e.g., 45 becomes 45.00%).

Retrieves the current value of the field.
Removes any existing % symbol to avoid duplication.
Validates the input to ensure it's a number.
Converts the value to a float.
Formats it to two decimal places and appends a % symbol. 


================================================
FILE: Client-Side Components/Catalog Client Script/Percentage Symbol/script.js
================================================
/*Sets the field value to the formatted percentage string (e.g., 45 becomes 45.00%).

Retrieves the current value of the field.
Removes any existing % symbol to avoid duplication.
Validates the input to ensure it's a number.
Converts the value to a float.
Formats it to two decimal places and appends a % symbol. */


function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }

   function formatPercent(value) {
    if (value === null || value === undefined || value === '' || isNaN(value)) {
        return "";
    }
    var num = parseFloat(value);
    if (isNaN(num)) 
	return "";
    return num.toFixed(2) + "%";
}
var des_amount = g_form.getValue("<variable_name>").replace("%","");

g_form.setValue("<variable_name>", formatPercent(des_amount));
   
}


================================================
FILE: Client-Side Components/Catalog Client Script/PopulateDropdown/README.md
================================================
## Load / Populate the options for the second dropdown field (select box) based on what user chooses in the first dropdown
![alt text](demo_catalog.png)

### Use case

You need to dynamically populate the options for a dropdown (select box) field following another field.

For example, you need to create a catalog that has 2 fields: country and city, when the user chooses a country, the city field will only show the cities of that country.

This will especially come in handy when you have hundreds of options to populate, and easier to maintain than using catalog UI policies 👍

### Set up

- On the catalog, create 2 select box fields, for example: `city` and `country`
- Add the question choices for the 1st dropdown
- In the 2nd dropdwon, add any value for the question choices to bypass the mandatory
- Create new client script, on change, for the FIRST dropdown. Only applies on Catalog Item view. It is recommended to set the variables readonly on the RITM and SCTASK view.


================================================
FILE: Client-Side Components/Catalog Client Script/PopulateDropdown/script.js
================================================
// Please check readme for the set up
var data = {
  Japan: ["Tokyo", "Osaka"],
  USA: ["New York", "Chicago", "San Diego"],
};

function onChange(control, oldValue, newValue, isLoading) {
  var secondDropdown = "city";

  g_form.clearOptions(secondDropdown); // Remove all the options of the 2nd dropdown

  // When user switch to 'None' in country or when the form is loaded
  if (newValue == "" || isLoading) {
    return;
  }

  var cities = data[newValue];

  if (cities && cities.length) {
    cities.forEach(function (value) {
      g_form.addOption(secondDropdown, value, value);
    });
  }
}


================================================
FILE: Client-Side Components/Catalog Client Script/Prevent duplicate records on MRVS/README.md
================================================
# Prevent duplicate records to be selected in Multi row variable set

We have many ways to do this but this is bit unique compare to what you find in community, you can do it in one single script within the Variable set. 
Of course ServiceNow introduce a new feature in Quebec and have Unique checkbox field introuduced but to have a custom info message you need to go with the custom script.

  [ServiceNow Docs to disallow duplicate values](https://docs.servicenow.com/bundle/quebec-servicenow-platform/page/product/service-catalog-management/task/t_CreateAVariableForACatalogItem.html)
  
  [Click here for the script](script.js)


================================================
FILE: Client-Side Components/Catalog Client Script/Prevent duplicate records on MRVS/script.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
	if (isLoading || newValue == '') {
		return;
	}
	
	var MRVS_FIELD = "field_name_here"; //Multi row variable set name
	
	var MRVS = (g_service_catalog.parent.getValue(MRVS_FIELD).length != 0) ? JSON.parse(g_service_catalog.parent.getValue(MRVS_FIELD)) : [];
	
	//If the MRVS is empty - exit
	if(MRVS.length == 0)return;
	
	var valueExists = MRVS.some(function(obj){
		return obj.Variable_Name == newValue; // Reference variable name which needs to be unique
	});
	
	if(valueExists){
		g_form.showFieldMsg(MRVS_FIELD , "Field must be unique");
	}


}


================================================
FILE: Client-Side Components/Catalog Client Script/Real time count of letters/Count letters.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading) {
        return;
    }

    var maxChars = 100;//count of charaters 
    var currentLength = newValue.length;

    // Clear previous messages
    g_form.clearMessages();

    // Show info message
    g_form.addInfoMessage('Character count: ' + currentLength + ' / ' + maxChars);

    if (currentLength > maxChars) {
        // Show error message
        g_form.addErrorMessage('Character limit exceeded! Please shorten your text.');
        g_form.showFieldMsg('short_description', 'Too many characters!', 'error');

        // Make field mandatory to block submission
        g_form.setMandatory('short_description', true);
    } else {
        // Remove mandatory if valid
        g_form.setMandatory('short_description', false);
    }
}


================================================
FILE: Client-Side Components/Catalog Client Script/Real time count of letters/readme.md
================================================
This onChange Catalog Client Script displays the current character count for a text field and enforces a maximum limit by showing error messages and making the field mandatory to prevent form submission when exceeded.


================================================
FILE: Client-Side Components/Catalog Client Script/Remove reference icon from portal/README.md
================================================
# Remove reference icon from portal using Catalog Client script of a Catalog Item

This catalog client script is design to remove the reference icon from the Portal for any reference field record.
This needs to be configured for each Catalog Item where the reference field is being used.

* [Click here for script](remove-reference-icon-from-portal-onLoad.js)

================================================
FILE: Client-Side Components/Catalog Client Script/Remove reference icon from portal/remove-reference-icon-from-portal-onLoad.js
================================================
function onLoad() {
    setTimeout(function() {
        var referenceElement = top.document.getElementsByClassName('btn btn-default bg-white lookup')[0];

        if (referenceElement != undefined || referenceElement != null)
            referenceElement.remove();
        
    }, 500);
}

================================================
FILE: Client-Side Components/Catalog Client Script/Restrict Number of rows in Multi Row Variable/README.md
================================================
## restrict_multi_row.js
Use this to restrict multi row variable set rows to 1. this value can be changed to any number of rows as requirement.


================================================
FILE: Client-Side Components/Catalog Client Script/Restrict Number of rows in Multi Row Variable/restrict_multi_row.js
================================================
function onLoad() {
	var field = g_form.getField("mrvs_variable_set_name");
	if (field != null) {
		field.max_rows_size = 1;
	}
}


================================================
FILE: Client-Side Components/Catalog Client Script/Return Date Validation/README.md
================================================
This piece of code was written as a part of an usecase where the return date value validation was expected to be after start date as well as within 6 months from the start date. This code runs in an OnChange catalog client script for the field 'u_return_date' and validates the return date(u_return_date) in a ServiceNow Catalog item form to ensure:

1. A start date(u_start_date) is entered before setting a return date(u_return_date).
2. The return date is within 6 months after the start date.
3. Return date must be after the start date, it can't be same as it or before it.

Let’s say with an example:

a)
  u_start_date = 2025-10-01
  You enter u_return_date = 2026-04-15
  
  Steps:
  a)Difference = 196 days → More than 180 days
  b)Result: u_return_date is cleared and error shown: “Select Return Date within 6 months from Start Date”

b)
  u_start_date = 2025-10-02
  You enter u_return_date = 2025-10-01
  
  Steps:
  a)Difference = -1 day → Return date put as 1 day before start date
  b)Result: u_return_date is cleared and error shown: “Select Return Date in future than Start Date”


================================================
FILE: Client-Side Components/Catalog Client Script/Return Date Validation/validateReturndate.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var u_start_date = g_form.getValue('u_start_date');  //start date validation to check to see whether filled or not
    if (!u_start_date) {
        g_form.clearValue('u_return_date');
		    g_form.showFieldMsg('u_return_date', 'Please enter start date', 'error');
    } else {
    		var startTime = getDateFromFormat(u_start_date, g_user_date_format);   //converting to js date object
    		var returnTime = getDateFromFormat(newValue, g_user_date_format);
    		var selectedStartDate = new Date(startTime);
    		var returnDate = new Date(returnTime);
    		var returnDateDifference = (returnDate - selectedStartDate) / 86400000; //converting the diff between the dates to days by dividing by 86400000 
    		if (returnDateDifference > 180) {
      			g_form.clearValue('u_return_date');
      			g_form.showFieldMsg('u_return_date', 'Select Return Date within 6 months from Start Date', 'error');
    		} else if (returnDateDifference < 1) {
      			g_form.clearValue('u_return_date');
      			g_form.showFieldMsg('u_return_date', 'Select Return Date in future than Start Date', 'error');
		    }
	  }
}


================================================
FILE: Client-Side Components/Catalog Client Script/Reusable GlideAjax Client Script/DynamicTableQueryUtil.js
================================================
var DynamicTableQueryUtil = Class.create();
DynamicTableQueryUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getTableRow: function() {
        var tableName = this.getParameter('sysparm_table_name');
        var keyField = this.getParameter('sysparm_key_field');
        var keyValue = this.getParameter('sysparm_key_value');
        var fieldsParam = this.getParameter('sysparm_fields');
        var limitFields = !JSUtil.nil(fieldsParam);
        var desiredFields = limitFields ? fieldsParam.split(',') : [];

        var result = {};
        var tableObj = {};
        var gr = new GlideRecord(tableName);

        // Use addQuery for non-sys_id fields
        if (keyField === 'sys_id') {
            if (!gr.get(keyValue)) {
                return null;
            }
        } else {
            gr.addQuery(keyField, keyValue);
            gr.query();
            if (!gr.next()) {
                return null;
            }
        }

        // Handle variables (if present)
        if (gr.variables) {
            for (var key in gr.variables) {
                if (!JSUtil.nil(gr.variables[key])) {
                    var variableObj = gr.variables[key];
                    tableObj['variables.' + key] = {
                        fieldDisplayVal: variableObj.getDisplayValue() || String(variableObj),
                        fieldVal: String(variableObj)
                    };
                }
            }
        }

        // Handle standard fields
        var fields = gr.getFields();
        for (var i = 0; i < fields.size(); i++) {
            var field = fields.get(i);
            var fieldName = field.getName();
            tableObj[fieldName] = {
                fieldDisplayVal: field.getDisplayValue() || String(field),
                fieldVal: String(field)
            };
        }

        // Add sys_id explicitly
        tableObj['sys_id'] = {
            fieldDisplayVal: 'Sys ID',
            fieldVal: gr.getUniqueValue()
        };

        // Filter fields if requested
        if (limitFields) {
            desiredFields.forEach(function(field) {
                field = field.trim();
                if (tableObj[field]) {
                    result[field] = tableObj[field];
                }
            });
        } else {
            result = tableObj;
        }

        return new JSON().encode(result);
    }
});


================================================
FILE: Client-Side Components/Catalog Client Script/Reusable GlideAjax Client Script/Readme.md
================================================
This solution provides a generic and reusable GlideAjax-based client-server interaction in ServiceNow that allows querying any table by passing:

Table name
Key field and value
Desired fields to retrieve

It dynamically returns field values from the server and populates them on the form, making it ideal for use cases like CMDB enrichment, entitlement lookups, or dynamic form population.

1. Client Script (onChange)
Triggers on field change.
Sends parameters to the Script Include via GlideAjax.
Receives JSON response and sets target field value.

Parameters:
sysparm_table_name: Table to query (e.g., sys_user)
sysparm_key_field: Field to match (e.g., sys_id)
sysparm_key_value: Value to match
sysparm_fields: Comma-separated list of fields to retrieve

2. Script Include: DynamicTableQueryUtil
   
Processes incoming parameters.
Queries the specified table and retrieves requested fields.
Supports both standard fields and catalog item variables.
Returns a JSON object with field values and display values.


================================================
FILE: Client-Side Components/Catalog Client Script/Reusable GlideAjax Client Script/clientscript.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue === '') {
        return;
    }

    // Define parameters dynamically
    var tableName = 'sys_user'; // Change as needed
    var keyField = 'sys_id'; // Change as needed
    var fieldsToFetch = 'email'; // Comma-separated list
    var targetField = 'user'; // Field to populate

    var ga = new GlideAjax('DynamicTableQueryUtil');
    ga.addParam('sysparm_name', 'getTableRow');
    ga.addParam('sysparm_table_name', tableName);
    ga.addParam('sysparm_key_field', keyField);
    ga.addParam('sysparm_key_value', newValue);
    ga.addParam('sysparm_fields', fieldsToFetch);
    ga.getXML(function(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        if (!answer) {
            alert('No response from Script Include');
            return;
        }

        var parsedAnswer = JSON.parse(answer);
        if (parsedAnswer[fieldsToFetch]) {
            g_form.setValue(targetField, parsedAnswer[fieldsToFetch]['fieldVal']);
        } else {
            alert('error');
        }
    });
}


================================================
FILE: Client-Side Components/Catalog Client Script/Rounding Money or Price Field/README.md
================================================
This script is OnChange, and will automatically round the selected field to [x] value.
The script can either be applied to a Catalog Item, or a specific Variable in a Var Set.

For example, if prompting a user for a cost, and said cost should only be in multiples of $5.

Any instance of `[VAR NAME]` in these files should be replaced with the name of the variable that the script is being applied to.

More information and a full write-up available on [Community](https://community.servicenow.com/community?id=community_article&sys_id=75ab01271bac5d10c17111751a4bcb40).

================================================
FILE: Client-Side Components/Catalog Client Script/Rounding Money or Price Field/catalog_client_script.js
================================================
function onChange(control, oldValue, newValue, isLoading) {

    //Value for increment rounding
    var roundTo = [ROUNDING INCREMENT];

    //Standard onChange code + if the value is now empty, return
    if (isLoading || newValue == '') return;

    //Get the existing value, and remove the $, if it exists
    var existingVal = newValue.replace('$', '');

    //Make sure the field contains a valid numerical value
    if(!Number.isInteger(parseInt(existingVal))) return;

    //Round up if not a multiple of the increment
    if(existingVal % roundTo !=0) {

        //Calculate the rounded value
        var newVal = (Math.ceil(existingVal/roundTo)*roundTo);
        
        //Set the value of the field to the new, rounded value
        g_form.setValue('[VAR_NAME]', "$"+ newVal);

        //Show a message beneath the field indicating it was rounded, and the new value
        g_form.showFieldMsg('[VAR_NAME]', "Rounded $" + existingVal + " to $" + newVal);
    }
} 

================================================
FILE: Client-Side Components/Catalog Client Script/Rounding Money or Price Field/catalog_client_script_config.md
================================================
Name: Round [Field] to nearest [Rounding Amount]
UI Type: All
Type: onChange

Variable name: [VAR NAME]

Script: see `catalog_client_script.js` for code.

================================================
FILE: Client-Side Components/Catalog Client Script/Schedule Request/Readme.JS
================================================
This project allows users to schedule a Service Catalog request for a future date and time. Instead of submitting immediately, the request is stored and automatically submitted later using a Scheduled Job


================================================
FILE: Client-Side Components/Catalog Client Script/Schedule Request/scheduled client script.js
================================================
function onSubmit() {
  var scheduledTime = g_form.getValue('scheduled_time');
  var currentTime = new Date().toISOString();

  if (scheduledTime > currentTime) {
    var ga = new GlideAjax('ScheduledRequestHelper');
    ga.addParam('sysparm_name', 'storeScheduledRequest');
    ga.addParam('sysparm_item', g_form.getUniqueValue());
    ga.addParam('sysparm_time', scheduledTime);
    ga.getXMLAnswer(function(response) {
      alert('Your request has been scheduled for: ' + scheduledTime);
    });
    return false; // Prevent immediate submission
  }

  return true; // Submit immediately if time is now or past
}


================================================
FILE: Client-Side Components/Catalog Client Script/Schedule Request/scheduled scriptinclude.JS
================================================
var ScheduledRequestHelper = Class.create();
ScheduledRequestHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, {
  storeScheduledRequest: function() {
    var itemID = this.getParameter('sysparm_item');
    var scheduledTime = this.getParameter('sysparm_time');

    var record = new GlideRecord('x_snc_scheduled_requests'); // Custom table
    record.initialize();
    record.catalog_item = itemID;
    record.scheduled_time = scheduledTime;
    record.insert();

    return 'Scheduled successfully';
  }
});


================================================
FILE: Client-Side Components/Catalog Client Script/Schedule Request/scheduled_job.JS
================================================
var now = new GlideDateTime();
var gr = new GlideRecord('x_snc_scheduled_requests');
gr.addQuery('scheduled_time', '<=', now);
gr.query();

while (gr.next()) {
  var request = new GlideRecord('sc_request');
  request.initialize();
  request.requested_for = gr.requested_for;
  request.cat_item = gr.catalog_item;
  request.insert();

  gr.deleteRecord(); // Remove after submission
}


================================================
FILE: Client-Side Components/Catalog Client Script/Set User Field Values on Load/README.md
================================================
On Load Catalog client script is created to auto set the field values and make that field read only
 - Navigate to your instance -> App Navigator > Open Catalog CLient Script [catalog_script_client]
 - Set following field Values
        - Name: xyz
        - Applies to: A Catalog item
        - Type: onLoad
        - Catalog item: Select your Catalog item
        - UI Type: All
        - Isolated script: Checked
  -  Create the script as per script.js file.


================================================
FILE: Client-Side Components/Catalog Client Script/Set User Field Values on Load/script.js
================================================
/*
Set user field value on load using catalog cleint script and make the field readonly
*/

function onLoad()
{
  var user_id = g_user.userID;
  g_form.setValue('field_name', user_id);
  g_form.setReadOnly('field_name', true);
}


================================================
FILE: Client-Side Components/Catalog Client Script/Set and Lock Variable by Group/README.md
================================================
**Set and Lock Variable by Group**

This solution provides a secure and dynamic way to control data entry on a Service Catalog form based on the user's group membership. It is typically used to pre-fill and lock certain justification or approval bypass fields for authorized users (like managers or executive staff), improving their efficiency while maintaining an accurate audit trail.

This functionality requires a combined Client-side (Catalog Client Script) and Server-side (Script Include) approach to ensure the group check is done securely.


================================================
FILE: Client-Side Components/Catalog Client Script/Set and Lock Variable by Group/set_lock_variable_by_grp.js
================================================
// onload Catalog Client Script with Catalog Name 
function onLoad() {
    var variableName = 'bypass_approval_reason';
    var targetGroupName = 'ServiceNow Support'; // The group authorized to skip this step
    var ga = new GlideAjax('UserUtils');
    ga.addParam('sysparm_name', 'isMemberOf');
    ga.addParam('sysparm_group_name', targetGroupName);
    ga.getXMLAnswer(checkAndLockVariable);
    function checkAndLockVariable(response) {
        var isMember = response;
        if (isMember == 'true') {
            var message = 'Value set and locked due to your ' + targetGroupName + ' membership.';
            var setValue = 'Bypassed by authorized ' + targetGroupName + ' member.';
            g_form.setValue(variableName, setValue);
            g_form.setReadOnly(variableName, true);
            g_form.showFieldMsg(variableName, message, 'info');
        } else {
            g_form.setReadOnly(variableName, false);
        }
    }
}

//Script Include
var UserUtils = Class.create();
UserUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    isMemberOf: function() {
        var groupName = this.getParameter('sysparm_group_name');
        var isMember = gs.getUser().isMemberOf(groupName);
        return isMember.toString();
    },

    type: 'UserUtils'
});


================================================
FILE: Client-Side Components/Catalog Client Script/Set fields from URL Parameter 2/CatalogClientScript.js
================================================
function onLoad() {
   
    var taskId = getParameterValue("taskid");
   
    if (taskId != "" && taskId != null && taskId != undefined) {
      console.log('=== CAMACHO Task id: ' + taskId);
      
      var gaGetTaskNumber = new GlideAjax('UtilsAjax');
      gaGetTaskNumber.addParam('sysparm_name', 'getTaskNumber');
      gaGetTaskNumber.addParam('sysparm_task_id', taskId);
      gaGetTaskNumber.getXMLAnswer(setmyFormValue);
    }
 }
 
 function setmyFormValue(answer) {
   
   //console.log('=== CAMACHO Entered setmyFormValue');
   if (answer) {
     var obj = JSON.parse(answer);
     var numero = obj.number.toString();
     console.log(numero);
     
     g_form.setValue('task_number', numero);
     
   }
 }
 
 function getParameterValue(name) {
   var url = top.location.href;
   var value = new URLSearchParams(url).get(name);
   if (value) {
     return value;
   } else {
     return null;
   }
 }

================================================
FILE: Client-Side Components/Catalog Client Script/Set fields from URL Parameter 2/KMXOUtils.js
================================================
var KMXOUtils = Class.create();
KMXOUtils.prototype = {
    initialize: function() {
    },

  /*
  * Receives a um sys_id and returns a Task table field value
  *
  * @param {String} - taskId
  * @return {Object}
  */
  getTaskNumber: function(taskId)
  {
      if (taskId != "" && taskId != null && taskId != undefined) {

        var grTask = new GlideRecord('x_770214_consultor_rwd_activity');

        if (grTask.get(taskId)) {
          
          var number = grTask.getValue('number');
          
          var obj = {};
          obj["number"] = number;
          
          return obj;

        } else {

          return {};

        }
        
      }
  },

    type: 'KMXOUtils'
};

================================================
FILE: Client-Side Components/Catalog Client Script/Set fields from URL Parameter 2/README.md
================================================
# Set fields on a catalog item from URL parameters.

The mission was to get a sys_id from the URL, query a record and return a value to the front-end.

In the front-end we have a Record Producer (RP) with a String field.

On the onLoad event, we want to populate the field in order to show the value retrieved from the back-end.

The Use Case is defined so let's go to the step by step process.

1. Create a Util class in the back-end

Our Utils class will be a Script Include that receives a sys_id and returns a String. 

[KMXOUtils](KMXOUtils.js) 

2. Create a class to provide access for the Front-End

2.1. To provide access in this class, the parameter Client callable should be True (checked)

[UtilsAjax](UtilsAjax.js) 

3. I'll suppose that you have a String field called task_number in your RP

3.1. Create a Catalog Client Script (Type: OnLoad) to get the URL parameter and call the back-end class:

[CatalogClientScript](CatalogClientScript.js) 


================================================
FILE: Client-Side Components/Catalog Client Script/Set fields from URL Parameter 2/UtilsAjax.js
================================================
var UtilsAjax = Class.create();
UtilsAjax.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

  getTaskNumber: function() {
    var taskId = this.getParameter('sysparm_task_id');
    gs.debug('=== Camacho UtilsAjax = Received the sys_id ' + taskId);
    return JSON.stringify(new KMXOUtils().getTaskNumber(taskId));
    
  },
    type: 'UtilsAjax'
});

================================================
FILE: Client-Side Components/Catalog Client Script/Set fields from URL Parameters/README.md
================================================
# Set fields on a catalog item from URL parameters.

This only works on both the classic ui and service portal.

To use this you must provide the technical name as a url parameter and then provide the value you would like set. This script is also console logging the techcnical names if you don't have them handy. Reference fields require using the sys_id.


### Example

For the OOTB Password Reset catalog item it has a field "Whose password needs to be reset?" with a technical value of "caller_id" after adding this script you could use the below url parameter to auto populate the form with Abel Tuter.

/sp?id=sc_cat_item&sys_id=29a39e830a0a0b27007d1e200ad52253&**caller_id=62826bf03710200044e0bfc8bcbe5df1**




================================================
FILE: Client-Side Components/Catalog Client Script/Set fields from URL Parameters/script.js
================================================
function onLoad() {

	try{ // Classic UI
		var pFields = g_form.nameMap;
		console.log(pFields);
		pFields.forEach(function(field){
			if(getParam(field.prettyName)){
				g_form.setValue(field.prettyName, getParam(field.prettyName));
			}
		});

	}catch(e){ // Service Portal or Mobile
		var fields = g_form.getEditableFields();
		console.log(fields);
		fields.forEach(function(field){
			if(getParam(field)){
				g_form.setValue(field, getParam(field));
			}
		});
	}
}

function getParam(name){
	var url = new URL(top.location);
	return url.searchParams.get(name);
}

================================================
FILE: Client-Side Components/Catalog Client Script/Validate a Credit Card Number/README.md
================================================
**Description of the Credit Card Number Validation Script**
Purpose
The script validates a credit card number entered by the user in a ServiceNow form. 
It checks if the number is a valid 16-digit credit card number using a combination of a regular expression and the Luhn algorithm for basic validation.

**Validation Criteria**
Format:
The credit card number must consist of exactly 16 digits.
**Luhn Algorithm:**
The script implements the Luhn algorithm to determine if the credit card number is potentially valid. 
This algorithm helps catch common errors in credit card numbers, such as transposed digits.


================================================
FILE: Client-Side Components/Catalog Client Script/Validate a Credit Card Number/Script.js
================================================
function onSubmit() {
    var cardNumber = g_form.getValue('credit_card'); // Change 'credit_card' to your field name
    var cardPattern = /^\d{16}$/; // Simple pattern for 16-digit cards

    if (!cardPattern.test(cardNumber) || !isValidCardNumber(cardNumber)) {
        g_form.showFieldMsg('credit_card', 'Please enter a valid 16-digit credit card number.', 'error');
        return false;
    }
    return true;
}

function isValidCardNumber(number) {
    var sum = 0;
    var alternate = false;
    for (var i = number.length - 1; i >= 0; i--) {
        var n = parseInt(number.charAt(i), 10);
        if (alternate) {
            n *= 2;
            if (n > 9) n -= 9;
        }
        sum += n;
        alternate = !alternate;
    }
    return sum % 10 === 0;
}


================================================
FILE: Client-Side Components/Catalog Client Script/catalog Draft/Readm.md
================================================
This project implements an Auto Save Draft feature for ServiceNow Catalog Items. It automatically saves the user’s progress (form variables) every few minutes to prevent data loss if the session times out or the browser closes. it Prevents data loss during long form filling.



features
Auto-save catalog form data every 2 minutes.
 Stores draft data in a custom table.
Restores saved data when the user reopens the catalog item.
 Works in Service Portal


================================================
FILE: Client-Side Components/Catalog Client Script/catalog Draft/Script include.JS
================================================
var CatalogDraftUtils = Class.create();
CatalogDraftUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    saveDraft: function() {
        var userId = gs.getUserID();
        var catalogItem = this.getParameter('sysparm_catalog_item');
        var draftData = this.getParameter('sysparm_draft_data');

        var gr = new GlideRecord('u_catalog_draft');
        gr.addQuery('user', userId);
        gr.addQuery('catalog_item', catalogItem);
        gr.query();
        if (gr.next()) {
            gr.variables_json = draftData;
            gr.last_saved = new GlideDateTime();
            gr.update();
        } else {
            gr.initialize();
            gr.user = userId;
            gr.catalog_item = catalogItem;
            gr.variables_json = draftData;
            gr.last_saved = new GlideDateTime();
            gr.insert();
        }
        return 'Draft saved successfully';
    },
    type: 'CatalogDraftUtils'
});


================================================
FILE: Client-Side Components/Catalog Client Script/catalog Draft/client script.js
================================================
function onLoad() {
    console.log('Auto Save Draft initialized');

    setInterval(function() {
        var draftData = {
            hardware_name: g_form.getValue('hardware_name'),
            quantity: g_form.getValue('quantity')
        };

        var ga = new GlideAjax('CatalogDraftUtils');
        ga.addParam('sysparm_name', 'saveDraft');
        ga.addParam('sysparm_catalog_item', g_form.getValue('sys_id')); // Catalog item sys_id
        ga.addParam('sysparm_draft_data', JSON.stringify(draftData));

        ga.getXMLAnswer(function(response) {
            console.log('Draft saved: ' + response);
        });
    }, 120000); // Every 2 minutes
}


================================================
FILE: Client-Side Components/Catalog Client Script/onCellEdit Catalog Task State Change Restriction/README.md
================================================
# Catalog Task state should not be closed from list edit
The onCellEdit Client Script type is used for lists rather than forms and here 
it is being used so that the task should not be closed from the list edit without
opening the form and filling other mandatory details like worknotes etc.


================================================
FILE: Client-Side Components/Catalog Client Script/onCellEdit Catalog Task State Change Restriction/script.js
================================================
function onCellEdit(sysIDs, table, oldValues, newValue, callback) {
  var saveAndClose = true;
 //Type appropriate comment here, and begin script below
  // here the values are 7|closed skipped, 3|closed complete and 4|closed incomplete
 if(newValue == 7 || newValue == 3 || newValue == 4) {
	saveAndClose = false;
	alert('you cannot update from list');
 }
 callback(saveAndClose); 
}


================================================
FILE: Client-Side Components/Catalog Client Script/previous Request/Readme.MD
================================================
Show previous request ON requested for selection

This feature enhances the Service Catalog experience by displaying previous requests for the selected Requested For user. When a user selects the Requested For variable in a catalog item form, a confirmation message appears showing the last few requests created for that user.


================================================
FILE: Client-Side Components/Catalog Client Script/previous Request/previous request client script.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') return;

    var ga = new GlideAjax('PreviousRequestsUtils');
    ga.addParam('sysparm_name', 'getPreviousRequests');
    ga.addParam('sysparm_requested_for', newValue);
    ga.getXMLAnswer(function(response) {
        var requests = JSON.parse(response);
        if (requests.length === 0) {
            alert('No previous requests found for this user.');
        } else {
            var message = 'Previous Requests:\n\n';
            requests.forEach(function(req) {
                message += 'Number: ' + req.number + ' | Item: ' + req.item + ' | Date: ' + req.date + '\n';
            });
            if (confirm(message + '\nDo you want to continue?')) {
                // User clicked OK
            } else {
                // User clicked Cancel
                g_form.setValue('requested_for', oldValue);
            }
        }
    });
}


================================================
FILE: Client-Side Components/Catalog Client Script/previous Request/previous request script include.js
================================================
var PreviousRequestsUtils = Class.create();
PreviousRequestsUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getPreviousRequests: function() {
        var requestedFor = this.getParameter('sysparm_requested_for');
        var result = [];
        var gr = new GlideRecord('sc_req_item');
        gr.addQuery('requested_for', requestedFor);
        gr.orderByDesc('sys_created_on');
        gr.setLimit(5); // Show last 5 requests
        gr.query();
        while (gr.next()) {
            result.push({
                number: gr.number.toString(),
                item: gr.cat_item.getDisplayValue(),
                date: gr.sys_created_on.getDisplayValue()
            });
        }
        return JSON.stringify(result);
    }
});


================================================
FILE: Client-Side Components/Catalog Client Script/spModal for Sweet Alerts/readme.md
================================================
In ServiceNow, Open catalog client Scripts [catalog_script_client] and paste the code snippet of [spModalSweetAlerts.js] file.

Setup:
1. A catalog item having variable name Rewards[rewards] of type 'Select Box'(include none as true) and 2 choices(Yes and No)
2. A Single line type field named 'Reward Selected' [reward_selected] which will hold the value selected by user from the spModal popup.
3. The onLoad catalog client script setup as below:
4. Type: onChange
5. Variable: rewards (as per step 1)
6. Script: [[spModalSweetAlerts.js]]
   


Screenshots:


<img width="1338" height="268" alt="image" src="https://github.com/user-attachments/assets/f7f22b83-7e0e-47bb-bbed-2a8f38783a4d" />


Rewards selected as 'Yes'

<img width="1353" height="327" alt="image" src="https://github.com/user-attachments/assets/1bb55339-36b4-4a9c-8b65-2b254b87cf5b" />

From the spModal popup select anyone of the reward, it should be populated in the Reward Selected field.
Along with that a message shows the same of the selection.

<img width="1350" height="319" alt="image" src="https://github.com/user-attachments/assets/1b23c766-51f8-4b01-9073-f836f390deb2" />



================================================
FILE: Client-Side Components/Catalog Client Script/spModal for Sweet Alerts/spModalSweetAlerts.js
================================================
function onChange(control, oldValue, newValue) {
    if (newValue == 'Yes') {
        spModal.open({
            title: "Reward Type",
            message: "Please select the category of Reward",
            buttons: [{
                    label: "Star Performer",
                    value: "Star Performer"
                },
                {
                    label: "Emerging Player",
                    value: "Emerging Player"
                },
                {
                    label: "High Five Award",
                    value: "High Five Award"
                },
                {
                    label: "Rising Star",
                    value: "Rising Star"
                }
            ]
        }).then(function(choice) {
            if (choice && choice.value) {
				g_form.addInfoMessage('Selected Reward: '+ choice.label);
                g_form.setValue('reward_selected', choice.value);
            }
        });
    } else {
        g_form.clearValue('reward_selected');
    }
}


================================================
FILE: Client-Side Components/Client Scripts/Abort action when description is empty/Code.js
================================================
function onSubmit() {
    //Type appropriate comment here, and begin script below
    var description = g_form.getValue('description');
	var state = g_form.getValue('state');

    if ((!description) && (state == 'completed')) {
        g_form.addErrorMessage('Please provide Description Value, Description Cannot be empty');

        return false;
    }

}


================================================
FILE: Client-Side Components/Client Scripts/Abort action when description is empty/ReadMe.md
================================================
When an Incident record is being closed, the system should validate that the Description field is not empty and state is completed.
If the Description field is blank and state is completed, the record submission (update) should be aborted, and the user should be prompted to provide a description before closing the incident.


================================================
FILE: Client-Side Components/Client Scripts/Abort direct incident closure without Resolve State/readme.md
================================================
📘 README — Incident State Validation (Client Script)
Overview

This Client Script enforces the correct ITIL incident lifecycle by preventing users from directly closing an incident without first transitioning it through the Resolved state.
If a user attempts to move the state directly to Closed Complete, the system reverts the change and displays a notification.

What This Code Does
Monitors changes to the state field on Incident form
Checks if new selection is trying to skip the Resolved step
Reverts state to its previous value when the rule is violated
Alerts the user with a clear and guided message
Refreshes the form to maintain data consistency
Usage Instructions

Create a Client Script on the Incident table
Type: onChange
Field Name: state
Paste the script under the script section
Test by trying to directly move an Incident to Closed Complete
S
cript Requirements
State values must be configured as:
6 → Resolved
7 → Closed Complete

Script runs only on Incident records
Must be active in applicable ITIL views
Notes for Developers
This code supports clean transition handling for ITSM workflows
Helps enforce process compliance without server-side overhead
Recommended for environments requiring strict closure governance


================================================
FILE: Client-Side Components/Client Scripts/Abort direct incident closure without Resolve State/script.js
================================================
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    // Prevent execution during form load or when value is empty
    if (isLoading || newValue === '') {
        return;
    }

    // Dummy values for state comparison
    // Assuming:
    // 6 = Resolved
    // 7 = Closed Complete
    var RESOLVED = 6;
    var CLOSED = 7;

    // Prevent direct move to Closed without passing through Resolved
    if (newValue == CLOSED && oldValue != RESOLVED) {
        
        // Reset to previous state
        g_form.setValue('state', oldValue);

        // Show validation warning
        g_form.addErrorMessage(
            'Direct closure is not allowed. Please first move the incident to Resolved state.'
        );

        // Reload page after showing error
        setTimeout(function() {
            location.reload();
        }, 3000);
    }
}


================================================
FILE: Client-Side Components/Client Scripts/Add Field Decoration/Add Field Decoration.js
================================================
function onLoad() {
    // Adding Field Decorators
    g_form.addDecoration("caller_id", "icon-user-profile", "The Requester");
}


================================================
FILE: Client-Side Components/Client Scripts/Add Field Decoration/README.md
================================================
# Client Script - Add Field Decoration

A client script that added field decoration.

## Usage

- Create a new OnLoad script
- Copy this script into it
- Change the field name, icon and the message


================================================
FILE: Client-Side Components/Client Scripts/Add Image to Field Based on Company/AddImageToFieldBasedOnCompany.js
================================================
function onLoad() {
    //Type appropriate comment here, and begin script below
	
	//Get element of the field
    var requestedForLabel = $('element.sc_req_item.request.requested_for');
	var company = g_scratchpad.company;

	//Set the Position of the image
	var bgPosition = "5% 45%";
	
	var image = '';
	
	//Set the image based on the Company
	switch (company) {
            case 'company 1':
                image = 'url(company1.png)';
                break;
            case 'company 2':
                image = 'url(company2.png)';
                break;
            case 'company 3':
                image = 'url(company3.png)';
                break;
            default:
                image = '';
        }
	
	//Update the Field Label
    requestedForLabel.down('label').setStyle({
        backgroundImage: image,
        backgroundRepeat: "no-repeat",
        backgroundPosition: bgPosition,
        paddingLeft: '30px'
    });

}


================================================
FILE: Client-Side Components/Client Scripts/Add Image to Field Based on Company/README.md
================================================
# Add Image to Field Based on Company
From the User Profile get the Company associated to the User using a Display Business Rule and putting the value in the scratchpad. After that use the scratchpad value in the Client Script to check the company name and then associate the image accordingly. You would need to add all your images to the ServiceNow instance first with the correct names.


================================================
FILE: Client-Side Components/Client Scripts/Add Image to Field Based on Company/SetCompanyScratchPadValue.js
================================================
(function executeRule(current, previous /*null when async*/) {

	// Set the Scratchpad value for Company which would be used in the Client Script
	g_scratchpad.company = current.request.requested_for.company.getDisplayValue();

})(current, previous);


================================================
FILE: Client-Side Components/Client Scripts/Adding Placeholder on Resolution Notes/README.md
================================================
# Adding Placeholder Text in Resolution Notes

To maintain consistency and ensure specific information is captured in resolution notes, process owners may require fulfillers to follow a predefined format when resolving tickets.

By adding **placeholder** text in the resolution notes, fulfillers are reminded of the required information(e.g., Root cause, Steps taken, Resolution provided), reducing the risk of missing important details. The placeholder disappears as soon as the fulfiller begins entering their notes, ensuring it doesn't interfere with their input.

## How It Works

### When?
- The placeholder text is automatically added when the state of the ticket changes to Resolved (6).

### What Happens?
- A placeholder text appears in the resolution notes field to guide the fulfiller.
- As soon as the fulfiller starts typing, the placeholder disappears.
- This ensures consistency and alignment with the process requirements.


================================================
FILE: Client-Side Components/Client Scripts/Adding Placeholder on Resolution Notes/script.js
================================================
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    var res = g_form.getElement('close_notes');
    if (newValue == 6)
        res.placeholder = "1. Root Cause" + "\n" + "2. Steps taken" + "\n" + "3. Resolution provided"; //Placeholder text as required
    else
        res.placeholder = "";
}


================================================
FILE: Client-Side Components/Client Scripts/Auto Update Priority based on Impact and Urgency/readme.md
================================================
🧩 Readme : Client Script: Auto Priority Update Based on Impact and Urgency
📘 Overview

This client script automatically updates the Priority field on the Incident form whenever the Impact or Urgency value changes.
It follows the ITIL standard mapping to ensure the correct priority is always set automatically, improving data accuracy and efficiency for service desk agents.

⚙️ Script Details
Field	Value
Name	Auto Priority Update based on Impact and Urgency
Type	onChange
Applies to Table	Incident
Applies on Fields	impact, urgency
UI Type	All (Classic, Mobile, Workspace)
Active	✅ Yes
Condition	Leave blank
💻 Script Code
// ==========================================================================
// Script Name: Auto Priority Update based on Impact and Urgency
// Table: Incident
// Type: onChange | Fields: impact, urgency
// UI Type: All
// Version: 2025 Production Ready
// ==========================================================================

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    // Skip execution if form is loading or field is empty
    if (isLoading || newValue == '') {
        return;
    }

    // Get Impact and Urgency values
    var impact = g_form.getValue('impact');
    var urgency = g_form.getValue('urgency');

    // Define Priority Matrix (ITIL standard)
    var priorityMatrix = {
        '1': { '1': '1', '2': '2', '3': '3' },
        '2': { '1': '2', '2': '3', '3': '4' },
        '3': { '1': '3', '2': '4', '3': '5' }
    };

    // Find the new Priority
    var newPriority = priorityMatrix[impact]?.[urgency];

    // Update the Priority field if valid
    if (newPriority) {
        if (g_form.getValue('priority') != newPriority) {
            g_form.setValue('priority', newPriority);
            g_form.showFieldMsg('priority', 'Priority auto-updated based on Impact and Urgency', 'info');
        }
    } else {
        // Optional: Clear Priority if invalid combination is selected
        g_form.clearValue('priority');
        g_form.showFieldMsg('priority', 'Invalid Impact/Urgency combination — priority cleared', 'error');
    }
}

🧠 How It Works

The script runs automatically when Impact or Urgency changes.
It checks the ITIL-based matrix to determine the correct Priority.
If a valid combination is found, the Priority field updates automatically.
A small info message appears to confirm the update.

🔢 ITIL Mapping Table
Impact	Urgency	Resulting Priority
1 (High)	1 (High)	1 (Critical)
1	2	2
1	3	3
2	1	2
2	2	3
2	3	4
3	1	3
3	2	4
3	3	5
✅ Benefits

Automatically enforces ITIL priority standards
Reduces manual effort and user errors
Ensures consistency in priority calculation
Compatible with Classic UI, Next Experience, and Agent Workspace


================================================
FILE: Client-Side Components/Client Scripts/Auto Update Priority based on Impact and Urgency/script.js
================================================
//Auto Priority Update based on Impact and Urgency

// ==========================================================================
// Script Name: Auto Priority Update based on Impact and Urgency
// Table: Incident (or any Task-based table)
// Type: onChange | Fields: impact, urgency
// UI Type: All
// ==========================================================================

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    // Prevent the script from running when the form loads or when the field is empty
    if (isLoading || newValue == '') {
        return;
    }

    // ----------------------------------------------------------------------
    // Step 1: Fetch field values from the form
    // ----------------------------------------------------------------------
    var impact = g_form.getValue('impact');   // e.g., 1 - High, 2 - Medium, 3 - Low
    var urgency = g_form.getValue('urgency'); // e.g., 1 - High, 2 - Medium, 3 - Low

    // ----------------------------------------------------------------------
    // Step 2: Define the ITIL-based Priority Matrix
    // ----------------------------------------------------------------------
    // Each row represents "Impact", and each column represents "Urgency"
    // The resulting value sets the "Priority"
    var priorityMatrix = {
        '1': { '1': '1', '2': '2', '3': '3' }, // Impact = High
        '2': { '1': '2', '2': '3', '3': '4' }, // Impact = Medium
        '3': { '1': '3', '2': '4', '3': '5' }  // Impact = Low
    };

    // ----------------------------------------------------------------------
    // Step 3: Determine the new priority based on selected Impact/Urgency
    // ----------------------------------------------------------------------
    var newPriority = priorityMatrix[impact]?.[urgency]; // optional chaining prevents errors

    // ----------------------------------------------------------------------
    // Step 4: Update the Priority field and inform the user
    // ----------------------------------------------------------------------
    if (newPriority) {
        // Only update if priority is different from current value
        if (g_form.getValue('priority') != newPriority) {
            g_form.setValue('priority', newPriority);

            // Show message (works in both Classic UI and Next Experience)
            g_form.showFieldMsg('priority', 'Priority auto-updated based on Impact and Urgency', 'info');
        }
    } else {
        // Optional: clear priority if invalid combination is selected
        g_form.clearValue('priority');
        g_form.showFieldMsg('priority', 'Invalid Impact/Urgency combination — priority cleared', 'error');
    }

    // ----------------------------------------------------------------------
    // End of Script
    // ----------------------------------------------------------------------
}


================================================
FILE: Client-Side Components/Client Scripts/Auto-Populate Planned End Date/README.md
================================================
An onChange client script that calls the script includes one that adds the specified number of business days to the planned start date and autopopulates the planned end date based on the type.
For the client callable script include refer to the README file in the Add Business Days Script include folder. Link: [Add Business Days Script Include](/Server-Side%20Components/Script%20Includes/Add%20Business%20Days/README.md)


================================================
FILE: Client-Side Components/Client Scripts/Auto-Populate Planned End Date/autoPopulatePlannedEndDate.js
================================================
//Client script
//Table: Change Request
//UI Type: All
//Type: onChange
//Field: Planned Start Date
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }  
    var daysToAdd;
    if(g_form.getValue('type') =='standard' || g_form.getValue('type') =='normal')
      daysToAdd = 3; 
    else if(g_form.getValue('type') =='emergency')
      daysToAdd = 1;
    var ga = new GlideAjax("addBusinessDays"); //Calling the add business days script include, which is in the Server-Side Components/Script Includes/Add Business Days/addBusinessDays.js
    ga.addParam('sysparm_name', 'addDays');
    ga.addParam('sysparm_days', daysToAdd); 
    ga.addParam('sysparm_date', newValue);
    ga.getXML(processResponse);

    function processResponse(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer").toString();
        g_form.setValue('end_date', answer);
    }
}


================================================
FILE: Client-Side Components/Client Scripts/Auto-Populate Short Discription/Auto populate short description.js
================================================
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    // Define category-to-short description mapping
    var categoryToShortDescription = {
        'hardware': 'Hardware Issue - ',
        'software': 'Software Issue - ',
        'network': 'Network Issue - ',
        'inquiry': 'Inquiry/Help - ',
		'database': 'Database - '
    };

    // Convert the selected value to lowercase for matching
    var selectedCategory = newValue.toLowerCase();

    // If category exists in mapping, update the short description
    if (categoryToShortDescription.hasOwnProperty(selectedCategory)) {
        var existingDesc = g_form.getValue('short_description') || '';
        var prefix = categoryToShortDescription[selectedCategory];

        // Only add prefix if it's not already there
        if (!existingDesc.startsWith(prefix)) {
            g_form.setValue('short_description', prefix + existingDesc);
            g_form.showFieldMsg('short_description', 'Short Description auto-updated based on category.', 'info');
        }
    }
}


================================================
FILE: Client-Side Components/Client Scripts/Auto-Populate Short Discription/README.md
================================================

# Auto-Populate Short Description Client Script

## Overview

This client script is designed to enhance the user experience in ServiceNow by automatically populating the 'Short Description' field when a user selects a category for an incident or request. It simplifies the data entry process, ensures consistency in short descriptions, and saves time for users.

## How It Works

When a user selects a category from the provided options, the script appends a predefined prefix to the existing 'Short Description' value, creating a more informative short description.

### Configuration

To configure and use this client script in your ServiceNow instance, follow these steps:

1. **Create a Client Script:**

   - Log in to your ServiceNow instance as an admin or developer.
   - Navigate to "System Definition" > "Client Scripts."
   - Create a new client script and give it a name (e.g., "Auto-Populate Short Description").

2. **Copy and Paste the Script:**

   - Copy the JavaScript code provided in this README.
   - Paste the code into your newly created client script.

3. **Attach to 'category' Field:**

   - Save the client script and ensure it's active.
   - Attach the client script to the 'category' field of the relevant table (e.g., Incident, Request) where you want to enable this functionality.

4. **Define Your Category-to-Short-Description Mappings:**

   - Modify the script to define your own mappings for categories and their corresponding short description prefixes. Customize the `categoryToShortDescription` object to match your requirements.

5. **Testing:**

   - Test the functionality by creating or editing an incident or request record.
   - Select a category, and observe how the 'Short Description' field is automatically populated based on your mappings.

## Example Mapping

Here's an example of how you can define category-to-short-description mappings in the script:

```javascript
var categoryToShortDescription = {
  'Hardware': 'Hardware Issue - ',
  'Software': 'Software Issue - ',
  'Network': 'Network Issue - ',
  'Other': 'Other Issue - '
};
```

You can customize these mappings to align with your organization's specific categories and short description conventions.

## Benefits

- Streamlines data entry for users.
- Ensures consistent and informative short descriptions.
- Saves time and reduces the risk of human error.
- Enhances user experience in ServiceNow.


================================================
FILE: Client-Side Components/Client Scripts/Auto-Populate Short Discription/Readme.md
================================================
# Auto-Populate Short Description (Client Script)
## Overview

This client script automatically updates the Short Description field in ServiceNow whenever a user selects a category on the form. It improves data consistency, saves time, and ensures that short descriptions remain meaningful and standardized.

## How It Works

When a user selects a category such as Hardware, Software, or Network, the script automatically prefixes the existing short description with a corresponding label (for example, “Hardware Issue –”).
This makes incident records easier to identify and improves the quality of data entry.

## Configuration Steps

1. Log in to your ServiceNow instance with admin or developer access.
2. Navigate to System Definition → Client Scripts.
3. Create a new Client Script with the following details:

```
Table: Incident
Type: onChange
Field name: category
Copy and paste the provided script into the Script field.
Save the record and make sure the script is active.
```

## Testing

1. Open any existing or new Incident record.
2. Select a category such as Hardware or Software.
3. The Short Description field will automatically update with the corresponding prefix.

## Benefits

Speeds up data entry for users.
Maintains consistency in short descriptions.
Reduces manual effort and human errors.
Enhances clarity in incident listings and reports.


================================================
FILE: Client-Side Components/Client Scripts/Auto-Populate Short Discription/autoPopulateSD.js
================================================
// Client Script to Auto-Populate Short Description based on Category

function onChangeCategory() {
    var categoryField = g_form.getValue('category'); // Get the selected category
    var shortDescriptionField = g_form.getValue('short_description'); // Get the Short Description field

    // Define mappings for categories and corresponding short descriptions
    var categoryToShortDescription = {
        'Hardware': 'Hardware Issue - ',
        'Software': 'Software Issue - ',
        'Network': 'Network Issue - ',
        'Other': 'Other Issue - '
    };

    // Update Short Description based on the selected category
    if (categoryToShortDescription.hasOwnProperty(categoryField)) {
        var newShortDescription = categoryToShortDescription[categoryField] + shortDescriptionField;
        g_form.setValue('short_description', newShortDescription);
    }
}

// Attach the onChangeCategory function to the 'category' field
g_form.observe('change', 'category', onChangeCategory);


================================================
FILE: Client-Side Components/Client Scripts/Auto-populate watch_list based on company/README.md
================================================
Table: Incident
Type: onChange
field: caller_id

Sometimes customers have a requirement to add users or distribution lists to all tickets that are raised for their company. This script allows to automatically add a list of users or external email addresses to the watch_list field.

================================================
FILE: Client-Side Components/Client Scripts/Auto-populate watch_list based on company/script.js
================================================
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading) {
        return;
    }
    var callerID = g_form.getReference('caller_id', getUserCompany);
}

function getUserCompany(callerID) {
    switch (callerID.company) {
        case 'company_1_sys_id':
            g_form.setValue('watch_list', 'PEOPLE_TO_ADD');
            //PEOPLE_TO_ADD is a comma separated list of user sys_id
            //and external email addresses
            break;
        case 'company_2_sys_id':
            g_form.setValue('watch_list', 'PEOPLE_TO_ADD');
            break;
        default:
            break;
    }
}


================================================
FILE: Client-Side Components/Client Scripts/Call SI to recover User data/README.md
================================================
# Call Script Include to recover User data

In this onChange Client Script, the scenario is this:
- In a form, we have a reference field to the User table to allow our user to select any user within the platform.
- Once a user is selected, we are passing that Sys ID to recover more information regarding the selected record.


================================================
FILE: Client-Side Components/Client Scripts/Call SI to recover User data/script.js
================================================
/*
Type: onChange
Field: a reference to the User table
*/
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    var test = newValue;

    //The Script Include called here can be found in:
    //Server-Side Components / Script Includes / Get User Data by Id
    //It is in Global scope 
    var ga = new GlideAjax('GetUserData');//script include name
    ga.addParam('sysparm_name', 'GetUserBy_id'); //method to be called
    ga.addParam('sysparm_userid', test); //send a parameter to the method.
    ga.getXMLAnswer(userInfoParse);

    function userInfoParse(response) {
        if (response == '') {
            g_form.addErrorMessage('User not found with the informed sys_id.');
        } else {
            //alert(response);
            var obj = JSON.parse(response);
            g_form.setValue('u_first_name', obj.first_name.toString());
            g_form.setValue('u_last_name', obj.last_name.toString());
            g_form.setValue('u_email', obj.email.toString());
        }

    }

}


================================================
FILE: Client-Side Components/Client Scripts/Change Label of Field/Change Label of Field.js
================================================
function onLoad() {
    //Type appropriate comment here, and begin script below
    if (g_form.getValue('priority') == '1') {
        g_form.setLabelOf('description', 'Please Explain Briefly');
    }
}


================================================
FILE: Client-Side Components/Client Scripts/Change Label of Field/README.md
================================================

# Change Label of Field 

• Modify field labels dynamically in the ServiceNow platform.

• Change labels through the UI form designer or through client/server-side scripts.

• Implement Business Rules to change labels based on conditions.

• Adjust field labels dynamically using Client Scripts based on user interactions.



================================================
FILE: Client-Side Components/Client Scripts/Change incident Number label color based on priority/Script.js
================================================
function onLoad ()
{
  var aPriority = g_form.getValue('priority');
  var label = g_form.getLable('number');
  label.style.backgroundColor = "lightblue";
  if(aPriority==1)
  {
    label.style.color = "red";
  }
  else if (aPriority==2)
  {
    label.style.color = "yellow";
  }
  else
  {
        label.style.color = "blue";
  }
}



================================================
FILE: Client-Side Components/Client Scripts/Change incident Number label color based on priority/readme.md
================================================
Write Client Script 
Change Incident Number Lable color based on priority


================================================
FILE: Client-Side Components/Client Scripts/Check all mandatory fields using mandatoryCheck()/README.md
================================================
# Mandatory Field Check on Form Change

This client script demonstrates how to use `g_form.mandatoryCheck()` to validate whether all mandatory fields on a form are filled.

It is typically used in an **onChange** catalog client script to trigger validation when a specific field changes.

If mandatory fields are missing, the script:
- Displays an info message listing the missing fields. Note: the red message is the existing functionality that will give you an error message.
- Visually highlights each missing field using a flashing effect to guide the user.

This approach improves user experience by clearly indicating which fields require attention.

**Example configuration**
<img width="1122" height="638" alt="image" src="https://github.com/user-attachments/assets/31f86ae7-27fe-4921-8d8b-391eaa55304d" />

**Example execution**
<img width="1029" height="495" alt="image" src="https://github.com/user-attachments/assets/b8384507-4292-41f4-9155-9be10195493e" />


================================================
FILE: Client-Side Components/Client Scripts/Check all mandatory fields using mandatoryCheck()/script.js
================================================
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      re
Download .txt
gitextract_wclm7_b1/

├── .github/
│   ├── pull_request_template.md
│   ├── scripts/
│   │   └── validate-structure.js
│   └── workflows/
│       ├── hacktrack.yml
│       ├── pages.yml
│       ├── pr-auto-unassign-stale.yml
│       └── validate-structure.yml
├── .gitignore
├── AGENTS.md
├── CONTRIBUTING.md
├── Client-Side Components/
│   ├── Catalog Client Script/
│   │   ├── Add Label For Attachment/
│   │   │   ├── README.md
│   │   │   └── add_label_for_attachment.js
│   │   ├── Add Rows in MRVS/
│   │   │   ├── README.md
│   │   │   └── addrows.js
│   │   ├── Auto Save Draft Feature/
│   │   │   ├── README.md
│   │   │   ├── advanced_implementation.js
│   │   │   ├── basic_implementation.js
│   │   │   └── script.js
│   │   ├── Auto-populate field from URL/
│   │   │   ├── README.md
│   │   │   └── popdatefromurl.js
│   │   ├── Autofilling the request details from previous request/
│   │   │   ├── Auto fill script include.JS
│   │   │   ├── Client script Autofill.js
│   │   │   └── Readme.md
│   │   ├── Autopopulate Department/
│   │   │   ├── README.md
│   │   │   └── autopopulateDepartment.js
│   │   ├── Autopopulate user information fields/
│   │   │   ├── ClientCallableScriptInclude.js
│   │   │   ├── README.md
│   │   │   └── onChangeClientScript.js
│   │   ├── Block Submit/
│   │   │   ├── README.md
│   │   │   └── block_submit.js
│   │   ├── Calculate age on based on date of birth/
│   │   │   ├── Calculate age based on dob.js
│   │   │   └── README.md
│   │   ├── Catalog Approval/
│   │   │   ├── Readme.md
│   │   │   ├── client script.js
│   │   │   └── script include.js
│   │   ├── Clear all fields/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Combine variables into Description/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Control all RITM variables in one go/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Currency Validation/
│   │   │   ├── README.md
│   │   │   └── currency_validation.js
│   │   ├── CustomAlert/
│   │   │   ├── README.md
│   │   │   ├── Screenshots/
│   │   │   │   └── README.md
│   │   │   ├── custom_alert.js
│   │   │   └── custom_alert_box.js
│   │   ├── Date Management/
│   │   │   ├── Date Management.js
│   │   │   └── README.md
│   │   ├── Document validation/
│   │   │   ├── Client script.JS
│   │   │   ├── Readme.md
│   │   │   └── Script include.js
│   │   ├── Dynamically Update Reference Qualifier/
│   │   │   ├── Catalog Item onLoad.js
│   │   │   ├── README.md
│   │   │   ├── Script Include.js
│   │   │   └── Variable Set onLoad.js
│   │   ├── Get Display Value of MRVS/
│   │   │   ├── README.md
│   │   │   └── mrvs.js
│   │   ├── Get MRVS Values from Parent/
│   │   │   ├── README.md
│   │   │   └── onload.js
│   │   ├── Hide Variables of Catalog Item on Order Guide/
│   │   │   ├── Hide Variables.js
│   │   │   └── README.md
│   │   ├── Hide attachment icon/
│   │   │   ├── Hide Attachment icon.js
│   │   │   └── README.md
│   │   ├── Incident Sentiment Detector (Using Simple Word Matching, No AI)/
│   │   │   ├── SentimentAnalyzer.js
│   │   │   ├── onChangeClientscript.js
│   │   │   └── readme.md
│   │   ├── MRVS Email Validation with Mutation Observer/
│   │   │   ├── EmailValidationOnCatalogUI.js
│   │   │   └── README.md
│   │   ├── MRVS Interact With Parent Form/
│   │   │   ├── Portal onLoad.js
│   │   │   ├── README.md
│   │   │   └── Write to Parent Form.js
│   │   ├── MRVS Loop Rows/
│   │   │   ├── README.md
│   │   │   └── loopRows.js
│   │   ├── MRVS Reference Qualifier from Catalog Item Variable/
│   │   │   ├── Catalog Client Script.js
│   │   │   ├── README.md
│   │   │   └── Script Include.js
│   │   ├── MRVS dependent ref qual 1st row/
│   │   │   ├── AccountUtils.js
│   │   │   ├── README.md
│   │   │   └── onLoad.js
│   │   ├── Make OOB Attachment Mandatory/
│   │   │   ├── README.md
│   │   │   └── onChange.js
│   │   ├── Mandatory Attachments with 'n' numbers/
│   │   │   ├── README.md
│   │   │   └── onSubmitClientScript.js
│   │   ├── Multi-User Collaboration/
│   │   │   ├── Readme.md
│   │   │   ├── Script include.JS
│   │   │   ├── client script.JS
│   │   │   ├── widget client controller.JS
│   │   │   └── widget server script.JS
│   │   ├── Normalise and Reset a MRVS based on Variable Changes/
│   │   │   ├── README.md
│   │   │   ├── mrvs_normalise_onchange.js
│   │   │   └── variant_reset_specific_columns.js
│   │   ├── Onsubmit validation/
│   │   │   ├── Readme.md
│   │   │   ├── on submit scriptinclude.JS
│   │   │   └── submit validation client script.js
│   │   ├── Open modal widget in an Onsubmit/
│   │   │   ├── README.md
│   │   │   └── openmodal.js
│   │   ├── PAN Validation/
│   │   │   ├── PAN Validation.js
│   │   │   └── README.md
│   │   ├── Passport Validation/
│   │   │   ├── README.md
│   │   │   └── passportvalidity.js
│   │   ├── Password Validation Script/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Percentage Symbol/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── PopulateDropdown/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Prevent duplicate records on MRVS/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Real time count of letters/
│   │   │   ├── Count letters.js
│   │   │   └── readme.md
│   │   ├── Remove reference icon from portal/
│   │   │   ├── README.md
│   │   │   └── remove-reference-icon-from-portal-onLoad.js
│   │   ├── Restrict Number of rows in Multi Row Variable/
│   │   │   ├── README.md
│   │   │   └── restrict_multi_row.js
│   │   ├── Return Date Validation/
│   │   │   ├── README.md
│   │   │   └── validateReturndate.js
│   │   ├── Reusable GlideAjax Client Script/
│   │   │   ├── DynamicTableQueryUtil.js
│   │   │   ├── Readme.md
│   │   │   └── clientscript.js
│   │   ├── Rounding Money or Price Field/
│   │   │   ├── README.md
│   │   │   ├── catalog_client_script.js
│   │   │   └── catalog_client_script_config.md
│   │   ├── Schedule Request/
│   │   │   ├── Readme.JS
│   │   │   ├── scheduled client script.js
│   │   │   ├── scheduled scriptinclude.JS
│   │   │   └── scheduled_job.JS
│   │   ├── Set User Field Values on Load/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Set and Lock Variable by Group/
│   │   │   ├── README.md
│   │   │   └── set_lock_variable_by_grp.js
│   │   ├── Set fields from URL Parameter 2/
│   │   │   ├── CatalogClientScript.js
│   │   │   ├── KMXOUtils.js
│   │   │   ├── README.md
│   │   │   └── UtilsAjax.js
│   │   ├── Set fields from URL Parameters/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Validate a Credit Card Number/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── catalog Draft/
│   │   │   ├── Readm.md
│   │   │   ├── Script include.JS
│   │   │   └── client script.js
│   │   ├── onCellEdit Catalog Task State Change Restriction/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── previous Request/
│   │   │   ├── Readme.MD
│   │   │   ├── previous request client script.js
│   │   │   └── previous request script include.js
│   │   └── spModal for Sweet Alerts/
│   │       ├── readme.md
│   │       └── spModalSweetAlerts.js
│   ├── Client Scripts/
│   │   ├── Abort action when description is empty/
│   │   │   ├── Code.js
│   │   │   └── ReadMe.md
│   │   ├── Abort direct incident closure without Resolve State/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Add Field Decoration/
│   │   │   ├── Add Field Decoration.js
│   │   │   └── README.md
│   │   ├── Add Image to Field Based on Company/
│   │   │   ├── AddImageToFieldBasedOnCompany.js
│   │   │   ├── README.md
│   │   │   └── SetCompanyScratchPadValue.js
│   │   ├── Adding Placeholder on Resolution Notes/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Auto Update Priority based on Impact and Urgency/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Auto-Populate Planned End Date/
│   │   │   ├── README.md
│   │   │   └── autoPopulatePlannedEndDate.js
│   │   ├── Auto-Populate Short Discription/
│   │   │   ├── Auto populate short description.js
│   │   │   ├── README.md
│   │   │   ├── Readme.md
│   │   │   └── autoPopulateSD.js
│   │   ├── Auto-populate watch_list based on company/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Call SI to recover User data/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Change Label of Field/
│   │   │   ├── Change Label of Field.js
│   │   │   └── README.md
│   │   ├── Change incident Number label color based on priority/
│   │   │   ├── Script.js
│   │   │   └── readme.md
│   │   ├── Check all mandatory fields using mandatoryCheck()/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Client Validation of Attachments by File Type and Count/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Client script using getMessage() function without filling Messages field/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Color-coded Priority field for improved UX/
│   │   │   ├── README.md
│   │   │   └── setColor.js
│   │   ├── Conditional Auto-Routing and Dynamic Mandatory Fields/
│   │   │   ├── Conditional_AutoRouting_Dynamic_Mandatory_Fields.js
│   │   │   └── Readme.md
│   │   ├── Conditional Form Section based on Role/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Control Form Behaviour from Reference Lookup/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Count Assigned To Field/
│   │   │   ├── README.md
│   │   │   └── getAssignedToCount.js
│   │   ├── Date Range Validation (Within 30 Days)/
│   │   │   ├── README.md
│   │   │   └── dateRangeValidation.js
│   │   ├── Detect oldValue newValue and Operation in Glide List Type Fields/
│   │   │   ├── detectOldValuenewValueOperation.js
│   │   │   ├── readme.md
│   │   │   └── watchListCandidatesUtil.js
│   │   ├── Display Custom Field Based on Incident Channel Field and populate with Caller Information/
│   │   │   ├── GlideAjaxCallerInfo.js
│   │   │   ├── README.md
│   │   │   └── clientScriptOnChangeCaller.js
│   │   ├── Display Incident Count of Assigned-To User When Field Changes/
│   │   │   ├── README.md
│   │   │   ├── clientScript.js
│   │   │   └── glideAjaxIncidentCount.js
│   │   ├── Display Section on State/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Display a Live Word Count for Description Field/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Dynamic Field Dependencies with GlideAjax/
│   │   │   ├── README.md
│   │   │   ├── ajax_script_include.js
│   │   │   ├── conditional_field_loader.js
│   │   │   └── dynamic_category_subcategory.js
│   │   ├── Dynamic Location Validation Approach/
│   │   │   ├── Readme.md
│   │   │   ├── User Location Validator.js
│   │   │   └── UserLocationUtils.js
│   │   ├── Dynamic Reference Qualifier with Filtering/
│   │   │   ├── README.md
│   │   │   └── reference_qual_dynamic.js
│   │   ├── Dynamic UI Actions/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Dynamic script to make fields read only/
│   │   │   ├── reame.md
│   │   │   └── script.js
│   │   ├── Dynamically Switch Form View Based on Field Value/
│   │   │   ├── README.md
│   │   │   └── dynamic-form-view-onchange.js
│   │   ├── Enable VIP and Senior VIP Checkboxes and read only/
│   │   │   ├── README.md
│   │   │   └── ScriptToEnableVIP_superVIP users
│   │   ├── End Date can't be before Start Date/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Expanding Info Message/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Field Completion Counter/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Field Placeholder/
│   │   │   ├── README.md
│   │   │   └── fieldplaceholder.js
│   │   ├── Field Validations/
│   │   │   ├── README.md
│   │   │   └── fieldValidation.js
│   │   ├── Form Dirty State Prevention/
│   │   │   ├── README.md
│   │   │   └── form_dirty_state_manager.js
│   │   ├── Get Field Value From List on Client/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Form Elements/
│   │   │   ├── README.MD
│   │   │   └── getFormElements.js
│   │   ├── Get Logged in User Information/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get URL Parameters/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Value from URL Parameter/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Health Scan Prevent Insert Update in Before BRs/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Hide Dependent Choice field if there no dependent choices/
│   │   │   ├── HideDepnedentField.js
│   │   │   ├── NumberOfDependentChoices.js
│   │   │   └── README.md
│   │   ├── Hide Work Notes section/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── How to adjust the Date format within a client script to align with the User Date format/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Incident Count of Selected CI with Clickable Link to Related Incidents/
│   │   │   ├── README.md
│   │   │   ├── clientScriptCiIncident.js
│   │   │   └── glideAjaxIncidentCiCount.js
│   │   ├── Live Character Counter and Validator/
│   │   │   ├── README.md
│   │   │   └── character_counter.js
│   │   ├── MRVS variables validations/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Major Incident Proposal/
│   │   │   ├── Client_Script.js
│   │   │   ├── README.md
│   │   │   └── Script_Include.js
│   │   ├── Make Variable Editor Read Only for Catalog Items containing MRVS/
│   │   │   ├── CheckMRVSDetails.js
│   │   │   ├── MakeVariableSetReadOnly.js
│   │   │   └── README.md
│   │   ├── Make all fields read only/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Make fields read only in specific states/
│   │   │   ├── Make fields read only in specific state.md
│   │   │   └── code.js
│   │   ├── Mandatory Field Highlighter/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── MultiSelect in Portal/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── On load Switch-Case Testing/
│   │   │   ├── README.md
│   │   │   └── Switch-Case code snippet.js
│   │   ├── Only number validation for input/
│   │   │   ├── OnChange.js
│   │   │   └── README.md
│   │   ├── Open Record in Agne Workspace Tab/
│   │   │   ├── README.md
│   │   │   └── openrecawtab.js
│   │   ├── Populate Jelly Slushbucket with Values/
│   │   │   ├── ClientScript.js
│   │   │   └── README.md
│   │   ├── Prevent Rejection Without Comments/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Price field restriction to one currency/
│   │   │   ├── README.md
│   │   │   └── price_field_restriction_to_one_currency.js
│   │   ├── Redact Sensitive Information/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Reinstate Error status/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Remove Option from Choice List/
│   │   │   ├── README.md
│   │   │   └── Remove Options from Choice List.js
│   │   ├── Require comment onPriority change/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Restrict Creation of P1, P2 Incidents/
│   │   │   ├── README.md
│   │   │   └── Restrict_Creation_Of_P1_P2_Incidents.js
│   │   ├── Restrict Fields on Template/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Set Severity, state & assigned to/
│   │   │   ├── README.md
│   │   │   ├── script.js
│   │   │   └── script_include.js
│   │   ├── Set Urgency to High onChange of caller field/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Set field style like font and background/
│   │   │   ├── OnLoad client script.js
│   │   │   └── README.md
│   │   ├── Show Current Domain/
│   │   │   ├── DomainCheckUtil.js
│   │   │   ├── Readme.md
│   │   │   └── Show Current Domain.js
│   │   ├── Show Message On Both Form and List/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Show field if x things are checked/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Smart-Field-Suggestions/
│   │   │   ├── README.md
│   │   │   └── Smart Field Suggestions Based on Keyword.js
│   │   ├── State changes to On Hold then worknotes should be mandatory/
│   │   │   ├── README.md
│   │   │   └── worknotes.js
│   │   ├── Sync Ajax with no getXMLWait/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Toggle Annotation On Forms With Script/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Toggle form section visibility/
│   │   │   ├── README.md
│   │   │   └── toggleFormSection.js
│   │   ├── Translate Message/
│   │   │   ├── README.md
│   │   │   └── getMessage.js
│   │   ├── Update Category from Short Description Keywords/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Use case of addOption() and removeOption()/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Validate Interaction record for FCR(First Call Resolution)/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Validate Short Description/
│   │   │   ├── README.md
│   │   │   ├── ShortDescriptionLength.js
│   │   │   ├── validShortDescription.js
│   │   │   └── validateSpecialChar.js
│   │   ├── Validate date is in future without GlideAjax/
│   │   │   ├── OnChange Client Script.js
│   │   │   └── README.md
│   │   ├── Verify if e-mail already exists with Ajax call/
│   │   │   ├── README.md
│   │   │   ├── clientScript.js
│   │   │   └── scriptInclude.js
│   │   ├── Verify whether a date falls within a hour range/
│   │   │   ├── README.md
│   │   │   └── verifyWhetherADateFallsWithinAHourRange.js
│   │   ├── Whitespace Validation/
│   │   │   ├── README.md
│   │   │   └── whitespaceValidation.js
│   │   ├── Zurich - Upgraded info messages/
│   │   │   ├── README.md
│   │   │   └── infoMessages.js
│   │   ├── field-character-counter/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── g_form console access in workspace/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── onfocus and onblur/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── state-edit-for-grpmem/
│   │   │   ├── README.md
│   │   │   └── grpmemstateedit.js
│   │   └── validate phone number/
│   │       ├── README.md
│   │       ├── Readme.md
│   │       ├── validate phone number.js
│   │       └── validate_phone_format_(123)_456-7890_no_regex.js.js
│   ├── UI Actions/
│   │   ├── Add Loggedin user as Incident assigned to/
│   │   │   ├── ReadMe.md
│   │   │   └── code.js
│   │   ├── Add Show Workflow Related link/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Add collapsible element in knowledge article/
│   │   │   ├── README.md
│   │   │   ├── UI_Action.js
│   │   │   └── add_collapsible.js
│   │   ├── Call Subflow/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── CallingPopUpBoxInListView/
│   │   │   ├── README.md
│   │   │   └── calling_pop_up_box_in_list_view.js
│   │   ├── Cancel Flow Executions/
│   │   │   ├── README.md
│   │   │   └── cancelFlow.js
│   │   ├── Cancel Incident/
│   │   │   ├── README.md
│   │   │   ├── SETUP.md
│   │   │   └── script.js
│   │   ├── Clone incident on Agent Workspace/
│   │   │   ├── README.md
│   │   │   ├── clone_incident.js
│   │   │   └── workspace_client_script.js
│   │   ├── Close Related HR cases & HR tasks/
│   │   │   ├── README.md
│   │   │   ├── Script Include.js
│   │   │   └── UI Action script.js
│   │   ├── Close child incident/
│   │   │   ├── README.md
│   │   │   ├── clientScript.js
│   │   │   └── serverScript.js
│   │   ├── CloseChildCases/
│   │   │   ├── CloseChildCases.js
│   │   │   └── README.md
│   │   ├── Convert Request to Incident/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Copy Bulk SysIDs/
│   │   │   ├── Copy Bulk Sysids.js
│   │   │   └── README.md
│   │   ├── Copy Variable Set/
│   │   │   ├── README.md
│   │   │   └── scripts.js
│   │   ├── Copy incident details and create a child incident/
│   │   │   ├── README.md
│   │   │   └── ui_action_script.js
│   │   ├── Create Incident from Record - Open in both Platform and Workspace/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create New blank incident from the incident/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create Problem Record from any Table/
│   │   │   ├── CreateProblemRecord.js
│   │   │   └── README.md
│   │   ├── Create Problem Task from the Problem/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create Update Set on DEV/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create incident task and relate to incident/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create story/
│   │   │   ├── Create story from other task.js
│   │   │   └── README.md
│   │   ├── Display a 2-choice confirmation dialog/
│   │   │   ├── README.md
│   │   │   └── choice_dialog.js
│   │   ├── Email Watermark Utility/
│   │   │   ├── GenericEmailUtility.js
│   │   │   ├── README.md
│   │   │   └── Send Email UI Action.js
│   │   ├── Expire Timer in Flows/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Field Review of User Record when on form using action button/
│   │   │   ├── README.md
│   │   │   └── actionButtonScript.js
│   │   ├── Force to Update Set/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Generate QR for Assets/
│   │   │   ├── ReadMe.md
│   │   │   └── ui-action-script.js
│   │   ├── Generate a PDF/
│   │   │   ├── README.md
│   │   │   └── serverscript.js
│   │   ├── GlideModalForm - Open New Record and Pass Query/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── GlideModalUiPagePopUp/
│   │   │   ├── README.md
│   │   │   └── glide_modal_ui_pop_up.js
│   │   ├── Go to Agent Workspace Home Page/
│   │   │   ├── README.md
│   │   │   └── ui_action_script.js
│   │   ├── Group Membership Admin Util/
│   │   │   ├── README.md
│   │   │   ├── addMeUIActionScript.js
│   │   │   └── removeMeUIActionScript.js
│   │   ├── Group dependency/
│   │   │   ├── README.md
│   │   │   ├── uiaction.js
│   │   │   └── uipage.js
│   │   ├── Kill flow timers/
│   │   │   ├── README.md
│   │   │   ├── UI action.js
│   │   │   └── UI page for ui action.js
│   │   ├── Knowledge Link Validator/
│   │   │   ├── Readme.md
│   │   │   ├── uiaction.js
│   │   │   └── uipage.js
│   │   ├── Mark Records Inactive - List Action/
│   │   │   ├── README.md
│   │   │   ├── listAction.js
│   │   │   └── scriptInclude.js
│   │   ├── Open Email Client using UI Action/
│   │   │   ├── README.md
│   │   │   └── open_email_client.js
│   │   ├── Open LIST UI Action/
│   │   │   ├── README.md
│   │   │   └── UIActionscript.js
│   │   ├── Open Record in Alternate Instance/
│   │   │   ├── README.md
│   │   │   ├── RESTMessageV2/
│   │   │   │   ├── sys_rest_message_config.md
│   │   │   │   └── sys_rest_message_fn_config.md
│   │   │   ├── Script Includes/
│   │   │   │   ├── README.md
│   │   │   │   ├── sys_script_include.js
│   │   │   │   └── sys_script_include_config.md
│   │   │   ├── Scripted REST API/
│   │   │   │   ├── sys_ws_definition_config.md
│   │   │   │   └── sys_ws_operation/
│   │   │   │       ├── sys_ws_operation.js
│   │   │   │       └── sys_ws_operation_config.md
│   │   │   └── UI Action/
│   │   │       ├── sys_ui_action.js
│   │   │       └── sys_ui_action_config.md
│   │   ├── Open Record producer from Form Button In Configurable workspace/
│   │   │   ├── OpenItem.js
│   │   │   ├── ParseUrl.js
│   │   │   └── README.md
│   │   ├── Open a new blank form/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Open in Service Operations Workspace/
│   │   │   ├── README.md
│   │   │   └── ui_action_script.js
│   │   ├── Populate Due Date based on Priority/
│   │   │   ├── Readme.md
│   │   │   ├── ScriptInclude.js
│   │   │   └── UI Action.js
│   │   ├── Preview context record during approval/
│   │   │   ├── README.md
│   │   │   ├── TestScriptInclude.js
│   │   │   └── UI_Action.js
│   │   ├── Printer Friendly Version/
│   │   │   ├── README.md
│   │   │   └── printer_friendly_verison.js
│   │   ├── Publish a Retired Knowledge Article again/
│   │   │   ├── README.md
│   │   │   └── publishretiredkb.js
│   │   ├── Select Random User From Group/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Send notification if the incident remains unassigned/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Send notification to the assigned user/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Set Incident Priority Critical/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Show Today Emails Logs/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Smart Assign to available member/
│   │   │   ├── README.md
│   │   │   └── smartAssigntoAvailablemember.js
│   │   ├── Test and Debug Scheduled Scripts/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Try Catalog item in Portal view/
│   │   │   ├── README.md
│   │   │   └── TryItInSP.js
│   │   ├── UI Action to Mark Incident as Escalated/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Variable Ownership/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   └── View in Portal Page/
│   │       ├── README.md
│   │       └── View in Portal Page.js
│   ├── UI Macros/
│   │   ├── Copy To Clipboard/
│   │   │   ├── README.md
│   │   │   └── copy_field_to_clipboard.xml
│   │   ├── FormBackground/
│   │   │   ├── form_background.xml
│   │   │   └── readme.md
│   │   ├── JSON Formatter and Viewer/
│   │   │   ├── README.md
│   │   │   └── json_formatter.xml
│   │   ├── Purchase Order Approval Summarizer/
│   │   │   ├── README.md
│   │   │   └── approval_summarizer_proc_po.xml
│   │   ├── Show Open Incident of Caller/
│   │   │   ├── Readme.md
│   │   │   └── macro.js
│   │   └── Variable Copy Context Options/
│   │       ├── README.md
│   │       └── element context.xml
│   ├── UI Pages/
│   │   ├── Add Multiple Items to Order Guide/
│   │   │   ├── README.md
│   │   │   ├── Script Include.js
│   │   │   ├── UI Action.js
│   │   │   └── UI Page.js
│   │   ├── BulkUpdate Worknotes/
│   │   │   ├── Readme.md
│   │   │   ├── UI Action.js
│   │   │   ├── UI Page_ClientScript.js
│   │   │   ├── UI Page_HTML.html
│   │   │   └── UI Page_ProcessingScript.js
│   │   ├── CMDB CI Management UI page/
│   │   │   ├── ci_client_script.js
│   │   │   ├── ci_lifecycle_ui_page.xml
│   │   │   └── ci_script_include.js
│   │   ├── Custom Alert using UI Page/
│   │   │   ├── README.md
│   │   │   ├── client script.js
│   │   │   └── custom alert.js
│   │   ├── Dynamic program status overview/
│   │   │   ├── Program details dynamic content block.xml
│   │   │   ├── README.md
│   │   │   ├── program_list.html
│   │   │   └── program_list.js
│   │   ├── EDM DocUnifiedSearch/
│   │   │   ├── EDMSearch.js
│   │   │   ├── README.md
│   │   │   ├── client script.js
│   │   │   └── code.html
│   │   ├── Edit Last WorkNotes/
│   │   │   ├── README.md
│   │   │   ├── UIaction.js
│   │   │   ├── scriptinclude.js
│   │   │   ├── uipage_client.html
│   │   │   └── uipage_clientcode.js
│   │   ├── Export UI pages to word docx/
│   │   │   ├── Export to word.js
│   │   │   └── README.md
│   │   ├── Fetch Table(Incident) fields in UI Page/
│   │   │   ├── Fetch incident fields.js
│   │   │   └── README.md
│   │   ├── Populate Glide List field/
│   │   │   ├── README.md
│   │   │   ├── populateGlideListClientScript.js
│   │   │   └── populateGlideListHTML.js
│   │   ├── Progress Loader/
│   │   │   ├── REAMDE.md
│   │   │   ├── example_use_GlideModal.js
│   │   │   └── loaderHTML.html
│   │   ├── Real time log watcher/
│   │   │   ├── README.md
│   │   │   ├── TestScriptInclude.js
│   │   │   └── log_watcher.js
│   │   ├── Resolve Incident UI Page/
│   │   │   ├── README.md
│   │   │   ├── UI_action.js
│   │   │   ├── scriptinclude.js
│   │   │   ├── ui_page_client.js
│   │   │   └── ui_page_html.html
│   │   ├── Send Email On Form Incident/
│   │   │   ├── EmailScript.js
│   │   │   ├── Notification.js
│   │   │   ├── Readme.md
│   │   │   ├── UIAction.js
│   │   │   ├── UIPage_Html.html
│   │   │   └── UIPage_ProcessingScript.js
│   │   ├── Share reports with users and groups/
│   │   │   ├── README.md
│   │   │   ├── UI Page/
│   │   │   │   ├── ui_page.html
│   │   │   │   ├── ui_page_client_script.js
│   │   │   │   └── ui_page_processing_script.js
│   │   │   └── ui_action_script.js
│   │   └── UI Page Auto Populate Assigned to based on Assignment group/
│   │       ├── README.md
│   │       ├── client_script.js
│   │       ├── jelly_script.xml
│   │       └── script_include.js
│   ├── UI Scripts/
│   │   ├── Custom Change Schedule/
│   │   │   ├── README.md
│   │   │   ├── change_soc.js
│   │   │   ├── config.js
│   │   │   └── data.js
│   │   ├── Disable Copy Paste For Portal/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Display number of created records/
│   │   │   ├── README.md
│   │   │   ├── onLoad.js
│   │   │   └── ui_script.js
│   │   ├── Make OOB Attachment Mandatory/
│   │   │   ├── README.md
│   │   │   └── setAttachmentMandatory.js
│   │   ├── Observe MRVS Events/
│   │   │   ├── MRVSUtils.js
│   │   │   └── README.md
│   │   ├── PersistentAnnouncementBanner/
│   │   │   ├── README.md
│   │   │   └── annoucement_banner.js
│   │   ├── Prevent right click on portals/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Restrict URL Hack using UI script/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   └── User acknowledgement Using UI script and user preferences/
│   │       ├── UIpage.js
│   │       ├── UIscript.js
│   │       └── readme.md
│   ├── UX Client Script Include/
│   │   ├── Access global object from page scripts/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Record Operation Utilities/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   └── Reusable Debounce/
│   │       ├── DebounceUtil.js
│   │       └── README.md
│   ├── UX Client Scripts/
│   │   ├── debug-event/
│   │   │   ├── README.md
│   │   │   └── debug-event.js
│   │   └── debug-state/
│   │       ├── README.md
│   │       └── debug-state.js
│   └── UX Data Broker Transform/
│       ├── FetchSysProperty/
│       │   ├── README.md
│       │   └── sysPropdataBroker.js
│       ├── create-update-user-preference/
│       │   ├── README.md
│       │   └── create-update-user-preference.js
│       └── starter-template/
│           ├── README.md
│           └── template.js
├── Core ServiceNow APIs/
│   ├── GlideAggregate/
│   │   ├── Count All Open Incidents Per Priority/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Count Inactive Users with Active incidents/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Count incidents based on category/
│   │   │   ├── Count incidents based on category.js
│   │   │   └── README.md
│   │   ├── Count open Incidents per Priority and State using GlideAggregate/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create Problem based on incident volume/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Find Oldest Open Incidents per Group/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Incident Count by Priority/
│   │   │   ├── README.md
│   │   │   └── get-incident-count-by-priority.js
│   │   ├── Get top 5 CIs with most number of Open Incidents/
│   │   │   ├── README.md
│   │   │   └── getCIwithmostActiveInc.js
│   │   ├── Group Count/
│   │   │   ├── GlideQuery.js
│   │   │   ├── GlideQuery_readme.md
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Grouping by three columns/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Improve incident handling/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Incident Analysis and Resolution Calculation using Glideaggregate/
│   │   │   ├── Incident_analysis_Resolution_Calculation_GlideAggregate.js
│   │   │   └── README.md
│   │   ├── Incident resolution percentile by assignment group/
│   │   │   ├── PercentileMetrics.js
│   │   │   ├── README.md
│   │   │   └── example_background_usage.js
│   │   ├── LicensedUserCount/
│   │   │   ├── licensed_user_count_by_role.js
│   │   │   └── readme.md
│   │   ├── List of Child Incident of All Incidents/
│   │   │   ├── README.md
│   │   │   └── allChildIncidents.js
│   │   ├── List of Managers in User Table/
│   │   │   ├── ListOfManagers.js
│   │   │   └── README.md
│   │   ├── List the incident priority count under each category/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── SLA Compliance Ratio by Assignment Group/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── SLA Count by Assignment Group/
│   │   │   ├── README.md
│   │   │   └── SLA Count by Assignment Group.js
│   │   ├── ScheduleJob by ExectionTime_perDay/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── SimpleGlideAggregate/
│   │   │   ├── Readme.md
│   │   │   └── SimpleGlideAggregate.js
│   │   ├── Tiered grouping of an integer column/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Top 5 Users with Most Incidents/
│   │   │   ├── README.md
│   │   │   └── top-five-users-with-most-incidents.js
│   │   ├── Using addHaving/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── addTrend/
│   │   │   ├── README.md
│   │   │   └── addTrend.js
│   │   ├── getCountAfterDate/
│   │   │   ├── README.md
│   │   │   └── getCountAfterDate.js
│   │   └── getTotal of aggregate value/
│   │       ├── README.md
│   │       └── getTotal.js
│   ├── GlideAjax/
│   │   ├── AjaxAsyncOnSubmit/
│   │   │   ├── README.md
│   │   │   ├── ajaxasynconsubmitclient.js
│   │   │   └── ajaxasynconsubmitserver.js
│   │   ├── Check Weekend - Client Side/
│   │   │   ├── README.md
│   │   │   └── WeekendChecker.js
│   │   ├── EfficientGlideRecord (Client-side)/
│   │   │   ├── ClientGlideRecordAJAX.js
│   │   │   ├── EfficientGlideRecord (minified) UI Script.js
│   │   │   ├── EfficientGlideRecord UI Script.js
│   │   │   ├── Example usage (client-side code).js
│   │   │   └── README.md
│   │   ├── Fetch Multiple Values in GlideAjax without JSON/
│   │   │   ├── ClientScript.js
│   │   │   ├── README.md
│   │   │   └── TestScriptInclude.js
│   │   ├── Get Field Values/
│   │   │   ├── GetFieldValuesAjax.js
│   │   │   └── README.md
│   │   ├── Get choices from Decision Table/
│   │   │   ├── GetChoicesFromDT.js
│   │   │   ├── README.md
│   │   │   └── addChoicesClient.js
│   │   ├── GlideAjax Example Template/
│   │   │   ├── README.md
│   │   │   ├── code.js
│   │   │   └── example from community.js
│   │   ├── Return Asset(s) for User/
│   │   │   ├── FindUserAsset.js
│   │   │   └── README.md
│   │   ├── ReturnMultipleProperties/
│   │   │   ├── README.md
│   │   │   └── ReturnMultipleProperties.js
│   │   ├── Reusable GlideAjax/
│   │   │   ├── README.md
│   │   │   ├── clientCallableScriptInclude.js
│   │   │   └── clientSideGlideAjax.js
│   │   └── Reusable glideajax table query/
│   │       ├── README.md
│   │       └── getTableColumnsClientSide.js
│   ├── GlideDate/
│   │   └── Convert text date to GlideDate Format/
│   │       ├── Extract and Convert Date in a Text or String to GlideDate Format.js
│   │       └── README.md
│   ├── GlideDateTime/
│   │   ├── AddDays/
│   │   │   ├── README.md
│   │   │   └── addDays.js
│   │   ├── Business time utilities (add, diff, next open, in schedule)/
│   │   │   ├── BusinessTimeUtils.js
│   │   │   ├── README.md
│   │   │   └── example_background_usage.js
│   │   ├── Calculate Due date using user defined schedules/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check if today is weekend/
│   │   │   ├── Check if today is weekend.js
│   │   │   └── README.md
│   │   ├── Convert UTC Time To Local Time/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Convert date format/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── ConvertTicksToGlideDateTime/
│   │   │   ├── ConvertTicksToGlideDateTime.js
│   │   │   └── README.md
│   │   ├── Current Date with Fixed Time/
│   │   │   ├── CurrentDateFixedTime.js
│   │   │   └── README.md
│   │   ├── Due date generation/
│   │   │   ├── README.md
│   │   │   └── duedate_generation.js
│   │   ├── Find Incidents Older Than X Days/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Get Date Difference/
│   │   │   ├── GetDiffernceBtnDates.js
│   │   │   └── README.md
│   │   ├── Get Next Monday Date/
│   │   │   ├── GetNextMondayDate.js
│   │   │   └── README.md
│   │   ├── Get last day of a month/
│   │   │   ├── README.md
│   │   │   └── getLastDayOfMonth.js
│   │   ├── Set time zone and date format to output string dates/
│   │   │   ├── README.md
│   │   │   └── output_string_dates.js
│   │   ├── Start, End, and Duration Updates/
│   │   │   ├── README.md
│   │   │   └── start_end_duration_updates.js
│   │   └── Use timezone in Scoped App/
│   │       ├── README.md
│   │       └── script.js
│   ├── GlideElement/
│   │   ├── Display available choices/
│   │   │   ├── DisplayAvailableChoices.js
│   │   │   └── README.md
│   │   ├── Display base table for each field/
│   │   │   ├── README.md
│   │   │   └── displayBaseTablesForEachField.js
│   │   ├── Smart Field Validation and Dependent Field Derivation Using getError() and setError()/
│   │   │   ├── README.md
│   │   │   ├── br_derive_dependent_fields.js
│   │   │   └── br_validate_short_description.js
│   │   └── getDependent/
│   │       ├── README.md
│   │       └── glideelement.js
│   ├── GlideFilter/
│   │   └── checkRecord/
│   │       ├── README.md
│   │       └── example.js
│   ├── GlideHTTPRequest/
│   │   └── Retrieve table records via GlideHTTPRequest/
│   │       ├── README.md
│   │       └── glidehttprequest.js
│   ├── GlideJsonPath/
│   │   ├── Basic-Example/
│   │   │   ├── README.md
│   │   │   └── examples.js
│   │   └── Create Critical P1 Incident from Alert using GlideJsonPath/
│   │       ├── README.md
│   │       └── script.js
│   ├── GlideModal/
│   │   ├── Add HTML Input Field in GlideModal Window/
│   │   │   ├── README.md
│   │   │   ├── UI Action
│   │   │   └── UI page
│   │   ├── Confirm Message/
│   │   │   ├── README.md
│   │   │   └── glide_confirm.js
│   │   └── Information Message/
│   │       ├── README.md
│   │       ├── glide_info.js
│   │       └── glide_warn.js
│   ├── GlideQuery/
│   │   ├── Basic Wrappers/
│   │   │   ├── README.md
│   │   │   ├── delete_records.js
│   │   │   ├── get_records.js
│   │   │   ├── insert_records.js
│   │   │   └── update_records.js
│   │   ├── Conditional Field Selection/
│   │   │   ├── README.md
│   │   │   └── conditional_field_selection.js
│   │   ├── Field Default/
│   │   │   ├── GlideQueryFieldDefault.js
│   │   │   └── README.md
│   │   ├── FlatMap to Nest New Queries/
│   │   │   ├── README.md
│   │   │   └── getIncidentInfoWithFlatMap.js
│   │   ├── Get Delegates/
│   │   │   ├── GlideQueryGetDelegates.js
│   │   │   └── README.md
│   │   ├── Get User's Roles from User Name/
│   │   │   ├── README.md
│   │   │   └── getUserRoles.js
│   │   ├── Nested WHERE orWHERE GlideQueries/
│   │   │   ├── README.md
│   │   │   └── nestedWhereQueries.js
│   │   └── Remote Table/
│   │       ├── README.md
│   │       └── remotetabldef.js
│   ├── GlideRecord/
│   │   ├── ACL enforcement using GlideRecord/
│   │   │   ├── README.md
│   │   │   └── glideRecordSecure.js
│   │   ├── Add n number of users to n number of groups using server scripts/
│   │   │   ├── AddUserstoGroups.js
│   │   │   └── README.md
│   │   ├── Archiving Old Incident Records to Improve Performance/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── CheckDuplicate-Server/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Choose Window for better performance/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Compare_2_records/
│   │   │   ├── README.md
│   │   │   └── compareRecords.js
│   │   ├── Conditional Batch Update/
│   │   │   ├── README.md
│   │   │   └── batchUpdate.js
│   │   ├── Count Records By Column/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Display list of records based on Users Location/
│   │   │   ├── README.md
│   │   │   └── listOfRecordsBasedOnLocation.js
│   │   ├── Fetch active incidents assigned to a specific group/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Fetch groups that have no members in them/
│   │   │   ├── README.md
│   │   │   └── fetchEmptyGroups.js
│   │   ├── Field Level Audit/
│   │   │   ├── README.md
│   │   │   └── fieldLevelAudit.js
│   │   ├── Find Date Overlapping/
│   │   │   ├── README.md
│   │   │   └── isSimilarDates.js
│   │   ├── Find No Of Days/
│   │   │   ├── README.md
│   │   │   └── findNoOfDays.js
│   │   ├── Get All Groups without Manager/
│   │   │   ├── README.md
│   │   │   └── getGroupsWithoutManager.js
│   │   ├── Get Contains role of a role/
│   │   │   ├── Get contains role of a role.js
│   │   │   └── README.md
│   │   ├── Get Record Fields in JSON/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Reference Record/
│   │   │   ├── README.md
│   │   │   ├── get_assignment_group_from_incident.js
│   │   │   └── get_requested_by_user.js
│   │   ├── Get Variables from RITM/
│   │   │   ├── README.md
│   │   │   └── getVariablesJSON.js
│   │   ├── Get all task records with at least on active child task/
│   │   │   ├── Get all task records with at least on active child task.md
│   │   │   └── code.js
│   │   ├── Get all user's group based on username/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get all users whose email is empty/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get field from GlideRecord/
│   │   │   ├── README.md
│   │   │   └── getField.js
│   │   ├── Get link for the Record/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get-task-containing-sensitive-data/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Gets the display value according to the specified language/
│   │   │   ├── README.md
│   │   │   └── specified_language.js
│   │   ├── GlideRecord to Object/
│   │   │   ├── README.md
│   │   │   └── _grToObject.js
│   │   ├── GlideRecord with Performance Enhancement Condtions/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── LEFT Join/
│   │   │   ├── README.md
│   │   │   ├── example.js
│   │   │   └── script.js
│   │   ├── List of Child Incidents/
│   │   │   ├── README.md
│   │   │   └── listofchildIncident.js
│   │   ├── Multi Row Variable Set(MRVS)/
│   │   │   ├── InsertMRVSRecords.js
│   │   │   └── README.md
│   │   ├── Performance Optimization Techniques/
│   │   │   ├── README.md
│   │   │   ├── indexed_field_queries.js
│   │   │   ├── optimized_batch_processing.js
│   │   │   └── query_performance_comparison.js
│   │   ├── Populate the type of device on any record/
│   │   │   ├── README.md
│   │   │   └── typeOfDevice.js
│   │   ├── Record Activity Collector/
│   │   │   ├── ActivityCollector.js
│   │   │   └── README.md
│   │   ├── Safe Bulk Delete/
│   │   │   ├── README.md
│   │   │   └── safeDelete.js
│   │   ├── Set Template/
│   │   │   ├── README.md
│   │   │   └── setTemplate.js
│   │   ├── Unique Record/
│   │   │   ├── README.md
│   │   │   └── uniquerecord.js
│   │   ├── UpdateMultiple/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Watch_List_functions/
│   │   │   ├── README.md
│   │   │   └── removeSpecificUser.js
│   │   ├── comments on gr.update/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── findDuplicate/
│   │   │   ├── GlideAggregateScript.js
│   │   │   └── README.md
│   │   ├── getEncodedQuery/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   └── isValidGlideRecord/
│   │       ├── README.md
│   │       └── isValidGlideRecord.js
│   ├── GlideSystem/
│   │   ├── Impersonate/
│   │   │   ├── README.md
│   │   │   └── impersonate.js
│   │   ├── Session/
│   │   │   ├── README.md
│   │   │   └── session.js
│   │   ├── Table/
│   │   │   ├── README.md
│   │   │   ├── tableExists.js
│   │   │   └── truncateTable.js
│   │   ├── Trigger Event/
│   │   │   ├── README.md
│   │   │   ├── eventQueue.js
│   │   │   └── eventQueueScheduled.js
│   │   ├── User/
│   │   │   ├── README.md
│   │   │   └── userID.js
│   │   ├── User Display Name/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── date-time/
│   │   │   ├── README.md
│   │   │   ├── beginningOfLastMonth.js
│   │   │   ├── minutesAgoEnd.js
│   │   │   ├── minutesAgoStart.js
│   │   │   ├── monthsAgo.js
│   │   │   ├── monthsAgoEnd.js
│   │   │   ├── monthsAgoStart.js
│   │   │   ├── quartersAgo.js
│   │   │   ├── quartersAgoEnd.js
│   │   │   ├── quartersAgoStart.js
│   │   │   ├── setDisplayValueInternalWithAlternates.js
│   │   │   ├── yearsAgo.js
│   │   │   └── yesterday.js
│   │   ├── hasRoleExactly/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   └── workflowFlush/
│   │       ├── README.md
│   │       └── workflowFlush.js
│   └── GlideTableDescriptor/
│       └── getFirstTableName()/
│           ├── GlideTableDescriptor.js
│           └── README.md
├── Integration/
│   ├── Attachments/
│   │   ├── Attachment to Base64/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Attachment to base64 in scope/
│   │   │   ├── README.md
│   │   │   └── attachmentToBase64Scope.js
│   │   ├── Base 64 to Attachment/
│   │   │   ├── README.md
│   │   │   └── base64toattachment.js
│   │   ├── CSVParser/
│   │   │   ├── README.md
│   │   │   ├── csvparser.js
│   │   │   └── script.js
│   │   ├── Calculate attachment hash code/
│   │   │   ├── README.md
│   │   │   └── calculateHash.js
│   │   ├── Convert KnowledgePage to PDF/
│   │   │   ├── Convert_KnowledgePage_to_PDF.js
│   │   │   └── README.md
│   │   ├── Create Attachments/
│   │   │   ├── Create attachment via script.js
│   │   │   └── README.md
│   │   ├── Delete RITM Attachment/
│   │   │   ├── README.md
│   │   │   └── deleteattachment.js
│   │   ├── ExportAttachmentsToMidServer/
│   │   │   ├── README.md
│   │   │   └── exportattachmentstomid.js
│   │   ├── ExportRecordsAnyFormat/
│   │   │   ├── README.md
│   │   │   └── exportRecords.js
│   │   ├── Send Attachment to MID Server/
│   │   │   ├── README.md
│   │   │   └── Send Attachment to MID Server.js
│   │   ├── Show RITM has Attachments/
│   │   │   ├── README.md
│   │   │   ├── ShowRITMhasAttachment_BR.js
│   │   │   └── ShowRITMhasAttachment_CS.js
│   │   └── attachmentToXMLParse/
│   │       ├── README.md
│   │       └── code.js
│   ├── AzureAD Integration/
│   │   └── Dynamically create reference records/
│   │       ├── Load_cmn_location.js
│   │       └── README.md
│   ├── Data Export to ML Pipeline/
│   │   └── Export Data for ML Training/
│   │       ├── README.md
│   │       ├── data_export_script_include.js
│   │       └── export_data_rest_api.js
│   ├── GraphQL Integration API/
│   │   └── Incident GraphQL resolvers/
│   │       ├── CI Resolver.js
│   │       ├── GraphQL schema.js
│   │       ├── Incident Resolver.js
│   │       ├── README.md
│   │       └── User Resolver.js
│   ├── ITSM/
│   │   └── Bulk task_ci REST API/
│   │       ├── README.md
│   │       └── liveCItoTAsk.js
│   ├── Import Set API/
│   │   └── Attachment Handler/
│   │       ├── README.md
│   │       ├── attachmentParser.js
│   │       └── attachmentParserUtil.js
│   ├── Import Sets/
│   │   ├── Import sets overview/
│   │   │   ├── ModelManufacture.README.md
│   │   │   ├── ModelManufacture.js
│   │   │   ├── README.md
│   │   │   ├── TriggerDataSource.README.md
│   │   │   └── TriggerDataSource.js
│   │   └── debug/
│   │       ├── README.md
│   │       └── debugImportSet.js
│   ├── Import Sets Debug/
│   │   └── Debug import set payloads/
│   │       ├── README.md
│   │       └── debugImportSet.js
│   ├── MIDServer/
│   │   └── API Class Examples/
│   │       ├── README.md
│   │       └── scripts.js
│   ├── Mail Scripts/
│   │   ├── Add Checklist/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Add HTML Table for Requested Item Variables/
│   │   │   ├── README.md
│   │   │   └── requested_items_detail.js
│   │   ├── Add Users in Watchlist to CC/
│   │   │   ├── Add Users in Watchlist to CC
│   │   │   └── README.md
│   │   ├── Add a link which opens ticket in Service Portal/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Call Script Include in Notification Mail Script/
│   │   │   ├── README.md
│   │   │   └── call_script_include.js
│   │   ├── Call UI Message or System Property in Notification Mail Script/
│   │   │   ├── README.md
│   │   │   └── call_UIMessage_or_sysProperty.js
│   │   ├── Configurer Approve Reject Buttons Using Email Scripts/
│   │   │   ├── Email Script.js
│   │   │   └── README.md
│   │   ├── Convert DateTime to Date/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Exclude DateTime details from Comments/
│   │   │   ├── README.md
│   │   │   └── commentsWithoutDateTime.js
│   │   ├── HTML Table Creation from ServiceNow Table/
│   │   │   ├── MailScript.js
│   │   │   └── README.md
│   │   ├── Open Survey In Portal/
│   │   │   ├── README.md
│   │   │   └── open_survey.js
│   │   ├── Print variables to mail/
│   │   │   ├── README.md
│   │   │   └── printVarsToMail.js
│   │   ├── PrintRecordDetailsinEmailBody/
│   │   │   ├── README.md
│   │   │   └── print_record_details_to_body.js
│   │   ├── RITM Reject Reason/
│   │   │   ├── README.md
│   │   │   └── reject_reason_new.js
│   │   ├── Redact PII from outbound email body/
│   │   │   ├── README.md
│   │   │   └── mail_redact_pii.js
│   │   └── cc all group members/
│   │       ├── README.md
│   │       └── cc all group members.js
│   ├── RESTMessageV2/
│   │   ├── API for Automatic Group creation/
│   │   │   ├── Automate Group Creation.js
│   │   │   └── README.md
│   │   ├── Aadhaar Verification/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   ├── Auth2 client credentials token cache with auto-refresh/
│   │   │   ├── OAuthClientCredsHelper.js
│   │   │   ├── README.md
│   │   │   └── example_background_usage.js
│   │   ├── AzureDevOps/
│   │   │   ├── README.md
│   │   │   └── azure.js
│   │   ├── Currency Conversion - Using CurrencyFreaks API/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── DynamicOutboundEnpoints/
│   │   │   ├── README.md
│   │   │   └── scriptinclude.js
│   │   ├── External ML Model Integration/
│   │   │   └── Call ML Prediction API/
│   │   │       ├── README.md
│   │   │       └── ml_prediction_script_include.js
│   │   ├── GET with backoff, telemetry, and simple pagination/
│   │   │   ├── README.md
│   │   │   ├── RestGetWithBackoff.js
│   │   │   └── example_background_usage.js
│   │   ├── Google-Chat/
│   │   │   ├── README.md
│   │   │   └── sendgchatmessage.js
│   │   ├── Integration Between 2 Instance/
│   │   │   ├── IntegrationBetweenTwoInstancesWithReturnoftheCreatedRecordNumber.js
│   │   │   └── README.md
│   │   ├── Jira/
│   │   │   ├── README.md
│   │   │   └── createJiraTask.js
│   │   ├── Reusable RESTMessageV2 retry pattern/
│   │   │   ├── README.md
│   │   │   └── ReusableRESTMesaageV2Retry.js
│   │   ├── Smart Incident Categorizer AI/
│   │   │   ├── README.md
│   │   │   └── smart-incident.js
│   │   ├── UPS Tracking/
│   │   │   ├── README.md
│   │   │   └── trackUPS.js
│   │   ├── Web Scraping REST Message/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   └── youtubeclient/
│   │       ├── README.md
│   │       └── youtubeclient.js
│   ├── Rest Integration Send Attachment Payload/
│   │   └── Send attachment payload via REST/
│   │       ├── DataLoaderFromIntuneAPI.js
│   │       ├── DataloaderFromIntuneAPI_README.md
│   │       ├── README.md
│   │       └── attachment_payload_script.js
│   ├── Scripted REST Api/
│   │   ├── Approval APIs/
│   │   │   ├── ApprovalRestResource.js
│   │   │   ├── README.md
│   │   │   ├── RejectRestResource.js
│   │   │   └── SRApprovalsAPI.js
│   │   ├── Approval on Behalf/
│   │   │   ├── README.md
│   │   │   └── approval_on_behalf.js
│   │   ├── CMDB API/
│   │   │   ├── CmdbApi.js
│   │   │   ├── CreateCIs.js
│   │   │   ├── CreateCiRelationship.js
│   │   │   ├── DeleteCI.js
│   │   │   ├── DeleteCiRelationship.js
│   │   │   ├── README.md
│   │   │   ├── RetrieveCiGroup.js
│   │   │   ├── RetrieveCis.js
│   │   │   ├── Retrieve_CI_Relationships.js
│   │   │   ├── RetriveCiRelationshipTypes.js
│   │   │   └── UpdateCi.js
│   │   ├── CURL Script to create incident via tableAPI/
│   │   │   ├── README.md
│   │   │   └── script.curl
│   │   ├── CopyAI Generative AI example/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create Catalog Items Dynamically/
│   │   │   ├── README.md
│   │   │   └── catalog.js
│   │   ├── Difference between two users/
│   │   │   ├── README.md
│   │   │   ├── output.txt
│   │   │   └── script.js
│   │   ├── DomainSeperation/
│   │   │   ├── README.md
│   │   │   └── create.js
│   │   ├── Get_Choices/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Group Membership API/
│   │   │   ├── README.md
│   │   │   └── group_membership.js
│   │   ├── MID Server status JSON endpoint/
│   │   │   ├── README.md
│   │   │   └── mid_server_status_api.js
│   │   ├── Promise API Call/
│   │   │   ├── README.md
│   │   │   └── promiseApiCall.js
│   │   ├── Retrieve all variables from RITM/
│   │   │   ├── CHVarUtils_ScriptInclude.js
│   │   │   ├── README.md
│   │   │   ├── output_example.js
│   │   │   └── scripted_rest_api.js
│   │   ├── Tag API/
│   │   │   ├── README.md
│   │   │   └── insert-tag.js
│   │   ├── Update the variables or fields in sc_task or RITM/
│   │   │   ├── README.md
│   │   │   └── Scripted_rest_api.js
│   │   ├── Webhook receiver with HMAC SHA-256 validation/
│   │   │   ├── HmacUtils.js
│   │   │   ├── README.md
│   │   │   └── WebhookHmacReceiver.js
│   │   └── compare roles/
│   │       ├── README.md
│   │       ├── output.txt
│   │       └── script.js
│   └── Scripted SOAP Incident Creation/
│       └── Scripted SOAP incident creation/
│           ├── README.md
│           └── Scripted SOAP incident creation.js
├── Modern Development/
│   ├── ECMASCript 2021/
│   │   └── Server-side ECMAScript 2021 examples/
│   │       ├── README.md
│   │       ├── arrowfunctions.js
│   │       ├── class.js
│   │       ├── const.js
│   │       ├── defaultparms.js
│   │       ├── destructuring.js
│   │       ├── forof.js
│   │       ├── let.js
│   │       ├── map.js
│   │       ├── set.js
│   │       ├── spread.js
│   │       ├── symbol.js
│   │       └── templatestringsandliterals.js
│   ├── GraphQL/
│   │   ├── Sample INC Details GraphQL Code Snippet/
│   │   │   ├── CMDB Resolver.js
│   │   │   ├── GetIncident_Details.gql
│   │   │   ├── Incident Resolver.js
│   │   │   ├── README.md
│   │   │   ├── User Resolver.js
│   │   │   └── resolver mapping.js
│   │   ├── Sample group query/
│   │   │   ├── README.md
│   │   │   ├── addUserToGroup.js
│   │   │   ├── add_user_to_group_broker_properties.json
│   │   │   ├── add_user_to_group_broker_query.gql
│   │   │   ├── getGroups.js
│   │   │   ├── get_groups_broker_query.gql
│   │   │   ├── resolver_mappings.json
│   │   │   └── schema.gql
│   │   └── Sample users query/
│   │       ├── README.md
│   │       ├── getUserGroups.js
│   │       ├── getUserObject.js
│   │       ├── getUserRoles.js
│   │       ├── get_user_broker_properties.json
│   │       ├── get_user_broker_query.gql
│   │       ├── resolver_mappings.json
│   │       └── schema.gql
│   ├── NOW Experience/
│   │   └── JSX Cheat Sheet/
│   │       └── README.md
│   ├── Service Portal/
│   │   ├── Active Tickets Dashboard/
│   │   │   ├── README.md
│   │   │   ├── active_tasks_service_script.js
│   │   │   ├── active_tickets_client_script.js
│   │   │   ├── active_tickets_dashboard.css
│   │   │   └── active_tickets_dashboard.html
│   │   ├── Search Sources/
│   │   │   ├── Approvals.html
│   │   │   ├── DataFetchScript.js
│   │   │   └── README.md
│   │   ├── dark-mode-switcher/
│   │   │   ├── README.md
│   │   │   ├── avatarDropDown.js
│   │   │   ├── dark_mode.scss
│   │   │   ├── portal_theme.scss
│   │   │   └── themeSwitcherMenu.js
│   │   ├── instance-badge/
│   │   │   └── README.md
│   │   ├── sn-avatar/
│   │   │   └── README.md
│   │   ├── sn-choice-list/
│   │   │   └── README.md
│   │   ├── sn-record-picker/
│   │   │   └── README.md
│   │   ├── sn-time-ago/
│   │   │   ├── README.md
│   │   │   └── sp_widget_sn_timeago_demo.xml
│   │   ├── sn-watchlist/
│   │   │   ├── README.md
│   │   │   └── snWatchListDirective.js
│   │   ├── sp-date-picker/
│   │   │   └── README.md
│   │   ├── sp-editable-field/
│   │   │   └── README.md
│   │   ├── sp-modal/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── spGlideAjax/
│   │   │   ├── README.md
│   │   │   └── spGlideAjaxService.js
│   │   ├── sparkling/
│   │   │   └── README.md
│   │   ├── userPreferences/
│   │   │   └── README.md
│   │   └── validate-data-field/
│   │       ├── README.md
│   │       └── script.js
│   └── Service Portal Widgets/
│       ├── Accordion Widget/
│       │   ├── CSS-SCSS.scss
│       │   ├── HTML Template.html
│       │   └── README.md
│       ├── AngularJS Directives and Filters/
│       │   ├── README.md
│       │   ├── client_script.js
│       │   ├── css.css
│       │   ├── html.html
│       │   └── server_script.js
│       ├── Animated Notification Badge/
│       │   ├── README.md
│       │   ├── notification-badge.css
│       │   ├── notification-badge.html
│       │   └── notification-badge.js
│       ├── ApplyCSSDynamically/
│       │   ├── README.md
│       │   ├── applycssdynamically.html
│       │   ├── applycssdynamicallyclient.js
│       │   └── applycssdynamicallyserver.js
│       ├── Batman Animation/
│       │   ├── README.md
│       │   ├── client_script.js
│       │   ├── html_template.html
│       │   └── style.css
│       ├── Calendar widget/
│       │   ├── README.md
│       │   ├── index.html
│       │   ├── script.js
│       │   └── style.css
│       ├── Card Image Link/
│       │   ├── README.md
│       │   ├── mm_card.html
│       │   ├── mm_card_client_script.js
│       │   ├── mm_card_css.css
│       │   ├── mm_card_server_script.js
│       │   └── mm_card_widget_schema.json
│       ├── Catalog Item Explorer/
│       │   ├── README.md
│       │   ├── client_script.js
│       │   ├── css.scss
│       │   ├── options_schema.json
│       │   ├── script.js
│       │   └── template.html
│       ├── Change Calendar Report/
│       │   ├── Body HTML template.html
│       │   ├── CSS
│       │   ├── Client Controller
│       │   ├── README.md
│       │   └── Server Side Script
│       ├── Change Notification Preferences/
│       │   ├── README.md
│       │   ├── client.js
│       │   ├── css.css
│       │   ├── html.html
│       │   ├── notification_preference.js
│       │   └── server.js
│       ├── Check if user has specific role inside the widget/
│       │   ├── ClientScript.js
│       │   └── README.md
│       ├── Clickable SVG Image/
│       │   ├── README.md
│       │   ├── client.js
│       │   ├── echarts.js
│       │   └── html.html
│       ├── Client side pagination/
│       │   ├── README.md
│       │   └── script.js
│       ├── Configurable Card Widget/
│       │   ├── CSS-SCSS.scss
│       │   ├── Client Script.js
│       │   ├── HTML Template.html
│       │   ├── README.md
│       │   └── Widget Options.json
│       ├── Create diagram using GoJS library/
│       │   ├── README.md
│       │   ├── body.html
│       │   ├── client.js
│       │   └── style.css
│       ├── Create diagram using Highcharts library/
│       │   ├── README.md
│       │   ├── body.html
│       │   └── client.js
│       ├── Custom Greetings in portal homepage/
│       │   ├── README.md
│       │   ├── homepage-search-client.js
│       │   └── homepage-search.html
│       ├── Custom attachment variable/
│       │   ├── README.md
│       │   ├── controller.js
│       │   └── template.html
│       ├── Digital Clock/
│       │   ├── README.md
│       │   ├── index.html
│       │   ├── script.js
│       │   └── style.css
│       ├── Drag & drop Widget/
│       │   ├── README.md
│       │   ├── client.js
│       │   ├── html.html
│       │   └── server.js
│       ├── Drawer Buttons/
│       │   ├── README.md
│       │   ├── html_template.html
│       │   └── style.css
│       ├── Dropdown Widget/
│       │   ├── README.md
│       │   ├── index.html
│       │   ├── script.js
│       │   └── style.css
│       ├── Dynamic Table and Record Selector/
│       │   ├── Client Side.js
│       │   ├── HTML.html
│       │   └── README.md
│       ├── Emoji Replacer Widget/
│       │   ├── CSS-SCSS.css
│       │   ├── Client Script.js
│       │   ├── HTML.html
│       │   └── README.md
│       ├── Export table in portal/
│       │   ├── README.md
│       │   ├── export.html
│       │   └── export.js
│       ├── Fill survey or item from url/
│       │   ├── README.md
│       │   └── Survey or form filler widget.js
│       ├── Floater Feedback Widget/
│       │   ├── README.md
│       │   └── feeback_floater.js
│       ├── Generate QrCode/
│       │   ├── Dependencies/
│       │   │   └── qrcode.js
│       │   ├── README.md
│       │   ├── qrcode.html
│       │   └── qrcode_client.js
│       ├── Guest Login Modal/
│       │   ├── README.md
│       │   ├── Service Portal - Guest Login Modal Widget.xml
│       │   ├── client.js
│       │   ├── ng-template.html
│       │   ├── optionSchema.json
│       │   └── server.js
│       ├── HR Task Progress Bar/
│       │   ├── CSS.js
│       │   ├── HTML.js
│       │   ├── README.md
│       │   ├── Server.js
│       │   └── client_script.js
│       ├── HTML List Table from GlideRecord with JSon/
│       │   ├── README.md
│       │   ├── ServerScript.js
│       │   └── html.html
│       ├── Image icon Menu/
│       │   ├── README.md
│       │   ├── Server.js
│       │   ├── client.js
│       │   ├── iconWidgetinstance.js
│       │   ├── iconmenu.css
│       │   └── iconmenu.html
│       ├── ImportXml/
│       │   ├── README.md
│       │   └── importXml.js
│       ├── Incident Sound Alerts/
│       │   ├── README.md
│       │   └── incident_alerts_widget.js
│       ├── JSON Beautifier/
│       │   ├── Client_side.js
│       │   ├── HTML.html
│       │   └── README.md
│       ├── Konami Code Easter Egg/
│       │   ├── KonamiCodeEasterEgg.js
│       │   ├── KonamiCodeEasterEggV2.js
│       │   └── README.md
│       ├── Language Selector/
│       │   ├── README.md
│       │   ├── language-selector.client.js
│       │   ├── language-selector.css
│       │   ├── language-selector.html
│       │   └── language-selector.server.js
│       ├── Live Ticket Counter Service Portal Widget/
│       │   ├── Client Controller
│       │   ├── Live Ticket Counter .css
│       │   ├── Live Ticket Counter.html
│       │   ├── README.md
│       │   └── Server Script
│       ├── Location hierarchy/
│       │   ├── README.md
│       │   ├── client controller.js
│       │   ├── css.css
│       │   ├── html.html
│       │   └── server script.js
│       ├── Manage Delegates Widget/
│       │   ├── README.md
│       │   ├── delegates.html
│       │   ├── delegates.scss
│       │   ├── delegates_client.css
│       │   └── delegates_server.js
│       ├── Mouse Effect/
│       │   ├── README.md
│       │   ├── index.html
│       │   ├── script.js
│       │   └── style.css
│       ├── My Assets/
│       │   ├── README.md
│       │   ├── my_assets.css
│       │   ├── my_assets.html
│       │   └── my_assets_server_side.js
│       ├── My Mentioned Items/
│       │   ├── CSS.js
│       │   ├── HTML.js
│       │   ├── README.md
│       │   └── server script.js
│       ├── My Reminders/
│       │   ├── README.md
│       │   ├── reminders.html
│       │   ├── reminders.scss
│       │   ├── reminders_client.js
│       │   └── reminders_server.js
│       ├── Open in Platform/
│       │   ├── README.md
│       │   ├── body.html
│       │   ├── css.js
│       │   ├── option schema.js
│       │   └── server.js
│       ├── Paginated Data/
│       │   ├── README.md
│       │   ├── paginated-data-server-script.js
│       │   └── paginated-data.html
│       ├── Pagination widget with next and previous button/
│       │   ├── CSS.css
│       │   ├── HTML_Script.html
│       │   ├── README.md
│       │   ├── client_controller.js
│       │   └── server_script.js
│       ├── Portal widgets Performance Test/
│       │   ├── README.md
│       │   └── code.js
│       ├── Recently Viewed Items/
│       │   ├── README.md
│       │   └── recently-viewed-items-widget.js
│       ├── Record process flow/
│       │   ├── PortalUtils.js
│       │   ├── PortalUtilsBase.js
│       │   ├── README.md
│       │   ├── body.html
│       │   ├── server.js
│       │   └── style.css
│       ├── RecordPickerForListReference/
│       │   ├── README.md
│       │   ├── recordpicker.html
│       │   ├── recordpickerclient.js
│       │   └── recordpickerserver.js
│       ├── Redirect to different portals based on browser/
│       │   ├── README.md
│       │   └── redirect_to_different_portals_based_on_browser.js
│       ├── Set Variables By Url/
│       │   ├── README.md
│       │   └── client.js
│       ├── Signature Pad Widget/
│       │   ├── Client Controller.js
│       │   ├── HTML File.html
│       │   └── README.md
│       ├── Spiderman Animation/
│       │   ├── README.md
│       │   ├── client_script.js
│       │   ├── html_template.html
│       │   └── style.css
│       ├── Squid Game Themed Incident-Request-Knowledge/
│       │   ├── README.md
│       │   ├── squid_game_irk.css
│       │   └── squid_game_irk.html
│       ├── Squid Game Themed Simple List/
│       │   ├── README.md
│       │   ├── squid_game_simple_list.css
│       │   └── squid_game_simple_list.html
│       ├── Squid Game Themed User Profile Card/
│       │   ├── README.md
│       │   ├── squid_game_user_profile_card.css
│       │   └── squid_game_user_profile_card.html
│       ├── Standard Ticket Header With On Hold Reason/
│       │   └── README.md
│       ├── Standard Ticket Page Enhanced Action Widget/
│       │   ├── README.md
│       │   └── sp_widget_std_action.xml
│       ├── Stepper/
│       │   ├── CSS.css
│       │   ├── HTML.html
│       │   ├── README.md
│       │   └── Server Script.js
│       ├── Sticky Notes/
│       │   ├── CSS-SCSS.css
│       │   ├── Client Script.js
│       │   ├── HTML.html
│       │   ├── README.md
│       │   └── Server Side.js
│       ├── Tab Panel Widget/
│       │   ├── CSS-SCSS.scss
│       │   ├── HTML Template.html
│       │   ├── Options.json
│       │   └── README.md
│       ├── Upload Files/
│       │   ├── README.md
│       │   ├── body.html
│       │   ├── client.js
│       │   ├── server.js
│       │   └── style.css
│       ├── custom404/
│       │   ├── HTML.js
│       │   ├── README.md
│       │   ├── css.js
│       │   └── server.js
│       ├── g_form on SP/
│       │   ├── README.md
│       │   ├── gform_on_sp.html
│       │   ├── gform_on_sp_client.js
│       │   └── gform_on_sp_server.js
│       └── iFrame/
│           ├── README.md
│           ├── Service Portal - iFrame Widget.xml
│           ├── client.js
│           ├── optionsSchema.json
│           ├── server.js
│           ├── style.scss
│           └── template.html
├── PAGES.md
├── README.md
├── Server-Side Components/
│   ├── Background Scripts/
│   │   ├── ACL Audit Utility/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Access Analysis Utility/
│   │   │   ├── Access alaysis script.js
│   │   │   └── README.md
│   │   ├── Add Bookmarks - ITIL Users/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Add Comments/
│   │   │   ├── README.md
│   │   │   └── addComment.js
│   │   ├── Add No Audit Attribute To Multiple Dictionary Entries/
│   │   │   ├── AddNoAuditAttributeToMultipleDictionaryEntries.js
│   │   │   └── README.md
│   │   ├── Add Standard Change Model/
│   │   │   ├── README.md
│   │   │   └── addStandardChgModel.js
│   │   ├── Adding bookmark to Favorites tab/
│   │   │   ├── Adding bookmark into Favorites tab.js
│   │   │   └── README.md
│   │   ├── Analyze user access UI page/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Approval Reminders/
│   │   │   ├── README.md
│   │   │   └── approvalReminderToDelegates.js
│   │   ├── Attach Workflow to Existing Record/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Attachment Size Audit/
│   │   │   ├── README.md
│   │   │   └── attachmentSizeAudit.js
│   │   ├── Auto-Deactivate Users Not Logged In for X Days/
│   │   │   ├── Auto_Deactivate_Users_Not_Logged_In_for_X_Days.js
│   │   │   └── README.md
│   │   ├── Bulk Change of Incident Priority Based on Category/
│   │   │   ├── Bulk Change of Incident Priority Based on Category.js
│   │   │   └── README.md
│   │   ├── Bulk Create Records in Multiple Tables/
│   │   │   ├── BulkCreateRecordsMultipleTables.js
│   │   │   └── README.md
│   │   ├── Bulk Delete Records in Multiple Tables with Conditions/
│   │   │   ├── BulkDeleteRecordsMultipleTablesWithConditions.js
│   │   │   └── README.md
│   │   ├── Bulk Resolve Old Incidents/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Bulk Role Assignment Based on Conditions/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Bulk Share - Reports/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Bulk Update Tables/
│   │   │   ├── BulkUpdateWithConditions.js
│   │   │   └── README.md
│   │   ├── Bulk Update of Fulfillment Group References in Published KB Articles/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Calculate Week/
│   │   │   ├── Readme.md
│   │   │   └── week_calculation.js
│   │   ├── Capitalize Title Words/
│   │   │   ├── CapitalizeTitleWords.js
│   │   │   └── README.md
│   │   ├── Capture Scheduled Job in an Update set/
│   │   │   ├── README.md
│   │   │   └── captureScheduledJob.js
│   │   ├── Capturing a record in to the current update set/
│   │   │   ├── Capturing a record in to the current update set using background script.js
│   │   │   └── README.md
│   │   ├── Change Approver/
│   │   │   ├── BgScript.js
│   │   │   └── README.md
│   │   ├── Change Update Set Application Scope/
│   │   │   ├── README.md
│   │   │   └── changeApplicationScope.js
│   │   ├── Check Record Creation over 90 days and output age/
│   │   │   ├── README.md
│   │   │   └── checkdateover90.js
│   │   ├── Check String is Valid JSON/
│   │   │   ├── README.md
│   │   │   └── checkStringisValidJson.js
│   │   ├── Check for duplicates on multiple criteria/
│   │   │   ├── README.md
│   │   │   └── check-for-ducplicates.js
│   │   ├── Clone User Groups/
│   │   │   ├── cloneUserGroups.js
│   │   │   └── readme.md
│   │   ├── Clone User Record/
│   │   │   ├── README.md
│   │   │   └── cloneUserRec.js
│   │   ├── Clone User with Roles and Groups/
│   │   │   ├── README.md
│   │   │   └── cloneUser.js
│   │   ├── Compare Roles Between Two Users/
│   │   │   ├── README.md
│   │   │   └── compare-roles-2-users.js
│   │   ├── Console timing API/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Convert Date Time/
│   │   │   ├── README.md
│   │   │   └── convertTimeZone.js
│   │   ├── Convert Incident Records to JSON/
│   │   │   ├── README.md
│   │   │   ├── Readme.md
│   │   │   ├── convert code.js
│   │   │   └── convert incidents to JSON.js
│   │   ├── Convert comma separated values in string to columns/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Copy Field Values and Insert in Target Record/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Copy Source User Group Memberships to Selected Users/
│   │   │   ├── Readme.md
│   │   │   └── copy_source_user_group_memberships_to_selected_users.js
│   │   ├── Copy table fields from one table to another/
│   │   │   ├── Copy fields from one table to another
│   │   │   └── README.md
│   │   ├── Copy table name list header action/
│   │   │   ├── README.md
│   │   │   ├── addMenuItem.js
│   │   │   └── removeMenuItem.js
│   │   ├── Currency Conversion/
│   │   │   ├── README.md
│   │   │   └── currencyConvert.js
│   │   ├── Currency Formatting/
│   │   │   ├── README.md
│   │   │   └── currencyFormatting.js
│   │   ├── Custom Table Usage/
│   │   │   ├── README.md
│   │   │   └── customTableUsage.js
│   │   ├── Deactivate groups with no members and inactive manager/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Decrypt Password Field/
│   │   │   ├── README.md
│   │   │   └── decryptfield.js
│   │   ├── Delete Attachments - Closed Approvals/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Discover Datacenters for Service Accounts/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Duplicate Client Script Audit for Tables/
│   │   │   ├── README.md
│   │   │   └── backGroundScriptDuplicateClientScript.js
│   │   ├── Duplicate Finder/
│   │   │   ├── findDuplicatesByCombination.js
│   │   │   ├── findDuplicatesBySingleField.js
│   │   │   └── readme.md
│   │   ├── Encode and Decode URI/
│   │   │   ├── README.md
│   │   │   └── encodeURIdecodeURI.js
│   │   ├── Encrypt & decrypt payload via base64/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Execute Logic on Weekdays/
│   │   │   ├── README.md
│   │   │   └── doTaskonWeekdays.js
│   │   ├── Extend Code Search Base/
│   │   │   ├── README.md
│   │   │   └── add_more_tables_to_code_search.js
│   │   ├── Extract Value from JSON/
│   │   │   ├── extractValueFromJSON.js
│   │   │   └── readme.md
│   │   ├── Fetch Active Groups list without members/
│   │   │   ├── README.md
│   │   │   └── activeGroupsWithoutMembers.js
│   │   ├── Find All Categories Related to a Knowledge Base/
│   │   │   ├── GetAllTheCategoriesRelatedToAKnowledgeBase.js
│   │   │   └── README.md
│   │   ├── Find Groups Without Members/
│   │   │   ├── Get Groups with no Members.js
│   │   │   └── README.md
│   │   ├── Find Similar Tickets/
│   │   │   ├── README.md
│   │   │   └── findSimilarTickets.js
│   │   ├── Find Top-Level Manager Hierarchy/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   ├── Find sys_id named records/
│   │   │   ├── README.md
│   │   │   └── findSysIdNamedFiles.js
│   │   ├── Finding groups with inactive managers/
│   │   │   ├── Finding groups with inactive managers.js
│   │   │   └── README.md
│   │   ├── Fix reference to Choice/
│   │   │   ├── README.md
│   │   │   ├── script_v1.js
│   │   │   └── script_v2.js
│   │   ├── FlushOutbox/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Force new value to read only or protected field/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Form Field Count/
│   │   │   ├── Form Field Count.js
│   │   │   └── README.md
│   │   ├── Generate JWT Token/
│   │   │   ├── README.md
│   │   │   └── generateJWTToken.js
│   │   ├── Generate Random Incident Records/
│   │   │   ├── README.md
│   │   │   └── generate_random_incident.js
│   │   ├── Generate statistics about events created today/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Active MID Servers/
│   │   │   ├── GetActiveMidServer.js
│   │   │   └── README.md
│   │   ├── Get Agent log from Mid Server/
│   │   │   ├── README.md
│   │   │   └── getMidServerAgentLog.js
│   │   ├── Get All Child Roles/
│   │   │   ├── GetAllChildRolesRecursive.js
│   │   │   └── README.md
│   │   ├── Get All the CI classes/
│   │   │   ├── README.md
│   │   │   └── getAllCiClasses.js
│   │   ├── Get Array of Records with Attachments/
│   │   │   ├── incHavingAttachments.js
│   │   │   └── readme.md
│   │   ├── Get Duplicate/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get GlideRecord Reference Field/
│   │   │   ├── README.md
│   │   │   └── get_glide_record_reference_field.js
│   │   ├── Get Installed Plugins details/
│   │   │   ├── README.md
│   │   │   └── getInstalledPluginInfo.js
│   │   ├── Get Instance DB Size/
│   │   │   ├── README.md
│   │   │   └── getInstDBSize.js
│   │   ├── Get Instance Info/
│   │   │   ├── README.md
│   │   │   └── getInstanceInfo.js
│   │   ├── Get Journal Entry as HTML Without Header/
│   │   │   ├── GetJournalEntryAsHTMLWithoutHeader.js
│   │   │   └── README.md
│   │   ├── Get My Groups/
│   │   │   ├── README.md
│   │   │   └── getMyGroups.js
│   │   ├── Get Outstanding Incidents/
│   │   │   ├── README.md
│   │   │   └── get-outstanding-incidents.js
│   │   ├── Get Risk and Controls in Project/
│   │   │   ├── README.md
│   │   │   └── risksandcontrolsinProject.js
│   │   ├── Get The Last Journal Comment Date/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get User's Favorite Hierarchy/
│   │   │   ├── GetUsersFavoriteHierarchy.js
│   │   │   └── README.md
│   │   ├── Get all users where manager is empty/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get current logged in user count in all nodes of instance/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get incident count based on priority/
│   │   │   ├── IncidentCount.js
│   │   │   └── README.md
│   │   ├── Get list of Update Set types/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get the current version of an application/
│   │   │   ├── README.md
│   │   │   └── currentversionscript.js
│   │   ├── GetFlowNames/
│   │   │   ├── README.md
│   │   │   └── getFlowNames.js
│   │   ├── GetRecordsFromMultipleTables/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── GreenHouse ServiceNow Integration Snippet/
│   │   │   ├── GreenHouse_SN_Snippet.js
│   │   │   └── README.md
│   │   ├── IRE Simulation/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Identification and Reconciliation/
│   │   │   ├── README.md
│   │   │   └── identificationReconciliationOnPayload.js
│   │   ├── Identify Inactive users with tickets/
│   │   │   ├── README.md
│   │   │   └── identify_inactive_users_with_open_tickets.js
│   │   ├── Incident Auto-Categorization Based on Keywords/
│   │   │   ├── Incident Auto-Categorization Based on Keywords.js
│   │   │   └── README.md
│   │   ├── Limit String and Add Elipses/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── List Stories and Tasks by User and Date Range/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── List fields in table/
│   │   │   ├── README.md
│   │   │   └── listFieldsInTable.js
│   │   ├── Logout User/
│   │   │   ├── README.md
│   │   │   └── logoutUser.js
│   │   ├── Merge Duplicate User Records Automatically/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   ├── Move Customer Updates/
│   │   │   ├── README.md
│   │   │   └── moveCustomerUpdates.js
│   │   ├── Notify User of Password Expiry/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Orphaned Users/
│   │   │   ├── README.md
│   │   │   └── Users with no groups and roles.js
│   │   ├── Parse ISO8601 Date/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Prevent unnecessary notifications from being sent out/
│   │   │   ├── Prevent_unnecessary_notifications_from_being_sent_out.js
│   │   │   └── README.md
│   │   ├── QuickCurrent/
│   │   │   ├── README.md
│   │   │   └── quickCurrent.js
│   │   ├── Read Encoded Query/
│   │   │   ├── README.md
│   │   │   └── readQuery.js
│   │   ├── Reassignment of Manager from Group and User Table/
│   │   │   ├── README.md
│   │   │   └── backgroundScriptManagerReassign.js
│   │   ├── Remove Inactive User/
│   │   │   ├── README.md
│   │   │   └── Remove Inactive user from active group.js
│   │   ├── Remove element from list field/
│   │   │   ├── README.md
│   │   │   └── removeFromList.js
│   │   ├── Remove roles from inactive user/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Rename reports - Avoid duplicate names/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Replace Text/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Restart RITM Flow/
│   │   │   ├── README.md
│   │   │   └── restart-ritm-flow.js
│   │   ├── Retiring KB articles in bulk/
│   │   │   ├── Readme.md
│   │   │   └── Retire Articles.js
│   │   ├── Retrieve Impersonation Insights/
│   │   │   ├── impersonationInsights.js
│   │   │   └── readme.md
│   │   ├── Retrieve MRVS Name and Value/
│   │   │   ├── RetrieveMRVSNameAndValue.js
│   │   │   └── readme.md
│   │   ├── Retrieve age of Incident/
│   │   │   ├── README.md
│   │   │   └── ageOfIncidents.js
│   │   ├── RetrieveAPIKey/
│   │   │   ├── Readme.md
│   │   │   └── getSubscriptionKey.js
│   │   ├── Run a Scheduled Job/
│   │   │   ├── README.md
│   │   │   └── run-scheduled-job.js
│   │   ├── SQL Checker/
│   │   │   ├── README.md
│   │   │   └── SQLChecker.js
│   │   ├── Safe Bulk Update with Logging/
│   │   │   ├── README.md
│   │   │   └── bulk_update_with_progress.js
│   │   ├── Set the status to Retired on Ec2 Instance/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Set update sets to Complete/
│   │   │   ├── README.md
│   │   │   └── set_update_sets_to_complete.js
│   │   ├── Silent update on GlideRecord/
│   │   │   ├── README.md
│   │   │   └── slientUpdateOnGlideRecord.js
│   │   ├── Stale Tasks Auto-Close/
│   │   │   ├── README.md
│   │   │   └── Stale Tasks Auto-Close.js
│   │   ├── Table Growth Analysis/
│   │   │   ├── README.md
│   │   │   └── tableGrowthAnalysis.js
│   │   ├── Tag Incident Outliers/
│   │   │   ├── README.md
│   │   │   └── tag_resolution_outliers.js
│   │   ├── To check incidents having a VIP caller/
│   │   │   ├── VIP-caller-incidents.js
│   │   │   └── readme.md
│   │   ├── Typed Array Elements/
│   │   │   ├── README.md
│   │   │   └── typed_array_elements.js
│   │   ├── Update All Store Apps/
│   │   │   ├── README.md
│   │   │   └── update_all_apps.js
│   │   ├── Update reference field from CI relationship/
│   │   │   ├── README.md
│   │   │   └── Reference field value update from CI relationship connection.js
│   │   ├── Updating a record in the sys_user table/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── User Access Tester/
│   │   │   ├── README.md
│   │   │   └── userAccessTester.js
│   │   ├── User Email mismatch with Cmn Notif device/
│   │   │   ├── README.md
│   │   │   └── userEmailMismatchwithcmnNotifDevice.js
│   │   ├── User Has Role Exactly/
│   │   │   ├── README.md
│   │   │   └── user_has_role_exactly.js
│   │   ├── Version Checker/
│   │   │   ├── README.md
│   │   │   └── VersionUpdateChecker.js
│   │   ├── Virtual Agent Conversation Analytics/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Virtual Agent Topic Coverage Report/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── add member to groups/
│   │   │   ├── Add the members to List of the Groups using GlideRecord.js
│   │   │   └── README.md
│   │   ├── encryptAndDecryptNonPasswordFields/
│   │   │   ├── README.md
│   │   │   └── encryptAndDecryptNonPasswordFields.js
│   │   ├── encryptAndDecryptPasswordFields/
│   │   │   ├── Encrypt and Decrypt Non-Password Fields.js
│   │   │   └── README.md
│   │   ├── findTableSize/
│   │   │   ├── README.md
│   │   │   └── findTableSize.js
│   │   └── inserting a new record into the sys_user table/
│   │       ├── README.md
│   │       └── script.js
│   ├── Business Rules/
│   │   ├── ATF Duplicate Execution Order/
│   │   │   ├── ATF_Duplicate_Execution_order.js
│   │   │   └── README.md
│   │   ├── Abort Parent Incident Closure When Child is Open/
│   │   │   ├── README.md
│   │   │   └── scriptBR.js
│   │   ├── Add HR task for HR case/
│   │   │   ├── Add HR Task for VIP HR Case.js
│   │   │   └── README.md
│   │   ├── Add itil role to ootb user query to also see inactive users/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Add notes on tag addition or removal/
│   │   │   ├── README.md
│   │   │   ├── update_notes_tag_addition.js
│   │   │   └── update_notes_tag_removal.js
│   │   ├── Add or remove a tag from the ticket whenever the comments are updated/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Add woknotes for 75 percent SLA/
│   │   │   ├── README.md
│   │   │   └── addWorknotesForSLA.js
│   │   ├── Add work notes for relevant Change Requests for Incident/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── After-BR to generate approvals for catalog tasks/
│   │   │   ├── README.md
│   │   │   └── approval.js
│   │   ├── Allow only unique insert/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Approval Matrix/
│   │   │   ├── Matrix.js
│   │   │   └── README.md
│   │   ├── Assign specific role to user/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Async REST Call/
│   │   │   ├── README.md
│   │   │   └── callAsynREST.js
│   │   ├── Attachment Variable from Activity Stream to Clip Icon/
│   │   │   ├── Attachment Variable Fix.js
│   │   │   └── README.md
│   │   ├── AttachmentFormatValidator/
│   │   │   ├── AttachmentFormatValidator.js
│   │   │   └── Readme.md
│   │   ├── Attachments check High-Risk or High-Impact Change request/
│   │   │   ├── README.md
│   │   │   └── attachmentcheckonhighriskimpactChange.js
│   │   ├── Auto Approve VIP Approvals/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Auto Create Problem Records for Recurring Incidents/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Auto Incident Notification and Escalation/
│   │   │   ├── README.md
│   │   │   └── incident_notification.js
│   │   ├── Auto Tag VTB Based on Record States/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Auto add email recipients to the message body when Email Override is on/
│   │   │   ├── IncludeEmailRecipientsInBody.js
│   │   │   └── README.md
│   │   ├── Auto approve if previously approved/
│   │   │   ├── Auto_approve approvals.js
│   │   │   └── README.md
│   │   ├── Auto close incident if all related changes are closed/
│   │   │   ├── Readme.md
│   │   │   └── auto_close_incident_if_all_related_change_requests_closed.js
│   │   ├── Auto tag incident/
│   │   │   ├── Auto_Tag_Incident.js
│   │   │   └── README.md
│   │   ├── Auto-Assign Incident Based on Keywords, CI, and Department/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   ├── Auto-Generate Knowledge Article for Resolved Incidents/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Auto-approved opened by is approver/
│   │   │   ├── ReadMe.md
│   │   │   └── code.js
│   │   ├── Auto-assign and notify owners of Affected CIs/
│   │   │   ├── BRScript.js
│   │   │   └── README.md
│   │   ├── AutoApplyTemplateOnRecord/
│   │   │   ├── README.md
│   │   │   └── auto_apply_template_on_record.js
│   │   ├── AutoAssignment/
│   │   │   ├── Auto Assign Incident.js
│   │   │   └── README.md
│   │   ├── AutoCreation of Problem from Incident/
│   │   │   ├── README.md
│   │   │   └── whenMajorIncidentIsTrueCreateProblem.js
│   │   ├── Automate Role Assignment for New User/
│   │   │   ├── README.md
│   │   │   └── autoRoleAssignment.js
│   │   ├── Automated Incident Categorization Based on Keywords/
│   │   │   ├── Automated Incident Categorization Based on Keywords.js
│   │   │   └── README.md
│   │   ├── Automated SLA Monitoring and Escalation/
│   │   │   ├── Automated SLA Monitoring and Escalation.js
│   │   │   └── README.md
│   │   ├── Automatic Group Membership Updates via API/
│   │   │   ├── README.md
│   │   │   └── autoGroupMembershipUpdate.js
│   │   ├── Automatic Relationship Builder/
│   │   │   ├── README.md
│   │   │   └── relationship.js
│   │   ├── Automatically Populate Incident with Work Order Number/
│   │   │   ├── README.md
│   │   │   └── businessRuleFsmUsecase.js
│   │   ├── Automatically Throttle Incidents Raised by Same User Within Short Timeframe/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Backup Critical Table Data/
│   │   │   ├── README.md
│   │   │   └── backupCriticalTableData.js
│   │   ├── Block Attachments for specific conditions/
│   │   │   ├── Block Attachments.js
│   │   │   └── README.md
│   │   ├── CMDB Auto-Relationship Builder/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Calculate Incident Duration and Validation/
│   │   │   ├── Duration.js
│   │   │   └── Readme.md
│   │   ├── Call JavaScript Probe/
│   │   │   ├── Call JavaScript Probe.js
│   │   │   └── README.md
│   │   ├── Cancel Incomplete Playbooks on Closure/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Capture Implementation Status of Change Request/
│   │   │   ├── Implementation Status of Change Request.js
│   │   │   └── Readme.js
│   │   ├── Captures the time it took to assign a task/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Cascade Priority Change from Parent to Child Incidents/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Cascade Problem Worknote to Origin Task/
│   │   │   ├── Readme.md
│   │   │   └── cascade.js
│   │   ├── Change Lead Time Calculations/
│   │   │   ├── README.md
│   │   │   └── change_lead_time_calculations.js
│   │   ├── Change Risk Assesment mandatory before state change/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check domain of record against user session/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check for active tickets before inactivating user/
│   │   │   ├── Check for active tickets before inactivating user.js
│   │   │   └── README.md
│   │   ├── Close parent RITM when SC Task is Closed/
│   │   │   ├── README.md
│   │   │   └── closeParentRITMwhenSCTaskisClosed.js
│   │   ├── Compare two date fields/
│   │   │   ├── README.md
│   │   │   └── compareTwoDateFields.js
│   │   ├── Copy Attachment INC to Case/
│   │   │   ├── README.md
│   │   │   └── copyAttachement.js
│   │   ├── Copy Attachment on Email/
│   │   │   ├── README.md
│   │   │   └── copyAttachment.js
│   │   ├── Copy Comments from RITM to SCTASK Vice versa/
│   │   │   ├── README.md
│   │   │   └── copyCommentsfromRitmToSctask.js
│   │   ├── Copy MRVS to SC Task/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Copy Worknotes/
│   │   │   ├── read.md
│   │   │   └── script.js
│   │   ├── Copy attachments from idea to demand/
│   │   │   ├── README.md
│   │   │   └── copy attach from idea to demand.js
│   │   ├── Copy details to Request/
│   │   │   ├── Move Sc_task Assign group and assigne to Request.js
│   │   │   └── README.md
│   │   ├── Copy fields from Employee from/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Copy latest comment from RITM to SCTASK/
│   │   │   ├── CopyComments.js
│   │   │   └── README.md
│   │   ├── Copy worknotes from SCTASK to RITM comments/
│   │   │   ├── README.md
│   │   │   └── sctaskToRitmAdditionalComments.js
│   │   ├── CopyAttachmentsFromApprovalToChange/
│   │   │   ├── CopyAttachmentsApprovalToChange.js
│   │   │   └── README.md
│   │   ├── Count Associated Incidents in Problem/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create a copy of incident in another servicenow instance/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create catalog task for each row of MRVS/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create choice sets if required for new choices/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create comment on referenced record/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Cross-Table Dependency Analyzer/
│   │   │   ├── businessrule.js
│   │   │   ├── readme.md
│   │   │   └── scriptInclude.js
│   │   ├── Currency conversion to USD/
│   │   │   ├── currenct_Converstion_to_USD.js
│   │   │   ├── currency conversion usd.js
│   │   │   └── readme.md
│   │   ├── DeleteUserRole/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Display BR to get groupInfo of logged in User/
│   │   │   ├── README.md
│   │   │   ├── displayBr.js
│   │   │   └── onLoadClientScript.js
│   │   ├── Display current user display name on top of form/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Display warning message when peer reviewer and Requested by are same person/
│   │   │   ├── README.md
│   │   │   └── Warningmessage_Business rule.jss
│   │   ├── Due date calculation based on priority/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Dynamic Business Rule to Update User Roles Based on Department Changes/
│   │   │   ├── Dynamic Business Rule to Update User Roles Based on Department Changes.js
│   │   │   └── README.md
│   │   ├── Dynamic Field Population from CMDB/
│   │   │   ├── beforeBusinessRule.js
│   │   │   ├── readme.md
│   │   │   └── scriptinclude.js
│   │   ├── Dynamic GlideList Field Sync/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Emergency Change Cannot be closed without AttachedIncident/
│   │   │   ├── README.md
│   │   │   └── Review to Close Without Incident.js
│   │   ├── Enforce CI maintenance window on Change schedule/
│   │   │   ├── README.md
│   │   │   └── br_enforce_ci_maintenance_window.js
│   │   ├── Enforce File Upload Restrictions for HR Document Submission/
│   │   │   ├── Code.js
│   │   │   └── README.md
│   │   ├── Enforce Percentage/
│   │   │   ├── README.md
│   │   │   └── enforce_percentage.js
│   │   ├── Enforce Single Attachment Rule for HR Core Tasks/
│   │   │   ├── README.md
│   │   │   └── codingfile.js
│   │   ├── Enforce Unique Rank/
│   │   │   ├── README.md
│   │   │   └── UniqueRank.js
│   │   ├── Enforce a 1-1 relationship/
│   │   │   ├── README.md
│   │   │   └── enforce_1_1.js
│   │   ├── EnhanceIncidentWithProblem/
│   │   │   ├── EnhanceIncidentWithProblem.js
│   │   │   └── README.md
│   │   ├── Exclude Redundant Email Recipients/
│   │   │   ├── README.md
│   │   │   └── exclude_redundant_email_recipients.js
│   │   ├── Fetching reference field value from higher-level parents/
│   │   │   ├── Fetching reference field value from higher-level parents.js
│   │   │   └── README.md
│   │   ├── Field Validation based on form view in Server side/
│   │   │   ├── README.md
│   │   │   └── fieldValidationinBR.js
│   │   ├── Find MRVS Total/
│   │   │   ├── mrvs_total_sum.js
│   │   │   └── readme.md
│   │   ├── GRC Policy Retirement Gaurd/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Generate event/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Group Manager changes, remove old manager & add new manager/
│   │   │   ├── Code.js
│   │   │   └── ReadMe.md
│   │   ├── Hide from Interceptor/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── If Conflicts are there restrict change resquest to move further/
│   │   │   ├── README.md
│   │   │   └── ifConflictStopChangeRequestToAssessState.js
│   │   ├── Incident Root Cause Suggestion/
│   │   │   ├── business rule.js
│   │   │   ├── readme.md
│   │   │   └── script include.js
│   │   ├── Make Attachment Mandatory/
│   │   │   ├── MakeAttachmentMandatory.js
│   │   │   └── README.md
│   │   ├── Mandatory Attachment/
│   │   │   ├── README.md
│   │   │   └── threeAttachementsMandatory.js
│   │   ├── Manipulating system properties values/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Mark an Email High Importance initiated from Email Client/
│   │   │   ├── Mark an Email High Importance
│   │   │   └── README.md
│   │   ├── Mask Sensitive Data in Description Field/
│   │   │   ├── maskData.js
│   │   │   └── readme.md
│   │   ├── Move attachment from variable to record/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Name Change Profile Update/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Notification/
│   │   │   ├── README.md
│   │   │   └── Send Notification on New Incident Creation.js
│   │   ├── Pass Attachments/
│   │   │   ├── read.md
│   │   │   └── script.js
│   │   ├── Pass server info to client/
│   │   │   ├── README.md
│   │   │   └── passServerInfo.js
│   │   ├── Pdf Letter create/
│   │   │   ├── README.md
│   │   │   └── letter.js
│   │   ├── Preserve enhancement when deleting project/
│   │   │   ├── Preserve enhancement when deleting project.js
│   │   │   └── README.md
│   │   ├── Prevent Duplicate CI (Configuration Item) Names/
│   │   │   ├── README.md
│   │   │   └── code_snippets.js
│   │   ├── Prevent Duplicate Incident Creation within 24 Hours/
│   │   │   ├── BeforeBRScript.js
│   │   │   └── README.md
│   │   ├── Prevent Invalid User ID/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Prevent RITM to get closed/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Prevent adding user to group if manager is inactive/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Prevent closure if change tasks are open/
│   │   │   ├── Before_BR.js
│   │   │   └── README.md
│   │   ├── Prevent duplicate update sets/
│   │   │   ├── README.md
│   │   │   └── preventDuplcateUpdateSets.js
│   │   ├── Prevent invalid fiscal period in cost plan breakdown/
│   │   │   ├── Prevent invalid fiscal period on cost plan breakdown.js
│   │   │   └── README.md
│   │   ├── Preventing Recursive Updates from Integrations/
│   │   │   ├── README.md
│   │   │   └── prevent_continous_update.js
│   │   ├── Previous Approval Check/
│   │   │   ├── README.md
│   │   │   └── previous_approval_check.js
│   │   ├── QueryBR-restrict users to see their company records/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── RITM Assignment Sync/
│   │   │   ├── Populate_Assigned _To_on_RITMs_for_Specific_Catalog_Item.js
│   │   │   └── README.md
│   │   ├── RITM state change/
│   │   │   ├── README.md
│   │   │   └── Related_task_state_update.js
│   │   ├── RITM_to_SCTASK/
│   │   │   ├── README.md
│   │   │   └── RITM_to_SCTASK.js
│   │   ├── Randomly distrubite events between custom queues/
│   │   │   ├── DistrubuteEvents.js
│   │   │   └── README.md
│   │   ├── ReRank item/
│   │   │   ├── README.md
│   │   │   └── rerank.js
│   │   ├── Read Workspace URL/
│   │   │   ├── README.md
│   │   │   └── ReadWS_URL.js
│   │   ├── Reassign Tasks When Assigned User is Inactive/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Recursive logic/
│   │   │   ├── README.md
│   │   │   └── Recursive BR.js
│   │   ├── Reduce syslog query/
│   │   │   ├── README.md
│   │   │   └── reduce_syslog_query.js
│   │   ├── Replace KB Author with Manager/
│   │   │   ├── README.md
│   │   │   └── Replace Script.js
│   │   ├── Restrict Service Account to Query data/
│   │   │   ├── README.md
│   │   │   └── restrictedDataQuery.js
│   │   ├── RoleUpdateOnGroupManagerChange/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Round Robin for Incident Assignment/
│   │   │   ├── README.md
│   │   │   └── Round Robin method for Incident Assignment.js
│   │   ├── SCTASK_to_RITM/
│   │   │   ├── README.md
│   │   │   └── SCTASK_to_RITM.js
│   │   ├── Set program business duration/
│   │   │   ├── PPM_Utils.js
│   │   │   ├── README.md
│   │   │   └── set pgm business duration.js
│   │   ├── Smart Attachment Size Limiter/
│   │   │   ├── Readme.md
│   │   │   └── Smart Attachment Size Limiter.js
│   │   ├── Sync CI operational status with child related CIs/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Sync Fields for two tables/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Sync Integer Field/
│   │   │   ├── README.md
│   │   │   └── sync_integer_field.js
│   │   ├── Synchronize RITM comments to Active tasks/
│   │   │   ├── README.md
│   │   │   └── synccommentfromritmtotask.js
│   │   ├── Track Tag Removal Using Delete Business Rule/
│   │   │   ├── BusinessRule.js
│   │   │   └── readme.md
│   │   ├── Transform Data from Attachment/
│   │   │   ├── README.md
│   │   │   └── data_xform_from_attachment.js
│   │   ├── Trigger Event when a member is added to a list/
│   │   │   ├── README.md
│   │   │   └── Trigger an event when user is added to field.js
│   │   ├── Update CI status on Change Request closure/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Update Child Incident based on Parent Incident/
│   │   │   ├── README.md
│   │   │   └── Update_Child_Incident.js
│   │   ├── Update Incident Description on Insert with Telephone Icon Concatenated/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Update Locked Out field when Active field changes on User record/
│   │   │   ├── README.md
│   │   │   └── update_locked_out_field.js
│   │   ├── Update Related Tasks When Parent Changes/
│   │   │   ├── Readme.md
│   │   │   └── script.js
│   │   ├── Update Set Scope Validation/
│   │   │   ├── README.md
│   │   │   └── ValidateScopesForUpdateSet.js
│   │   ├── Update worknotes of Ptask to parent Problem record/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── UpdateFavouritedKnowledgeArticleWhenItIsUpgradedToNewVersion/
│   │   │   ├── README.md
│   │   │   └── update_favourited_knowledge_artice.js
│   │   ├── Use_case_Base64-Encode-Before-Save-And-Decode-on-Display/
│   │   │   ├── Before_BR_script.js
│   │   │   ├── Display_BR_script.js
│   │   │   └── Readme.md
│   │   ├── User Activity Log Tracking/
│   │   │   ├── README.md
│   │   │   └── userActivityLog.js
│   │   ├── User Impersonation Activity Logger/
│   │   │   ├── README.md
│   │   │   └── UserImpersonationActiityLogger.js
│   │   ├── User Profile Field Validation/
│   │   │   ├── README.md
│   │   │   └── userProfileValidation.js
│   │   ├── Validate Checklist items/
│   │   │   ├── README.md
│   │   │   └── incompleteChkListShowErrMsg.js
│   │   ├── Validate Email on Import/
│   │   │   ├── README.md
│   │   │   └── validateEmailOnImport.js
│   │   ├── Validate JSON Property/
│   │   │   ├── README.md
│   │   │   └── jsonPropertyValidator.js
│   │   ├── Warn for changed OOTB artifacts/
│   │   │   ├── README.md
│   │   │   └── warn_for_changed_ootb_artifacts.js
│   │   ├── When Group is making inactive/
│   │   │   ├── Code.js
│   │   │   └── ReadMe.md
│   │   ├── duplicateattachments/
│   │   │   ├── AvoidduplicateattachmentsonIncident.js
│   │   │   └── README.md
│   │   ├── openAI/
│   │   │   ├── README.md
│   │   │   └── chatGpt.js
│   │   ├── setting future week dates/
│   │   │   ├── README.md
│   │   │   └── setting future dates.js
│   │   └── user-activity-logger/
│   │       ├── README.md
│   │       └── user-activity-logger.js
│   ├── Extension Points/
│   │   ├── CustomNotificationHandlerInterfaceExtension.js
│   │   ├── CustomNotificationHandlerInterfaceImplementation.js
│   │   ├── ExtensionPointCallingExample.js
│   │   └── README.md
│   ├── Inbound Actions/
│   │   ├── Advanced Scripts/
│   │   │   ├── README.md
│   │   │   ├── cancel_catalog_item_from_email.js
│   │   │   ├── create_catalog_item_from_email.js
│   │   │   └── update_catalog_item_from_email.js
│   │   ├── Auto Incident Creation from Case Email/
│   │   │   ├── README.md
│   │   │   └── create_incident_from_case_email.js
│   │   ├── Auto Reply Email/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Automate creation of incidents through inbound actions/
│   │   │   ├── README.md
│   │   │   └── incidentCreation.js
│   │   ├── Duplicate Incident Detection and Creation/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Email Text as Attachment/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Inbound Email Action to Create User and Assign Groups/
│   │   │   ├── Readme.md
│   │   │   └── auto_create_user_through_inbound_email_action.js
│   │   ├── Incident Creation from Email with Attachments Handling/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   └── Reply Task/
│   │       ├── README.md
│   │       └── reply.js
│   ├── Processors/
│   │   └── Dynamic Sitemap/
│   │       ├── README.md
│   │       └── dynamicSitemapProcessor.js
│   ├── Scheduled Jobs/
│   │   ├── API Token Expiry Warning/
│   │   │   ├── API Token Expiry Warning.js
│   │   │   └── Readme.md
│   │   ├── Approval Reminder/
│   │   │   ├── README.md
│   │   │   ├── change_reminder_scheduled_job.js
│   │   │   ├── requested_item_approval_reminder_approver.js
│   │   │   └── requested_item_approval_reminder_requestor.js
│   │   ├── Auto Disable account/
│   │   │   ├── Disable Service accounts due to inactivity
│   │   │   └── Readme.md
│   │   ├── Auto close changes requests updated 30 days prior/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Auto upgrade store applications/
│   │   │   ├── Readme.md
│   │   │   ├── script.js
│   │   │   └── sysproperty.js
│   │   ├── Auto-Assign Unassigned Incidents Older Than 30 Minutes/
│   │   │   ├── Readme.md
│   │   │   └── auto_assign_unassigned_incidents_via_scheduled_job.js
│   │   ├── Bucket Group Reporting/
│   │   │   ├── Bucket Group Age Calculation.js
│   │   │   └── readme.md
│   │   ├── Calculate Ticket's Aging/
│   │   │   ├── Calculate Ticket's Aging.js
│   │   │   └── README.md
│   │   ├── CancelApproval/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Clean up Inactive User access/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Condition script to trigger the scheduled job on Quarterly basis/
│   │   │   ├── Condition script to trigger the scheduled job on Quarterly basis.js
│   │   │   └── README.md
│   │   ├── Create Scheduled Imports Graphviz file/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Create send reminders weekly/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Daily Summary Email/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Daily detection of customer updates made in 'Default' update set/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Deactivate INC in 90 days/
│   │   │   ├── 90daysInactiveScript.js
│   │   │   └── README.md
│   │   ├── Deactivate Inactive Users and Notify Managers/
│   │   │   ├── Readme.md
│   │   │   └── auto_deactivate_inactive_users.js
│   │   ├── Deactivate Memberless Group/
│   │   │   ├── README.md
│   │   │   └── deactivate group.js
│   │   ├── Deactive and Reactivate Catalog Items/
│   │   │   ├── README.md
│   │   │   └── schedule-deactivation.js
│   │   ├── Delete Retired CI Rel/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Employee Probation case/
│   │   │   ├── Probation.js
│   │   │   └── README.md
│   │   ├── Export Filtered Records to CSV Automatically/
│   │   │   ├── README.md
│   │   │   └── code_snippet.js
│   │   ├── Get All Catalog Tasks without Request items/
│   │   │   ├── catalogTaskWithoutReqItem.js
│   │   │   └── catalogTaskWithoutReqItem.md
│   │   ├── Licensed User Access Job/
│   │   │   ├── Weekly_LicensedUser_Access_Revoke_90Days.js
│   │   │   └── readme.md
│   │   ├── Lock out users who have not logged into the system longer than 30 days/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Paginated Export/
│   │   │   ├── Paginated Export.md
│   │   │   └── paginatedExport.js
│   │   ├── PostUserDisabledActivity/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Proactive Change Request Reminder/
│   │   │   ├── README.md
│   │   │   └── proactive_change_reminder.js
│   │   ├── Reject approvals created before an year/
│   │   │   ├── README.md
│   │   │   └── Reject Approvals Created Before an Year.js
│   │   ├── Remove Inactive and locked out users from All Groups and Roles/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Role Usage Analyzer/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── ScheduleAtSpecificDaysAndTimes/
│   │   │   ├── README.md
│   │   │   └── schedulejobcondition.js
│   │   ├── Scheduled Data Import for Groups Population(Support and Managed By) for CMDB Classes/
│   │   │   ├── ReadMe.md
│   │   │   └── post-script.js
│   │   ├── Scheduled Job to Email Incident Count Report by Category/
│   │   │   ├── Readme.md
│   │   │   └── Send_monthly_incident_category_count_report.js
│   │   ├── Submit catalog item/
│   │   │   ├── README.md
│   │   │   └── submit_catalog_item.js
│   │   ├── Survey Trigger Scheduled Script/
│   │   │   ├── README.md
│   │   │   └── survey_trigger_sj.js
│   │   ├── Top10jobsbyprocessingtime/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Unpublish Public Reports/
│   │   │   ├── README.md
│   │   │   └── UnpublishReports.js
│   │   ├── Update Inactive Application Owner/
│   │   │   ├── README.md
│   │   │   └── Update Inactive Application Owner.js
│   │   ├── Weekly Incident Trend Analysis/
│   │   │   ├── README.md
│   │   │   └── incident_trend_analyzer.js
│   │   └── trigger on weekday/
│   │       ├── read.md
│   │       └── script.js
│   ├── Script Actions/
│   │   ├── Attachment Downloads Logger/
│   │   │   ├── README.md
│   │   │   └── scriptActionCode.js
│   │   ├── Custom Table Helper/
│   │   │   ├── README.md
│   │   │   └── Script Action.js
│   │   └── Deactivate Inactive Users and Notify Managers/
│   │       ├── Readme.md
│   │       └── user_deactivation_notify_manager_script_action.js
│   ├── Script Includes/
│   │   ├── API Model Template for New Application/
│   │   │   ├── AbstractStrategy.js
│   │   │   ├── AbstractStrategyBase.js
│   │   │   ├── ApplicationCore.js
│   │   │   ├── ApplicationCoreBase.js
│   │   │   ├── Engine.js
│   │   │   ├── EngineBase.js
│   │   │   ├── ExampleObject.js
│   │   │   ├── ExampleObjectBase.js
│   │   │   ├── ExampleStrategy1.js
│   │   │   ├── ExampleStrategy1Base.js
│   │   │   ├── ExampleStrategy2.js
│   │   │   ├── ExampleStrategy2Base.js
│   │   │   └── README.md
│   │   ├── Add Business Days/
│   │   │   ├── README.md
│   │   │   └── addBusinessDays.js
│   │   ├── Add and Remove Group Member/
│   │   │   ├── README.md
│   │   │   └── groupMember.js
│   │   ├── Advanced REST API Integration with Retry Logic/
│   │   │   ├── README.md
│   │   │   ├── RESTIntegrationExample.js
│   │   │   └── RESTIntegrationHandler.js
│   │   ├── Approval Rule Builder/
│   │   │   ├── ApprovalRuleBuilder.js
│   │   │   └── README.md
│   │   ├── Array prototypes/
│   │   │   ├── ArrayPrototypes.js
│   │   │   └── README.md
│   │   ├── ArrayUtil/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Assign role for a day Util/
│   │   │   ├── AssignRoleToUserForADay.js
│   │   │   └── README.md
│   │   ├── Auto Execute Import Set on File Attachment/
│   │   │   ├── CreateImportSetAndRunTransform.js
│   │   │   ├── CreateSysTrigger.js
│   │   │   └── README.md
│   │   ├── Autopopulate caller location in short description/
│   │   │   ├── README.md
│   │   │   ├── getCallerLocation.js
│   │   │   └── updateCallerLocationinShortDesc.js
│   │   ├── BackfillAssignmentGroup/
│   │   │   ├── BackfillAssignmentGroup.js
│   │   │   └── README.md
│   │   ├── BenchmarkRunner/
│   │   │   ├── BenchmarkRunner.js
│   │   │   └── README.md
│   │   ├── CSV Parser/
│   │   │   ├── CSVParser.js
│   │   │   └── README.md
│   │   ├── CacheHelper/
│   │   │   ├── CacheHelper.js
│   │   │   └── README.md
│   │   ├── Calculate Business days dynamically/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Catalog Item Pricing/
│   │   │   ├── README.md
│   │   │   └── calculate_catalog_item_price.js
│   │   ├── CatalogUtils/
│   │   │   ├── CatalogUtils.js
│   │   │   └── README.md
│   │   ├── Check User Criteria for Catalog Item/
│   │   │   ├── README.md
│   │   │   └── checkUserCriteria.js
│   │   ├── Check User Has Role/
│   │   │   ├── README.md
│   │   │   └── UserHasRole.js
│   │   ├── Check Valid Choice/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check writer/
│   │   │   ├── CheckWriter.js
│   │   │   └── README.md
│   │   ├── Client and Server Callable Script Include/
│   │   │   ├── README.md
│   │   │   └── script include.js
│   │   ├── Collect Field Values from Any One Table Record/
│   │   │   └── universalRecordCollector.js
│   │   ├── Collect Field Values from Any Table/
│   │   │   └── README.md
│   │   ├── CommandInjectionChecker/
│   │   │   ├── CommandInjectionChecker.js
│   │   │   └── README.md
│   │   ├── ConnectionCredentialsUtils/
│   │   │   ├── ConnectionCredentialUtils.js
│   │   │   └── README.md
│   │   ├── ConversationUtils/
│   │   │   ├── ConversationUtils.js
│   │   │   └── README.md
│   │   ├── Convert base64 to Hex (Object GUID)/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Convert image into base64/
│   │   │   ├── Convert image into base63 encoded string.js
│   │   │   └── README.md
│   │   ├── Copy record Attachment to Email Client/
│   │   │   ├── CopyAttachmentToEmailClient.js.js
│   │   │   └── ReadMe.md
│   │   ├── Count Assigned To Field/
│   │   │   ├── README.md
│   │   │   └── countAssignedUtil.js
│   │   ├── Create Multiple RITMS from MRVS/
│   │   │   ├── CreateMultipleRITMSFromMRVS.js
│   │   │   └── README.md
│   │   ├── Custom Discovery Schedule With Freeze Periods/
│   │   │   ├── DiscoveryScheduleWithFreezePriod.js
│   │   │   └── README.md
│   │   ├── CustomArrayUtils/
│   │   │   ├── CustomArrayUtils.js
│   │   │   └── README.md
│   │   ├── CustomDateUtils/
│   │   │   ├── CustomDateUtils.js
│   │   │   └── README.md
│   │   ├── CustomObjectUtils/
│   │   │   ├── CustomObjectUtils.js
│   │   │   └── README.md
│   │   ├── CustomUserUtils/
│   │   │   ├── CustomUserUtils.js
│   │   │   └── README.md
│   │   ├── Data Lookup Table Utils/
│   │   │   ├── DataLookupUtils.js
│   │   │   └── README.md
│   │   ├── Data Normalizer/
│   │   │   ├── README.md
│   │   │   └── dataNormalizer.js
│   │   ├── Delete Multiple Records Async/
│   │   │   ├── DeleteMultipleRecordsAsync.js
│   │   │   └── README.md
│   │   ├── Deprecate Field/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Developer Debug Utility/
│   │   │   ├── DeveloperDebugUtility.js
│   │   │   └── README.md
│   │   ├── Dynamic Dropdown List/
│   │   │   ├── Client.js
│   │   │   ├── README.md
│   │   │   └── UtilScript.js
│   │   ├── Dynamic Record Archiving/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Emotion-Aware/
│   │   │   ├── EmotionAnalyzer.js
│   │   │   └── README.md
│   │   ├── EvtMgmtCustom_PostTransformHandler/
│   │   │   ├── EvtMgmtCustom_PostTransformHandler.js
│   │   │   └── README.md
│   │   ├── Excel Attachment Via script/
│   │   │   ├── README.md
│   │   │   └── excelAttachment.js
│   │   ├── Excel Parser/
│   │   │   ├── README.md
│   │   │   └── excelParser.js
│   │   ├── Execution Time Tracker/
│   │   │   ├── README.md
│   │   │   └── execution_time_tracker.js
│   │   ├── Extending OOB TableUtils/
│   │   │   ├── EXT_TablesUtils.js
│   │   │   └── README.md
│   │   ├── Filter record/
│   │   │   ├── read.md
│   │   │   └── script.js
│   │   ├── Financial Service Utilities/
│   │   │   ├── FinancialServiceUtilities.js
│   │   │   └── README.md
│   │   ├── Find months between two dates/
│   │   │   ├── DateUtil.js
│   │   │   └── README.md
│   │   ├── Generate QR Code and attach to RITM/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Approvers of a Ticket/
│   │   │   ├── GetApproversForATicket.js
│   │   │   └── README.md
│   │   ├── Get Choice Display Value/
│   │   │   ├── README.md
│   │   │   └── getChoiceDisplayValue.js
│   │   ├── Get Current User Information/
│   │   │   ├── README.md
│   │   │   └── getCurrentUserInformation.js
│   │   ├── Get Field Label in Specific Language/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Group Members/
│   │   │   ├── README.md
│   │   │   └── getGroupMembers.js
│   │   ├── Get Profile Picture/
│   │   │   ├── README.md
│   │   │   └── getProfilePicture.js
│   │   ├── Get Reference Display Value/
│   │   │   ├── README.md
│   │   │   └── getReferenceDisplayValue.js
│   │   ├── Get User Data by Id/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── GetCallerDetails/
│   │   │   ├── Calling Script Include from client.js
│   │   │   ├── README.md
│   │   │   └── scriptinclude.js
│   │   ├── GetClickableURL/
│   │   │   ├── readme.md
│   │   │   └── scipt.js
│   │   ├── GetServiceDeskAgentHelpAIUtil/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── GlideDateTimeUtils/
│   │   │   ├── ClientDateTimeUtils.js
│   │   │   └── README.md
│   │   ├── GlideRecord to JSON/
│   │   │   ├── README.md
│   │   │   └── gr2obj.js
│   │   ├── GlideRecordHelper/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── GroupMembershipUtils for client and server/
│   │   │   ├── groupMembershipUtils.js
│   │   │   └── readme.md
│   │   ├── HTMLUtils/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Hybrid Script Include for AJAX or Server Side Parameters/
│   │   │   ├── README.md
│   │   │   └── ScriptInclude.js
│   │   ├── Inactive User/
│   │   │   ├── InactiveUserCleanup.js
│   │   │   └── README.md
│   │   ├── Install base items with active cases/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── JSON Mapping for Incident Creation/
│   │   │   ├── JsonMapping.js
│   │   │   └── README.md
│   │   ├── JSONPath/
│   │   │   ├── JSONPath.js
│   │   │   └── README.md
│   │   ├── JSONtoYAML/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── KBArticleExpPDF/
│   │   │   ├── ArticlePDFHelper.js
│   │   │   └── README.md
│   │   ├── ListFieldUtil/
│   │   │   ├── ListFieldUtil.js
│   │   │   └── README.md
│   │   ├── Log Utils/
│   │   │   ├── Code.js
│   │   │   └── README.md
│   │   ├── Logger/
│   │   │   ├── Logger.js
│   │   │   └── README.md
│   │   ├── ManagerRecursiveUtil/
│   │   │   ├── README.md
│   │   │   └── RecursiveByManager.js
│   │   ├── Match URL with a String/
│   │   │   ├── MatchURLByRegex.js
│   │   │   └── README.md
│   │   ├── Next Business Window Calculator/
│   │   │   ├── README.md
│   │   │   └── next_business_window.js
│   │   ├── Non Prod Instance Password Reset/
│   │   │   ├── README.md
│   │   │   └── passwordReset.js
│   │   ├── NonProdLogUtils/
│   │   │   ├── LogUtilsNonProd.js
│   │   │   └── README.md
│   │   ├── NotificationUtil/
│   │   │   ├── NotificationUtil.js
│   │   │   └── README.md
│   │   ├── Number Padding/
│   │   │   ├── README.md
│   │   │   └── numberPadding.js
│   │   ├── OAuth token helper/
│   │   │   ├── OAuthTokenHelper.js
│   │   │   └── README.md
│   │   ├── OrderedRecords/
│   │   │   ├── README.md
│   │   │   └── orderedRecords.js
│   │   ├── PII Redactor/
│   │   │   ├── README.md
│   │   │   └── piiRedaction.js
│   │   ├── Password Generator with specific length/
│   │   │   ├── PasswordGenerator.js
│   │   │   └── README.md
│   │   ├── PerformanceAnalyticsUtils/
│   │   │   ├── PerformanceAnalyticsUtils.js
│   │   │   └── README.md
│   │   ├── Populate MRVS from Excel/
│   │   │   ├── ParsingScript.js
│   │   │   └── README.md
│   │   ├── Prevent circular dependencies in task relationships/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Project Base Line/
│   │   │   ├── README.md
│   │   │   └── latestPlannedBaseline.js
│   │   ├── Public Script Include search/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── PullEmptySerialNumberAssetRecords/
│   │   │   ├── README.md
│   │   │   └── pull_empty_serial_number_record.js
│   │   ├── Query ldap server/
│   │   │   ├── LDAPquery.js
│   │   │   └── README.md
│   │   ├── Read CSV file from Mid Server/
│   │   │   ├── CSVReaderUtil.js
│   │   │   └── README.md
│   │   ├── RecordProducerVariableUtils/
│   │   │   ├── README.md
│   │   │   ├── RecordProducerVariableUtils_v1.0.xml
│   │   │   └── script.js
│   │   ├── Records Calculator/
│   │   │   ├── README.md
│   │   │   └── RecordsCalculator.js
│   │   ├── Recursive GlideRecord Fetcher/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Regex utils/
│   │   │   ├── README.md
│   │   │   └── RegexUtils.js
│   │   ├── Reparent Table/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Request Approval Helper/
│   │   │   ├── README.md
│   │   │   └── RequestApprovalHelper.js
│   │   ├── RequestNotificationUtil/
│   │   │   ├── README.md
│   │   │   └── RequestNotificationUtil.js
│   │   ├── RestMessageUtils/
│   │   │   ├── README.md
│   │   │   └── RestMessageUtils.js
│   │   ├── Retrieve Last Comment by Ticket/
│   │   │   ├── README.md
│   │   │   └── RetrieveLastCommentByTicket.js
│   │   ├── Return Object/
│   │   │   ├── README.md
│   │   │   └── ReturnObject.js
│   │   ├── Role Checker Util/
│   │   │   ├── README.md
│   │   │   └── checkUserRole.js
│   │   ├── Root-Cause Predictor/
│   │   │   ├── README.md
│   │   │   └── incident.js
│   │   ├── SCIM Custom Mapping Handler/
│   │   │   ├── README.md
│   │   │   └── SCIMCustomMappingHandler.js
│   │   ├── SCIM Payload Generator/
│   │   │   ├── GenerateSCIMPayload.js
│   │   │   └── README.md
│   │   ├── SQLInjectionChecker/
│   │   │   ├── README.md
│   │   │   └── SQLInjectionChecker.js
│   │   ├── SRAPIUtil/
│   │   │   ├── README.md
│   │   │   └── SRAPIUtil.js
│   │   ├── Safe Bulk Update Runner/
│   │   │   ├── README.md
│   │   │   └── safe_bulk_update_runner.js
│   │   ├── Scheduled Recursion/
│   │   │   ├── README.md
│   │   │   ├── background_script.js
│   │   │   └── scheduled_recursion.js
│   │   ├── Script Include Usage Tracker/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Sends Slack/
│   │   │   └── Teams notifications when specific fields change on configured tables/
│   │   │       ├── README.md
│   │   │       └── code.js
│   │   ├── Single Sign-On (SSO) Direct Login URL Generator/
│   │   │   ├── README.md
│   │   │   └── UserHelper.js
│   │   ├── Slack JSON Block Factory/
│   │   │   ├── README.md
│   │   │   ├── Slacktory.js
│   │   │   └── sys_script_include_config.md
│   │   ├── SmartData/
│   │   │   ├── SmartData.scriptinclude.js
│   │   │   ├── SmartDataAjax.scriptinclude.js
│   │   │   └── readme.md
│   │   ├── Standard Change Creator/
│   │   │   ├── README.md
│   │   │   ├── sys_script_include.js
│   │   │   └── sys_script_include_config.md
│   │   ├── StarterPack/
│   │   │   ├── AjaxClientScript.js
│   │   │   ├── AjaxSI.js
│   │   │   ├── README.md
│   │   │   ├── classless.js
│   │   │   ├── constants.js
│   │   │   ├── reference.js
│   │   │   └── utilsExample.js
│   │   ├── Stopwatch/
│   │   │   ├── README.md
│   │   │   └── Stopwatch.js
│   │   ├── Store data in User Session/
│   │   │   ├── README.md
│   │   │   └── storeDataInSession.js
│   │   ├── StripHTML/
│   │   │   ├── README.md
│   │   │   └── StripHTML.js
│   │   ├── SubProdLogger/
│   │   │   ├── README.md
│   │   │   └── SubProdLogger.js
│   │   ├── Table List Copy Context Options/
│   │   │   ├── Copy Field Display Value Context Menu.js
│   │   │   ├── Copy Field Name Context Menu.js
│   │   │   ├── Copy Field Value Context Menu.js
│   │   │   ├── README.md
│   │   │   └── Script Include.js
│   │   ├── TableUtils Extension/
│   │   │   ├── Enhanced_TableUtils.js
│   │   │   └── README.md
│   │   ├── Testing Script Include Using Jasmine/
│   │   │   ├── README.md
│   │   │   ├── Sample Calculator Script Include.js
│   │   │   └── Sample Jasmine Script.js
│   │   ├── TimeZoneUtils/
│   │   │   ├── README.md
│   │   │   └── TimeZoneUtils.js
│   │   ├── TinyURLHelper/
│   │   │   ├── README.md
│   │   │   └── TinyUrlHelper.js
│   │   ├── TranslationUtil/
│   │   │   ├── README.md
│   │   │   └── translationUtil.js
│   │   ├── Translations Import/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── UnloadXml/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── UpdateWatchlistFromJSON/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── UserCriteriaUtil/
│   │   │   ├── README.md
│   │   │   └── UserCriteriaUtil.js
│   │   ├── UserUtil/
│   │   │   ├── README.md
│   │   │   └── UserUtil.js
│   │   ├── Validate Data Before Insert/
│   │   │   ├── DataValidationUtils.js
│   │   │   └── README.md
│   │   ├── VariableHelper/
│   │   │   ├── README.md
│   │   │   └── variableHelper.js
│   │   ├── VariableToDescription/
│   │   │   ├── README.md
│   │   │   └── VariableToDescription.js
│   │   ├── attachments/
│   │   │   ├── README.md
│   │   │   └── attachment.js
│   │   ├── get field values for multiple records from a table/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── getCountFunction/
│   │   │   ├── README.md
│   │   │   ├── callingSI.js
│   │   │   └── code.js
│   │   ├── getGlideRecordObject/
│   │   │   ├── README.md
│   │   │   └── getGlideRecordObject.js
│   │   └── regexCheckerScript/
│   │       ├── README.md
│   │       └── regexCheckerScript.js
│   ├── Server Side/
│   │   ├── CallScriptIncludeWithParameters/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── CheckTableExtension/
│   │   │   ├── README.md
│   │   │   └── istableextended.js
│   │   ├── Create Admin Users/
│   │   │   ├── README.md
│   │   │   └── create_admin_user.js
│   │   ├── Create Tiny Url with API's/
│   │   │   ├── README.md
│   │   │   └── tinyUrl.js
│   │   ├── CreateUpdateCIThroughIRE/
│   │   │   ├── README.md
│   │   │   └── createupdateciinire.js
│   │   ├── Custom Relationship/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── DiscoveryDeviceHistory/
│   │   │   ├── devicehistory.js
│   │   │   └── readme.me
│   │   ├── Dynamic Catalog Task Creation/
│   │   │   ├── README.md
│   │   │   └── dynamic_catalog_task.js
│   │   ├── Email Bounce Alert System/
│   │   │   ├── Email_Bounce_Alert_System.js
│   │   │   └── README.md
│   │   ├── ExecuteWorkOnMidServer/
│   │   │   ├── README.md
│   │   │   └── executeworkonmid.js
│   │   ├── Fetch dynamic value from decision table/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── FetchJSONObject/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Generate Attachment and add it to the email/
│   │   │   ├── README.md
│   │   │   └── emailAttachment.js
│   │   ├── Get all Catalog items associated to variable set/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get all variables of catalog item/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── MarkInactiveUsersonList/
│   │   │   ├── README.md
│   │   │   └── fieldStyleforListfields.js
│   │   ├── Parse csv file and read each row/
│   │   │   ├── README.md
│   │   │   └── read csv logic.js
│   │   ├── Phone Number formating(US Region)/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Random Password generator/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Record as Link/
│   │   │   ├── README.md
│   │   │   ├── example-pdf-generation.js
│   │   │   └── recordAsLink.js
│   │   ├── Remove HTML Tags/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Restart Flow on RITM/
│   │   │   ├── README.md
│   │   │   └── restartFlow.js
│   │   ├── Restart a workflow via any server side script/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Trigger Assessments through Script/
│   │   │   ├── README.md
│   │   │   └── trigger assessment.js
│   │   ├── Update Sets Scopes Issues Fix Automation/
│   │   │   ├── FixUpdatesScope.js
│   │   │   ├── PreventCompletiononScopeConflict.js
│   │   │   ├── README.md
│   │   │   └── UpdateSetUtilCustom.js
│   │   ├── Update Variable Choices/
│   │   │   ├── README.md
│   │   │   └── updateVariableChoices.js
│   │   ├── Use System Property as an Object to Store Multiple Values and Retrieve Attributes When Needed/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── User Criteria/
│   │   │   ├── Does User Match Criteria(s).js
│   │   │   └── README.md
│   │   ├── Version 4 UUID Generator/
│   │   │   ├── README.md
│   │   │   └── uuid_generator.js
│   │   └── getUserGroupMembers/
│   │       ├── README.md
│   │       └── script.js
│   └── Transform Map Scripts/
│       ├── Check if the Import file is valid/
│       │   ├── README.md
│       │   └── script.js
│       ├── Choice Field Validator/
│       │   ├── README.md
│       │   └── choiceValidatorUtil.js
│       ├── Conditional Coalesce/
│       │   ├── README.md
│       │   └── conditional_coalasce.js
│       ├── Email Formatter/
│       │   ├── README.md
│       │   └── emailFormatterValidator
│       ├── Global Variable in Transform Map/
│       │   ├── README.md
│       │   ├── manager_email_to_sysid_map_onStartScript.js
│       │   └── onBefore_transform_script.js
│       ├── Incident Priority Set on Insert Only/
│       │   ├── README.md
│       │   └── onBefore_set_priority_insert_only.js
│       └── Verify headers of a CSV attached file/
│           ├── README.md
│           ├── example.csv
│           └── verifyCSVHeaders.js
├── Specialized Areas/
│   ├── ATF Steps/
│   │   ├── Count table records/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   └── Validate RITM Due Date/
│   │       ├── README.md
│   │       └── atf_ritm_due_date_script.js
│   ├── Advanced Conditions/
│   │   ├── Exclude Email Reply Comment Notifications by Group/
│   │   │   ├── README.md
│   │   │   └── exclude_email_reply_comment_notifications_by_group.js
│   │   └── Group Approval Check/
│   │       ├── README.md
│   │       └── group_approval_check.js
│   ├── Agile Development/
│   │   └── Burndown Chart/
│   │       ├── README.md
│   │       ├── requirements.txt
│   │       └── sprint_burndown_chart.py
│   ├── Browser Bookmarklets/
│   │   ├── Copy URL to ServiceNow Journal/
│   │   │   ├── README.md
│   │   │   └── copy url to servicenow journal.js
│   │   ├── Create new update set/
│   │   │   ├── README.md
│   │   │   └── create_update_set.js
│   │   ├── Create story task/
│   │   │   ├── README.md
│   │   │   └── create_story_task.js
│   │   ├── Highlight Mandatory fields on form/
│   │   │   ├── Highlight mandatory fields on form.js
│   │   │   └── README.md
│   │   ├── Impersonation/
│   │   │   ├── README.md
│   │   │   └── impersonation.js
│   │   ├── Load List with Query/
│   │   │   ├── listquery.html
│   │   │   └── readme.md
│   │   ├── Open copied record/
│   │   │   ├── README.md
│   │   │   └── open copied record bookmarklet.js
│   │   ├── Open g_form modal/
│   │   │   ├── Open modal to use g_form.js
│   │   │   └── README.md
│   │   ├── Open record in another instance/
│   │   │   ├── Open record in another instance.js
│   │   │   └── README.md
│   │   ├── Open tinymce for journal/
│   │   │   ├── Open tinymce editor in modal for journal fields.js
│   │   │   └── README.md
│   │   ├── Quick Notes/
│   │   │   ├── README.md
│   │   │   └── quick_note.html
│   │   ├── Quick login to current instance/
│   │   │   ├── Quick login.js
│   │   │   └── README.md
│   │   ├── ServiceNow Instance Collection/
│   │   │   ├── README.md
│   │   │   └── bookmarklets.html
│   │   └── Show Logged-in User roles/
│   │       ├── readme.md
│   │       └── user_info_bookmarklet.js
│   ├── Browser Utilities/
│   │   └── Custom Search Engines/
│   │       └── README.md
│   ├── CMDB/
│   │   ├── CMDB CI Deduplication Task Generator/
│   │   │   ├── CI Deduplication Tasks Generation with UI Action.js
│   │   │   └── README.md
│   │   ├── CMDB Dynamic Status Update Function/
│   │   │   ├── README.md
│   │   │   └── updateCMDBOperationalStatus.js
│   │   ├── CMDB Get CI Relationships/
│   │   │   ├── README.md
│   │   │   └── getCIRelationships.js
│   │   ├── CMDB Health Check/
│   │   │   ├── README.md
│   │   │   └── health_check.js
│   │   ├── CMDB Utility Scripts/
│   │   │   ├── README.md
│   │   │   ├── ReadME.md
│   │   │   ├── TechTrekwithAJ-AutoPopulateManufacturer.js
│   │   │   ├── detectDuplicateCIs.js
│   │   │   ├── populateMissingManufacturers.js
│   │   │   ├── softwareCreation.js
│   │   │   ├── softwareCreationREADME.md
│   │   │   └── unUsedCIs.js
│   │   ├── CMDB record count/
│   │   │   ├── README.md
│   │   │   ├── TechTrekwithAJ-CMDBCIcountonclass.js
│   │   │   ├── TechTrekwithAJ-readme.md
│   │   │   └── cmdb-record-count.js
│   │   ├── CSDM Maturity Report/
│   │   │   ├── README.md
│   │   │   └── csdm-maturity-report.js
│   │   ├── IRE Errors/
│   │   │   ├── IRE Errors.js
│   │   │   └── README.md
│   │   ├── IRE Queridentify/
│   │   │   ├── Identify and query with IRE.js
│   │   │   └── README.md
│   │   ├── Mandatory Field Analysis/
│   │   │   ├── README.md
│   │   │   ├── TechTrekwithAJ-CMDBMandatoryfieldanalysis.js
│   │   │   ├── TechTrekwithAJ-cmdbmandatoryfielddescription_readme.md
│   │   │   └── mandatory-field-analysis.js
│   │   └── UnsyncCI from Asset/
│   │       ├── readme.md
│   │       └── script.js
│   ├── Cost Optimization/
│   │   └── Instance Cost Analyzer/
│   │       ├── README.md
│   │       ├── cost_analyzer.js
│   │       └── scheduled_job.js
│   ├── Data Quality/
│   │   └── Similarity Calculator/
│   │       ├── Change Table/
│   │       │   ├── README.md
│   │       │   └── similarity_change_calculator.js
│   │       └── Incident Table/
│   │           ├── README.md
│   │           └── similarity_incident_calculator.js
│   ├── Dynamic Filters/
│   │   └── getMyDirectReports/
│   │       ├── README.md
│   │       └── getMyReportsUtil.js
│   ├── Fix scripts/
│   │   ├── Add Fields On All List Views/
│   │   │   ├── AddFieldsToLists.js
│   │   │   └── README.md
│   │   ├── Add Variable set to multiple catalog items/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Add bulk users to VTB/
│   │   │   ├── README.md
│   │   │   └── addBulkUsersToVTB.js
│   │   ├── Adjust Variable Order on Catalog Item/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Anonymise Data/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Assign user list to a specific group/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Authenticate using ScriptedRESTAPI/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── AutoNumberIssueFix/
│   │   │   ├── README.md
│   │   │   └── autonumberingcode.js
│   │   ├── Bulk Update Catalog Item Images/
│   │   │   ├── README.md
│   │   │   └── bulk-cat-item-image-update.js
│   │   ├── Calculate Business Duration/
│   │   │   ├── README.md
│   │   │   └── calculate-business-duration.js
│   │   ├── Cancel Struck Slack Conversations/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Cancel Workflow/
│   │   │   ├── Cancel Workflow Context.js
│   │   │   └── README.md
│   │   ├── Cancel in progress flow executions using flow name/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check if Fiscal Year is safe for deletion/
│   │   │   ├── Check if Fiscal Year is safe for deletion
│   │   │   └── README.md
│   │   ├── Clean update set/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Copy favourite to other users/
│   │   │   ├── README.md
│   │   │   └── favCopy.js
│   │   ├── CreateMultipleRecords/
│   │   │   ├── Add Manager to Group
│   │   │   ├── README.md
│   │   │   └── create_multiple_records.js
│   │   ├── De-Provision Admin user (configurable)/
│   │   │   ├── README.md
│   │   │   └── deprovisionAdmin.js
│   │   ├── Delete Change Conflict/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Delete Duplicate Mobile records/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Employee document management/
│   │   │   ├── read.md
│   │   │   └── regenerate_document.js
│   │   ├── Find Reports Assigned to inactive Groups/
│   │   │   ├── README.md
│   │   │   └── reportAssignedToInactiveGroups.js
│   │   ├── Find duplicate records/
│   │   │   ├── Find duplicate records.js
│   │   │   ├── README.md
│   │   │   ├── TechTrekwithAJ_DuplicateCIreadme.md
│   │   │   └── TechTrekwithAJ_FindDuplicateonCMDB_CI.JS
│   │   ├── Find the reports assigned to Inactive Users/
│   │   │   ├── README.md
│   │   │   └── reportsassignedtoinactiveusers.js
│   │   ├── Fiscal period renamer/
│   │   │   ├── README.md
│   │   │   └── fiscal period renamer.js
│   │   ├── Fix model names after enabling glide.cmdb_model.display_name.shorten/
│   │   │   ├── README.md
│   │   │   └── fixModelNames.js
│   │   ├── Fix teams token/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Format JSON in String Fields/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Catalog Items not used in last few months/
│   │   │   ├── README.md
│   │   │   └── getUnusedCatItems.js
│   │   ├── Group Sync Script/
│   │   │   ├── README.md
│   │   │   └── fix_script.js
│   │   ├── Ignore outbound emails/
│   │   │   ├── README.md
│   │   │   └── ignoremail.js
│   │   ├── Install Base PDI Plugins/
│   │   │   ├── README.md
│   │   │   └── install_plugins.js
│   │   ├── Install Demo Data/
│   │   │   ├── InstallDemoData.js
│   │   │   └── README.md
│   │   ├── Log out active User sessions/
│   │   │   ├── README.md
│   │   │   └── log_out_active_user_sessions.js
│   │   ├── Mass Email Domain Update/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Mass Update RITM Variable/
│   │   │   ├── README.md
│   │   │   └── Update RITM Variable.js
│   │   ├── Measure code time execution/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Merge stages or choice/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Migrate data from one table to another/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Multiply records from filer breadcrumbs/
│   │   │   ├── Multiply records.js
│   │   │   └── README.md
│   │   ├── Post-clone Clear Email Queue/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Post-clone Email Properties Script/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Post-clone Set Banner Name/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Post-clone Set Instance Banner/
│   │   │   ├── README.md
│   │   │   └── set_instance_banner.js
│   │   ├── Reject RITM via fix script/
│   │   │   ├── README.md
│   │   │   └── Reject RITM.js
│   │   ├── Remove User Groups/
│   │   │   ├── README.md
│   │   │   └── removeuser.js
│   │   ├── Remove extra spaces/
│   │   │   ├── readme.md
│   │   │   └── removeSpaces.js
│   │   ├── Remove leading and trailing spaces/
│   │   │   ├── README.md
│   │   │   └── RemoveLeadingTrailingSpaces.js
│   │   ├── Replace inactive group managers with group members/
│   │   │   └── script.js
│   │   ├── Restart Flow (CatalogItem)/
│   │   │   ├── README.md
│   │   │   └── restart_flow.js
│   │   ├── Restore From Audit History/
│   │   │   ├── README.md
│   │   │   └── restore_from_audit_fix.js
│   │   ├── Run Subscription Job On Demand/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── SchemaGenerator/
│   │   │   ├── README.md
│   │   │   ├── cmdb_ci_server_schema.json
│   │   │   └── schemaGenerator.js
│   │   ├── Search Results Weight/
│   │   │   ├── README.md
│   │   │   └── sr_weight.js
│   │   ├── Swiss German Language Update/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Sync Data Between Instances/
│   │   │   ├── README.md
│   │   │   └── SyncData.js
│   │   ├── Syslog_top10Contributors/
│   │   │   ├── README.md
│   │   │   └── syslog_script.js
│   │   ├── Update field with value in sys_audit/
│   │   │   ├── README.md
│   │   │   └── updateFromAudit.js
│   │   ├── Updateset checker/
│   │   │   ├── README.md
│   │   │   └── Updateset_checker.js
│   │   ├── cleanupOrphanedWorkflowContexts/
│   │   │   ├── README.md
│   │   │   └── cleanupOrphanedWorkflowContexts.js
│   │   ├── deleteMultiple/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── get Groups without Member/
│   │   │   ├── README.md
│   │   │   └── getGroupsWithoutMember.js
│   │   ├── update variable role/
│   │   │   ├── README.md
│   │   │   └── updateWriteRolesOfVariables.js
│   │   └── updateMultipleRecords/
│   │       ├── README.md
│   │       ├── readme.md
│   │       ├── update_multiple_records.js
│   │       └── update_multiple_records_v2.js
│   ├── Flow Actions/
│   │   ├── Add signature and update fields to a fillable PDF document/
│   │   │   ├── README.md
│   │   │   └── pdf_signature.js
│   │   ├── Adhoc Assessment Generator Flow Action/
│   │   │   ├── Assessment.js
│   │   │   └── README.md
│   │   ├── Assign Role/
│   │   │   ├── README.md
│   │   │   └── assignRole.js
│   │   ├── Calculate Ticket Age/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Check MID Server Availability/
│   │   │   ├── README.md
│   │   │   └── check_mid_server_availablility.js
│   │   ├── Create Student Weekday Pickup Schedule/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Data Stream/
│   │   │   ├── README.md
│   │   │   └── pagination-setup.js
│   │   ├── Extract JSON Key without Flow Transformation/
│   │   │   ├── README.md
│   │   │   └── remove-html-tags.js
│   │   ├── Generate unique value based on sequence/
│   │   │   ├── README.md
│   │   │   └── next-unique-sequence.js
│   │   ├── Get Days difference/
│   │   │   ├── README.md
│   │   │   └── getDaysDifference.js
│   │   ├── Get KB Article Permalink/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Get Property/
│   │   │   ├── README.md
│   │   │   └── getPropertyFlowAction.js
│   │   ├── Get choice field value (mitigating known error)/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── GetIPRange/
│   │   │   ├── README.md
│   │   │   └── getIPRange.js
│   │   ├── Group Similar Assessments Using Flow Designer Action Native UI/
│   │   │   ├── FlowAction.js
│   │   │   └── readme.md
│   │   ├── How to refer MID server cluster in integration flow step/
│   │   │   ├── MID Server Cluster.js
│   │   │   └── README.md
│   │   ├── Look Up MRVS Rows/
│   │   │   ├── LookUpMrvsRowIndex.js
│   │   │   └── README.md
│   │   ├── Look up Support group of CI/
│   │   │   ├── LookUpSupportGroupFromCI.js
│   │   │   └── README.md
│   │   ├── Milliseconds to Duration/
│   │   │   ├── README.md
│   │   │   └── millisecondsToDuration.js
│   │   ├── Remove HTML Tags from a String in a Flow/
│   │   │   ├── README.md
│   │   │   └── removeHtmlTags.js
│   │   ├── Runscript activities/
│   │   │   ├── CatalogvariablesSummary.js
│   │   │   └── README.md
│   │   ├── Scheduled data import trigger/
│   │   │   ├── README.md
│   │   │   └── Scheduled data import trigger.js
│   │   ├── ShuffleArrayMatches/
│   │   │   ├── README.md
│   │   │   └── Shuffle Array Matches.js
│   │   ├── Trigger event action/
│   │   │   ├── README.md
│   │   │   └── trigger event flow action.js
│   │   ├── Validate MID servers status inside cluster/
│   │   │   ├── MID Server Availibility inside MID Server Cluster.js
│   │   │   └── README.md
│   │   └── get Catalog Variables as JSON/
│   │       ├── README.md
│   │       └── getCatVarsAsJson.js
│   ├── Formula Builder/
│   │   ├── Formula builder overview/
│   │   │   └── README.md
│   │   └── Get Age From Birthdate/
│   │       ├── README.md
│   │       └── script.js
│   ├── ITOM/
│   │   ├── Bulk Location Update/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Discovery/
│   │   │   ├── Pre README.md
│   │   │   ├── PrePost Pattern designer.js
│   │   │   ├── README.md
│   │   │   └── Script to trigger quick discovery from workflow or flow.js
│   │   ├── Generate Discovery Schedule/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   └── Track Discovery Status/
│   │       ├── CheckDiscoveryStatus.js
│   │       ├── ReadME.md
│   │       ├── discovery_ip_status.js
│   │       └── readme.md
│   ├── Notifications/
│   │   ├── Add KB Article Link Dynamic Email Script to Notification/
│   │   │   ├── readme.md
│   │   │   └── script.js
│   │   ├── Conditional Trigger/
│   │   │   ├── Notification_AdvancedCondition.js
│   │   │   └── README.md
│   │   ├── Modern Email Layout Designs/
│   │   │   ├── Readme.md
│   │   │   └── script.html
│   │   └── Notify Users on Specific Date/
│   │       ├── NotifyUsers.js
│   │       └── README.md
│   ├── On-Call Calendar/
│   │   └── Show group on-call schedule/
│   │       ├── README.md
│   │       └── show_group_on_call_schedule.js
│   ├── Performance Analytics/
│   │   └── Configure Indicators in Batch/
│   │       ├── ConfigurePAIndicators.js
│   │       └── README.md
│   ├── Predictive Intelligence/
│   │   └── Training Data Preparer/
│   │       ├── CMDB Configuration Items/
│   │       │   ├── README.md
│   │       │   └── analyze_cmdb_data_training_quality.js
│   │       ├── Change Table/
│   │       │   ├── README.md
│   │       │   └── analyze_change_data_training_quality.js
│   │       ├── Incident Table/
│   │       │   ├── README.md
│   │       │   └── analyze_incident_data_training_quality.js
│   │       └── Problem Table/
│   │           ├── README.md
│   │           └── analyze_problem_data_training_quality.js
│   ├── Project Management/
│   │   └── Create Explain Project EAC (Estimate At Completion) Value/
│   │       ├── Create Explain Project EAC (Estimate At Completion) Value
│   │       └── README.md
│   ├── Record Producer/
│   │   ├── Create Records By Import Set/
│   │   │   ├── README.md
│   │   │   └── createRecordsByImportSet.js
│   │   └── Update Incident Record from Record Producer/
│   │       ├── README.md
│   │       └── code_snippet.js
│   ├── Regular Expressions/
│   │   ├── Adhaar validation/
│   │   │   ├── Adhaar Validation Script.js
│   │   │   └── README.md
│   │   ├── Allow Characters + - ) ( for Phone numbers/
│   │   │   ├── README.md
│   │   │   └── allowsCharsForPhnNumber.js
│   │   ├── AllowAnyLanguage/
│   │   │   ├── README.md
│   │   │   └── allowanylanguage.js
│   │   ├── Check for special characters/
│   │   │   ├── readme.md
│   │   │   └── specialcharacter.js
│   │   ├── Check if number has 10 digits/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Consecutive duplicate words/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Credit Card Number Validator/
│   │   │   ├── README.md
│   │   │   └── validateCreditCard.js
│   │   ├── Email Address Validation/
│   │   │   ├── README.md
│   │   │   └── isEmail.js
│   │   ├── Encode spaces for URLs/
│   │   │   ├── README.md
│   │   │   └── convert.js
│   │   ├── Ethiopia country code/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Extracting Product Codes and Prices from a String/
│   │   │   ├── Extracting Product Codes and Prices from a String.js
│   │   │   └── README.md
│   │   ├── Find Emoji/
│   │   │   ├── README.md
│   │   │   └── index.js
│   │   ├── Format mobile into Australian mobile format/
│   │   │   ├── Format phone in Australian mobile format.js
│   │   │   └── README.md
│   │   ├── Hashtag & Mention Extractor/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Hexadecimal color/
│   │   │   ├── README.md
│   │   │   └── validateHexColor.js
│   │   ├── IP Address Validation/
│   │   │   ├── README.md
│   │   │   ├── getIP4OrIPV6address.js
│   │   │   └── validateIPInput.js
│   │   ├── ISBN Validator/
│   │   │   ├── README.md
│   │   │   └── validateISBN.js
│   │   ├── Img Tag Regex validator/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Indian Mobile Numbers/
│   │   │   ├── README.md
│   │   │   └── code.js
│   │   ├── Match URL's from ServiceNow domain/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Negative RegExp for Condition Builder/
│   │   │   ├── NegativeRegExExample.js
│   │   │   └── README.md
│   │   ├── PAN Card Validation Script/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   ├── Password Strength Checker/
│   │   │   ├── README.md
│   │   │   └── passwordStrength.js
│   │   ├── Poland country code/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── Positive int with 2 decimals/
│   │   │   ├── Allow positive and decimal values.js
│   │   │   └── readme.md
│   │   ├── Regular-expression-for-alphanumeric-characters/
│   │   │   ├── AlphanumericCharacters.js
│   │   │   └── README.md
│   │   ├── Remove Extra Spaces/
│   │   │   ├── README.md
│   │   │   └── index.js
│   │   ├── Remove all HTML Tags/
│   │   │   ├── README.md
│   │   │   └── Remove all html tags.js
│   │   ├── Remove newline and carriage return/
│   │   │   ├── README.md
│   │   │   └── remove cr and nl.js
│   │   ├── SSN Formatting/
│   │   │   ├── Index.js
│   │   │   └── README.md
│   │   ├── UK Country Code/
│   │   │   ├── README.md
│   │   │   └── script.js
│   │   ├── URL Validation/
│   │   │   ├── README.md
│   │   │   └── validateURL.js
│   │   ├── Username validation/
│   │   │   ├── README.md
│   │   │   └── Script.js
│   │   └── Validate IPv6 Address/
│   │       ├── README.md
│   │       └── script.js
│   ├── Resource Management/
│   │   └── Resource Capacity And Availability Viewer (Daily Basis)/
│   │       ├── README.md
│   │       └── ResourceCapacityAndAvailabilityViewerDailyBasis.js
│   └── Styles/
│       ├── Add Background Color to a field/
│       │   ├── README.md
│       │   └── style.css
│       ├── Add attachment icon-list view/
│       │   ├── README.md
│       │   ├── style.css
│       │   └── value.js
│       ├── Change text color of a field/
│       │   ├── README.md
│       │   └── style.css
│       ├── Hide MRVS Buttons/
│       │   ├── README.md
│       │   └── styles.html
│       ├── ServiceNow Custom Style/
│       │   ├── README.md
│       │   └── style.css
│       └── Zoom Catalog Image on Hover/
│           ├── CSS.js
│           └── README.md
├── _config.yml
├── assets/
│   ├── css/
│   │   └── custom.css
│   ├── footer.js
│   └── js/
│       └── site.js
├── count-files.js
├── index.html
├── pages/
│   ├── client-side-components.html
│   ├── core-apis.html
│   ├── integration.html
│   ├── modern-development.html
│   ├── server-side-components.html
│   └── specialized-areas.html
└── sitemap.xml
Download .txt
Showing preview only (244K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2297 symbols across 467 files)

FILE: .github/scripts/validate-structure.js
  function resolveDiffRange (line 14) | function resolveDiffRange() {
  function getChangedFiles (line 29) | function getChangedFiles(diffRange) {
  function validateFilePath (line 48) | function validateFilePath(filePath) {
  function main (line 92) | function main() {

FILE: Client-Side Components/Catalog Client Script/Add Label For Attachment/add_label_for_attachment.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Add Rows in MRVS/addrows.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Auto Save Draft Feature/advanced_implementation.js
  function onLoad (line 6) | function onLoad() {
  function initializeDraftManager (line 24) | function initializeDraftManager() {
  function saveAdvancedDraft (line 54) | function saveAdvancedDraft() {
  function restoreLastDraft (line 82) | function restoreLastDraft() {
  function showDraftSelectionDialog (line 100) | function showDraftSelectionDialog(drafts) {
  function promptToRestoreDraft (line 117) | function promptToRestoreDraft(draftInfo) {

FILE: Client-Side Components/Catalog Client Script/Auto Save Draft Feature/basic_implementation.js
  function onLoad (line 6) | function onLoad() {
  function saveDraft (line 20) | function saveDraft() {
  function restoreLastDraft (line 37) | function restoreLastDraft() {

FILE: Client-Side Components/Catalog Client Script/Auto Save Draft Feature/script.js
  function onLoad (line 10) | function onLoad() {
  function saveDraft (line 25) | function saveDraft() {
  function restoreLastDraft (line 43) | function restoreLastDraft() {

FILE: Client-Side Components/Catalog Client Script/Autofilling the request details from previous request/Client script Autofill.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Autopopulate Department/autopopulateDepartment.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Autopopulate user information fields/onChangeClientScript.js
  function onChange (line 7) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Block Submit/block_submit.js
  function onSubmit (line 2) | function onSubmit() {

FILE: Client-Side Components/Catalog Client Script/Calculate age on based on date of birth/Calculate age based on dob.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Catalog Approval/client script.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Clear all fields/script.js
  function clearFields (line 14) | function clearFields(dontClearFieldsArray) {

FILE: Client-Side Components/Catalog Client Script/Combine variables into Description/script.js
  function onSubmit (line 4) | function onSubmit()

FILE: Client-Side Components/Catalog Client Script/Control all RITM variables in one go/script.js
  function onLoad (line 1) | function onLoad()

FILE: Client-Side Components/Catalog Client Script/Currency Validation/currency_validation.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {
  function validationAlert (line 33) | function validationAlert(oldValue) {

FILE: Client-Side Components/Catalog Client Script/CustomAlert/custom_alert.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Document validation/Client script.JS
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Catalog Client Script/Dynamically Update Reference Qualifier/Catalog Item onLoad.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Dynamically Update Reference Qualifier/Variable Set onLoad.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Get MRVS Values from Parent/onload.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Hide attachment icon/Hide Attachment icon.js
  function onLoad (line 2) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/onChangeClientscript.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/MRVS Email Validation with Mutation Observer/EmailValidationOnCatalogUI.js
  function onLoad (line 7) | function onLoad() {
  function validateUserDetails (line 46) | function validateUserDetails() {

FILE: Client-Side Components/Catalog Client Script/MRVS Interact With Parent Form/Portal onLoad.js
  function onLoad (line 2) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/MRVS Reference Qualifier from Catalog Item Variable/Catalog Client Script.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/MRVS dependent ref qual 1st row/onLoad.js
  function onLoad (line 1) | function onLoad() {
  function getResponse (line 15) | function getResponse(response) {

FILE: Client-Side Components/Catalog Client Script/Make OOB Attachment Mandatory/onChange.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Mandatory Attachments with 'n' numbers/onSubmitClientScript.js
  function onSubmit (line 1) | function onSubmit() {
  function alertWindow (line 22) | function alertWindow(message) {

FILE: Client-Side Components/Catalog Client Script/Multi-User Collaboration/client script.JS
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Catalog Client Script/Normalise and Reset a MRVS based on Variable Changes/mrvs_normalise_onchange.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Normalise and Reset a MRVS based on Variable Changes/variant_reset_specific_columns.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Onsubmit validation/submit validation client script.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Catalog Client Script/Open modal widget in an Onsubmit/openmodal.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Catalog Client Script/PAN Validation/PAN Validation.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Catalog Client Script/Passport Validation/passportvalidity.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Password Validation Script/Script.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Catalog Client Script/Percentage Symbol/script.js
  function onChange (line 10) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/PopulateDropdown/script.js
  function onChange (line 7) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Prevent duplicate records on MRVS/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Real time count of letters/Count letters.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Remove reference icon from portal/remove-reference-icon-from-portal-onLoad.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Restrict Number of rows in Multi Row Variable/restrict_multi_row.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Return Date Validation/validateReturndate.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Reusable GlideAjax Client Script/clientscript.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Rounding Money or Price Field/catalog_client_script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/Schedule Request/scheduled client script.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Catalog Client Script/Set User Field Values on Load/script.js
  function onLoad (line 5) | function onLoad()

FILE: Client-Side Components/Catalog Client Script/Set and Lock Variable by Group/set_lock_variable_by_grp.js
  function onLoad (line 2) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/Set fields from URL Parameter 2/CatalogClientScript.js
  function onLoad (line 1) | function onLoad() {
  function setmyFormValue (line 15) | function setmyFormValue(answer) {
  function getParameterValue (line 28) | function getParameterValue(name) {

FILE: Client-Side Components/Catalog Client Script/Set fields from URL Parameters/script.js
  function onLoad (line 1) | function onLoad() {
  function getParam (line 23) | function getParam(name){

FILE: Client-Side Components/Catalog Client Script/Validate a Credit Card Number/Script.js
  function onSubmit (line 1) | function onSubmit() {
  function isValidCardNumber (line 12) | function isValidCardNumber(number) {

FILE: Client-Side Components/Catalog Client Script/catalog Draft/client script.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Catalog Client Script/onCellEdit Catalog Task State Change Restriction/script.js
  function onCellEdit (line 1) | function onCellEdit(sysIDs, table, oldValues, newValue, callback) {

FILE: Client-Side Components/Catalog Client Script/previous Request/previous request client script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Catalog Client Script/spModal for Sweet Alerts/spModalSweetAlerts.js
  function onChange (line 1) | function onChange(control, oldValue, newValue) {

FILE: Client-Side Components/Client Scripts/Abort action when description is empty/Code.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Abort direct incident closure without Resolve State/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Add Field Decoration/Add Field Decoration.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Add Image to Field Based on Company/AddImageToFieldBasedOnCompany.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Adding Placeholder on Resolution Notes/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Auto Update Priority based on Impact and Urgency/script.js
  function onChange (line 10) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Auto-Populate Planned End Date/autoPopulatePlannedEndDate.js
  function onChange (line 6) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Auto-Populate Short Discription/Auto populate short description.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Auto-Populate Short Discription/autoPopulateSD.js
  function onChangeCategory (line 3) | function onChangeCategory() {

FILE: Client-Side Components/Client Scripts/Auto-populate watch_list based on company/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {
  function getUserCompany (line 8) | function getUserCompany(callerID) {

FILE: Client-Side Components/Client Scripts/Call SI to recover User data/script.js
  function onChange (line 5) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Change Label of Field/Change Label of Field.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Change incident Number label color based on priority/Script.js
  function onLoad (line 1) | function onLoad ()

FILE: Client-Side Components/Client Scripts/Check all mandatory fields using mandatoryCheck()/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Client script using getMessage() function without filling Messages field/script.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Color-coded Priority field for improved UX/setColor.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Client Scripts/Conditional Auto-Routing and Dynamic Mandatory Fields/Conditional_AutoRouting_Dynamic_Mandatory_Fields.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Client Scripts/Conditional Form Section based on Role/script.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Count Assigned To Field/getAssignedToCount.js
  function onChange (line 1) | function onChange(control,oldValue,newValue,isLoading,isTemplate) {

FILE: Client-Side Components/Client Scripts/Date Range Validation (Within 30 Days)/dateRangeValidation.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Detect oldValue newValue and Operation in Glide List Type Fields/detectOldValuenewValueOperation.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Display Custom Field Based on Incident Channel Field and populate with Caller Information/clientScriptOnChangeCaller.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Client Scripts/Display Incident Count of Assigned-To User When Field Changes/clientScript.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Display Section on State/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Display a Live Word Count for Description Field/code.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Dynamic Field Dependencies with GlideAjax/conditional_field_loader.js
  function onChangeCategoryWithDependencies (line 21) | function onChangeCategoryWithDependencies(control, oldValue, newValue, i...
  function updateFieldVisibility (line 39) | function updateFieldVisibility(category) {
  function loadDependentFields (line 98) | function loadDependentFields(category, priority, assignmentGroup) {
  function executeDependentFieldLoad (line 113) | function executeDependentFieldLoad(category, priority, assignmentGroup) {
  function applyDependentFieldData (line 160) | function applyDependentFieldData(data) {
  function showLoadingIndicators (line 197) | function showLoadingIndicators(fields) {
  function hideLoadingIndicators (line 208) | function hideLoadingIndicators(fields) {
  function clearFieldDependencyCache (line 219) | function clearFieldDependencyCache() {
  function onLoadInitializeDependencies (line 228) | function onLoadInitializeDependencies() {

FILE: Client-Side Components/Client Scripts/Dynamic Field Dependencies with GlideAjax/dynamic_category_subcategory.js
  function onChange (line 12) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Dynamic Location Validation Approach/User Location Validator.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Dynamic Reference Qualifier with Filtering/reference_qual_dynamic.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Dynamic UI Actions/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Dynamically Switch Form View Based on Field Value/dynamic-form-view-onchange.js
  function onChange (line 10) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Client Scripts/End Date can't be before Start Date/code.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Client Scripts/Expanding Info Message/script.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Field Completion Counter/script.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Field Placeholder/fieldplaceholder.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Field Validations/fieldValidation.js
  function onLoad (line 1) | function onLoad(){

FILE: Client-Side Components/Client Scripts/Get Form Elements/getFormElements.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Get URL Parameters/script.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Get Value from URL Parameter/script.js
  function onLoad (line 2) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Health Scan Prevent Insert Update in Before BRs/script.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Hide Dependent Choice field if there no dependent choices/HideDepnedentField.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Hide Work Notes section/script.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Incident Count of Selected CI with Clickable Link to Related Incidents/clientScriptCiIncident.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Live Character Counter and Validator/character_counter.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/MRVS variables validations/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Client Scripts/Major Incident Proposal/Client_Script.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Make Variable Editor Read Only for Catalog Items containing MRVS/MakeVariableSetReadOnly.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Make all fields read only/script.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Make fields read only in specific states/code.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Mandatory Field Highlighter/script.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/On load Switch-Case Testing/Switch-Case code snippet.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Only number validation for input/OnChange.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Client Scripts/Open Record in Agne Workspace Tab/openrecawtab.js
  function onLoad (line 2) | function onLoad(g_form) {

FILE: Client-Side Components/Client Scripts/Populate Jelly Slushbucket with Values/ClientScript.js
  function loadResponse (line 12) | function loadResponse(response) {

FILE: Client-Side Components/Client Scripts/Prevent Rejection Without Comments/script.js
  function onSubmit (line 2) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Price field restriction to one currency/price_field_restriction_to_one_currency.js
  function onLoad (line 1) | function onLoad(){

FILE: Client-Side Components/Client Scripts/Redact Sensitive Information/script.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Reinstate Error status/script.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Remove Option from Choice List/Remove Options from Choice List.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Restrict Fields on Template/script.js
  function onChange (line 6) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Set Severity, state & assigned to/script.js
  function onChange (line 3) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Set Urgency to High onChange of caller field/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Show Current Domain/Show Current Domain.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/Show field if x things are checked/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Client Scripts/Smart-Field-Suggestions/Smart Field Suggestions Based on Keyword.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/State changes to On Hold then worknotes should be mandatory/worknotes.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Sync Ajax with no getXMLWait/script.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Toggle form section visibility/toggleFormSection.js
  function toggleFormSection (line 3) | function toggleFormSection() {

FILE: Client-Side Components/Client Scripts/Update Category from Short Description Keywords/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Use case of addOption() and removeOption()/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Validate Interaction record for FCR(First Call Resolution)/script.js
  function onSubmit (line 2) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Validate Short Description/ShortDescriptionLength.js
  function onSubmit (line 2) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Validate Short Description/validShortDescription.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Client-Side Components/Client Scripts/Validate date is in future without GlideAjax/OnChange Client Script.js
  function onChange (line 5) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Verify if e-mail already exists with Ajax call/clientScript.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/Client Scripts/Verify whether a date falls within a hour range/verifyWhetherADateFallsWithinAHourRange.js
  function onChange (line 4) | function onChange() {

FILE: Client-Side Components/Client Scripts/Zurich - Upgraded info messages/infoMessages.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/Client Scripts/field-character-counter/script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Client Scripts/g_form console access in workspace/script.js
  function getGlideFormAW (line 1) | function getGlideFormAW() {

FILE: Client-Side Components/Client Scripts/onfocus and onblur/script.js
  function focus (line 7) | function focus() {
  function blur (line 11) | function blur() {

FILE: Client-Side Components/Client Scripts/validate phone number/validate phone number.js
  function onChange (line 6) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/Client Scripts/validate phone number/validate_phone_format_(123)_456-7890_no_regex.js.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Client-Side Components/UI Actions/Add Show Workflow Related link/script.js
  function showWorkflow (line 4) | function showWorkflow() {

FILE: Client-Side Components/UI Actions/Add collapsible element in knowledge article/UI_Action.js
  function addCollapsible (line 7) | function addCollapsible() {

FILE: Client-Side Components/UI Actions/CallingPopUpBoxInListView/calling_pop_up_box_in_list_view.js
  function showExceptiondialog (line 1) | function showExceptiondialog() {

FILE: Client-Side Components/UI Actions/Cancel Flow Executions/cancelFlow.js
  function cancelRunningFlows (line 1) | function cancelRunningFlows() {

FILE: Client-Side Components/UI Actions/Cancel Incident/script.js
  function cancelIncident (line 5) | function cancelIncident() {
  function serverCancel (line 57) | function serverCancel() {

FILE: Client-Side Components/UI Actions/Clone incident on Agent Workspace/clone_incident.js
  function cloneIncident (line 1) | function cloneIncident() {

FILE: Client-Side Components/UI Actions/Clone incident on Agent Workspace/workspace_client_script.js
  function onClick (line 1) | function onClick() {

FILE: Client-Side Components/UI Actions/Close Related HR cases & HR tasks/UI Action script.js
  function demo (line 2) | function demo() {

FILE: Client-Side Components/UI Actions/Close child incident/clientScript.js
  function popUpClientScript (line 1) | function popUpClientScript(){

FILE: Client-Side Components/UI Actions/Convert Request to Incident/script.js
  function ReqWarning (line 2) | function ReqWarning() {

FILE: Client-Side Components/UI Actions/Copy Variable Set/scripts.js
  function clientConfirm (line 3) | function clientConfirm() {
  function main (line 33) | function main(oldid, newid) {
  function createVariables (line 41) | function createVariables(oldid, newid) {
  function createCatalogClientScript (line 62) | function createCatalogClientScript(oldid, newid) {
  function createCatalogUiPolicy (line 77) | function createCatalogUiPolicy(oldid, newid) {

FILE: Client-Side Components/UI Actions/Create Update Set on DEV/script.js
  function openDevUpdateSetForm (line 1) | function openDevUpdateSetForm() {

FILE: Client-Side Components/UI Actions/Create incident task and relate to incident/script.js
  function createIncidentTask (line 1) | function createIncidentTask() {

FILE: Client-Side Components/UI Actions/Create story/Create story from other task.js
  function createStory (line 3) | function createStory() {

FILE: Client-Side Components/UI Actions/Display a 2-choice confirmation dialog/choice_dialog.js
  function onClickExampleDialog (line 13) | function onClickExampleDialog() {
  function dialogComplete (line 29) | function dialogComplete() {
  function dialogCancel (line 34) | function dialogCancel() {
  function serversideTask (line 43) | function serversideTask() {

FILE: Client-Side Components/UI Actions/Email Watermark Utility/Send Email UI Action.js
  function onClick (line 1) | function onClick(g_form) {

FILE: Client-Side Components/UI Actions/Expire Timer in Flows/script.js
  function runClientCode (line 6) | function runClientCode() {
  function ExpireTimer (line 20) | function ExpireTimer() {

FILE: Client-Side Components/UI Actions/Field Review of User Record when on form using action button/actionButtonScript.js
  function onClickCheckDetails (line 1) | function onClickCheckDetails() {

FILE: Client-Side Components/UI Actions/Generate QR for Assets/ui-action-script.js
  function onClickQR (line 1) | function onClickQR() {
  function generateQRCodeForAsset (line 5) | function generateQRCodeForAsset(sys_id) {

FILE: Client-Side Components/UI Actions/Generate a PDF/serverscript.js
  function getIncidentsTable (line 41) | function getIncidentsTable(incidents) {

FILE: Client-Side Components/UI Actions/GlideModalForm - Open New Record and Pass Query/code.js
  function functionName (line 1) | function functionName() { //specify the function name you listed within ...

FILE: Client-Side Components/UI Actions/GlideModalUiPagePopUp/glide_modal_ui_pop_up.js
  function onClick (line 1) | function onClick(g_form) {

FILE: Client-Side Components/UI Actions/Go to Agent Workspace Home Page/ui_action_script.js
  function onClick (line 1) | function onClick() {

FILE: Client-Side Components/UI Actions/Group dependency/uiaction.js
  function popupDependency (line 8) | function popupDependency() {

FILE: Client-Side Components/UI Actions/Kill flow timers/UI action.js
  function openTimerDialog (line 4) | function openTimerDialog() {

FILE: Client-Side Components/UI Actions/Knowledge Link Validator/uiaction.js
  function validateLinksInArticle (line 7) | function validateLinksInArticle() {

FILE: Client-Side Components/UI Actions/Knowledge Link Validator/uipage.js
  method if (line 41) | if (grItem.active){

FILE: Client-Side Components/UI Actions/Mark Records Inactive - List Action/listAction.js
  function markInactive (line 5) | function markInactive() {

FILE: Client-Side Components/UI Actions/Open Email Client using UI Action/open_email_client.js
  function openEmailClient (line 2) | function openEmailClient(){

FILE: Client-Side Components/UI Actions/Open LIST UI Action/UIActionscript.js
  function openinLIST (line 1) | function openinLIST() {

FILE: Client-Side Components/UI Actions/Open Record in Alternate Instance/Scripted REST API/sys_ws_operation/sys_ws_operation.js
  function isNull (line 3) | function isNull(obj){

FILE: Client-Side Components/UI Actions/Open Record in Alternate Instance/UI Action/sys_ui_action.js
  function openInInstance (line 1) | function openInInstance(){

FILE: Client-Side Components/UI Actions/Open Record producer from Form Button In Configurable workspace/OpenItem.js
  function onClick (line 12) | function onClick() {

FILE: Client-Side Components/UI Actions/Open Record producer from Form Button In Configurable workspace/ParseUrl.js
  function onLoad (line 8) | function onLoad() {

FILE: Client-Side Components/UI Actions/Open in Service Operations Workspace/ui_action_script.js
  function openInServiceOperationWorkspace (line 1) | function openInServiceOperationWorkspace() {

FILE: Client-Side Components/UI Actions/Populate Due Date based on Priority/UI Action.js
  function duedate (line 21) | function duedate() {

FILE: Client-Side Components/UI Actions/Preview context record during approval/UI_Action.js
  function openContextRecord (line 7) | function openContextRecord() {

FILE: Client-Side Components/UI Actions/Printer Friendly Version/printer_friendly_verison.js
  function printView (line 3) | function printView() {

FILE: Client-Side Components/UI Actions/Select Random User From Group/script.js
  function getRandomUserFromGroup (line 8) | function getRandomUserFromGroup(group) {

FILE: Client-Side Components/UI Actions/Show Today Emails Logs/script.js
  function openEmailLogList (line 1) | function openEmailLogList() {

FILE: Client-Side Components/UI Actions/Try Catalog item in Portal view/TryItInSP.js
  function tryitinsp (line 3) | function tryitinsp() {

FILE: Client-Side Components/UI Actions/Variable Ownership/script.js
  function viewMtom (line 7) | function viewMtom() {

FILE: Client-Side Components/UI Actions/View in Portal Page/View in Portal Page.js
  function goToPortal (line 1) | function goToPortal(){

FILE: Client-Side Components/UI Pages/Add Multiple Items to Order Guide/UI Action.js
  function addToOrderGuide (line 6) | function addToOrderGuide() {

FILE: Client-Side Components/UI Pages/BulkUpdate Worknotes/UI Action.js
  function bulkupdate (line 3) | function bulkupdate() {

FILE: Client-Side Components/UI Pages/BulkUpdate Worknotes/UI Page_ClientScript.js
  function bulkupdate (line 1) | function bulkupdate() {

FILE: Client-Side Components/UI Pages/CMDB CI Management UI page/ci_client_script.js
  function searchCI (line 2) | function searchCI() {
  function UpdateCI (line 32) | function UpdateCI(status) {

FILE: Client-Side Components/UI Pages/Custom Alert using UI Page/client script.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading, isTemplate) {

FILE: Client-Side Components/UI Pages/Dynamic program status overview/program_list.js
  function showUsers (line 3) | function showUsers() {

FILE: Client-Side Components/UI Pages/EDM DocUnifiedSearch/client script.js
  function cancel (line 1) | function cancel() {
  function actionOK (line 7) | function actionOK() {

FILE: Client-Side Components/UI Pages/Edit Last WorkNotes/UIaction.js
  function openEditLastCommentModal (line 4) | function openEditLastCommentModal() {

FILE: Client-Side Components/UI Pages/Edit Last WorkNotes/uipage_clientcode.js
  function closeDialog (line 3) | function closeDialog() {
  function fetchLastComment (line 8) | function fetchLastComment() {
  function setCommentFieldValue (line 17) | function setCommentFieldValue(answer) {
  function submitComment (line 24) | function submitComment() {
  function handleSuccessfulSubmit (line 38) | function handleSuccessfulSubmit(answer) {

FILE: Client-Side Components/UI Pages/Resolve Incident UI Page/UI_action.js
  function ResolveIncident (line 1) | function ResolveIncident() {

FILE: Client-Side Components/UI Pages/Resolve Incident UI Page/ui_page_client.js
  function ResolveIncidentOnsubmit (line 3) | function ResolveIncidentOnsubmit(sysId) {     //This function is called ...
  function closeDialog (line 26) | function closeDialog() {

FILE: Client-Side Components/UI Pages/Send Email On Form Incident/UIAction.js
  function sendEmail (line 13) | function sendEmail(){

FILE: Client-Side Components/UI Pages/Share reports with users and groups/UI Page/ui_page_client_script.js
  function onCancel (line 1) | function onCancel() {
  function onSubmit (line 8) | function onSubmit() {

FILE: Client-Side Components/UI Pages/Share reports with users and groups/UI Page/ui_page_processing_script.js
  function groupShare (line 18) | function groupShare(dashboard_id, group_id) {
  function userShare (line 46) | function userShare(dashboard_id, user_id) {

FILE: Client-Side Components/UI Pages/Share reports with users and groups/ui_action_script.js
  function shareReport (line 18) | function shareReport() {

FILE: Client-Side Components/UI Pages/UI Page Auto Populate Assigned to based on Assignment group/client_script.js
  function onAssignmentGroupChange (line 1) | function onAssignmentGroupChange(){
  function handleXml (line 9) | function handleXml(response){

FILE: Client-Side Components/UI Scripts/Custom Change Schedule/change_soc.js
  function isPopoverInViewport (line 250) | function isPopoverInViewport(el) {
  function adjustPopover (line 269) | function adjustPopover() {
  function getNode (line 373) | function getNode(node) {
  function getTargetElement (line 381) | function getTargetElement($event) {
  function handleOpenRecord (line 391) | function handleOpenRecord() {
  function _handleDestroyPopover (line 399) | function _handleDestroyPopover() {
  function _handleDestroyFlyout (line 408) | function _handleDestroyFlyout() {
  function getTargetSelector (line 412) | function getTargetSelector($event, taskObj) {
  function getX (line 422) | function getX(target) {
  function buildPopoverTemplate (line 442) | function buildPopoverTemplate(taskObj, $event, popoverContent, popoverTe...
  function getTooltipTextToDisplay (line 499) | function getTooltipTextToDisplay() {
  function buildPopoverContent (line 504) | function buildPopoverContent(taskObj, $event, popoverContent) {
  function openPopover (line 514) | function openPopover(id, $event) {
  function getScheduleEvent (line 556) | function getScheduleEvent(task, startDate, endDate, styleClass) {
  function getView (line 784) | function getView(name, template, isChild) {
  function updateMarkerInterval (line 855) | function updateMarkerInterval(gantt, markerId) {
  function addNowMarker (line 862) | function addNowMarker(gantt) {
  function addScheduleSpanStyle (line 872) | function addScheduleSpanStyle(definition) {
  function buildFilterData (line 950) | function buildFilterData() {
  function noResults (line 991) | function noResults(newValue, oldValue) {

FILE: Client-Side Components/UI Scripts/Custom Change Schedule/config.js
  function updateChildRecords (line 26) | function updateChildRecords(tableName) {
  function gridOpen (line 41) | function gridOpen(task) {
  function getScheduleEvent (line 102) | function getScheduleEvent(task, startDate, endDate, styleClass) {

FILE: Client-Side Components/UI Scripts/Custom Change Schedule/data.js
  function isValidDate (line 21) | function isValidDate(date) {
  function buildFields (line 27) | function buildFields(record, selectedFieldsList, tableMeta) {
  function buildRecord (line 44) | function buildRecord(record, chgSocDef, tableMeta, styleRule, scheduleWi...
  function buildItem (line 101) | function buildItem(result, item) {
  function checkSecurityObject (line 240) | function checkSecurityObject() {

FILE: Client-Side Components/UI Scripts/Display number of created records/onLoad.js
  function onLoad (line 1) | function onLoad() {

FILE: Client-Side Components/UI Scripts/Make OOB Attachment Mandatory/setAttachmentMandatory.js
  function setAttachmentMandatory (line 1) | function setAttachmentMandatory(isMandatory) {

FILE: Client-Side Components/UX Client Script Include/Access global object from page scripts/script.js
  function include (line 1) | function include({imports}) {

FILE: Client-Side Components/UX Client Script Include/Record Operation Utilities/script.js
  function include (line 2) | function include({

FILE: Client-Side Components/UX Client Script Include/Reusable Debounce/DebounceUtil.js
  function include (line 1) | function include() {

FILE: Client-Side Components/UX Client Scripts/debug-event/debug-event.js
  function handler (line 8) | function handler({ api, event, helpers, imports }) {

FILE: Client-Side Components/UX Client Scripts/debug-state/debug-state.js
  function handler (line 8) | function handler({ api, event, helpers, imports }) {

FILE: Client-Side Components/UX Data Broker Transform/FetchSysProperty/sysPropdataBroker.js
  function transform (line 2) | function transform(input){

FILE: Client-Side Components/UX Data Broker Transform/create-update-user-preference/create-update-user-preference.js
  function transform (line 5) | function transform({ name, value }) {

FILE: Client-Side Components/UX Data Broker Transform/starter-template/template.js
  function transform (line 10) | function transform({ param1, param2, param3 }) {

FILE: Core ServiceNow APIs/GlideAggregate/Group Count/GlideQuery.js
  function getGroupCountGQ (line 1) | function getGroupCountGQ(table, groupBy, min) {

FILE: Core ServiceNow APIs/GlideAggregate/ScheduleJob by ExectionTime_perDay/script.js
  function topN (line 12) | function topN(pTable, pColumn, pCount) {
  function getResponseTimeDetails (line 33) | function getResponseTimeDetails(table, query) {

FILE: Core ServiceNow APIs/GlideAjax/AjaxAsyncOnSubmit/ajaxasynconsubmitclient.js
  function onSubmit (line 1) | function onSubmit() {

FILE: Core ServiceNow APIs/GlideAjax/Check Weekend - Client Side/WeekendChecker.js
  function onLoad (line 15) | function onLoad() {

FILE: Core ServiceNow APIs/GlideAjax/EfficientGlideRecord (Client-side)/EfficientGlideRecord UI Script.js
  class EfficientGlideRecord (line 37) | class EfficientGlideRecord {
    method constructor (line 75) | constructor(tableName) {
    method addField (line 139) | addField(fieldName, getDisplayValue) {
    method addQuery (line 186) | addQuery(fieldName, operator, fieldValue) {
    method addNotNullQuery (line 228) | addNotNullQuery(fieldName) {
    method addNullQuery (line 241) | addNullQuery(fieldName) {
    method addEncodedQuery (line 254) | addEncodedQuery(encodedQueryString) {
    method setEncodedQuery (line 275) | setEncodedQuery(encodedQueryString) {
    method addOrderBy (line 289) | addOrderBy(orderByField) {
    method orderBy (line 302) | orderBy(orderByField) {
    method orderByDesc (line 315) | orderByDesc(orderByDescField) {
    method setLimit (line 329) | setLimit(limit) {
    method get (line 353) | get(sysID, callbackFn) {
    method query (line 372) | query(callbackFn) {
    method hasNext (line 431) | hasNext() {
    method next (line 450) | next() {
    method canRead (line 480) | canRead(fieldName) {
    method getValue (line 513) | getValue(fieldName) {
    method getDisplayValue (line 548) | getDisplayValue(fieldName) {
    method getRowCount (line 601) | getRowCount() {
    method _readyToSend (line 607) | _readyToSend() {

FILE: Core ServiceNow APIs/GlideAjax/Fetch Multiple Values in GlideAjax without JSON/ClientScript.js
  function onLoad (line 1) | function onLoad() {

FILE: Core ServiceNow APIs/GlideAjax/Get choices from Decision Table/addChoicesClient.js
  function onLoad (line 1) | function onLoad() {

FILE: Core ServiceNow APIs/GlideAjax/GlideAjax Example Template/code.js
  function onLoad (line 4) | function onLoad() {

FILE: Core ServiceNow APIs/GlideAjax/GlideAjax Example Template/example from community.js
  function onChange (line 3) | function onChange(control, oldValue, newValue, isLoading) {
  function updateCampus (line 13) | function updateCampus(response) {

FILE: Core ServiceNow APIs/GlideAjax/ReturnMultipleProperties/ReturnMultipleProperties.js
  function setAnswer (line 9) | function setAnswer(answer) {

FILE: Core ServiceNow APIs/GlideAjax/Reusable GlideAjax/clientSideGlideAjax.js
  function onChange (line 1) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Core ServiceNow APIs/GlideDate/Convert text date to GlideDate Format/Extract and Convert Date in a Text or String to GlideDate Format.js
  function monthToNumber (line 25) | function monthToNumber(monthAbbreviation) {

FILE: Core ServiceNow APIs/GlideDateTime/ConvertTicksToGlideDateTime/ConvertTicksToGlideDateTime.js
  function convertTicksToGlideDateTime (line 8) | function convertTicksToGlideDateTime(ticks){

FILE: Core ServiceNow APIs/GlideDateTime/Get Date Difference/GetDiffernceBtnDates.js
  function getDifferenceBtnDates (line 6) | function getDifferenceBtnDates(date1, date2, type){

FILE: Core ServiceNow APIs/GlideDateTime/Get Next Monday Date/GetNextMondayDate.js
  function getNextMonday (line 1) | function getNextMonday() {

FILE: Core ServiceNow APIs/GlideElement/getDependent/glideelement.js
  function fieldHasDependent (line 17) | function fieldHasDependent(table_name, field_name){

FILE: Core ServiceNow APIs/GlideHTTPRequest/Retrieve table records via GlideHTTPRequest/glidehttprequest.js
  function getRecordsFromTable (line 21) | function getRecordsFromTable(user_name, password, instance_name, timeout...

FILE: Core ServiceNow APIs/GlideQuery/Basic Wrappers/delete_records.js
  function deleteRecords (line 1) | function deleteRecords( strTableName, strEncodedQuery, boolDisableWorkfl...

FILE: Core ServiceNow APIs/GlideQuery/Basic Wrappers/get_records.js
  function getRecords (line 1) | function getRecords( tableName, query, fields ){

FILE: Core ServiceNow APIs/GlideQuery/Basic Wrappers/insert_records.js
  function insertRecords (line 1) | function insertRecords( strTableName, arrValues, boolDisableWorkflow ){

FILE: Core ServiceNow APIs/GlideQuery/Basic Wrappers/update_records.js
  function updateRecords (line 1) | function updateRecords( strTableName, strEncodedQuery, objValues, boolDi...

FILE: Core ServiceNow APIs/GlideQuery/Conditional Field Selection/conditional_field_selection.js
  function getIncidentsByRole (line 8) | function getIncidentsByRole(userRole, assignedTo) {
  function getTasksWithOptionalFields (line 38) | function getTasksWithOptionalFields(options) {
  function getDynamicFieldSelection (line 76) | function getDynamicFieldSelection(tableName, userPermissions, includeMet...
  function getConditionalIncidentData (line 116) | function getConditionalIncidentData(filters) {
  function getSecureUserData (line 156) | function getSecureUserData(requestingUser, targetUserId) {

FILE: Core ServiceNow APIs/GlideQuery/Get Delegates/GlideQueryGetDelegates.js
  function getDelegatesForType (line 18) | function getDelegatesForType(userId, delegateTypes) {

FILE: Core ServiceNow APIs/GlideQuery/Get User's Roles from User Name/getUserRoles.js
  function getUserRoles (line 1) | function getUserRoles(userName) {

FILE: Core ServiceNow APIs/GlideQuery/Remote Table/remotetabldef.js
  function addUsage (line 8) | function addUsage(table, groupBy) {

FILE: Core ServiceNow APIs/GlideRecord/Compare_2_records/compareRecords.js
  function compareRecords (line 15) | function compareRecords(table, sys_id1, sys_id2, includeSystemFields) {

FILE: Core ServiceNow APIs/GlideRecord/Conditional Batch Update/batchUpdate.js
  function batchUpdate (line 9) | function batchUpdate(table, encodedQuery, fieldUpdates) {

FILE: Core ServiceNow APIs/GlideRecord/Field Level Audit/fieldLevelAudit.js
  function fieldLevelAudit (line 7) | function fieldLevelAudit(grOld, grNew) {

FILE: Core ServiceNow APIs/GlideRecord/Find No Of Days/findNoOfDays.js
  function findNoOfDays (line 1) | function findNoOfDays(start, end) {

FILE: Core ServiceNow APIs/GlideRecord/Get Record Fields in JSON/script.js
  function grFetchRecordFields (line 2) | function grFetchRecordFields(tableName, sysId) {

FILE: Core ServiceNow APIs/GlideRecord/Get Reference Record/get_assignment_group_from_incident.js
  function getAssignmentGroup (line 1) | function getAssignmentGroup(grIncident) {

FILE: Core ServiceNow APIs/GlideRecord/Get Variables from RITM/getVariablesJSON.js
  function getVariablesJSON (line 6) | function getVariablesJSON(ritm, includeMRVS) {

FILE: Core ServiceNow APIs/GlideRecord/GlideRecord to Object/_grToObject.js
  function _grToObject (line 6) | function _grToObject(recordToPackage) {

FILE: Core ServiceNow APIs/GlideRecord/Performance Optimization Techniques/indexed_field_queries.js
  function queryWithIndexedFields (line 15) | function queryWithIndexedFields() {
  function avoidNonIndexedQueries (line 45) | function avoidNonIndexedQueries() {
  function optimizeCompoundIndexes (line 88) | function optimizeCompoundIndexes() {
  function optimizeReferenceQueries (line 108) | function optimizeReferenceQueries() {
  function optimizeDateRangeQueries (line 157) | function optimizeDateRangeQueries() {
  function analyzeQueryPerformance (line 191) | function analyzeQueryPerformance() {
  function getAssignmentGroupSysId (line 230) | function getAssignmentGroupSysId(groupName) {
  function indexAwarePagination (line 243) | function indexAwarePagination(pageSize, pageNumber) {

FILE: Core ServiceNow APIs/GlideRecord/Performance Optimization Techniques/optimized_batch_processing.js
  function processRecordsInChunks (line 15) | function processRecordsInChunks() {
  function optimizedBulkUpdate (line 77) | function optimizedBulkUpdate() {
  function processLargeDatasetEfficiently (line 127) | function processLargeDatasetEfficiently() {
  function updateIncidentPriority (line 177) | function updateIncidentPriority(incidentGR) {
  function processConfigurationItem (line 185) | function processConfigurationItem(ciGR) {
  function monitoredBatchOperation (line 192) | function monitoredBatchOperation(operationName, operationFunction) {
  function exampleMonitoredOperation (line 225) | function exampleMonitoredOperation() {

FILE: Core ServiceNow APIs/GlideRecord/Performance Optimization Techniques/query_performance_comparison.js
  function compareBasicQueryMethods (line 124) | function compareBasicQueryMethods() {
  function compareDateQueryMethods (line 176) | function compareDateQueryMethods() {
  function comparePaginationMethods (line 226) | function comparePaginationMethods() {
  function compareCountingMethods (line 273) | function compareCountingMethods() {
  function compareComplexQueries (line 318) | function compareComplexQueries() {
  function runCompletePerformanceAnalysis (line 365) | function runCompletePerformanceAnalysis() {
  function quickPerformanceCheck (line 397) | function quickPerformanceCheck(tableName, testQuery) {

FILE: Core ServiceNow APIs/GlideRecord/Safe Bulk Delete/safeDelete.js
  function safeDelete (line 9) | function safeDelete(table, encodedQuery) {

FILE: Core ServiceNow APIs/GlideRecord/Set Template/setTemplate.js
  function useTemplate (line 4) | function useTemplate(tblName,template_sysid){

FILE: Core ServiceNow APIs/GlideRecord/isValidGlideRecord/isValidGlideRecord.js
  function isValidGlideRecord (line 13) | function isValidGlideRecord(grRecordInstance, strTableName) {

FILE: Core ServiceNow APIs/GlideSystem/hasRoleExactly/script.js
  function hasRoleExactly (line 1) | function hasRoleExactly(role) {

FILE: Integration/Attachments/Attachment to Base64/script.js
  function getAttachmentBase64 (line 1) | function getAttachmentBase64(attachmentID) {

FILE: Integration/Attachments/Attachment to base64 in scope/attachmentToBase64Scope.js
  function parseAttachmentToBase64 (line 6) | function parseAttachmentToBase64(tableName, recordId) {

FILE: Integration/Attachments/Base 64 to Attachment/base64toattachment.js
  function convertBase64ToAttachment (line 13) | function convertBase64ToAttachment(content, fileName, contentType, table...

FILE: Integration/Attachments/CSVParser/csvparser.js
  function parseCSVFile (line 10) | function parseCSVFile(attachmentQuery) {

FILE: Integration/Attachments/CSVParser/script.js
  function parseCSVFile (line 10) | function parseCSVFile(sysId) {

FILE: Integration/Attachments/Calculate attachment hash code/calculateHash.js
  function calculateHash (line 1) | function calculateHash(attachmentId){

FILE: Integration/Attachments/Create Attachments/Create attachment via script.js
  function insertAttachment (line 8) | function insertAttachment() {

FILE: Integration/Attachments/ExportAttachmentsToMidServer/exportattachmentstomid.js
  function exportAttachmentsToMid (line 14) | function exportAttachmentsToMid(recordId, filePath, midServerName) {

FILE: Integration/Attachments/ExportRecordsAnyFormat/exportRecords.js
  function exportRecords (line 25) | function exportRecords(tableName, recordId, recordQuery, recordView, dat...

FILE: Integration/Attachments/Show RITM has Attachments/ShowRITMhasAttachment_CS.js
  function onLoad (line 1) | function onLoad() {

FILE: Integration/AzureAD Integration/Dynamically create reference records/Load_cmn_location.js
  function locationExists (line 25) | function locationExists(location){
  function createLocation (line 35) | function createLocation(location){

FILE: Integration/Import Sets Debug/Debug import set payloads/debugImportSet.js
  function executeAllTransformMapsOnImportSetId (line 6) | function executeAllTransformMapsOnImportSetId(importSetId) {

FILE: Integration/Import Sets/Import sets overview/ModelManufacture.js
  function getOrCreateModel (line 4) | function getOrCreateModel(modelName, manufacturerName) {
  function getOrCreateManufacturer (line 43) | function getOrCreateManufacturer(name) {

FILE: Integration/Import Sets/debug/debugImportSet.js
  function executeAllTransformMapsOnImportSetId (line 6) | function executeAllTransformMapsOnImportSetId(importSetId) {

FILE: Integration/Mail Scripts/Print variables to mail/printVarsToMail.js
  function printVars (line 13) | function printVars() {

FILE: Integration/Mail Scripts/Redact PII from outbound email body/mail_redact_pii.js
  function redactPii (line 7) | function redactPii(text) {

FILE: Integration/RESTMessageV2/Currency Conversion - Using CurrencyFreaks API/script.js
  function getExchangeReate (line 5) | function getExchangeReate(apiKey,symbols){

FILE: Integration/RESTMessageV2/Google-Chat/sendgchatmessage.js
  function sendGChatMessage (line 8) | function sendGChatMessage(gchat_webhook_api, message) {

FILE: Integration/RESTMessageV2/Reusable RESTMessageV2 retry pattern/ReusableRESTMesaageV2Retry.js
  function retry (line 36) | function retry(func, retires, delayTime) {

FILE: Integration/Rest Integration Send Attachment Payload/Send attachment payload via REST/attachment_payload_script.js
  function addToPayload (line 69) | function addToPayload(element, value) {

FILE: Integration/Scripted REST Api/Approval on Behalf/approval_on_behalf.js
  function respondWithError (line 73) | function respondWithError(response, message) {

FILE: Integration/Scripted REST Api/Create Catalog Items Dynamically/catalog.js
  function getCategorySysId (line 67) | function getCategorySysId(categoryName) {
  function getOwner (line 75) | function getOwner(ownerName) {
  function getType (line 83) | function getType(typeName) {

FILE: Integration/Scripted SOAP Incident Creation/Scripted SOAP incident creation/Scripted SOAP incident creation.js
  function checkMandatory (line 17) | function checkMandatory() {

FILE: Modern Development/ECMASCript 2021/Server-side ECMAScript 2021 examples/arrowfunctions.js
  function addDescriptions (line 9) | function addDescriptions(x, y){

FILE: Modern Development/ECMASCript 2021/Server-side ECMAScript 2021 examples/class.js
  class Rectangle (line 3) | class Rectangle {
    method constructor (line 4) | constructor(height, width) {
  class FilledRectangle (line 11) | class FilledRectangle extends Rectangle {
    method constructor (line 12) | constructor(height, width, color) {

FILE: Modern Development/ECMASCript 2021/Server-side ECMAScript 2021 examples/defaultparms.js
  function add (line 6) | function add (x, y){
  function add (line 18) | function add (x, y = 'nothing to see here'){

FILE: Modern Development/ECMASCript 2021/Server-side ECMAScript 2021 examples/spread.js
  function sum (line 12) | function sum(x, y, z) {

FILE: Modern Development/Service Portal Widgets/Catalog Item Explorer/client_script.js
  function quickSearch (line 68) | function quickSearch(items, searchText) {
  function selectCategory (line 84) | function selectCategory(items, category) {
  function resetSelected (line 91) | function resetSelected(items) {
  function resetQuickSearchText (line 99) | function resetQuickSearchText() {
  function setWidgetState (line 104) | function setWidgetState(state, items) {
  function checkMultiPage (line 134) | function checkMultiPage(itemsToDisplay, numOfPages) {
  function resetCurrentPage (line 139) | function resetCurrentPage() {
  function calculateDisplayCatalogItems (line 144) | function calculateDisplayCatalogItems(filteredItemsArray, currentPage, i...

FILE: Modern Development/Service Portal Widgets/Catalog Item Explorer/script.js
  function getUniqueFirstLetters (line 63) | function getUniqueFirstLetters(strings) {

FILE: Modern Development/Service Portal Widgets/Clickable SVG Image/client.js
  function makeTakenRegions (line 56) | function makeTakenRegions(takenSeatNames) {

FILE: Modern Development/Service Portal Widgets/Clickable SVG Image/echarts.js
  function n (line 35) | function n(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null=...
  function r (line 35) | function r(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e]....
  function m (line 35) | function m(t,e){v[t]=e}
  function x (line 35) | function x(){return _++}
  function b (line 35) | function b(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];"...
  function w (line 35) | function w(t){if(null==t||"object"!=typeof t)return t;var e=t,n=u.call(t...
  function S (line 35) | function S(t,e,n){if(!X(e)||!X(t))return n?w(e):t;for(var i in e)if(e.ha...
  function M (line 35) | function M(t,e){for(var n=t[0],i=1,r=t.length;i<r;i++)n=S(n,t[i],e);retu...
  function I (line 35) | function I(t,e){if(Object.assign)Object.assign(t,e);else for(var n in e)...
  function T (line 35) | function T(t,e,n){for(var i=E(e),r=0;r<i.length;r++){var o=i[r];(n?null!...
  function D (line 35) | function D(t,e){if(t){if(t.indexOf)return t.indexOf(e);for(var n=0,i=t.l...
  function A (line 35) | function A(t,e){var n=t.prototype;function i(){}for(var r in i.prototype...
  function L (line 35) | function L(t,e,n){if(t="prototype"in t?t.prototype:t,e="prototype"in e?e...
  function k (line 35) | function k(t){return!!t&&("string"!=typeof t&&"number"==typeof t.length)}
  function P (line 35) | function P(t,e,n){if(t&&e)if(t.forEach&&t.forEach===c)t.forEach(e,n);els...
  function O (line 35) | function O(t,e,n){if(!t)return[];if(!e)return nt(t);if(t.map&&t.map===f)...
  function R (line 35) | function R(t,e,n,i){if(t&&e){for(var r=0,o=t.length;r<o;r++)n=e.call(i,n...
  function N (line 35) | function N(t,e,n){if(!t)return[];if(!e)return nt(t);if(t.filter&&t.filte...
  function z (line 35) | function z(t,e,n){if(t&&e)for(var i=0,r=t.length;i<r;i++)if(e.call(n,t[i...
  function E (line 35) | function E(t){if(!t)return[];if(Object.keys)return Object.keys(t);var e=...
  function B (line 35) | function B(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n...
  function F (line 35) | function F(t){return Array.isArray?Array.isArray(t):"[object Array]"===u...
  function G (line 35) | function G(t){return"function"==typeof t}
  function H (line 35) | function H(t){return"string"==typeof t}
  function W (line 35) | function W(t){return"[object String]"===u.call(t)}
  function U (line 35) | function U(t){return"number"==typeof t}
  function X (line 35) | function X(t){var e=typeof t;return"function"===e||!!t&&"object"===e}
  function Y (line 35) | function Y(t){return!!s[u.call(t)]}
  function Z (line 35) | function Z(t){return!!l[u.call(t)]}
  function j (line 35) | function j(t){return"object"==typeof t&&"number"==typeof t.nodeType&&"ob...
  function q (line 35) | function q(t){return null!=t.colorStops}
  function K (line 35) | function K(t){return null!=t.image}
  function $ (line 35) | function $(t){return"[object RegExp]"===u.call(t)}
  function J (line 35) | function J(t){return t!=t}
  function Q (line 35) | function Q(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];f...
  function tt (line 35) | function tt(t,e){return null!=t?t:e}
  function et (line 35) | function et(t,e,n){return null!=t?t:null!=e?e:n}
  function nt (line 35) | function nt(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[...
  function it (line 35) | function it(t){if("number"==typeof t)return[t,t,t,t];var e=t.length;retu...
  function rt (line 35) | function rt(t,e){if(!t)throw new Error(e)}
  function ot (line 35) | function ot(t){return null==t?null:"function"==typeof t.trim?t.trim():t....
  function st (line 35) | function st(t){t[at]=!0}
  function lt (line 35) | function lt(t){return t[at]}
  function t (line 35) | function t(e){this.data={};var n=F(e);this.data={};var i=this;function r...
  function ht (line 35) | function ht(t){return new ut(t)}
  function ct (line 35) | function ct(t,e){for(var n=new t.constructor(t.length+e.length),i=0;i<t....
  function pt (line 35) | function pt(t,e){var n;if(Object.create)n=Object.create(t);else{var i=fu...
  function dt (line 35) | function dt(t,e){return t.hasOwnProperty(e)}
  function ft (line 35) | function ft(){}
  function yt (line 35) | function yt(t,e){return null==t&&(t=0),null==e&&(e=0),[t,e]}
  function vt (line 35) | function vt(t,e){return t[0]=e[0],t[1]=e[1],t}
  function mt (line 35) | function mt(t){return[t[0],t[1]]}
  function _t (line 35) | function _t(t,e,n){return t[0]=e,t[1]=n,t}
  function xt (line 35) | function xt(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t}
  function bt (line 35) | function bt(t,e,n,i){return t[0]=e[0]+n[0]*i,t[1]=e[1]+n[1]*i,t}
  function wt (line 35) | function wt(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t}
  function St (line 35) | function St(t){return Math.sqrt(It(t))}
  function It (line 35) | function It(t){return t[0]*t[0]+t[1]*t[1]}
  function Ct (line 35) | function Ct(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t}
  function Dt (line 35) | function Dt(t,e){var n=St(e);return 0===n?(t[0]=0,t[1]=0):(t[0]=e[0]/n,t...
  function At (line 35) | function At(t,e){return Math.sqrt((t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t...
  function kt (line 35) | function kt(t,e){return(t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1])}
  function Ot (line 35) | function Ot(t,e,n,i){return t[0]=e[0]+i*(n[0]-e[0]),t[1]=e[1]+i*(n[1]-e[...
  function Rt (line 35) | function Rt(t,e,n){var i=e[0],r=e[1];return t[0]=n[0]*i+n[2]*r+n[4],t[1]...
  function Nt (line 35) | function Nt(t,e,n){return t[0]=Math.min(e[0],n[0]),t[1]=Math.min(e[1],n[...
  function zt (line 35) | function zt(t,e,n){return t[0]=Math.max(e[0],n[0]),t[1]=Math.max(e[1],n[...
  function t (line 35) | function t(t){this.handler=t,t.on("mousedown",this._dragStart,this),t.on...
  function t (line 35) | function t(t){t&&(this._$eventProcessor=t)}
  function Ht (line 35) | function Ht(t,e,n,i,r,o){var a=i+"-"+r,s=t.length;if(o.hasOwnProperty(a)...
  function Wt (line 35) | function Wt(t,e){var n=[[t[0],t[1],1,0,0,0,-e[0]*t[0],-e[0]*t[1]],[0,0,0...
  function Xt (line 35) | function Xt(t,e,n,i,r){if(e.getBoundingClientRect&&a.domSupported&&!Yt(e...
  function Yt (line 35) | function Yt(t){return"CANVAS"===t.nodeName.toUpperCase()}
  function Kt (line 35) | function Kt(t,e,n,i){return n=n||{},i||!a.canvasSupported?$t(t,e,n):a.br...
  function $t (line 35) | function $t(t,e,n){if(a.domSupported&&t.getBoundingClientRect){var i=e.c...
  function Jt (line 35) | function Jt(t){return t||window.event}
  function Qt (line 35) | function Qt(t,e,n){if(null!=(e=Jt(e)).zrX)return e;var i=e.type;if(i&&i....
  function te (line 35) | function te(t,e,n,i){Zt?t.addEventListener(e,n,i):t.attachEvent("on"+e,n)}
  function ne (line 35) | function ne(t){return 2===t.which||3===t.which}
  function t (line 35) | function t(){this._track=[]}
  function re (line 35) | function re(t){var e=t[1][0]-t[0][0],n=t[1][1]-t[0][1];return Math.sqrt(...
  function se (line 35) | function se(){ee(this.event)}
  function e (line 35) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.hand...
  function e (line 35) | function e(e,n,i,r){var o=t.call(this)||this;return o._hovered=new ue(0,...
  function pe (line 35) | function pe(t,e,n){if(t[t.rectHover?"rectContain":"contain"](e,n)){for(v...
  function de (line 35) | function de(t,e,n){var i=t.painter;return e<0||e>i.getWidth()||n<0||n>i....
  function fe (line 35) | function fe(t,e,n,i){var r=e+1;if(r===n)return 1;if(i(t[r++],t[e])<0){fo...
  function ge (line 35) | function ge(t,e,n,i,r){for(i===e&&i++;i<n;i++){for(var o,a=t[i],s=e,l=i;...
  function ye (line 35) | function ye(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])>0){for(s=i-r;l<s...
  function ve (line 35) | function ve(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])<0){for(s=r+1;l<s...
  function me (line 35) | function me(t,e){var n,i,r=7,o=0;t.length;var a=[];function s(s){var l=n...
  function _e (line 35) | function _e(t,e,n,i){n||(n=0),i||(i=t.length);var r=i-n;if(!(r<2)){var o...
  function be (line 35) | function be(){xe||(xe=!0,console.warn("z / z2 / zlevel of displayable is...
  function we (line 35) | function we(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:...
  function t (line 35) | function t(){this._roots=[],this._displayList=[],this._displayListLen=0,...
  function t (line 35) | function t(t){this._initialized=!1,this._startTime=0,this._pausedTime=0,...
  function t (line 35) | function t(){this._len=0}
  function t (line 35) | function t(t){this._list=new De,this._maxSize=10,this._map={},this._maxS...
  function ke (line 35) | function ke(t){return(t=Math.round(t))<0?0:t>255?255:t}
  function Pe (line 35) | function Pe(t){return t<0?0:t>1?1:t}
  function Oe (line 35) | function Oe(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?ke(pa...
  function Re (line 35) | function Re(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?Pe(pa...
  function Ne (line 35) | function Ne(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e...
  function ze (line 35) | function ze(t,e,n){return t+(e-t)*n}
  function Ee (line 35) | function Ee(t,e,n,i,r){return t[0]=e,t[1]=n,t[2]=i,t[3]=r,t}
  function Ve (line 35) | function Ve(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}
  function Ge (line 35) | function Ge(t,e){Fe&&Ve(Fe,e),Fe=Be.put(t,Fe||e.slice())}
  function He (line 35) | function He(t,e){if(t){e=e||[];var n=Be.get(t);if(n)return Ve(e,n);var i...
  function We (line 35) | function We(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=Re(t[1]),r=R...
  function Ue (line 35) | function Ue(t,e){var n=He(t);if(n){for(var i=0;i<3;i++)n[i]=e<0?n[i]*(1-...
  function Xe (line 35) | function Xe(t){var e=He(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[...
  function Ye (line 35) | function Ye(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[];var i=t*(e.length...
  function je (line 35) | function je(t,e,n){if(e&&e.length&&t>=0&&t<=1){var i=t*(e.length-1),r=Ma...
  function Ke (line 35) | function Ke(t,e,n,i){var r=He(t);if(t)return r=function(t){if(t){var e,n...
  function $e (line 35) | function $e(t,e){var n=He(t);if(n&&null!=e)return n[3]=Pe(e),Je(n,"rgba")}
  function Je (line 35) | function Je(t,e){if(t&&t.length){var n=t[0]+","+t[1]+","+t[2];return"rgb...
  function Qe (line 35) | function Qe(t,e){var n=He(t);return n?(.299*n[0]+.587*n[1]+.114*n[2])*n[...
  function nn (line 35) | function nn(t,e,n){return(e-t)*n+t}
  function rn (line 35) | function rn(t,e,n,i){for(var r=e.length,o=0;o<r;o++)t[o]=nn(e[o],n[o],i)}
  function on (line 35) | function on(t,e,n,i){for(var r=e.length,o=0;o<r;o++)t[o]=e[o]+n[o]*i;ret...
  function an (line 35) | function an(t,e,n,i){for(var r=e.length,o=r&&e[0].length,a=0;a<r;a++){t[...
  function sn (line 35) | function sn(t,e,n){var i=t,r=e;if(i.push&&r.push){var o=i.length,a=r.len...
  function ln (line 35) | function ln(t,e){var n=t.length;if(n!==e.length)return!1;for(var i=0;i<n...
  function un (line 35) | function un(t,e,n,i,r,o,a){var s=.5*(n-t),l=.5*(i-e);return(2*(e-n)+s+l)...
  function hn (line 35) | function hn(t,e,n,i,r,o,a,s){for(var l=e.length,u=0;u<l;u++)t[u]=un(e[u]...
  function cn (line 35) | function cn(t){if(k(t)){var e=t.length;if(k(t[0])){for(var n=[],i=0;i<e;...
  function pn (line 35) | function pn(t){return t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=M...
  function t (line 35) | function t(t){this.keyframes=[],this.maxTime=0,this.arrDim=0,this.interp...
  function t (line 35) | function t(t,e,n){this._tracks={},this._trackKeys=[],this._delay=0,this....
  function e (line 35) | function e(e){var n=t.call(this)||this;return n._running=!1,n._time=0,n....
  function Mn (line 35) | function Mn(t){var e=t.pointerType;return"pen"===e||"touch"===e}
  function In (line 35) | function In(t){t&&(t.zrByTouch=!0)}
  function Tn (line 35) | function Tn(t,e){for(var n=e,i=!1;n&&9!==n.nodeType&&!(i=n.domBelongToZr...
  function Ln (line 35) | function Ln(t,e){var n=e.domHandlers;a.pointerEventsSupported?P(xn.point...
  function kn (line 35) | function kn(t,e){function n(n){Pn(e,n,(function(i){i=Jt(i),Tn(t,i.target...
  function Pn (line 35) | function Pn(t,e,n,i){t.mounted[e]=n,t.listenerOpts[e]=i,te(t.domTarget,e...
  function On (line 35) | function On(t){var e,n,i,r,o=t.mounted;for(var a in o)o.hasOwnProperty(a...
  function e (line 35) | function e(e,n){var i=t.call(this)||this;return i.__pointerCapturing=!1,...
  function Fn (line 35) | function Fn(){return[1,0,0,1,0,0]}
  function Gn (line 35) | function Gn(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}
  function Hn (line 35) | function Hn(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4...
  function Wn (line 35) | function Wn(t,e,n){var i=e[0]*n[0]+e[2]*n[1],r=e[1]*n[0]+e[3]*n[1],o=e[0...
  function Un (line 35) | function Un(t,e,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e...
  function Xn (line 35) | function Xn(t,e,n){var i=e[0],r=e[2],o=e[4],a=e[1],s=e[3],l=e[5],u=Math....
  function Yn (line 35) | function Yn(t,e,n){var i=n[0],r=n[1];return t[0]=e[0]*i,t[1]=e[1]*r,t[2]...
  function Zn (line 35) | function Zn(t,e){var n=e[0],i=e[2],r=e[4],o=e[1],a=e[3],s=e[5],l=n*a-o*i...
  function jn (line 35) | function jn(t){var e=[1,0,0,1,0,0];return Hn(e,t),e}
  function Jn (line 35) | function Jn(t){return t>$n||t<-5e-5}
  function t (line 35) | function t(){}
  function t (line 35) | function t(t,e){this.x=t||0,this.y=e||0}
  function t (line 35) | function t(t,e,n,i){n<0&&(t+=n,n=-n),i<0&&(e+=i,i=-i),this.x=t,this.y=e,...
  function _i (line 35) | function _i(t,e){var n=yi[e=e||vi];n||(n=yi[e]=new Ae(500));var i=n.get(...
  function xi (line 35) | function xi(t,e,n,i){var r=_i(t,e),o=Mi(e),a=wi(0,r,n),s=Si(0,o,i);retur...
  function bi (line 35) | function bi(t,e,n,i){var r=((t||"")+"").split("\n");if(1===r.length)retu...
  function wi (line 35) | function wi(t,e,n){return"right"===n?t-=e:"center"===n&&(t-=e/2),t}
  function Si (line 35) | function Si(t,e,n){return"middle"===n?t-=e/2:"bottom"===n&&(t-=e),t}
  function Mi (line 35) | function Mi(t){return _i("国",t)}
  function Ii (line 35) | function Ii(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFlo...
  function Ti (line 35) | function Ti(t,e,n){var i=e.position||"inside",r=null!=e.distance?e.dista...
  function t (line 35) | function t(t){this.id=x(),this.animators=[],this.currentStates=[],this.s...
  function i (line 35) | function i(t,e,i){n[t+e+i]||(console.warn("DEPRECATED: '"+t+"' has been ...
  function r (line 35) | function r(t,n,r,o){function a(t,e){Object.defineProperty(e,0,{get:funct...
  function Oi (line 35) | function Oi(t,e,n,i,r){var o=[];zi(t,"",t,e,n=n||{},i,o,r);var a=o.lengt...
  function Ri (line 35) | function Ri(t,e,n){for(var i=0;i<n;i++)t[i]=e[i]}
  function Ni (line 35) | function Ni(t,e,n){if(k(e[n]))if(k(t[n])||(t[n]=[]),Z(e[n])){var i=e[n]....
  function zi (line 35) | function zi(t,e,n,i,r,o,a,s){for(var l=[],u=[],h=E(i),c=r.duration,p=r.d...
  function e (line 35) | function e(e){var n=t.call(this)||this;return n.isGroup=!0,n._children=[...
  function t (line 45) | function t(t,e,n){var i=this;this._sleepAfterStill=10,this._stillFrameAc...
  function Hi (line 45) | function Hi(t,e){var n=new Gi(x(),t,e);return Fi[n.id]=n,n}
  function Wi (line 45) | function Wi(t,e){Bi[t]=e}
  function Yi (line 45) | function Yi(t,e,n,i){var r=e[0],o=e[1],a=n[0],s=n[1],l=o-r,u=s-a;if(0===...
  function Zi (line 45) | function Zi(t,e){switch(t){case"center":case"middle":t="50%";break;case"...
  function ji (line 45) | function ji(t,e,n){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t...
  function qi (line 45) | function qi(t){return t.sort((function(t,e){return t-e})),t}
  function Ki (line 45) | function Ki(t){if(t=+t,isNaN(t))return 0;if(t>1e-14)for(var e=1,n=0;n<15...
  function $i (line 45) | function $i(t){var e=t.toString().toLowerCase(),n=e.indexOf("e"),i=n>0?+...
  function Ji (line 45) | function Ji(t,e){var n=Math.log,i=Math.LN10,r=Math.floor(n(t[1]-t[0])/i)...
  function Qi (line 45) | function Qi(t,e,n){if(!t[e])return 0;var i=R(t,(function(t,e){return t+(...
  function tr (line 45) | function tr(t,e){var n=Math.max(Ki(t),Ki(e)),i=t+e;return n>20?i:ji(i,n)}
  function nr (line 45) | function nr(t){var e=2*Math.PI;return(t%e+e)%e}
  function ir (line 45) | function ir(t){return t>-1e-4&&t<Xi}
  function or (line 45) | function or(t){if(t instanceof Date)return t;if("string"==typeof t){var ...
  function ar (line 45) | function ar(t){return Math.pow(10,sr(t))}
  function sr (line 45) | function sr(t){if(0===t)return 0;var e=Math.floor(Math.log(t)/Math.LN10)...
  function lr (line 45) | function lr(t,e){var n=sr(t),i=Math.pow(10,n),r=t/i;return t=(e?r<1.5?1:...
  function ur (line 45) | function ur(t,e){var n=(t.length-1)*e+1,i=Math.floor(n),r=+t[i-1],o=n-i;...
  function hr (line 45) | function hr(t){t.sort((function(t,e){return s(t,e,0)?-1:1}));for(var e=-...
  function cr (line 45) | function cr(t){var e=parseFloat(t);return e==t&&(0!==e||"string"!=typeof...
  function pr (line 45) | function pr(t){return!isNaN(cr(t))}
  function dr (line 45) | function dr(){return Math.round(9*Math.random())}
  function fr (line 45) | function fr(t,e){return 0===e?t:fr(e,t%e)}
  function gr (line 45) | function gr(t,e){return null==t?e:null==e?t:t*e/fr(t,e)}
  function yr (line 45) | function yr(t){0}
  function vr (line 45) | function vr(t){throw new Error(t)}
  function xr (line 45) | function xr(t){return t instanceof Array?t:null==t?[]:[t]}
  function br (line 45) | function br(t,e,n){if(t){t[e]=t[e]||{},t.emphasis=t.emphasis||{},t.empha...
  function Sr (line 45) | function Sr(t){return!X(t)||F(t)||t instanceof Date?t:t.value}
  function Mr (line 45) | function Mr(t,e,n){var i="normalMerge"===n,r="replaceMerge"===n,o="repla...
  function Ir (line 45) | function Ir(t,e,n){var i=Cr(e[t],null),r=Cr(n[t],null);return null!=i&&n...
  function Tr (line 45) | function Tr(t){return Cr(t,"")}
  function Cr (line 45) | function Cr(t,e){if(null==t)return e;var n=typeof t;return"string"===n?t...
  function Dr (line 45) | function Dr(t){var e=t.name;return!(!e||!e.indexOf(mr))}
  function Ar (line 45) | function Ar(t){return t&&null!=t.id&&0===Tr(t.id).indexOf(_r)}
  function Lr (line 45) | function Lr(t,e){return null!=e.dataIndexInside?e.dataIndexInside:null!=...
  function kr (line 45) | function kr(){var t="__ec_inner_"+Pr++;return function(e){return e[t]||(...
  function Or (line 45) | function Or(t,e,n){var i=Rr(e,n),r=i.mainTypeSpecified,o=i.queryOptionMa...
  function Rr (line 45) | function Rr(t,e){var n;if(H(t)){var i={};i[t+"Index"]=0,n=i}else n=t;var...
  function Er (line 45) | function Er(t,e,n,i){i=i||Nr;var r=n.index,o=n.id,a=n.name,s={models:nul...
  function Vr (line 45) | function Vr(t,e,n){t.setAttribute?t.setAttribute(e,n):t[e]=n}
  function Br (line 45) | function Br(t,e){var n=ht(),i=[];return P(t,(function(t){var r=e(t);(n.g...
  function Fr (line 45) | function Fr(t,e,n,i,r){var o=null==e||"auto"===e;if(null==i)return i;if(...
  function Wr (line 45) | function Wr(t){var e={main:"",sub:""};if(t){var n=t.split(".");e.main=n[...
  function Ur (line 45) | function Ur(t,e){t.$constructor=t,t.extend=function(t){var e=this;functi...
  function Xr (line 45) | function Xr(t){return"function"==typeof t&&/^class\s/.test(Function.prot...
  function Yr (line 45) | function Yr(t,e){t.extend=e.extend}
  function jr (line 45) | function jr(t,e){for(var n=[],i=2;i<arguments.length;i++)n[i-2]=argument...
  function qr (line 45) | function qr(t,e,n){return this.superClass.prototype[e].apply(t,n)}
  function Kr (line 45) | function Kr(t){var e={};t.registerClass=function(t){var n,i=t.type||t.pr...
  function $r (line 45) | function $r(t,e){for(var n=0;n<t.length;n++)t[n][1]||(t[n][1]=t[n][0]);r...
  function t (line 45) | function t(){}
  function eo (line 45) | function eo(t){if("string"==typeof t){var e=to.get(t);return e&&e.image}...
  function no (line 45) | function no(t,e,n,i,r){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc...
  function io (line 45) | function io(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__...
  function ro (line 45) | function ro(t){return t&&t.width&&t.height}
  function ao (line 45) | function ao(t,e,n,i,r){if(!e)return"";var o=(t+"").split("\n");r=so(e,n,...
  function so (line 45) | function so(t,e,n,i){var r=I({},i=i||{});r.font=e,n=tt(n,"..."),r.maxIte...
  function lo (line 45) | function lo(t,e){var n=e.containerWidth,i=e.font,r=e.contentWidth;if(!n)...
  function uo (line 45) | function uo(t,e,n,i){for(var r=0,o=0,a=t.length;o<a&&r<e;o++){var s=t.ch...
  function fo (line 45) | function fo(t,e,n,i,r){var o,a,s=""===e,l=r&&n.rich[r]||{},u=t.lines,h=l...
  function yo (line 45) | function yo(t){return!function(t){var e=t.charCodeAt(0);return e>=33&&e<...
  function vo (line 45) | function vo(t,e,n,i,r){for(var o=[],a=[],s="",l="",u=0,h=0,c=0;c<t.lengt...
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function No (line 45) | function No(t){return t>-1e-8&&t<Do}
  function zo (line 45) | function zo(t){return t>Do||t<-1e-8}
  function Eo (line 45) | function Eo(t,e,n,i,r){var o=1-r;return o*o*(o*t+3*r*e)+r*r*(r*i+3*o*n)}
  function Vo (line 45) | function Vo(t,e,n,i,r){var o=1-r;return 3*(((e-t)*o+2*(n-e)*r)*o+(i-n)*r...
  function Bo (line 45) | function Bo(t,e,n,i,r,o){var a=i+3*(e-n)-t,s=3*(n-2*e+t),l=3*(e-t),u=t-r...
  function Fo (line 45) | function Fo(t,e,n,i,r){var o=6*n-12*e+6*t,a=9*e+3*i-3*t-9*n,s=3*e-3*t,l=...
  function Go (line 45) | function Go(t,e,n,i,r,o){var a=(e-t)*r+t,s=(n-e)*r+e,l=(i-n)*r+n,u=(s-a)...
  function Ho (line 45) | function Ho(t,e,n,i,r,o,a,s,l,u,h){var c,p,d,f,g,y=.005,v=1/0;Po[0]=l,Po...
  function Wo (line 45) | function Wo(t,e,n,i,r,o,a,s,l){for(var u=t,h=e,c=0,p=1/l,d=1;d<=l;d++){v...
  function Uo (line 45) | function Uo(t,e,n,i){var r=1-i;return r*(r*t+2*i*e)+i*i*n}
  function Xo (line 45) | function Xo(t,e,n,i){return 2*((1-i)*(e-t)+i*(n-e))}
  function Yo (line 45) | function Yo(t,e,n){var i=t+n-2*e;return 0===i?.5:(t-e)/i}
  function Zo (line 45) | function Zo(t,e,n,i,r){var o=(e-t)*i+t,a=(n-e)*i+e,s=(a-o)*i+o;r[0]=t,r[...
  function jo (line 45) | function jo(t,e,n,i,r,o,a,s,l){var u,h=.005,c=1/0;Po[0]=a,Po[1]=s;for(va...
  function qo (line 45) | function qo(t,e,n,i,r,o,a){for(var s=t,l=e,u=0,h=1/a,c=1;c<=a;c++){var p...
  function ra (line 45) | function ra(t,e,n){if(0!==t.length){for(var i=t[0],r=i[0],o=i[0],a=i[1],...
  function oa (line 45) | function oa(t,e,n,i,r,o){r[0]=Ko(t,n),r[1]=Ko(e,i),o[0]=$o(t,n),o[1]=$o(...
  function la (line 45) | function la(t,e,n,i,r,o,a,s,l,u){var h=Fo,c=Eo,p=h(t,n,r,a,aa);l[0]=1/0,...
  function ua (line 45) | function ua(t,e,n,i,r,o,a,s){var l=Yo,u=Uo,h=$o(Ko(l(t,n,r),1),0),c=$o(K...
  function ha (line 45) | function ha(t,e,n,i,r,o,a,s,l){var u=Nt,h=zt,c=Math.abs(r-o);if(c%ta<1e-...
  function Da (line 45) | function Da(t){return Math.round(t/Ma*1e8)/1e8%2*Ma}
  function Aa (line 45) | function Aa(t,e){var n=Da(t[0]);n<0&&(n+=Ia);var i=n-t[0],r=t[1];r+=i,!e...
  function t (line 45) | function t(t){this.dpr=1,this._xi=0,this._yi=0,this._x0=0,this._y0=0,thi...
  function ka (line 45) | function ka(t,e,n,i,r,o,a){if(0===r)return!1;var s=r,l=0;if(a>e+s&&a>i+s...
  function Pa (line 45) | function Pa(t,e,n,i,r,o,a,s,l,u,h){if(0===l)return!1;var c=l;return!(h>e...
  function Oa (line 45) | function Oa(t,e,n,i,r,o,a,s,l){if(0===a)return!1;var u=a;return!(l>e+u&&...
  function Na (line 45) | function Na(t){return(t%=Ra)<0&&(t+=Ra),t}
  function Ea (line 45) | function Ea(t,e,n,i,r,o,a,s,l){if(0===a)return!1;var u=a;s-=t,l-=e;var h...
  function Va (line 45) | function Va(t,e,n,i,r,o){if(o>e&&o>i||o<e&&o<i)return 0;if(i===e)return ...
  function Wa (line 45) | function Wa(t,e,n,i,r,o,a,s,l,u){if(u>e&&u>i&&u>o&&u>s||u<e&&u<i&&u<o&&u...
  function Ua (line 45) | function Ua(t,e,n,i,r,o,a,s){if(s>e&&s>i&&s>o||s<e&&s<i&&s<o)return 0;va...
  function Xa (line 45) | function Xa(t,e,n,i,r,o,a,s){if((s-=e)>n||s<-n)return 0;var l=Math.sqrt(...
  function Ya (line 45) | function Ya(t,e,n,i,r){for(var o,a,s,l,u=t.data,h=t.len(),c=0,p=0,d=0,f=...
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function i (line 45) | function i(n){var i=e.call(this,n)||this;return t.init&&t.init.call(i,n),i}
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function is (line 45) | function is(t,e,n){if(e){var i=e.x1,r=e.x2,o=e.y1,a=e.y2;t.x1=i,t.x2=r,t...
  function rs (line 45) | function rs(t,e,n){if(e){var i=e.x,r=e.y,o=e.width,a=e.height;t.x=i,t.y=...
  function os (line 45) | function os(t,e,n){if(!e)return t;var i=ns(2*t);return(i+ns(e))%2==0?i/2...
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function e (line 45) | function e(e){var n=t.call(this)||this;return n.type="text",n._children=...
  function y (line 45) | function y(t,e,n){t.width=e,t.lineHeight=n,c+=n,p=Math.max(p,e)}
  function fs (line 45) | function fs(t){if(t){t.font=cs.makeFont(t);var e=t.align;"middle"===e&&(...
  function gs (line 45) | function gs(t,e){return null==t||e<=0||"transparent"===t||"none"===t?nul...
  function ys (line 45) | function ys(t,e,n){return"right"===e?t-n[1]:"center"===e?t+n[3]/2-n[1]/2...
  function vs (line 45) | function vs(t){var e=t.text;return null!=e&&(e+=""),e}
  function ms (line 45) | function ms(t){return!!(t.backgroundColor||t.borderWidth&&t.borderColor)}
  function ks (line 45) | function ks(t){return null!=t&&"none"!==t}
  function Os (line 45) | function Os(t){if("string"!=typeof t)return t;var e=Ps.get(t);return e||...
  function Rs (line 45) | function Rs(t,e,n){t.onHoverStateChange&&(t.hoverState||0)!==n&&t.onHove...
  function Ns (line 45) | function Ns(t){Rs(t,"emphasis",2)}
  function zs (line 45) | function zs(t){2===t.hoverState&&Rs(t,"normal",0)}
  function Es (line 45) | function Es(t){Rs(t,"blur",1)}
  function Vs (line 45) | function Vs(t){1===t.hoverState&&Rs(t,"normal",0)}
  function Bs (line 45) | function Bs(t){t.selected=!0}
  function Fs (line 45) | function Fs(t){t.selected=!1}
  function Gs (line 45) | function Gs(t,e,n){e(t,n)}
  function Hs (line 45) | function Hs(t,e,n){Gs(t,e,n),t.isGroup&&t.traverse((function(t){Gs(t,e,n...
  function Ws (line 45) | function Ws(t,e){switch(e){case"emphasis":t.hoverState=2;break;case"norm...
  function Us (line 45) | function Us(t,e){var n=this.states[t];if(this.style){if("emphasis"===t)r...
  function Xs (line 45) | function Xs(t){t.stateProxy=Us;var e=t.getTextContent(),n=t.getTextGuide...
  function Ys (line 45) | function Ys(t,e){!tl(t,e)&&!t.__highByOuter&&Hs(t,Ns)}
  function Zs (line 45) | function Zs(t,e){!tl(t,e)&&!t.__highByOuter&&Hs(t,zs)}
  function js (line 45) | function js(t,e){t.__highByOuter|=1<<(e||0),Hs(t,Ns)}
  function qs (line 45) | function qs(t,e){!(t.__highByOuter&=~(1<<(e||0)))&&Hs(t,zs)}
  function Ks (line 45) | function Ks(t){Hs(t,Es)}
  function $s (line 45) | function $s(t){Hs(t,Vs)}
  function Js (line 45) | function Js(t){Hs(t,Bs)}
  function Qs (line 45) | function Qs(t){Hs(t,Fs)}
  function tl (line 45) | function tl(t,e){return t.__highDownSilentOnTouch&&e.zrByTouch}
  function el (line 45) | function el(t){t.getModel().eachComponent((function(e,n){("series"===e?t...
  function nl (line 45) | function nl(t,e,n,i){var r=i.getModel();function o(t,e){for(var n=0;n<e....
  function il (line 45) | function il(t,e,n){if(null!=t&&null!=e){var i=n.getModel().getComponent(...
  function rl (line 45) | function rl(t,e,n,i){var r={focusSelf:!1,dispatchers:null};if(null==t||"...
  function ol (line 45) | function ol(t){P(t.getAllData(),(function(e){var n=e.data,i=e.type;n.eac...
  function al (line 45) | function al(t){var e=[];return t.eachSeries((function(t){P(t.getAllData(...
  function sl (line 45) | function sl(t,e,n){pl(t,!0),Hs(t,Xs),ll(t,e,n)}
  function ll (line 45) | function ll(t,e,n){var i=_s(t);null!=e?(i.focus=e,i.blurScope=n):i.focus...
  function cl (line 45) | function cl(t,e,n,i){n=n||"itemStyle";for(var r=0;r<ul.length;r++){var o...
  function pl (line 45) | function pl(t,e){var n=!1===e,i=t;t.highDownSilentOnTouch&&(i.__highDown...
  function dl (line 45) | function dl(t){return!(!t||!t.__highDownDispatcher)}
  function fl (line 45) | function fl(t){var e=t.type;return e===Ds||e===As||e===Ls}
  function gl (line 45) | function gl(t){var e=t.type;return e===Ts||e===Cs}
  function Ml (line 45) | function Ml(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}
  function Il (line 45) | function Il(t,e){return(t[0]*e[0]+t[1]*e[1])/(Ml(t)*Ml(e))}
  function Tl (line 45) | function Tl(t,e){return(t[0]*e[1]<t[1]*e[0]?-1:1)*Math.acos(Il(t,e))}
  function Cl (line 45) | function Cl(t,e,n,i,r,o,a,s,l,u,h){var c=l*(Sl/180),p=wl(c)*(t-n)/2+bl(c...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function kl (line 45) | function kl(t){return null!=t.setData}
  function Pl (line 45) | function Pl(t,e){var n=function(t){var e=new La;if(!t)return e;var n,i=0...
  function Ol (line 45) | function Ol(t,e){return new Ll(Pl(t,e))}
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function ql (line 45) | function ql(t,e,n,i,r,o,a){var s=t-n,l=e-i,u=(a?o:-o)/Xl(s*s+l*l),h=u*l,...
  function Kl (line 45) | function Kl(t,e){var n=Yl(e.r,0),i=Yl(e.r0||0,0),r=n>0;if(r||i>0){if(r||...
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function eu (line 45) | function eu(t,e,n,i,r,o,a){var s=.5*(n-t),l=.5*(i-e);return(2*(e-n)+s+l)...
  function nu (line 45) | function nu(t,e,n){var i=e.smooth,r=e.points;if(r&&r.length>=2){if(i&&"s...
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function pu (line 45) | function pu(t,e,n){var i=t.cpx2,r=t.cpy2;return null===i||null===r?[(n?V...
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type...
  function t (line 45) | function t(t){this.colorStops=t||[]}
  function e (line 45) | function e(e,n,i,r,o,a){var s=t.call(this,o)||this;return s.x=null==e?0:...
  function e (line 45) | function e(e,n,i,r,o){var a=t.call(this,r)||this;return a.x=null==e?.5:e...
  function t (line 45) | function t(t,e){this._corners=[],this._axes=[],this._origin=[0,0];for(va...
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.notC...
  function Lu (line 45) | function Lu(t){return Ka.extend(t)}
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.applyTransform=i.apply...
  function Pu (line 45) | function Pu(t,e){return ku(t,e)}
  function Ou (line 45) | function Ou(t,e){Au[t]=e}
  function Ru (line 45) | function Ru(t){if(Au.hasOwnProperty(t))return Au[t]}
  function Nu (line 45) | function Nu(t,e,n,i){var r=Ol(t,e);return n&&("center"===i&&(n=Eu(n,r.ge...
  function zu (line 45) | function zu(t,e,n){var i=new es({style:{image:t,x:e.x,y:e.y,width:e.widt...
  function Eu (line 45) | function Eu(t,e){var n,i=e.width/e.height,r=t.height*i;return n=r<=t.wid...
  function Bu (line 45) | function Bu(t,e){if(t.applyTransform){var n=t.getBoundingRect().calculat...
  function Gu (line 45) | function Gu(t,e,n,i,r,o,a){var s,l=!1;"function"==typeof r?(a=o,o=r,r=nu...
  function Hu (line 45) | function Hu(t,e,n,i,r,o){Gu("update",t,e,n,i,r,o)}
  function Wu (line 45) | function Wu(t,e,n,i,r,o){Gu("init",t,e,n,i,r,o)}
  function Uu (line 45) | function Uu(t,e,n,i,r,o){Zu(t)||Gu("remove",t,e,n,i,r,o)}
  function Xu (line 45) | function Xu(t,e,n,i){t.removeTextContent(),t.removeTextGuideLine(),Uu(t,...
  function Yu (line 45) | function Yu(t,e,n){function i(){t.parent&&t.parent.remove(t)}t.isGroup?t...
  function Zu (line 45) | function Zu(t){if(!t.__zr)return!0;for(var e=0;e<t.animators.length;e++)...
  function ju (line 45) | function ju(t,e){for(var n=Gn([]);t&&t!==e;)Wn(n,t.getLocalTransform(),n...
  function qu (line 45) | function qu(t,e,n){return e&&!k(e)&&(e=oi.getLocalTransform(e)),n&&(e=Zn...
  function Ku (line 45) | function Ku(t,e,n){var i=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/...
  function $u (line 45) | function $u(t){return!t.isGroup}
  function Ju (line 45) | function Ju(t,e,n){if(t&&e){var i,r=(i={},t.traverse((function(t){$u(t)&...
  function Qu (line 45) | function Qu(t,e){return O(t,(function(t){var n=t[0];n=Cu(n,e.x),n=Du(n,e...
  function th (line 45) | function th(t,e){var n=Cu(t.x,e.x),i=Du(t.x+t.width,e.x+e.width),r=Cu(t....
  function eh (line 45) | function eh(t,e,n){var i=I({rectHover:!0},e),r=i.style={strokeNoScale:!0...
  function nh (line 45) | function nh(t,e,n,i,r){for(var o=0,a=r[r.length-1];o<r.length;o++){var s...
  function ih (line 45) | function ih(t,e,n,i,r,o,a,s){var l,u=n-t,h=i-e,c=a-r,p=s-o,d=rh(c,p,u,h)...
  function rh (line 45) | function rh(t,e,n,i){return t*i-n*e}
  function oh (line 45) | function oh(t){var e=t.itemTooltipOption,n=t.componentModel,i=t.itemName...
  function lh (line 45) | function lh(t,e){for(var n=0;n<Ss.length;n++){var i=Ss[n],r=e[i],o=t.ens...
  function uh (line 45) | function uh(t,e,n){var i,r=t.labelFetcher,o=t.labelDataIndex,a=t.labelDi...
  function hh (line 45) | function hh(t,e,n,i){n=n||sh;for(var r=t instanceof cs,o=!1,a=0;a<Ms.len...
  function ch (line 45) | function ch(t,e){e=e||"label";for(var n={normal:t.getModel(e)},i=0;i<Ss....
  function ph (line 45) | function ph(t,e,n,i,r){var o={};return function(t,e,n,i,r){n=n||sh;var o...
  function dh (line 45) | function dh(t,e,n){e=e||{};var i,r={},o=t.getShallow("rotate"),a=tt(t.ge...
  function vh (line 45) | function vh(t,e,n,i,r,o,a,s){n=!r&&n||sh;var l=i&&i.inheritColor,u=e.get...
  function mh (line 45) | function mh(t,e){var n=e&&e.getModel("textStyle");return ot([t.fontStyle...
  function xh (line 45) | function xh(t,e,n,i){if(t){var r=_h(t);r.prevValue=r.value,r.value=n;var...
  function bh (line 45) | function bh(t,e,n,i,r){var o=_h(t);if(o.valueAnimation){var a=o.defaultI...
  function t (line 45) | function t(){}
  function t (line 45) | function t(){}
  function t (line 45) | function t(){}
  function t (line 45) | function t(t,e,n){this.parentModel=e,this.ecModel=n,this.option=t}
  function Nh (line 45) | function Nh(t){return[t||"",Rh++].join("_")}
  function zh (line 45) | function zh(t,e){return S(S({},t,!0),e,!0)}
  function Wh (line 45) | function Wh(t,e){t=t.toUpperCase(),Gh[t]=new Oh(e),Fh[t]=e}
  function tc (line 45) | function tc(t,e){return"0000".substr(0,e-(t+="").length)+t}
  function ec (line 45) | function ec(t){switch(t){case"half-year":case"quarter":return"month";cas...
  function nc (line 45) | function nc(t){return t===ec(t)}
  function ic (line 45) | function ic(t,e,n,i){var r=or(t),o=r[ac(n)](),a=r[sc(n)]()+1,s=Math.floo...
  function rc (line 45) | function rc(t,e){var n=or(t),i=n[sc(e)]()+1,r=n[lc(e)](),o=n[uc(e)](),a=...
  function oc (line 45) | function oc(t,e,n){var i="number"==typeof t?or(t):t;switch(e=e||rc(t,n))...
  function ac (line 45) | function ac(t){return t?"getUTCFullYear":"getFullYear"}
  function sc (line 45) | function sc(t){return t?"getUTCMonth":"getMonth"}
  function lc (line 45) | function lc(t){return t?"getUTCDate":"getDate"}
  function uc (line 45) | function uc(t){return t?"getUTCHours":"getHours"}
  function hc (line 45) | function hc(t){return t?"getUTCMinutes":"getMinutes"}
  function cc (line 45) | function cc(t){return t?"getUTCSeconds":"getSeconds"}
  function pc (line 45) | function pc(t){return t?"getUTCSeconds":"getSeconds"}
  function dc (line 45) | function dc(t){return t?"setUTCFullYear":"setFullYear"}
  function fc (line 45) | function fc(t){return t?"setUTCMonth":"setMonth"}
  function gc (line 45) | function gc(t){return t?"setUTCDate":"setDate"}
  function yc (line 45) | function yc(t){return t?"setUTCHours":"setHours"}
  function vc (line 45) | function vc(t){return t?"setUTCMinutes":"setMinutes"}
  function mc (line 45) | function mc(t){return t?"setUTCSeconds":"setSeconds"}
  function _c (line 45) | function _c(t){return t?"setUTCSeconds":"setSeconds"}
  function xc (line 45) | function xc(t){if(!pr(t))return H(t)?t:"-";var e=(t+"").split(".");retur...
  function bc (line 45) | function bc(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,(functio...
  function Ic (line 45) | function Ic(t){return null==t?"":(t+"").replace(Sc,(function(t,e){return...
  function Tc (line 45) | function Tc(t,e,n){function i(t){return t&&ot(t)?t:"-"}function r(t){ret...
  function Ac (line 45) | function Ac(t,e,n){F(e)||(e=[e]);var i=e.length;if(!i)return"";for(var r...
  function Lc (line 45) | function Lc(t,e){var n=H(t)?{color:t,extraCssText:e}:t||{},i=n.color,r=n...
  function kc (line 45) | function kc(t,e){return e=e||"transparent",H(t)?t:X(t)&&t.colorStops&&(t...
  function Pc (line 45) | function Pc(t,e){if("_blank"===e||"blank"===e){var n=window.open();n.ope...
  function zc (line 45) | function zc(t,e,n,i,r){var o=0,a=0;null==i&&(i=1/0),null==r&&(r=1/0);var...
  function Vc (line 45) | function Vc(t,e,n){n=wc(n||0);var i=e.width,r=e.height,o=Zi(t.left,i),a=...
  function Bc (line 45) | function Bc(t,e,n,i,r){var o=!r||!r.hv||r.hv[0],a=!r||!r.hv||r.hv[1],s=r...
  function Fc (line 45) | function Fc(t){var e=t.layoutMode||t.constructor.layoutMode;return X(e)?...
  function Gc (line 45) | function Gc(t,e,n){var i=n&&n.ignoreSize;!F(i)&&(i=[i,i]);var r=a(Nc[0],...
  function Hc (line 45) | function Hc(t){return Wc({},t)}
  function Wc (line 45) | function Wc(t,e){return e&&t&&Oc(Rc,(function(n){e.hasOwnProperty(n)&&(t...
  function e (line 45) | function e(e,n,i){var r=t.call(this,e,n,i)||this;return r.uid=Nh("ec_cpt...
  function n (line 45) | function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}
  function d (line 45) | function d(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}
  function f (line 45) | function f(t){u[t]=!0,d(t)}
  function lp (line 45) | function lp(t,e,n){var i={},r=hp(e);if(!r||!t)return i;var o,a,s=[],l=[]...
  function up (line 45) | function up(t,e,n){var i={};if(!hp(t))return i;var r,o=e.sourceFormat,a=...
  function hp (line 45) | function hp(t){if(!t.get("data",!0))return Er(t.ecModel,"dataset",{index...
  function cp (line 45) | function cp(t,e){return pp(t.data,t.sourceFormat,t.seriesLayoutBy,t.dime...
  function pp (line 45) | function pp(t,e,n,i,r,o){var a,s,l;if(Z(t))return ap;if(i){var u=i[o];X(...
  function t (line 45) | function t(){}
  function xp (line 45) | function xp(t,e,n,i){var r=xr(t.get(["aria","decal","decals"]));return b...
  function bp (line 45) | function bp(t,e,n,i,r,o,a){var s=e(o=o||t),l=s.paletteIdx||0,u=s.palette...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function Sp (line 45) | function Sp(t,e,n){if(F(e)){var i=ht();return P(e,(function(t){null!=t&&...
  function Mp (line 45) | function Mp(t,e){return e.hasOwnProperty("subType")?N(t,(function(t){ret...
  function Ip (line 45) | function Ip(t){var e=ht();return t&&P(xr(t.replaceMerge),(function(t){e....
  function t (line 45) | function t(){this._coordinateSystems=[]}
  function t (line 45) | function t(t){this._timelineOptions=[],this._mediaList=[],this._currentM...
  function p (line 45) | function p(t){P(e,(function(e){e(t,n)}))}
  function Pp (line 45) | function Pp(t,e,n){var i={width:e,height:n,aspectratio:e/n},r=!0;return ...
  function zp (line 45) | function zp(t){var e=t&&t.itemStyle;if(e)for(var n=0,i=Np.length;n<i;n++...
  function Ep (line 45) | function Ep(t,e,n){if(t&&t[e]&&(t[e].normal||t[e].emphasis)){var i=t[e]....
  function Vp (line 45) | function Vp(t){Ep(t,"itemStyle"),Ep(t,"lineStyle"),Ep(t,"areaStyle"),Ep(...
  function Bp (line 45) | function Bp(t,e){var n=Rp(t)&&t[e],i=Rp(n)&&n.textStyle;if(i){0;for(var ...
  function Fp (line 45) | function Fp(t){t&&(Vp(t),Bp(t,"label"),t.emphasis&&Bp(t.emphasis,"label"))}
  function Gp (line 45) | function Gp(t){return F(t)?t:t?[t]:[]}
  function Hp (line 45) | function Hp(t){return(F(t)?t[0]:t)||{}}
  function Wp (line 45) | function Wp(t,e){Op(Gp(t.series),(function(t){Rp(t)&&function(t){if(Rp(t...
  function Up (line 45) | function Up(t){t&&P(Xp,(function(e){e[0]in t&&!(e[1]in t)&&(t[e[1]]=t[e[...
  function jp (line 45) | function jp(t){var e=t&&t.itemStyle;if(e)for(var n=0;n<Zp.length;n++){va...
  function qp (line 45) | function qp(t){t&&"edge"===t.alignTo&&null!=t.margin&&null==t.edgeDistan...
  function Kp (line 45) | function Kp(t){t&&t.downplay&&!t.blur&&(t.blur=t.downplay)}
  function $p (line 45) | function $p(t,e){if(t)for(var n=0;n<t.length;n++)e(t[n]),t[n]&&$p(t[n].c...
  function Jp (line 45) | function Jp(t,e){Wp(t,e),t.series=xr(t.series),P(t.series,(function(t){i...
  function Qp (line 45) | function Qp(t){P(t,(function(e,n){var i=[],r=[NaN,NaN],o=[e.stackResultD...
  function ad (line 45) | function ad(t){return t instanceof od}
  function sd (line 45) | function sd(t,e,n,i){n=n||hd(t);var r=e.seriesLayoutBy,o=function(t,e,n,...
  function ld (line 45) | function ld(t){return new od({data:t,sourceFormat:Z(t)?tp:Kc})}
  function ud (line 45) | function ud(t){return t?ht(t):null}
  function hd (line 45) | function hd(t){var e=ep;if(Z(t))e=tp;else if(F(t)){0===t.length&&(e=$c);...
  function cd (line 45) | function cd(t){if(t){var e=ht();return O(t,(function(t,n){var i={name:(t...
  function pd (line 45) | function pd(t,e,n,i){if(e===ip)for(var r=0;r<n.length&&r<i;r++)t(n[r]?n[...
  function t (line 45) | function t(t,e){var n=ad(t)?t:ld(t);this._source=n;var i=this._data=n.da...
  function r (line 45) | function r(t){for(var e=0;e<t.length;e++)this._data.push(t[e])}
  function yd (line 45) | function yd(t,e){var n=gd[Sd(t,e)];return n}
  function _d (line 45) | function _d(t,e){var n=md[Sd(t,e)];return n}
  function wd (line 45) | function wd(t){var e=bd[t];return e}
  function Sd (line 45) | function Sd(t,e){return t===$c?t+"_"+e:t}
  function Md (line 45) | function Md(t,e,n){if(t){var i=t.getRawDataItem(e);if(null!=i){var r,o,a...
  function t (line 45) | function t(){}
  function Cd (line 45) | function Cd(t){var e,n;return X(t)?t.type&&(n=t):e=t,{markupText:e,marku...
  function Dd (line 45) | function Dd(t){return new Ad(t)}
  function t (line 45) | function t(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=...
  function h (line 45) | function h(t){return!(t>=1)&&(t=1),t}
  function a (line 45) | function a(){return e<t?e++:null}
  function s (line 45) | function s(){var o=e%r*n+Math.ceil(e/r),a=e>=t?null:o<i?o:e;return e++,a}
  function kd (line 45) | function kd(t,e){var n=e&&e.type;if("ordinal"===n){var i=e&&e.ordinalMet...
  function Od (line 45) | function Od(t){return Pd.get(t)}
  function t (line 45) | function t(t,e){if("number"!=typeof e){var n="";0,vr(n)}this._opFn=Rd[t]...
  function t (line 45) | function t(t,e){var n="desc"===t;this._resultLT=n?1:-1,null==e&&(e=n?"mi...
  function t (line 45) | function t(t,e){this._rval=e,this._isEQ=t,this._rvalTypeof=typeof e,this...
  function Vd (line 45) | function Vd(t,e){return"eq"===t||"ne"===t?new Ed("eq"===t,e):dt(Rd,t)?ne...
  function t (line 45) | function t(){}
  function Fd (line 45) | function Fd(t){var e=t.sourceFormat;if(!Yd(e)){var n="";0,vr(n)}return t...
  function Gd (line 45) | function Gd(t){var e=t.sourceFormat,n=t.data;if(!Yd(e)){var i="";0,vr(i)...
  function Hd (line 45) | function Hd(t,e,n){if(null!=n)return"number"==typeof n||!isNaN(n)&&!dt(e...
  function Wd (line 45) | function Wd(t){return w(t)}
  function Xd (line 45) | function Xd(t,e,n,i){var r="";e.length||vr(r),X(t)||vr(r);var o=t.type,a...
  function Yd (line 45) | function Yd(t){return t===$c||t===Jc}
  function t (line 45) | function t(t){this._sourceList=[],this._upstreamSignList=[],this._versio...
  function jd (line 45) | function jd(t){t.option.transform&&st(t.option.transform)}
  function qd (line 45) | function qd(t){return"series"===t.mainType}
  function Kd (line 45) | function Kd(t){throw new Error(t)}
  function $d (line 45) | function $d(t,e){var n=t.color||"#6e7079",i=t.fontSize||12,r=t.fontWeigh...
  function tf (line 45) | function tf(t,e){return e.type=t,e}
  function ef (line 45) | function ef(t){return dt(nf,t.type)&&nf[t.type]}
  function rf (line 45) | function rf(t,e,n,i,r,o){if(t){var a=ef(t);a.planLayout(t);var s={useUTC...
  function of (line 45) | function of(t){var e=t.__gapLevelBetweenSubBlocks;return{html:Jd[e],rich...
  function af (line 45) | function af(t,e){return'<div style="'+("margin: "+e+"px 0 0")+";"+'line-...
  function sf (line 45) | function sf(t,e,n){return t.markupStyleCreator.wrapRichTextStyle(e,n)}
  function lf (line 45) | function lf(t,e){return kc(t.getData().getItemVisual(e,"style")[t.visual...
  function uf (line 45) | function uf(t,e){var n=t.get("padding");return null!=n?n:"richText"===e?...
  function t (line 45) | function t(){this.richTextStyles={},this._nextStyleNameId=dr()}
  function cf (line 45) | function cf(t){var e,n,i,r,o=t.series,a=t.dataIndex,s=t.multipleSeries,l...
  function df (line 45) | function df(t,e){return t.getName(e)||t.getId(e)}
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._sel...
  function gf (line 45) | function gf(t){var e=t.name;Dr(t)||(t.name=function(t){var e=t.getRawDat...
  function yf (line 45) | function yf(t){return t.model.getRawData().count()}
  function vf (line 45) | function vf(t){var e=t.model;return e.setData(e.getRawData().cloneShallo...
  function mf (line 45) | function mf(t,e){e.outputData&&t.end>e.outputData.count()&&e.model.getRa...
  function _f (line 45) | function _f(t,e){P(r(t.CHANGABLE_METHODS,t.DOWNSAMPLE_METHODS),(function...
  function xf (line 45) | function xf(t,e){var n=bf(t);return n&&n.setOutputEnd((e||this).count()),e}
  function bf (line 45) | function bf(t){var e=(t.ecModel||{}).scheduler,n=e&&e.getPipeline(t.uid)...
  function t (line 45) | function t(){this.group=new Ei,this.uid=Nh("viewComponent")}
  function Sf (line 45) | function Sf(){var t=kr();return function(e){var n=t(e),i=e.pipelineConte...
  function t (line 45) | function t(){this.group=new Ei,this.uid=Nh("viewChart"),this.renderTask=...
  function Cf (line 45) | function Cf(t,e,n){t&&("emphasis"===e?js:qs)(t,n)}
  function Df (line 45) | function Df(t,e,n){var i=Lr(t,e),r=e&&null!=e.highlightKey?function(t){v...
  function Af (line 45) | function Af(t){return If(t.model)}
  function Lf (line 45) | function Lf(t){var e=t.model,n=t.ecModel,i=t.api,r=t.payload,o=e.pipelin...
  function Nf (line 45) | function Nf(t,e,n){var i,r,o,a,s,l=0,u=0,h=null;function c(){u=(new Date...
  function zf (line 45) | function zf(t,e,n,i){var r=t[e];if(r){var o=r[Pf]||r,a=r[Rf];if(r[Of]!==...
  function Ff (line 45) | function Ff(t,e){var n=t.visualStyleMapper||Vf[e];return n||(console.war...
  function Gf (line 45) | function Gf(t,e){var n=t.visualDrawType||Bf[e];return n||(console.warn("...
  function t (line 45) | function t(t,e,n,i){this._stageTaskMap=ht(),this.ecInstance=t,this.api=e...
  function a (line 45) | function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipe...
  function u (line 45) | function u(e){var s=e.uid,l=a.set(s,o&&o.get(s)||Dd({plan:Jf,reset:Qf,co...
  function d (line 45) | function d(t){var e=t.uid,n=s.set(e,a&&a.get(e)||(c=!0,Dd({reset:qf,onDi...
  function jf (line 45) | function jf(t){t.overallReset(t.ecModel,t.api,t.payload)}
  function qf (line 45) | function qf(t){return t.overallProgress&&Kf}
  function Kf (line 45) | function Kf(){this.agent.dirty(),this.getDownstream().dirty()}
  function $f (line 45) | function $f(){this.agent&&this.agent.dirty()}
  function Jf (line 45) | function Jf(t){return t.plan?t.plan(t.model,t.ecModel,t.api,t.payload):n...
  function Qf (line 45) | function Qf(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDe...
  function eg (line 45) | function eg(t){return function(e,n){var i=n.data,r=n.resetDefines[t];if(...
  function ng (line 45) | function ng(t){return t.data.count()}
  function ig (line 45) | function ig(t){rg=null;try{t(og,ag)}catch(t){}return rg}
  function sg (line 45) | function sg(t,e){for(var n in e.prototype)t[n]=ft}
  function t (line 45) | function t(){}
  function u (line 45) | function u(t,e,n,i){return null==t[n]||e[i||n]===t[n]}
  function vg (line 45) | function vg(t,e,n){switch(n){case"color":return t.getItemVisual(e,"style...
  function mg (line 45) | function mg(t,e){switch(e){case"color":return t.getVisual("style")[t.get...
  function _g (line 45) | function _g(t,e,n,i){switch(n){case"color":t.ensureUniqueItemVisual(e,"s...
  function Sg (line 45) | function Sg(t,e,n,i,r){var o=n.width,a=n.height;switch(t){case"top":i.se...
  function Mg (line 45) | function Mg(t,e,n,i,r,o,a,s,l){a-=t,s-=e;var u=Math.sqrt(a*a+s*s),h=(a/=...
  function Ig (line 45) | function Ig(t,e,n,i,r,o,a,s){var l=r-t,u=o-e,h=n-t,c=i-e,p=Math.sqrt(h*h...
  function Tg (line 45) | function Tg(t,e,n,i,r,o,a){n<0&&(t+=n,n=-n),i<0&&(e+=i,i=-i);var s=t+n,l...
  function Dg (line 45) | function Dg(t,e,n){var i=Tg(e.x,e.y,e.width,e.height,t.x,t.y,Cg);return ...
  function Ag (line 45) | function Ag(t,e,n){for(var i,r,o=0,a=0,s=0,l=0,u=1/0,h=e.data,c=t.x,p=t....
  function Ng (line 45) | function Ng(t,e){if(t){var n=t.getTextGuideLine(),i=t.getTextContent();i...
  function Vg (line 45) | function Vg(t,e){if(e<=180&&e>0){e=e/180*Math.PI,Lg.fromArray(t[0]),kg.f...
  function Bg (line 45) | function Bg(t,e,n){if(n<=180&&n>0){n=n/180*Math.PI,Lg.fromArray(t[0]),kg...
  function Fg (line 45) | function Fg(t,e,n,i){var r="normal"===n,o=r?t:t.ensureState(n);o.ignore=...
  function Gg (line 45) | function Gg(t,e){var n=e.smooth,i=e.points;if(i)if(t.moveTo(i[0][0],i[0]...
  function Hg (line 45) | function Hg(t,e,n){var i=t.getTextGuideLine(),r=t.getTextContent();if(r)...
  function Wg (line 45) | function Wg(t,e){e=e||"labelLine";for(var n={normal:t.getModel(e)},i=0;i...
  function Ug (line 45) | function Ug(t,e,n,i,r,o){var a=t.length;if(!(a<2)){t.sort((function(t,n)...
  function Xg (line 45) | function Xg(t,e,n,i){return Ug(t,"y","height",e,n,i)}
  function Yg (line 45) | function Yg(t){if(t){for(var e=[],n=0;n<t.length;n++)e.push(t[n].slice()...
  function Zg (line 45) | function Zg(t,e){var n=t.label,i=e&&e.getTextGuideLine();return{dataInde...
  function Jg (line 45) | function Jg(t,e,n){for(var i=0;i<n.length;i++){var r=n[i];null!=e[r]&&(t...
  function t (line 45) | function t(){this._labelList=[],this._chartViewList=[]}
  function i (line 45) | function i(t,e){return function(){Ng(t,e)}}
  function i (line 45) | function i(t){if(!t.ignore){var e=t.ensureState("emphasis");null==e.igno...
  function ey (line 45) | function ey(t,e){function n(e,n){var i=[];return e.eachComponent({mainTy...
  function ny (line 45) | function ny(t,e,n,i,r){var o=t+e;n.isSilent(o)||i.eachComponent({mainTyp...
  function iy (line 45) | function iy(t,e,n){for(var i;t&&(!e(t)||(i=t,!n));)t=t.__hostTarget||t.p...
  function t (line 45) | function t(){this._id="__ec_inner_"+ry++}
  function dy (line 45) | function dy(t,e){if("image"!==this.type){var n=this.style;this.__isEmpty...
  function fy (line 45) | function fy(t,e,n,i,r,o,a){var s,l=0===t.indexOf("empty");return l&&(t=t...
  function gy (line 45) | function gy(t,e,n){for(var i="radial"===e.type?function(t,e,n){var i=n.w...
  function yy (line 45) | function yy(t,e){if(t===e||!t&&!e)return!1;if(!t||!e||t.length!==e.lengt...
  function vy (line 45) | function vy(t,e){return t&&"solid"!==t&&e>0?(e=e||1,"dashed"===t?[4*e,2*...
  function _y (line 45) | function _y(t){var e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth...
  function xy (line 45) | function xy(t){var e=t.fill;return null!=e&&"none"!==e}
  function by (line 45) | function by(t,e){if(null!=e.fillOpacity&&1!==e.fillOpacity){var n=t.glob...
  function wy (line 45) | function wy(t,e){if(null!=e.strokeOpacity&&1!==e.strokeOpacity){var n=t....
  function Sy (line 45) | function Sy(t,e,n){var i=no(e.image,e.__image,n);if(ro(i)){var r=t.creat...
  function Ty (line 45) | function Ty(t,e,n,i,r){var o=!1;if(!i&&e===(n=n||{}))return!1;if(i||e.op...
  function Cy (line 45) | function Cy(t,e,n,i,r){var o=Ly(e,r.inHover),a=i?null:n&&Ly(n,r.inHover)...
  function Dy (line 45) | function Dy(t,e){var n=e.transform,i=t.dpr||1;n?t.setTransform(i*n[0],i*...
  function Ay (line 45) | function Ay(t,e){e.batchFill&&t.fill(),e.batchStroke&&t.stroke(),e.batch...
  function Ly (line 45) | function Ly(t,e){return e&&t.__hoverStyle||t.style}
  function ky (line 45) | function ky(t,e){Py(t,e,{inHover:!1,viewWidth:0,viewHeight:0},!0)}
  function Py (line 45) | function Py(t,e,n,i){var r=e.transform;if(!e.shouldBePainted(n.viewWidth...
  function Ey (line 45) | function Ey(t,e){if("none"===t)return null;var n=e.getDevicePixelRatio()...
  function Vy (line 45) | function Vy(t){if(!t||0===t.length)return[["rect"]];if("string"==typeof ...
  function By (line 45) | function By(t){if(!t||0===t.length)return[[0,0]];if("number"==typeof t)r...
  function Fy (line 45) | function Fy(t){for(var e=0,n=0;n<t.length;++n)e+=t[n];return t.length%2=...
  function Gy (line 45) | function Gy(t){H(t)&&(t=(new DOMParser).parseFromString(t,"text/xml"));v...
  function t (line 45) | function t(){this._defs={},this._root=null}
  function jy (line 45) | function jy(t,e){"userSpaceOnUse"===t.getAttribute("gradientUnits")&&(e....
  function qy (line 45) | function qy(t,e){for(var n=t.firstChild;n;){if(1===n.nodeType&&"stop"===...
  function Ky (line 45) | function Ky(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheri...
  function $y (line 45) | function $y(t){for(var e=nv(t),n=[],i=0;i<e.length;i+=2){var r=parseFloa...
  function Jy (line 45) | function Jy(t,e,n,i,r){var o=e,a=o.__inheritedStyle=o.__inheritedStyle||...
  function tv (line 45) | function tv(t,e,n,i){var r=n&&n.match(Qy);if(!r)return"none"===n&&(n=nul...
  function nv (line 45) | function nv(t){return t.match(ev)||[]}
  function av (line 45) | function av(t,e,n){var i,r=t.getAttribute("style");if(r)for(ov.lastIndex...
  function sv (line 45) | function sv(t,e){var n=e.width/t.width,i=e.height/t.height,r=Math.min(n,...
  function lv (line 45) | function lv(t,e){return Math.abs(t-e)<1e-8}
  function uv (line 45) | function uv(t,e,n){var i=0,r=t[0];if(!r)return!1;for(var o=1;o<t.length;...
  function t (line 45) | function t(t){this.name=t}
  function e (line 45) | function e(e,n,i){var r=t.call(this,e)||this;if(r.type="geoJSON",r.geome...
  function e (line 45) | function e(e,n){var i=t.call(this,e)||this;return i.type="geoSVG",i._elO...
  function t (line 45) | function t(t,e){this.type="geoSVG",this._usedGraphicMap=ht(),this._freed...
  function yv (line 45) | function yv(t,e,n){for(var i=[],r=e[0],o=e[1],a=0;a<t.length;a+=2){var s...
  function vv (line 45) | function vv(t,e){return O(N((t=function(t){if(!t.UTF8Encoding)return t;v...
  function t (line 45) | function t(t,e,n){var i;this.type="geoJSON",this._parsedMap=ht(),this._m...
  function Cv (line 45) | function Cv(t){for(var e,n=0;n<t.length;n++){var i=t[n].getBoundingRect(...
  function Uv (line 45) | function Uv(t){return function(){for(var e=[],n=0;n<arguments.length;n++...
  function Xv (line 45) | function Xv(t){return function(){for(var e=[],n=0;n<arguments.length;n++...
  function Yv (line 45) | function Yv(t,e,n){return n[0]=n[0]&&n[0].toLowerCase(),Ft.prototype[e]....
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function e (line 45) | function e(e,n,i){var r=t.call(this,new gg)||this;r._chartsViews=[],r._c...
  function t (line 45) | function t(t){for(var e=[],n=t.currentStates,i=0;i<n.length;i++){var r=n...
  function e (line 45) | function e(t,e){t.preventAutoZ||i(e.group,t.get("z")||0,t.get("zlevel")|...
  function i (line 45) | function i(t,e,n,r){var o=t.getTextContent(),a=t.getTextGuideLine();if(t...
  function r (line 45) | function r(t,e){e.group.traverse((function(t){if(!Zu(t)){var e=t.getText...
  function o (line 45) | function o(e,n){var i=e.getModel("stateAnimation"),r=e.isAnimationEnable...
  function u (line 45) | function u(t){var l=t.__requireNewView;t.__requireNewView=!1;var u="_ec_...
  function h (line 45) | function h(i){i&&i.__alive&&i[e]&&i[e](i.__model,o,t._api,n)}
  function i (line 45) | function i(){return null!==e&&e.apply(this,arguments)||this}
  function e (line 45) | function e(t,e){for(var n=0;n<t.length;n++){t[n][Wv]=e}}
  function _m (line 45) | function _m(t){0}
  function Rm (line 45) | function Rm(t){Lm[t]=!1}
  function zm (line 45) | function zm(t){return Am[function(t,e){return t.getAttribute?t.getAttrib...
  function Em (line 45) | function Em(t,e){Cm[t]=e}
  function Vm (line 45) | function Vm(t){Ev(Sm,t)<0&&Sm.push(t)}
  function Bm (line 45) | function Bm(t,e){Zm(wm,t,e,2e3)}
  function Fm (line 45) | function Fm(t){Ev(Mm,t)<0&&t&&Mm.push(t)}
  function Gm (line 45) | function Gm(t){Ev(Im,t)<0&&t&&Im.push(t)}
  function Hm (line 45) | function Hm(t,e,n){"function"==typeof e&&(n=e,e="");var i=zv(t)?t.type:[...
  function Wm (line 45) | function Wm(t,e){Ap.register(t,e)}
  function Um (line 45) | function Um(t,e){Zm(Tm,t,e,1e3,"layout")}
  function Xm (line 45) | function Xm(t,e){Zm(Tm,t,e,3e3,"visual")}
  function Zm (line 45) | function Zm(t,e,n,i,r){if((Nv(e)||zv(e))&&(n=e,e=i),!(Ev(Ym,n)>=0)){Ym.p...
  function jm (line 45) | function jm(t,e){Dm[t]=e}
  function qm (line 45) | function qm(t,e,n){Av(t,e,n)}
  function Qm (line 45) | function Qm(t){F(t)?P(t,(function(t){Qm(t)})):D($m,t)>=0||($m.push(t),G(...
  function t_ (line 45) | function t_(t){return null==t?0:t.length||1}
  function e_ (line 45) | function e_(t){return t}
  function t (line 45) | function t(t,e,n,i,r,o){this._old=t,this._new=e,this._oldKeyGetter=n||e_...
  function i_ (line 45) | function i_(t,e){return t.hasOwnProperty(e)||(t[e]=[]),t[e]}
  function r_ (line 45) | function r_(t){return"category"===t?"ordinal":"time"===t?"time":"float"}
  function t (line 45) | function t(t,e){this.type="list",this._count=0,this._rawCount=0,this._st...
  function e (line 45) | function e(t,e,n,i){return kd(t[i],this._dimensionInfos[e])}
  function k_ (line 45) | function k_(t,e,n){ad(e)||(e=ld(e)),n=n||{},t=(t||[]).slice();for(var i=...
  function P_ (line 45) | function P_(t,e,n){if(n||null!=e.get(t)){for(var i=0;null!=e.get(t+i);)i...
  function O_ (line 45) | function O_(t,e){return k_((e=e||{}).coordDimensions||[],t,{dimsDef:e.di...
  function z_ (line 45) | function z_(t){return"category"===t.get("type")}
  function E_ (line 45) | function E_(t,e,n){var i,r,o,a,s=(n=n||{}).byIndex,l=n.stackedCoordDimen...
  function V_ (line 45) | function V_(t,e){return!!e&&e===t.getCalculationInfo("stackedDimension")}
  function B_ (line 45) | function B_(t,e){return V_(t,e)?t.getCalculationInfo("stackResultDimensi...
  function F_ (line 45) | function F_(t,e,n){n=n||{},ad(t)||(t=ld(t));var i,r=e.get("coordinateSys...
  function t (line 45) | function t(t){this._setting=t||{},this._extent=[1/0,-1/0]}
  function t (line 45) | function t(t){this.categories=t.categories||[],this._needCollect=t.needC...
  function W_ (line 45) | function W_(t){return X(t)&&null!=t.value?t.value:t+""}
  function X_ (line 45) | function X_(t,e,n,i){var r={},o=t[1]-t[0],a=r.interval=lr(o/e,!0);null!=...
  function Y_ (line 45) | function Y_(t){return Ki(t)+2}
  function Z_ (line 45) | function Z_(t,e,n){t[e]=Math.max(Math.min(t[e],n[1]),n[0])}
  function j_ (line 45) | function j_(t,e){return t>=e[0]&&t<=e[1]}
  function q_ (line 45) | function q_(t,e){return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])}
  function K_ (line 45) | function K_(t,e){return t*(e[1]-e[0])+e[0]}
  function e (line 45) | function e(e){var n=t.call(this,e)||this;n.type="ordinal";var i=n.getSet...
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type...
  function nx (line 45) | function nx(t){return t.get("stack")||tx+t.seriesIndex}
  function ix (line 45) | function ix(t){return t.dim+t.index}
  function rx (line 45) | function rx(t,e){var n=[];return e.eachSeriesByType(t,(function(t){hx(t)...
  function ox (line 45) | function ox(t){var e=function(t){var e={};P(t,(function(t){var n=t.coord...
  function ax (line 45) | function ax(t){var e={};P(t,(function(t,n){var i=t.axisKey,r=t.bandWidth...
  function sx (line 45) | function sx(t,e,n){if(t&&e){var i=t[ix(e)];return null!=i&&null!=n?i[nx(...
  function lx (line 45) | function lx(t,e){var n=rx(t,e),i=ox(n),r={};P(n,(function(t){var e=t.get...
  function hx (line 45) | function hx(t){return t.coordinateSystem&&"cartesian2d"===t.coordinateSy...
  function cx (line 45) | function cx(t){return t.pipelineContext&&t.pipelineContext.large}
  function px (line 45) | function px(t,e,n){return e.toGlobalCoord(e.dataToCoord("log"===e.type?1...
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.type="time",n}
  function s (line 45) | function s(t,e,n,r,o,a,s){for(var l=new Date(e),u=e,h=l[r]();u<n&&u<=i[1...
  function l (line 45) | function l(t,r,o){var a=[],l=!r.length;if(!function(t,e,n,i){var r=or(e)...
  function gx (line 45) | function gx(t,e){return(t/=Zh)>16?16:t>7.5?7:t>3.5?4:t>1.5?2:1}
  function yx (line 45) | function yx(t){return(t/=2592e6)>6?6:t>3?3:t>2?2:1}
  function vx (line 45) | function vx(t){return(t/=Yh)>12?12:t>6?6:t>3.5?4:t>2?2:1}
  function mx (line 45) | function mx(t,e){return(t/=e?Xh:Uh)>30?30:t>20?20:t>15?15:t>10?10:t>5?5:...
  function _x (line 45) | function _x(t){return lr(t,!0)}
  function xx (line 45) | function xx(t,e,n){var i=new Date(t);switch(ec(e)){case"year":case"month...
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type...
  function kx (line 45) | function kx(t,e){return Mx(t,Ki(e))}
  function t (line 45) | function t(t,e,n){this._prepareParams(t,e,n)}
  function Nx (line 45) | function Nx(t,e,n){var i=t.rawExtentInfo;return i||(i=new Px(t,e,n),t.ra...
  function zx (line 45) | function zx(t,e){return null==e?null:J(e)?NaN:t.parse(e)}
  function Ex (line 45) | function Ex(t,e){var n=t.type,i=Nx(t,e,t.getExtent()).calculate();t.setB...
  function Vx (line 45) | function Vx(t,e){var n=Ex(t,e),i=n.extent,r=e.get("splitNumber");t insta...
  function Bx (line 45) | function Bx(t,e){if(e=e||t.get("type"))switch(e){case"category":return n...
  function Fx (line 45) | function Fx(t){var e,n,i=t.getLabelModel().get("formatter"),r="category"...
  function Gx (line 45) | function Gx(t,e){return"category"===t.type?t.scale.getLabel(e):e.value}
  function Hx (line 45) | function Hx(t,e){var n=e*Math.PI/180,i=t.width,r=t.height,o=i*Math.abs(M...
  function Wx (line 45) | function Wx(t){var e=t.get("interval");return null==e?"auto":e}
  function Ux (line 45) | function Ux(t){return"category"===t.type&&0===Wx(t.getLabelModel())}
  function Xx (line 45) | function Xx(t,e){var n={};return P(t.mapDimensionsAll(e),(function(e){n[...
  function t (line 45) | function t(){}
  function eb (line 45) | function eb(t){return"category"===t.type?function(t){var e=t.getLabelMod...
  function nb (line 45) | function nb(t,e){return"category"===t.type?function(t,e){var n,i,r=rb(t,...
  function ib (line 45) | function ib(t,e){var n,i,r=rb(t,"labels"),o=Wx(e),a=ob(r,o);return a||(G...
  function rb (line 45) | function rb(t,e){return tb(t)[e]||(tb(t)[e]=[])}
  function ob (line 45) | function ob(t,e){for(var n=0;n<t.length;n++)if(t[n].key===e)return t[n]....
  function ab (line 45) | function ab(t,e,n){return t.push({key:e,value:n}),n}
  function sb (line 45) | function sb(t,e,n){var i=Fx(t),r=t.scale,o=r.getExtent(),a=t.getLabelMod...
  function lb (line 45) | function lb(t,e,n){var i=t.scale,r=Fx(t),o=[];return P(i.getTicks(),(fun...
  function t (line 45) | function t(t,e,n){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=e...
  function c (line 45) | function c(t,e){return t=ji(t),e=ji(e),h?t>e:t<e}
  function cb (line 45) | function cb(t,e){var n=(t[1]-t[0])/e/2;t[0]+=n,t[1]-=n}
  function pb (line 45) | function pb(t){return document.createElementNS("http://www.w3.org/2000/s...
  function db (line 45) | function db(t,e,n,i,r){for(var o=e.length,a=n.length,s=t.newPos,l=s-i,u=...
  function fb (line 45) | function fb(t,e,n){var i=t[t.length-1];i&&i.added===e&&i.removed===n?t[t...
  function gb (line 45) | function gb(t){for(var e=0,n=t.length,i=0,r=0;e<n;e++){var o=t[e];if(o.r...
  function yb (line 45) | function yb(t,e,n){return function(t,e,n){n||(n=function(t,e){return t==...
  function Ib (line 45) | function Ib(t){return mb(1e3*t)/1e3}
  function Tb (line 45) | function Tb(t){return mb(1e4*t)/1e4}
  function Cb (line 45) | function Cb(t){return t<Mb&&t>-1e-4}
  function Db (line 45) | function Db(t,e){e&&Ab(t,"transform","matrix("+Ib(e[0])+","+Ib(e[1])+","...
  function Ab (line 45) | function Ab(t,e,n){(!n||"linear"!==n.type&&"radial"!==n.type)&&t.setAttr...
  function Lb (line 45) | function Lb(t,e,n){var i=null==e.opacity?1:e.opacity;if(n instanceof es)...
  function t (line 45) | function t(){}
  function t (line 45) | function t(t,e,n,i,r){this.nextId=0,this._domName="_dom",this.createElem...
  function Eb (line 45) | function Eb(t){return"linear"===t.type}
  function Vb (line 45) | function Vb(t){return"radial"===t.type}
  function Bb (line 45) | function Bb(t){return t&&("linear"===t.type||"radial"===t.type)}
  function e (line 45) | function e(e,n){return t.call(this,e,n,["linearGradient","radialGradient...
  function Gb (line 45) | function Gb(t){return t&&(!!t.image||!!t.svgElement)}
  function e (line 45) | function e(e,n){return t.call(this,e,n,["pattern"],"__pattern_in_use__")...
  function Ub (line 45) | function Ub(t){var e=t.__clipPaths;return e&&e.length>0}
  function e (line 45) | function e(e,n){var i=t.call(this,e,n,"clipPath","__clippath_in_use__")|...
  function e (line 45) | function e(e,n){var i=t.call(this,e,n,["filter"],"__filter_in_use__","_s...
  function Zb (line 45) | function Zb(t){return parseInt(t,10)}
  function jb (line 45) | function jb(t){return t instanceof Ka?Pb:t instanceof es?Ob:t instanceof...
  function qb (line 45) | function qb(t,e){return e&&t&&e.parentNode!==t}
  function Kb (line 45) | function Kb(t,e,n){if(qb(t,e)&&n){var i=n.nextSibling;i?t.insertBefore(e...
  function $b (line 45) | function $b(t,e){if(qb(t,e)){var n=t.firstChild;n?t.insertBefore(e,n):t....
  function Jb (line 45) | function Jb(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)}
  function Qb (line 45) | function Qb(t){return t.__svgEl}
  function t (line 45) | function t(t,e,n,i){this.type="svg",this.refreshHover=ew("refreshHover")...
  function ew (line 45) | function ew(t){return function(){b('In SVG mode painter not support meth...
  function nw (line 45) | function nw(){return!1}
  function iw (line 45) | function iw(t,e,n){var i=C(),r=e.getWidth(),o=e.getHeight(),a=i.style;re...
  function e (line 45) | function e(e,n,i){var r,o=t.call(this)||this;o.motionBlur=!1,o.lastFrame...
  function u (line 45) | function u(t){if(t.isFinite()&&!t.isZero())if(0===o.length){(e=new gi(0,...
  function p (line 45) | function p(t,n,i,o){if(r.clearRect(t,n,i,o),e&&"transparent"!==e){var a=...
  function lw (line 45) | function lw(t){return parseInt(t,10)}
  function t (line 45) | function t(t,e,n,i){this.type="canvas",this._zlevelList=[],this._prevDis...
  function e (line 45) | function e(t){o&&(o.__endIndex!==t&&(o.__dirty=!0),o.__endIndex=t)}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function cw (line 45) | function cw(t,e){var n=t.mapDimensionsAll("defaultedLabel"),i=n.length;i...
  function pw (line 45) | function pw(t,e){var n=t.mapDimensionsAll("defaultedLabel");if(!F(e))ret...
  function e (line 45) | function e(e,n,i,r){var o=t.call(this)||this;return o.updateData(e,n,i,r...
  function fw (line 45) | function fw(t,e){this.parent.drift(t,e)}
  function gw (line 45) | function gw(t,e,n,i){return e&&!isNaN(e[0])&&!isNaN(e[1])&&!(i.isIgnore&...
  function yw (line 45) | function yw(t){return null==t||X(t)||(t={isIgnore:t}),t||{}}
  function vw (line 45) | function vw(t){var e=t.hostModel,n=e.getModel("emphasis");return{emphasi...
  function t (line 45) | function t(t){this.group=new Ei,this._SymbolCtor=t||dw}
  function i (line 45) | function i(t){t.isGroup||(t.incremental=!0,t.ensureState("emphasis").hov...
  function _w (line 45) | function _w(t,e,n){var i=t.getBaseAxis(),r=t.getOtherAxis(i),o=function(...
  function xw (line 45) | function xw(t,e,n,i){var r=NaN;t.stacked&&(r=n.get(n.getCalculationInfo(...
  function Sw (line 45) | function Sw(t){return F(t)?bw?new Float32Array(t):t:new ww(t)}
  function Tw (line 45) | function Tw(t,e){return isNaN(t)||isNaN(e)}
  function Cw (line 45) | function Cw(t,e,n,i,r,o,a,s,l){for(var u,h,c,p,d,f,g=n,y=0;y<i;y++){var ...
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.type="ec-polyline",n}
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.type="ec-polygon",n}
  function Pw (line 45) | function Pw(t,e,n,i,r){var o=t.getArea(),a=o.x,s=o.y,l=o.width,u=o.heigh...
  function Ow (line 45) | function Ow(t,e,n){var i=t.getArea(),r=ji(i.r0,1),o=ji(i.r,1),a=new Jl({...
  function Rw (line 45) | function Rw(t,e,n,i,r){return t?"polar"===t.type?Ow(t,e,n):"cartesian2d"...
  function Nw (line 45) | function Nw(t,e){return t.type===e}
  function zw (line 45) | function zw(t,e){if(t.length===e.length){for(var n=0;n<t.length;n++)if(t...
  function Ew (line 45) | function Ew(t){for(var e=1/0,n=1/0,i=-1/0,r=-1/0,o=0;o<t.length;){var a=...
  function Vw (line 45) | function Vw(t,e){var n=Ew(t),i=n[0],r=n[1],o=Ew(e),a=o[0],s=o[1];return ...
  function Bw (line 45) | function Bw(t){return"number"==typeof t?t:t?.5:0}
  function Fw (line 45) | function Fw(t,e,n){for(var i=e.getBaseAxis(),r="x"===i.dim||"radius"===i...
  function Gw (line 45) | function Gw(t,e,n){var i=t.get("showAllSymbol"),r="auto"===i;if(!i||r){v...
  function Hw (line 45) | function Hw(t,e){return[t[2*e],t[2*e+1]]}
  function Ww (line 45) | function Ww(t,e,n,i){if(Nw(e,"cartesian2d")){var r=i.getModel("endLabel"...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function Xw (line 45) | function Xw(t,e){return{seriesType:t,plan:Sf(),reset:function(t){var n=t...
  function jw (line 45) | function jw(t){return{seriesType:t,reset:function(t,e,n){var i=t.getData...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.type="sausage",n}
  function e (line 45) | function e(){var n=t.call(this)||this;return n.type=e.type,n._isFirstFra...
  function w (line 45) | function w(t){var e=aS[l.type](a,t),n=function(t,e,n){return new("polar"...
  function oS (line 45) | function oS(t,e,n,i,r,o,a,s){var l,u;o?(u={x:i.x,width:i.width},l={y:i.y...
  function sS (line 45) | function sS(t,e,n,i,r,o,a,s){var l=e.getItemVisual(n,"style");s||t.setSh...
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.type="largeBar",n}
  function hS (line 45) | function hS(t,e,n){var i=t.getData(),r=[],o=i.getLayout("valueAxisHorizo...
  function pS (line 45) | function pS(t,e,n){if(Nw(n,"cartesian2d")){var i=e,r=n.getArea();return{...
  function gS (line 45) | function gS(t,e,n){e.eachSeriesByType(t,(function(t){var e=t.getData(),i...
  function yS (line 45) | function yS(t){return{seriesType:t,reset:function(t,e){var n=e.findCompo...
  function mS (line 45) | function mS(t,e,n,i,r,o,a,s,l,u){if(!(t.length<2)){for(var h=t.length,c=...
  function _S (line 45) | function _S(t){return"center"===t.position}
  function xS (line 45) | function xS(t){var e,n,i=t.getData(),r=[],o=!1,a=(t.get("minShowLabelAng...
  function bS (line 45) | function bS(t,e){var n=t.get("borderRadius");return null==n?null:(F(n)||...
  function e (line 45) | function e(e,n,i){var r=t.call(this)||this;r.z2=2;var o=new cs;return r....
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.igno...
  function MS (line 45) | function MS(t,e,n){e=F(e)&&{coordDimensions:e}||I({},e);var i=t.getSourc...
  function t (line 45) | function t(t,e){this._getDataWithEncodedVisual=t,this._getRawData=e}
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.useC...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function t (line 45) | function t(){this.group=new Ei}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function BS (line 45) | function BS(t,e,i,r){P(VS,(function(o,a){var s=S(S({},ES[a],!0),r,!0),l=...
  function FS (line 45) | function FS(t){return t.type||(t.data?"category":"value")}
  function t (line 45) | function t(t){this.type="cartesian",this._dimList=[],this._axes={},this....
  function WS (line 45) | function WS(t){return"interval"===t.type||"time"===t.type}
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type...
  function e (line 45) | function e(e,n,i,r,o){var a=t.call(this,e,n,i)||this;return a.index=0,a....
  function YS (line 45) | function YS(t,e,n){n=n||{};var i=t.coordinateSystem,r=e.axis,o={},a=r.ge...
  function ZS (line 45) | function ZS(t){return"cartesian2d"===t.get("coordinateSystem")}
  function jS (line 45) | function jS(t){var e={xAxisModel:null,yAxisModel:null};return P(e,(funct...
  function t (line 45) | function t(t,e,n){this.type="grid",this._coordsMap={},this._coordsList=[...
  function s (line 45) | function s(){P(a,(function(t){var e=t.isHorizontal(),n=e?[0,o.width]:[0,...
  function l (line 45) | function l(e){return function(n,i){if(KS(n,t)){var l=n.get("position");"...
  function n (line 45) | function n(t,e){P(Xx(t,e.dim),(function(n){e.scale.unionExtentFromData(t...
  function KS (line 45) | function KS(t,e){return t.getCoordSysModel()===e}
  function $S (line 45) | function $S(t,e,n,i){n.getAxesOnZeroOf=function(){return r?[r]:[]};var r...
  function JS (line 45) | function JS(t){return t&&"category"!==t.type&&"time"!==t.type&&function(...
  function t (line 45) | function t(t,e){this.group=new Ei,this.opt=e,this.axisModel=t,T(e,{label...
  function nM (line 45) | function nM(t){t&&(t.ignore=!0)}
  function iM (line 45) | function iM(t,e){var n=t&&t.getBoundingRect().clone(),i=e&&e.getBounding...
  function rM (line 45) | function rM(t){return"middle"===t||"center"===t}
  function oM (line 45) | function oM(t,e,n,i,r){for(var o=[],a=[],s=[],l=0;l<t.length;l++){var u=...
  function aM (line 45) | function aM(t,e){var n={axesInfo:{},seriesInvolved:!1,coordSysAxesInfo:{...
  function sM (line 45) | function sM(t,e){return"all"===t||F(t)&&D(t,e)>=0||t===e}
  function lM (line 45) | function lM(t){var e=uM(t);if(e){var n=e.axisPointerModel,i=e.axis.scale...
  function uM (line 45) | function uM(t){var e=(t.ecModel.getComponent("axisPointer")||{}).coordSy...
  function hM (line 45) | function hM(t){return!!t.get(["handle","show"])}
  function cM (line 45) | function cM(t){return t.type+"||"+t.id}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function gM (line 45) | function gM(t,e,n,i){var r=n.axis;if(!r.scale.isBlank()){var o=n.getMode...
  function yM (line 45) | function yM(t){fM(t).splitAreaColors=null}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type...
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type...
  function IM (line 45) | function IM(t){t.registerComponentView(SM),t.registerComponentModel(PS),...
  function TM (line 45) | function TM(t){t.eachSeriesByType("radar",(function(t){var e=t.getData()...
  function CM (line 45) | function CM(t){return!isNaN(t[0])&&!isNaN(t[1])}
  function DM (line 45) | function DM(t){return[t.cx,t.cy]}
  function AM (line 45) | function AM(t){var e=t.polar;if(e){F(e)||(e=[e]);var n=[];P(e,(function(...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function s (line 45) | function s(t,e){var n=t.getItemVisual(e,"symbol")||"circle";if("none"!==...
  function l (line 45) | function l(e,n,i,r,o,a){i.removeAll();for(var l=0;l<n.length-1;l++){var ...
  function u (line 45) | function u(t){return O(t,(function(t){return[i.cx,i.cy]}))}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function OM (line 45) | function OM(t,e){return T({show:e},t)}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function D (line 45) | function D(t,e,n){var i=n%e.length;return t[i]=t[i]||[],i}
  function e (line 45) | function e(e,n,i){var r=t.call(this,e,n,i)||this;return r.type="value",r...
  function t (line 45) | function t(t,e,n){this.dimensions=[],this._model=t,this._indicatorAxes=O...
  function o (line 45) | function o(t){var e=Math.pow(10,Math.floor(Math.log(t)/Math.LN10)),n=t/e...
  function BM (line 45) | function BM(t){t.registerCoordinateSystem("radar",VM),t.registerComponen...
  function GM (line 45) | function GM(t,e){return!!HM(t)[e]}
  function HM (line 45) | function HM(t){return t[FM]||(t[FM]={})}
  function e (line 45) | function e(e){var n=t.call(this)||this;n._zr=e;var i=V(n._mousedownHandl...
  function UM (line 45) | function UM(t,e,n,i,r){t.pointerChecker&&t.pointerChecker(i,r.originX,r....
  function XM (line 45) | function XM(t,e,n,i,r){r.isAvailableBehavior=V(YM,null,n,i),t.trigger(e,r)}
  function YM (line 45) | function YM(t,e,n){var i=n[t];return!t||i&&(!H(i)||e.event[i+"Key"])}
  function ZM (line 45) | function ZM(t,e,n){var i=t.target;i.x+=e,i.y+=n,i.dirty()}
  function jM (line 45) | function jM(t,e,n,i){var r=t.target,o=t.zoomLimit,a=t.zoom=t.zoom||1;if(...
  function KM (line 45) | function KM(t,e,n){var i=e.getComponentByElement(t.topTarget),r=i&&i.coo...
  function nI (line 45) | function nI(t){var e=t.getItemStyle(),n=t.get("areaColor");return null!=...
  function t (line 45) | function t(t){var e=new Ei;this.uid=Nh("ec_map_draw"),this._controller=n...
  function s (line 45) | function s(){var e={type:"geoRoam",componentType:a};return e[a+"Id"]=t.i...
  function rI (line 45) | function rI(t,e,n,i){var r=i.getModel("itemStyle"),o=i.getModel(["emphas...
  function oI (line 45) | function oI(t,e,n,i,r,o,a){var s=t.data,l=t.isGeo,u=s&&isNaN(s.get(s.map...
  function aI (line 45) | function aI(t,e,n,i,r,o){t.data?t.data.setItemGraphicEl(o,e):_s(e).event...
  function sI (line 45) | function sI(t,e,n,i,r){t.data||oh({el:e,componentModel:r,itemName:n,item...
  function lI (line 45) | function lI(t,e,n,i,r){e.highDownSilentOnTouch=!!r.get("selectedMode");v...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function cI (line 45) | function cI(t){var e={};t.eachSeriesByType("map",(function(t){var n=t.ge...
  function pI (line 45) | function pI(t){var e={};t.eachSeriesByType("map",(function(n){var i=n.ge...
  function e (line 45) | function e(e){var n=t.call(this)||this;return n.type="view",n.dimensions...
  function gI (line 45) | function gI(t){var e=t.seriesModel;return e?e.coordinateSystem:null}
  function e (line 45) | function e(e,n,i){var r=t.call(this,e)||this;r.dimensions=["lng","lat"],...
  function mI (line 45) | function mI(t){var e=t.geoModel,n=t.seriesModel;return e?e.coordinateSys...
  function _I (line 45) | function _I(t,e){var n=t.get("boundingCoords");if(null!=n){var i=n[0],r=...
  function t (line 45) | function t(){this.dimensions=vI.prototype.dimensions}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function wI (line 45) | function wI(t,e,n){var i=t.getZoom(),r=t.getCenter(),o=e.zoom,a=t.dataTo...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function MI (line 45) | function MI(t){function e(e,n){n.update="geo:updateSelectStatus",t.regis...
  function II (line 45) | function II(t,e){var n=t.isExpand?t.children:[],i=t.parentNode.children,...
  function TI (line 45) | function TI(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t....
  function CI (line 45) | function CI(t){return arguments.length?t:OI}
  function DI (line 45) | function DI(t,e){return t-=Math.PI/2,{x:e*Math.cos(t),y:e*Math.sin(t)}}
  function AI (line 45) | function AI(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1...
  function LI (line 45) | function LI(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierN...
  function kI (line 45) | function kI(t,e,n){return t.hierNode.ancestor.parentNode===e.parentNode?...
  function PI (line 45) | function PI(t,e,n){var i=n/(e.hierNode.i-t.hierNode.i);e.hierNode.change...
  function OI (line 45) | function OI(t,e){return t.parentNode===e.parentNode?1:2}
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function EI (line 45) | function EI(t,e){var n=t.getItemLayout(e);return n&&!isNaN(n.x)&&!isNaN(...
  function VI (line 45) | function VI(t,e,n,i,r){var o=!n,a=t.tree.getNodeByDataIndex(e),s=a.getMo...
  function BI (line 45) | function BI(t,e,n,i,r){for(var o,a=t.tree.getNodeByDataIndex(e),s=t.tree...
  function FI (line 45) | function FI(t,e,n,i,r){var o,a,s,l,u,h,c,p;if("radial"===t){u=i.rawX,c=i...
  function HI (line 45) | function HI(t){var e=t.mainData,n=t.datas;n||(n={main:e},t.datasAttr={ma...
  function WI (line 45) | function WI(t,e){if(GI(i=this).mainData===i){var n=I({},GI(this).datas);...
  function UI (line 45) | function UI(t,e){return t.struct&&t.struct.update(),e}
  function XI (line 45) | function XI(t,e){return P(GI(e).datas,(function(n,i){n!==e&&qI(n.cloneSh...
  function YI (line 45) | function YI(t){var e=GI(this).mainData;return null==t||null==e?e:GI(e).d...
  function ZI (line 45) | function ZI(){var t=GI(this).mainData;return null==t?[{data:t}]:O(E(GI(t...
  function jI (line 45) | function jI(t,e,n){GI(t).datas={},P(e,(function(e,i){qI(e,i,t,n)}))}
  function qI (line 45) | function qI(t,e,n,i){GI(n).datas[e]=t,GI(t).mainData=n,t.dataType=e,i.st...
  function t (line 45) | function t(t,e){this.depth=0,this.height=0,this.dataIndex=-1,this.childr...
  function t (line 45) | function t(t){this.type="tree",this._nodes=[],this.hostModel=t}
  function JI (line 45) | function JI(t,e,n){if(t&&D(e,t.type)>=0){var i=n.getData().tree.root,r=t...
  function QI (line 45) | function QI(t){for(var e=[];t;)(t=t.parentNode)&&e.push(t);return e.reve...
  function tT (line 45) | function tT(t,e){return D(QI(t),e)>=0}
  function eT (line 45) | function eT(t,e){for(var n=[];t;){var i=t.dataIndex;n.push({name:t.name,...
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.hasS...
  function iT (line 45) | function iT(t,e){for(var n,i=[t];n=i.pop();)if(e(n),n.isExpand){var r=n....
  function rT (line 45) | function rT(t,e){t.eachSeriesByType("tree",(function(t){!function(t,e){v...
  function oT (line 45) | function oT(t){t.eachSeriesByType("tree",(function(t){var e=t.getData();...
  function lT (line 45) | function lT(t){var e=t.getData().tree,n={};e.eachNode((function(e){for(v...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function hT (line 45) | function hT(t){var e=0;P(t.children,(function(t){hT(t);var n=t.value;F(n...
  function t (line 45) | function t(t){this.group=new Ei,t.add(this.group)}
  function pT (line 45) | function pT(t,e,n,i,r,o){var a=[[r?t:t-5,e],[t+n,e],[t+n,e+i],[r?t:t-5,e...
  function dT (line 45) | function dT(t,e,n){_s(t).eventData={componentType:"series",componentSubT...
  function t (line 45) | function t(){this._storage=[],this._elExistsMap={}}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function u (line 45) | function u(t,i,r,u){return function(t,e,n,i,r,o,a,s,l,u){if(!a)return;va...
  function a (line 45) | function a(t){return t.getId()}
  function s (line 45) | function s(a,s){var l=null!=a?e[a]:null,h=null!=s?n[s]:null,c=u(l,h,i,o)...
  function t (line 45) | function t(e){var n=e.mappingMethod,i=e.type,r=this.option=w(e);this.typ...
  function c (line 45) | function c(e,n){var o=Math.abs(e-t);o<r&&(r=o,i=n)}
  function CT (line 45) | function CT(t,e){var n=t.visual,i=[];X(n)?ST(n,(function(t){i.push(t)}))...
  function DT (line 45) | function DT(t){return{applyVisual:function(e,n,i){var r=this.mapValueToV...
  function AT (line 45) | function AT(t){var e=this.option.visual;return e[Math.round(Yi(t,[0,1],[...
  function LT (line 45) | function LT(t){return function(e,n,i){i(t,this.mapValueToVisual(e))}}
  function kT (line 45) | function kT(t){var e=this.option.visual;return e[this.option.loop&&t!==I...
  function PT (line 45) | function PT(){return this.option.visual[0]}
  function OT (line 45) | function OT(t){return{linear:function(e){return Yi(e,t,this.option.visua...
  function RT (line 45) | function RT(t){var e=this.option,n=e.pieceList;if(e.hasSpecialVisual){va...
  function NT (line 45) | function NT(t,e){return t.visual=e,"color"===t.type&&(t.parsedVisual=O(e...
  function ET (line 45) | function ET(t,e,n){return t?e<=n:e<n}
  function FT (line 45) | function FT(t,e,n,i){var r=t.getModel(),o=t.getLayout(),a=t.hostTree.dat...
  function GT (line 45) | function GT(t){var e=HT(t,"color");if(e){var n=HT(t,"colorAlpha"),i=HT(t...
  function HT (line 45) | function HT(t,e){var n=t[e];if(null!=n&&"none"!==n)return n}
  function WT (line 45) | function WT(t,e){var n=t.get(e);return F(n)&&n.length?{name:e,range:n}:n...
  function QT (line 45) | function QT(t,e,n,i){var r,o;if(!t.isRemoved()){var a=t.getLayout();r=a....
  function tC (line 45) | function tC(t,e,n){for(var i=0,r=1/0,o=0,a=void 0,s=t.length;o<s;o++)(a=...
  function eC (line 45) | function eC(t,e,n,i,r){var o=e===n.width?0:1,a=1-o,s=["x","y"],l=["width...
  function nC (line 45) | function nC(t,e,n,i,r){var o=t.getLayout(),a=n[r],s=a&&a===t;if(!(a&&!s|...
  function iC (line 45) | function iC(t){return t.get(KT)?t.get($T):0}
  function rC (line 45) | function rC(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&...
  function oC (line 45) | function oC(t){var e={};t.eachSeriesByType("graph",(function(t){var n=t....
  function aC (line 45) | function aC(t){return t instanceof Array||(t=[t,t]),t}
  function sC (line 45) | function sC(t){t.eachSeriesByType("graph",(function(t){var e=t.getGraph(...
  function fC (line 45) | function fC(t,e,n,i){var r=uC(e),o=F(r);if(!r)return null;var a=function...
  function gC (line 45) | function gC(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var n=t....
  function yC (line 45) | function yC(t,e){t.eachEdge((function(t,n){var i=et(t.getModel().get(["l...
  function vC (line 45) | function vC(t,e){t.eachSeriesByType("graph",(function(t){var e=t.get("la...
  function mC (line 45) | function mC(t){var e=t.coordinateSystem;if("view"!==e.type)return 1;var ...
  function _C (line 45) | function _C(t){var e=t.getVisual("symbolSize");return e instanceof Array...
  function wC (line 45) | function wC(t,e){var n=t.coordinateSystem;if(!n||"view"===n.type){var i=...
  function MC (line 45) | function MC(t){t.eachSeriesByType("graph",(function(t){"circular"===t.ge...
  function TC (line 45) | function TC(t){t.eachSeriesByType("graph",(function(t){var e=t.coordinat...
  function CC (line 45) | function CC(t,e){var n=[];return t.eachSeriesByType("graph",(function(t)...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function kC (line 45) | function kC(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.type="ec-line",n}
  function RC (line 45) | function RC(t){return"_"+t+"Type"}
  function NC (line 45) | function NC(t,e,n){var i=e.getItemVisual(n,t);if(i&&"none"!==i){var r=e....
  function zC (line 45) | function zC(t,e){t.x1=e[0][0],t.y1=e[0][1],t.x2=e[1][0],t.y2=e[1][1],t.p...
  function e (line 45) | function e(e,n,i){var r=t.call(this)||this;return r._createLine(e,n,i),r}
  function S (line 45) | function S(t,e){var n=t.__specifiedRotation;if(null==n){var i=a.tangentA...
  function t (line 45) | function t(t){this.group=new Ei,this._LineCtor=t||EC}
  function n (line 45) | function n(t){t.isGroup||function(t){return t.animators&&t.animators.len...
  function BC (line 45) | function BC(t){var e=t.hostModel;return{lineStyle:e.getModel("lineStyle"...
  function FC (line 45) | function FC(t){return isNaN(t[0])||isNaN(t[1])}
  function GC (line 45) | function GC(t){return!FC(t[0])&&!FC(t[1])}
  function jC (line 45) | function jC(t,e,n){for(var i,r=t[0],o=t[1],a=t[2],s=1/0,l=n*n,u=.1,h=.1;...
  function qC (line 45) | function qC(t,e){var n=[],i=Zo,r=[[],[],[]],o=[[],[]],a=[];e/=2,t.eachEd...
  function KC (line 45) | function KC(t){return"view"===t.type}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function JC (line 45) | function JC(t){return"_EC_"+t}
  function t (line 45) | function t(t){this.type="graph",this.nodes=[],this.edges=[],this._nodesM...
  function t (line 45) | function t(t,e){this.inEdges=[],this.outEdges=[],this.edges=[],this.data...
  function t (line 45) | function t(t,e,n){this.dataIndex=-1,this.node1=t,this.node2=e,this.dataI...
  function nD (line 45) | function nD(t,e){return{getValue:function(n){var i=this[t][e];return i.g...
  function iD (line 45) | function iD(t,e,n,i,r){for(var o=new QC(i),a=0;a<t.length;a++)o.addNode(...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function i (line 45) | function i(){return n._categoriesData}
  function i (line 45) | function i(t,e){var i=n.call(this,t,e);return i.resolveParentPath=r,i}
  function r (line 45) | function r(t){if(t&&("label"===t[0]||"label"===t[1])){var e=t.slice();re...
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.type="pointer",n}
  function lD (line 45) | function lD(t,e){var n=null==t?"":t+"";return e&&("string"==typeof e?n=e...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function w (line 45) | function w(e,n){var i,o=y.getItemModel(e).getModel("pointer"),a=Zi(o.get...
  function S (line 45) | function S(t,e){var n=f.get("roundCap")?Jw:Jl,i=f.get("overlap"),a=i?f.g...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e,n){var i=t.call(this)||this,r=i,o=new au,a=new cs;return r....
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function yD (line 45) | function yD(t,e){t.eachSeriesByType("funnel",(function(t){var n=t.getDat...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function mD (line 45) | function mD(t,e,n,i){for(var r,o=[],a=0;a<n.length;a++){var s=n[a],l=t.g...
  function _D (line 45) | function _D(t,e,n,i,r){var o=mD(t,n,i,r),a=new au({shape:{points:o},z2:1...
  function xD (line 45) | function xD(t){var e=t.get("smooth",!0);return!0===e&&(e=.3),J(e=cr(e))&...
  function bD (line 45) | function bD(t,e,n,i){t.useStyle(e.getItemVisual(n,"style")),t.style.fill...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function SD (line 45) | function SD(t){var e=t.ecModel.getComponent("parallel",t.get("parallelIn...
  function TD (line 45) | function TD(t){!function(t){if(t.parallel)return;var e=!1;P(t.series,(fu...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function AD (line 45) | function AD(t,e){var n=t._model;return n.get("axisExpandable")&&n.get("a...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e,n,i,r,o){var a=t.call(this,e,n,i)||this;return a.type=r||"v...
  function PD (line 45) | function PD(t,e,n,i,r,o){t=t||0;var a=n[1]-n[0];if(null!=r&&(r=RD(r,[0,a...
  function OD (line 45) | function OD(t,e){var n=t[e]-t[1-e];return{span:Math.abs(n),sign:n>0?-1:n...
  function RD (line 45) | function RD(t,e){return Math.min(null!=e[1]?e[1]:1/0,Math.max(null!=e[0]...
  function t (line 45) | function t(t,e,n){this.type="parallel",this._axesMap=ht(),this._axesLayo...
  function WD (line 45) | function WD(t,e){return zD(ED(t,e[0]),e[1])}
  function UD (line 45) | function UD(t,e){var n=e.layoutLength/(e.axisCount-1);return{position:n*...
  function XD (line 45) | function XD(t,e){var n,i,r=e.layoutLength,o=e.axisExpandWidth,a=e.axisCo...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e){var n=t.call(this)||this;return n._track=[],n._covers=[],n...
  function o (line 45) | function o(t,e){return(null!=t.id?t.id:"\0-brush-index-"+e)+"-"+t.brushT...
  function a (line 45) | function a(o,a){var s=t[o];if(null!=a&&e[a]===r)n[o]=e[a];else{var l=n[o...
  function rA (line 45) | function rA(t,e){var n=PA[e.brushType].createCover(t,e);return n.__brush...
  function oA (line 45) | function oA(t,e){var n=uA(e);return n.endCreating&&(n.endCreating(t,e),s...
  function aA (line 45) | function aA(t,e){var n=e.__brushOption;uA(e).updateCoverShape(t,e,n.rang...
  function sA (line 45) | function sA(t,e){var n=e.z;null==n&&(n=1e4),t.traverse((function(t){t.z=...
  function lA (line 45) | function lA(t,e){uA(e).updateCommon(t,e),aA(t,e)}
  function uA (line 45) | function uA(t){return PA[t.__brushOption.brushType]}
  function hA (line 45) | function hA(t,e,n){var i,r=t._panels;if(!r)return jD;var o=t._transform;...
  function cA (line 45) | function cA(t,e){var n=t._panels;if(!n)return jD;var i=e.__brushOption.p...
  function pA (line 45) | function pA(t){var e=t._covers,n=e.length;return P(e,(function(e){t.grou...
  function dA (line 45) | function dA(t,e){var n=O(t._covers,(function(t){var e=t.__brushOption,n=...
  function fA (line 45) | function fA(t){var e=t.length-1;return e<0&&(e=0),[t[0],t[e]]}
  function gA (line 45) | function gA(t,e,n,i){var r=new Ei;return r.add(new ls({name:"main",style...
  function yA (line 45) | function yA(t,e,n,i){var r=i.brushStyle.lineWidth||0,o=KD(r,6),a=n[0][0]...
  function vA (line 45) | function vA(t,e){var n=e.__brushOption,i=n.transformable,r=e.childAt(0);...
  function mA (line 45) | function mA(t,e,n,i,r,o,a){var s=e.childOfName(n);s&&s.setShape(function...
  function _A (line 45) | function _A(t){return T({strokeNoScale:!0},t.brushStyle)}
  function xA (line 45) | function xA(t,e,n,i){var r=[qD(t,n),qD(e,i)],o=[KD(t,n),KD(e,i)];return[...
  function bA (line 45) | function bA(t,e){return{left:"w",right:"e",top:"n",bottom:"s"}[Ku({w:"le...
  function wA (line 45) | function wA(t,e,n,i,r,o){var a=n.__brushOption,s=t.toRectRange(a.range),...
  function SA (line 45) | function SA(t,e,n,i){var r=e.__brushOption.range,o=MA(t,n,i);P(r,(functi...
  function MA (line 45) | function MA(t,e,n){var i=t.group,r=i.transformCoordToLocal(e,n),o=i.tran...
  function IA (line 45) | function IA(t,e,n){var i=cA(t,e);return i&&i!==jD?i.clipPath(n,t._transf...
  function TA (line 45) | function TA(t){var e=t.event;e.preventDefault&&e.preventDefault()}
  function CA (line 45) | function CA(t,e,n){return t.childOfName("main").contain(e,n)}
  function DA (line 45) | function DA(t,e,n,i){var r,o=t._creatingCover,a=t._creatingPanel,s=t._br...
  function AA (line 45) | function AA(t,e){return"auto"===t?e.defaultBrushType:t}
  function kA (line 45) | function kA(t,e){if(t._dragging){TA(e);var n=e.offsetX,i=e.offsetY,r=t.g...
  function n (line 45) | function n(t){return t}
  function OA (line 45) | function OA(t){return{createCover:function(e,n){return gA({toRectRange:f...
  function RA (line 45) | function RA(t){return t=EA(t),function(e){return Qu(e,t)}}
  function NA (line 45) | function NA(t,e){return t=EA(t),function(n){var i=null!=e?e:n,r=i?t.widt...
  function zA (line 45) | function zA(t,e,n){var i=EA(t);return function(t,r){return i.contain(r[0...
  function EA (line 45) | function EA(t){return gi.create(t)}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function HA (line 45) | function HA(t){t.registerComponentView(CD),t.registerComponentModel(LD),...
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function i (line 45) | function i(t){return isNaN(t)||null==t}
  function ZA (line 45) | function ZA(t,e){t.eachSeriesByType("sankey",(function(t){var n=t.get("n...
  function jA (line 45) | function jA(t){var e=t.hostGraph.data.getRawDataItem(t.dataIndex);return...
  function qA (line 45) | function qA(t,e,n,i,r){var o="vertical"===r?"x":"y";P(t,(function(t){var...
  function KA (line 45) | function KA(t,e,n){P(t.slice().reverse(),(function(t){P(t,(function(t){i...
  function $A (line 45) | function $A(t,e){return eL(t.node2,e)*t.getValue()}
  function JA (line 45) | function JA(t,e){return eL(t.node2,e)}
  function QA (line 45) | function QA(t,e){return eL(t.node1,e)*t.getValue()}
  function tL (line 45) | function tL(t,e){return eL(t.node1,e)}
  function eL (line 45) | function eL(t,e){return"vertical"===e?t.getLayout().x+t.getLayout().dx/2...
  function nL (line 45) | function nL(t){return t.getValue()}
  function iL (line 45) | function iL(t,e,n){for(var i=0,r=t.length,o=-1;++o<r;){var a=+e(t[o],n);...
  function rL (line 45) | function rL(t,e,n){P(t,(function(t){P(t,(function(t){if(t.inEdges.length...
  function oL (line 45) | function oL(t){t.eachSeriesByType("sankey",(function(t){var e=t.getGraph...
  function t (line 45) | function t(){}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.type="boxplotBoxPath",n}
  function cL (line 45) | function cL(t,e,n,i,r){var o=t.ends,a=new hL({shape:{points:r?dL(o,i,t):...
  function pL (line 45) | function pL(t,e,n,i,r){var o=n.hostModel;(0,ah[r?"initProps":"updateProp...
  function dL (line 45) | function dL(t,e,n){return O(t,(function(t){return(t=t.slice())[e]=n.init...
  function fL (line 45) | function fL(t,e){}
  function yL (line 45) | function yL(t){var e=function(t){var e=[],n=[];return t.eachSeriesByType...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.type="normalCandlestic...
  function wL (line 45) | function wL(t,e,n){var i=t.ends;return new bL({shape:{points:n?IL(i,t):i...
  function SL (line 45) | function SL(t,e){for(var n=!0,i=0;i<e.ends.length;i++)if(t.contain(e.end...
  function ML (line 45) | function ML(t,e,n,i){var r=e.getItemModel(n);t.useStyle(e.getItemVisual(...
  function IL (line 45) | function IL(t,e){return O(t,(function(t){return(t=t.slice())[1]=e.initBa...
  function e (line 45) | function e(e){var n=t.call(this,e)||this;return n.type="largeCandlestick...
  function DL (line 45) | function DL(t,e,n){var i=t.getData().getLayout("largePoints"),r=new CL({...
  function AL (line 45) | function AL(t,e,n,i){var r=n.get(["itemStyle",t>0?"borderColor":"borderC...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function kL (line 45) | function kL(t){t&&F(t.series)&&P(t.series,(function(t){X(t)&&"k"===t.typ...
  function n (line 45) | function n(t,e){return e.get(t>0?RL:NL)}
  function i (line 45) | function i(t,e){return e.get(t>0?PL:OL)}
  function w (line 45) | function w(t,n){var i=[];return i[0]=n,i[1]=t,isNaN(n)||isNaN(t)?[NaN,Na...
  function S (line 45) | function S(t,e,n){var r=e.slice(),o=e.slice();r[0]=Fu(r[0]+i/2,1,!1),o[0...
  function M (line 45) | function M(t,e,n){var r=w(t,n),o=w(e,n);return r[0]-=i/2,o[0]-=i/2,{x:r[...
  function I (line 45) | function I(t){return t[0]=Fu(t[0],1),t}
  function BL (line 45) | function BL(t,e,n,i,r){return n>i?-1:n<i?1:e>0?t.get(r,e-1)<=i?1:-1:1}
  function FL (line 45) | function FL(t,e){var n=e.rippleEffectColor||e.color;t.eachChild((functio...
  function e (line 45) | function e(e,n){var i=t.call(this)||this,r=new dw(e,n),o=new Ei;return i...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e,n,i){var r=t.call(this)||this;return r.add(r.createLine(e,n...
  function e (line 45) | function e(e,n,i){var r=t.call(this)||this;return r._createPolyline(e,n,...
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._las...
  function e (line 45) | function e(e){return t.call(this,e)||this}
  function t (line 45) | function t(){this.group=new Ei}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function tk (line 45) | function tk(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=O(e...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function nk (line 45) | function nk(t){return t instanceof Array||(t=[t,t]),t}
  function t (line 45) | function t(){this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.m...
  function ok (line 45) | function ok(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function pk (line 45) | function pk(t,e,n,i){var r=t.getItemLayout(e),o=n.get("symbolRepeat"),a=...
  function dk (line 45) | function dk(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}
  function fk (line 45) | function fk(t){var e=t.symbolPatternSize,n=fy(t.symbolType,-e/2,-e/2,e,e...
  function gk (line 45) | function gk(t,e,n,i){var r=t.__pictorialBundle,o=n.symbolSize,a=n.valueL...
  function yk (line 45) | function yk(t,e,n,i){var r=t.__pictorialBundle,o=t.__pictorialMainPath;o...
  function vk (line 45) | function vk(t,e,n){var i=I({},e.barRectShape),r=t.__pictorialBarRect;r?T...
  function mk (line 45) | function mk(t,e,n,i){if(n.symbolClip){var r=t.__pictorialClipPath,o=I({}...
  function _k (line 45) | function _k(t,e){var n=t.getItemModel(e);return n.getAnimationDelayParam...
  function xk (line 45) | function xk(t){return{index:t.__pictorialAnimationIndex,count:t.__pictor...
  function bk (line 45) | function bk(){return this.parentModel.isAnimationEnabled()&&!!this.getSh...
  function wk (line 45) | function wk(t,e,n,i){var r=new Ei,o=new Ei;return r.add(o),r.__pictorial...
  function Sk (line 45) | function Sk(t,e,n,i){var r=i.__pictorialBarRect;r&&r.removeTextContent()...
  function Mk (line 45) | function Mk(t,e){return[t.getItemVisual(e.dataIndex,"symbol")||"none",!!...
  function Ik (line 45) | function Ik(t,e,n){P(t.__pictorialBundle.children(),(function(i){i!==t._...
  function Tk (line 45) | function Tk(t,e,n,i,r,o){e&&t.attr(e),i.symbolClip&&!r?n&&t.attr(n):n&&a...
  function Ck (line 45) | function Ck(t,e,n){var i=n.dataIndex,r=n.itemModel,o=r.getModel("emphasi...
  function Dk (line 45) | function Dk(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function h (line 45) | function h(t){return t.name}
  function d (line 45) | function d(e,n,s){var l=r._layers;if("remove"!==e){for(var u,h,c=[],d=[]...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function Pk (line 45) | function Pk(t,e){t.eachSeriesByType("themeRiver",(function(t){var e=t.ge...
  function Ok (line 45) | function Ok(t,e,n){if(t.count())for(var i,r=e.coordinateSystem,o=e.getLa...
  function e (line 45) | function e(e,n,i,r){var o=t.call(this)||this;o.z2=2,o.textConfig={inside...
  function f (line 45) | function f(t,e){var n=t.get(e);return null==n?i.get(e):n}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function s (line 45) | function s(t){return t.getId()}
  function h (line 45) | function h(s,h){!function(i,r){u||!i||i.getValue()||(i=null);if(i!==a&&r...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function Bk (line 45) | function Bk(t){var e=0;P(t.children,(function(t){Bk(t);var n=t.value;F(n...
  function Gk (line 45) | function Gk(t,e,n){e.eachSeriesByType(t,(function(t){var e=t.get("center...
  function Hk (line 45) | function Hk(t,e){var n=t.children||[];t.children=function(t,e){if("funct...
  function Wk (line 45) | function Wk(t){var e={};t.eachSeriesByType("sunburst",(function(t){var n...
  function Uk (line 45) | function Uk(t,e){return e=e||[0,0],O(["x","y"],(function(n,i){var r=this...
  function Xk (line 45) | function Xk(t,e){return e=e||[0,0],O([0,1],(function(n){var i=e[n],r=t[n...
  function Yk (line 45) | function Yk(t,e){var n=this.getAxis(),i=e instanceof Array?e[0]:e,r=(t i...
  function Zk (line 45) | function Zk(t,e){return e=e||[0,0],O(["Radius","Angle"],(function(n,i){v...
  function jk (line 45) | function jk(t,e,n,i){return t&&(t.legacy||!1!==t.legacy&&!n&&!i&&"tspan"...
  function qk (line 45) | function qk(t,e,n){var i,r,o,a=t;if("text"===e)o=a;else{o={},dt(a,"text"...
  function Kk (line 45) | function Kk(t,e){e&&(e.font=e.textFont||e.font,dt(e,"textStrokeWidth")&&...
  function $k (line 45) | function $k(t,e,n){var i=t;i.textPosition=i.textPosition||n.position||"i...
  function Jk (line 45) | function Jk(t,e){e&&(dt(e,"fill")&&(t.textFill=e.fill),dt(e,"stroke")&&(...
  function rP (line 45) | function rP(t,e){return Math.abs(t-e)<1e-5}
  function oP (line 45) | function oP(t){var e,n,i,r,o,a=t.data,s=t.len(),l=[],u=0,h=0,c=0,p=0;fun...
  function aP (line 45) | function aP(t,e){var n=t.length,i=e.length;if(n===i)return[t,e];for(var ...
  function sP (line 45) | function sP(t,e){for(var n=t.length,i=t[n-2],r=t[n-1],o=[],a=0;a<e.lengt...
  function lP (line 45) | function lP(t){for(var e=0,n=0,i=0,r=t.length,o=0,a=r-2;o<r;a=o,o+=2){va...
  function uP (line 45) | function uP(t,e,n,i){for(var r=(t.length-2)/6,o=1/0,a=0,s=t.length,l=s-2...
  function hP (line 45) | function hP(t){for(var e=[],n=t.length,i=0;i<n;i+=2)e[i]=t[n-i-2],e[i+1]...
  function cP (line 45) | function cP(t,e,n){var i,r;if(!t||!e)return e;!t.path&&t.createPathProxy...
  function pP (line 45) | function pP(t){for(var e=this.__morphingData,n=this.__morphT,i=1-n,r=[],...
  function dP (line 45) | function dP(t,e,n){t.__morphingData=e,t.__morphT=n}
  function fP (line 45) | function fP(t){return null!=t.__oldBuildPath}
  function gP (line 45) | function gP(t){return!!t.__combiningSubList}
  function yP (line 45) | function yP(t,e,n,i){for(var r=[],o=0,a=0;a<t.length;a++){var s=t[a];if(...
  function vP (line 45) | function vP(t,e){if(t.__combiningSubList!==e){if(_P(t,"removeSelfFromZr"...
  function mP (line 45) | function mP(t){this.__oldAddSelfToZr(t),_P(this,"addSelfToZr")}
  function _P (line 45) | function _P(t,e){var n=t.__combiningSubList,i=t.__zr;if(n&&i)for(var r=0...
  function xP (line 45) | function xP(t){this.__oldRemoveSelfFromZr(t);for(var e=this.__combiningS...
  function bP (line 45) | function bP(){return this.__combiningSubList}
  function wP (line 45) | function wP(t,e,n){return"duplicate"===n?SP(t,e):function(t,e){var n=[];...
  function SP (line 45) | function SP(t,e){var n=[];if(e<=0)return n;for(var i=t.constructor,r=0;r...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function s (line 45) | function s(t){t.isGroup||(t.incremental=!0,t.ensureState("emphasis").hov...
  function GP (line 45) | function GP(t,e,n){if(t){if("oneToOne"===e)return function(e,n){return t...
  function HP (line 45) | function HP(t){var e,n=t.type;if("path"===n){var i=t.shape,r=null!=i.wid...
  function WP (line 45) | function WP(t,e,n,i,r,o,a,s,l,u){var h={},c={},p=e.isGroup?null:e;!n&&YP...
  function UP (line 45) | function UP(t,e,n){var i=t.isGroup?null:t;if(i&&n){var r=n.__decalPatter...
  function XP (line 45) | function XP(t,e,n,i,r,o){if(r){var a=n.during;MP(t).userDuring=a;var s={...
  function YP (line 45) | function YP(t,e,n,i,r,o){var a=i[t];if(a){var s,l=e[t],u=a.enterFrom;if(...
  function ZP (line 45) | function ZP(t,e,n){var i=e[t];if(i)for(var r=n[t]={},o=E(i),a=0;a<o.leng...
  function jP (line 45) | function jP(t,e,n,i,r){var o=n.enterFrom;if(r&&o)for(var a=E(o),s=0;s<a....
  function qP (line 45) | function qP(t,e,n,i,r,o){if(i){var a,s=(e||t).style,l=i.enterFrom;if(o&&...
  function KP (line 45) | function KP(t,e){return k(t)?t!==e:null!=t&&isFinite(t)}
  function $P (line 45) | function $P(t){var e=MP(t);return e.leaveToProps||(e.leaveToProps={})}
  function tO (line 45) | function tO(){var t=this,e=t.el;if(e){var n=MP(e).userDuring,i=t.userDur...
  function eO (line 45) | function eO(t,e,n,i,r,o,a){var s=e.isGroup?null:e,l=r&&r[t].cfg;if(s){va...
  function nO (line 45) | function nO(t,e,n){var i=n===AP,r=i?e:pO(e,n),o=r?r.z2:null;null!=o&&((i...
  function iO (line 45) | function iO(t,e,n,i){var r=t[n],o=zP[n];r&&(i?(e[o[0]]=i[o[0]],e[o[1]]=i...
  function rO (line 45) | function rO(t,e,n,i){null!=t[n]&&(e[n]=i?i[n]:t[n])}
  function oO (line 45) | function oO(t,e,n){n&&(t[e]=n[e])}
  function aO (line 45) | function aO(t,e,n,i){var r=t.get("renderItem"),o=t.coordinateSystem,a={}...
  function sO (line 45) | function sO(t){var e={};return P(t.dimensions,(function(n,i){var r=t.get...
  function lO (line 45) | function lO(t,e,n,i,r,o,a,s){if(i)return(e=uO(t,e,n,i,r,o,!0,s))&&a.setI...
  function uO (line 45) | function uO(t,e,n,i,r,o,a,s){var l=-1;e&&hO(e,i)&&(l=o.childrenRef().ind...
  function hO (line 45) | function hO(t,e){var n,i=MP(t),r=e.type,o=e.shape,a=e.style;return null!...
  function cO (line 45) | function cO(t,e,n){var i=e?pO(t,e):t,r=e?dO(t,i,DP):t.style,o=t.type,a=i...
  function pO (line 45) | function pO(t,e){return e?t?t[e]:null:t}
  function dO (line 45) | function dO(t,e,n){var i=e&&e.style;return null==i&&n===DP&&t&&(i=t.styl...
  function fO (line 45) | function fO(t,e){var n=t&&t.name;return null!=n?n:"e\0\0"+e}
  function gO (line 45) | function gO(t,e){var n=this.context,i=null!=t?n.newChildren[t]:null,r=nu...
  function yO (line 45) | function yO(t){var e=this.context;vO(e.oldChildren[t],e.seriesModel,e.gr...
  function vO (line 45) | function vO(t,e,n){if(t){var i=MP(t).leaveToProps;i?Hu(t,i,e,{cb:functio...
  function mO (line 45) | function mO(t){return t&&(t.pathData||t.d)}
  function _O (line 45) | function _O(t){return t&&t instanceof Ka}
  function xO (line 45) | function xO(t,e){t&&e.remove(t)}
  function t (line 45) | function t(t,e){this._fromList=[],this._toList=[],this._toElOptionList=[...
  function wO (line 45) | function wO(t,e,n){e.style=n?w(t.style):t.style,e.zlevel=t.zlevel,e.z=t....
  function t (line 45) | function t(){this._dragging=!1,this.animationThreshold=15}
  function CO (line 45) | function CO(t,e,n,i){DO(SO(n).lastProp,i)||(SO(n).lastProp=i,e?Hu(n,i,t)...
  function DO (line 45) | function DO(t,e){if(X(t)&&X(e)){var n=!0;return P(e,(function(e,i){n=n&&...
  function AO (line 45) | function AO(t,e){t[e.get(["label","show"])?"show":"hide"]()}
  function LO (line 45) | function LO(t){return{x:t.x||0,y:t.y||0,rotation:t.rotation||0}}
  function kO (line 45) | function kO(t,e,n){var i=e.get("z"),r=e.get("zlevel");t&&t.traverse((fun...
  function PO (line 45) | function PO(t){var e,n=t.get("type"),i=t.getModel(n+"Style");return"line...
  function OO (line 45) | function OO(t,e,n,i,r){var o=RO(n.get("value"),e.axis,e.ecModel,n.get("s...
  function RO (line 45) | function RO(t,e,n,i,r){t=e.scale.parse(t);var o=e.scale.getLabel({value:...
  function NO (line 45) | function NO(t,e,n){var i=[1,0,0,1,0,0];return Xn(i,i,n.rotation),Un(i,i,...
  function zO (line 45) | function zO(t,e,n,i,r,o){var a=tM.innerTextLayout(n.rotation,0,n.labelDi...
  function EO (line 45) | function EO(t,e,n){return{x1:t[n=n||0],y1:t[1-n],x2:e[n],y2:e[1-n]}}
  function VO (line 45) | function VO(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}}
  function BO (line 45) | function BO(t,e,n,i,r,o){return{cx:t,cy:e,r0:n,r:i,startAngle:r,endAngle...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function GO (line 45) | function GO(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCarte...
  function WO (line 45) | function WO(t){return"x"===t.dim?0:1}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function ZO (line 45) | function ZO(t,e,n){if(!a.node){var i=e.getZr();XO(i).records||(XO(i).rec...
  function jO (line 45) | function jO(t,e,n){t.handler("leave",null,n)}
  function qO (line 45) | function qO(t,e,n,i){e.handler(t,n,i)}
  function KO (line 45) | function KO(t,e){if(!a.node){var n=e.getZr();(XO(n).records||{})[t]&&(XO...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function JO (line 45) | function JO(t,e){var n,i=[],r=t.seriesIndex;if(null==r||!(n=e.getSeriesB...
  function tR (line 45) | function tR(t,e,n){var i=t.currTrigger,r=[t.x,t.y],o=t,a=t.dispatchActio...
  function eR (line 45) | function eR(t,e,n,i,r){var o=t.axis;if(!o.scale.isBlank()&&o.containData...
  function nR (line 45) | function nR(t,e,n,i){t[e.key]={value:n,payloadBatch:i}}
  function iR (line 45) | function iR(t,e,n,i){var r=n.payloadBatch,o=e.axis,a=o.model,s=e.axisPoi...
  function rR (line 45) | function rR(t){var e=t.axis.model,n={},i=n.axisDim=t.axis.dim;return n.a...
  function oR (line 45) | function oR(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}
  function aR (line 45) | function aR(t){dM.registerAxisPointerClass("CartesianAxisPointer",FO),t....
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e,n){return t.call(this,"radius",e,n)||this}
  function e (line 45) | function e(e,n){return t.call(this,"angle",e,n||[0,360])||this}
  function t (line 45) | function t(t){this.dimensions=["radius","angle"],this.type="polar",this....
  function vR (line 45) | function vR(t){var e=t.seriesModel,n=t.polarModel;return n&&n.coordinate...
  function mR (line 45) | function mR(t,e){var n=this,i=n.getAngleAxis(),r=n.getRadiusAxis();if(i....
  function _R (line 45) | function _R(t,e){if(t.type=e.get("type"),t.scale=Bx(e),t.onBand=e.get("b...
  function wR (line 45) | function wR(t,e,n){e[1]>e[0]&&(e=e.slice().reverse());var i=t.coordToPoi...
  function SR (line 45) | function SR(t){return t.getRadiusAxis().inverse?0:1}
  function MR (line 45) | function MR(t){var e=t[0],n=t[t.length-1];e&&n&&Math.abs(Math.abs(e.coor...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function kR (line 45) | function kR(t){return t.get("stack")||"__ec_stack_"+t.seriesIndex}
  function PR (line 45) | function PR(t,e){return e.dim+t.model.componentIndex}
  function OR (line 45) | function OR(t,e,n){var i={},r=function(t){var e={};P(t,(function(t,n){va...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function ER (line 45) | function ER(t,e){e=e||{};var n=t.coordinateSystem,i=t.axis,r={},o=i.posi...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e,n,i,r,o){var a=t.call(this,e,n,i)||this;return a.type=r||"v...
  function t (line 45) | function t(t,e,n){this.type="single",this.dimension="single",this.dimens...
  function XR (line 45) | function XR(t){var e=t.seriesModel,n=t.singleAxisModel;return n&&n.coord...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function $R (line 45) | function $R(t){return t.isHorizontal()?0:1}
  function JR (line 45) | function JR(t,e){var n=t.getRect();return[n[ZR[e]],n[ZR[e]]+n[jR[e]]]}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function eN (line 45) | function eN(t,e){var n,i=t.cellSize;1===(n=F(i)?i:t.cellSize=[i,i]).leng...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function p (line 45) | function p(e){r._firstDayOfMonth.push(o.getDateInfo(e)),r._firstDayPoint...
  function t (line 45) | function t(e,n,i){this.type="calendar",this.dimensions=t.dimensions,this...
  function u (line 45) | function u(t,e){return null!=t[e]&&"auto"!==t[e]}
  function sN (line 45) | function sN(t){var e=t.calendarModel,n=t.seriesModel;return e?e.coordina...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function dN (line 45) | function dN(t,e,n,i){var r=n.type;var o=dt(uN,r)?uN[r]:Ru(r);var a=new o...
  function fN (line 45) | function fN(t,e){var n=t&&t.parent;n&&("group"===t.type&&t.traverse((fun...
  function gN (line 45) | function gN(t,e){var n;return P(e,(function(e){null!=t[e]&&"auto"!==t[e]...
  function mN (line 45) | function mN(t){return t+"Axis"}
  function _N (line 45) | function _N(t,e){var n,i=ht(),r=[],o=ht();t.eachComponent({mainType:"dat...
  function xN (line 45) | function xN(t){var e=t.ecModel,n={infoList:[],infoMap:ht()};return t.eac...
  function t (line 45) | function t(){this.indexList=[],this.indexMap=[]}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function o (line 45) | function o(e,n){var r=e[0];if(r){var o=new bN;if(o.add(r.componentIndex)...
  function SN (line 45) | function SN(t){var e={};return P(["start","end","startValue","endValue",...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function t (line 45) | function t(t,e,n,i){this._dimName=t,this._axisIndex=e,this.ecModel=i,thi...
  function u (line 45) | function u(t,e,n,r,o){var a=o?"Span":"ValueSpan";PD(0,t,n,"all",l["min"+...
  function e (line 45) | function e(e){t.eachComponent("dataZoom",(function(n){n.eachTargetAxis((...
  function PN (line 45) | function PN(t){kN||(kN=!0,t.registerProcessor(t.PRIORITY.PROCESSOR.FILTE...
  function ON (line 45) | function ON(t){t.registerComponentModel(MN),t.registerComponentView(TN),...
  function zN (line 45) | function zN(t,e){NN[t]=e}
  function EN (line 45) | function EN(t){return NN[t]}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function BN (line 45) | function BN(t,e){var n=wc(e.get("padding")),i=e.getItemStyle(["color","o...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function u (line 45) | function u(u,h){var c,p=l[u],d=l[h],f=a[p],g=new Oh(f,t,t.ecModel);if(i&...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function jN (line 45) | function jN(t){return t.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}
  function KN (line 45) | function KN(t,e){var n=t.split(new RegExp("\n*"+YN+"\n*","g")),i={series...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function _ (line 45) | function _(){n.removeChild(r),m._dom=null}
  function JN (line 45) | function JN(t,e){return O(t,(function(t,n){var i=e&&e[n];if(X(i)&&!F(i))...
  function ez (line 45) | function ez(t){var e=tz(t);return e.snapshots||(e.snapshots=[{}]),e.snap...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function t (line 45) | function t(t,e,n){var i=this;this._targetInfoList=[];var r=az(e,t);P(sz,...
  function oz (line 45) | function oz(t){return t[0]>t[1]&&t.reverse(),t}
  function az (line 45) | function az(t,e){return Or(t,e,{includeMainTypes:iz})}
  function cz (line 45) | function cz(t,e,n,i){var r=n.getAxis(["x","y"][t]),o=oz(O([0,1],(functio...
  function dz (line 45) | function dz(t,e,n,i){return[e[0]-i[t]*n[0],e[1]-i[t]*n[1]]}
  function fz (line 45) | function fz(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function r (line 45) | function r(t,e,r){var o=e.getAxis(t),a=o.model,s=function(t,e,n){var i;r...
  function bz (line 45) | function bz(t){var e={xAxisIndex:t.get("xAxisIndex",!0),yAxisIndex:t.get...
  function a (line 45) | function a(t,e,n){var o=t.componentIndex,a={type:"select",$fromToolbox:!...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function Sz (line 45) | function Sz(t){var e=t.get("confine");return null!=e?!!e:"richText"===t....
  function Mz (line 45) | function Mz(t){if(a.domSupported)for(var e=document.documentElement.styl...
  function Tz (line 45) | function Tz(t,e){if(!t)return e;e=bc(e,!0);var n=t.indexOf(e);return(t=-...
  function Cz (line 45) | function Cz(t,e){var n=t.currentStyle||document.defaultView&&document.de...
  function kz (line 45) | function kz(t,e,n){var i=t.toFixed(0)+"px",r=e.toFixed(0)+"px";if(!a.tra...
  function Pz (line 45) | function Pz(t,e,n){var i=[],r=t.get("transitionDuration"),o=t.get("backg...
  function Oz (line 45) | function Oz(t,e,n,i,r){var o=e&&e.painter;if(n){var a=o&&o.getViewportRo...
  function t (line 45) | function t(t,e,n){if(this._show=!1,this._styleCoord=[0,0,0,0],this._ente...
  function t (line 45) | function t(t){this._show=!1,this._styleCoord=[0,0,0,0],this._enterable=!...
  function zz (line 45) | function zz(t){return Math.max(0,t)}
  function Ez (line 45) | function Ez(t){var e=zz(t.shadowBlur||0),n=zz(t.shadowOffsetX||0),i=zz(t...
  function Vz (line 45) | function Vz(t,e,n,i){t[0]=n,t[1]=i,t[2]=t[0]/e.getWidth(),t[3]=t[1]/e.ge...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function Uz (line 45) | function Uz(t,e,n){var i,r=e.ecModel;n?(i=new Oh(n,r,r),i=new Oh(e.optio...
  function Xz (line 45) | function Xz(t,e){return t.dispatchAction||V(e.dispatchAction,e)}
  function Yz (line 45) | function Yz(t){return"center"===t||"middle"===t}
  function jz (line 45) | function jz(t,e){var n=xr(t?t.brush:[]);if(n.length){var i=[];P(n,(funct...
  function Kz (line 45) | function Kz(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}
  function $z (line 45) | function $z(t,e,n){var i={};return qz(e,(function(e){var r,o=i[e]=((r=fu...
  function Jz (line 45) | function Jz(t,e,n){var i;P(n,(function(t){e.hasOwnProperty(t)&&Kz(e[t])&...
  function tE (line 45) | function tE(t){var e=["x","y"],n=["width","height"];return{point:functio...
  function eE (line 45) | function eE(t,e){return e[0]<=t&&t<=e[1]}
  function oE (line 45) | function oE(t){t.eachComponent({mainType:"brush"},(function(e){(e.brushT...
  function aE (line 45) | function aE(t,e,n){var i,r,o=[];t.eachComponent({mainType:"brush"},(func...
  function sE (line 45) | function sE(t,e){if(!t.isDisposed()){var n=t.getZr();n[rE]=!0,t.dispatch...
  function lE (line 45) | function lE(t,e,n,i){for(var r=0,o=e.length;r<o;r++){var a=e[r];if(t.bru...
  function hE (line 45) | function hE(t){return new gi(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function dE (line 45) | function dE(t,e){return S({brushType:t.brushType,brushMode:t.brushMode,t...
  function e (line 45) | function e(){return null!==t&&t.apply(this,arguments)||this}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(e,n,i,r){var o=t.call(this,e,n,i)||this;return o.type=r||"val...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function g (line 45) | function g(t){t.originX=l[0][0]-t.x,t.originY=l[1][0]-t.y}
  function y (line 45) | function y(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}
  function v (line 45) | function v(t,e,n,i,r){t[i]+=n[i][r]-e[i][r]}
  function h (line 45) | function h(t,n,l,u){if(t){var h=Ii(tt(i.get(["controlStyle",n+"BtnSize"]...
  function IE (line 45) | function IE(t,e,n,i,r,o){var a=e.get("color");r?(r.setColor(a),n.add(r),...
  function TE (line 45) | function TE(t,e,n,i,r,o){if(!t.dragging){var a=r.getModel("checkpointSty...
  function CE (line 45) | function CE(t){var e=t&&t.timeline;F(e)||(e=e?[e]:[]),P(e,(function(t){t...
  function DE (line 45) | function DE(t){var e=t.itemStyle||(t.itemStyle={}),n=e.emphasis||(e.emph...
  function AE (line 45) | function AE(t,e){return t.hasOwnProperty(e)}
  function LE (line 45) | function LE(t,e){if(!t)return!1;for(var n=F(t)?t:[t],i=0;i<n.length;i++)...
  function kE (line 45) | function kE(t){br(t,"label",["show"])}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function NE (line 45) | function NE(t,e,n,i,r,o){var a=[],s=V_(e,i)?e.getCalculationInfo("stackR...
  function EE (line 45) | function EE(t,e){var n=t.getData(),i=t.coordinateSystem;if(e&&!function(...
  function VE (line 45) | function VE(t,e,n,i){var r={};return null!=t.valueIndex||null!=t.valueDi...
  function BE (line 45) | function BE(t,e){return!(t&&t.containData&&e.coord&&!function(t){return!...
  function FE (line 45) | function FE(t,e,n,i){return i<2?t.coord&&t.coord[i]:t.value}
  function GE (line 45) | function GE(t,e,n){if("average"===n){var i=0,r=0;return t.each(e,(functi...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function UE (line 45) | function UE(t,e,n){var i=e.coordinateSystem;t.each((function(r){var o,a=...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function qE (line 45) | function qE(t){return!isNaN(t)&&!isFinite(t)}
  function KE (line 45) | function KE(t,e,n,i){var r=1-t,o=i.dimensions[t];return qE(e[r])&&qE(n[r...
  function $E (line 45) | function $E(t,e){if("cartesian2d"===t.type){var n=e[0].coord,i=e[1].coor...
  function JE (line 45) | function JE(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function v (line 45) | function v(e,n,r){var o=e.getItemModel(n);JE(e,n,r,t,i);var s=o.getModel...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function iV (line 45) | function iV(t){return!isNaN(t)&&!isFinite(t)}
  function rV (line 45) | function rV(t,e,n,i){var r=1-t;return iV(e[r])&&iV(n[r])}
  function oV (line 45) | function oV(t,e){var n=e.coord[0],i=e.coord[1];return!!(Nw(t,"cartesian2...
  function aV (line 45) | function aV(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function fV (line 45) | function fV(t,e,n,i){vV(t,e,n,i),n.dispatchAction({type:"legendToggleSel...
  function gV (line 45) | function gV(t){for(var e,n=t.getZr().storage.getDisplayList(),i=0,r=n.le...
  function yV (line 45) | function yV(t,e,n,i){gV(n)||n.dispatchAction({type:"highlight",seriesNam...
  function vV (line 45) | function vV(t,e,n,i){gV(n)||n.dispatchAction({type:"downplay",seriesName...
  function mV (line 45) | function mV(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&...
  function _V (line 45) | function _V(t,e,n){var i,r={},o="toggleSelected"===t;return n.eachCompon...
  function xV (line 45) | function xV(t){t.registerComponentModel(uV),t.registerComponentView(dV),...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function wV (line 45) | function wV(t,e,n){var i=[1,1];i[t.getOrient().index]=0,Gc(e,n,{type:"bo...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function d (line 45) | function d(t,e){var i=t+"DataIndex",o=eh(n.get("pageIcons",!0)[n.getOrie...
  function m (line 45) | function m(t){if(t){var e=t.getBoundingRect(),n=e[a]+t[a];return{s:n,e:n...
  function _ (line 45) | function _(t,e){return t.e>=e&&t.s<=e+i}
  function CV (line 45) | function CV(t){Qm(xV),t.registerComponentModel(bV),t.registerComponentVi...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function LV (line 45) | function LV(t,e,n){AV(t).coordSysRecordMap.each((function(t){var i=t.dat...
  function kV (line 45) | function kV(t,e){if(e){t.removeKey(e.model.uid);var n=e.controller;n&&n....
  function PV (line 45) | function PV(t,e){t.dispatchAction({type:"dataZoom",animation:{easing:"cu...
  function OV (line 45) | function OV(t,e,n,i){return t.coordinateSystem.containPoint([n,i])}
  function RV (line 45) | function RV(t){t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,(function...
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type...
  function EV (line 45) | function EV(t){return function(e,n,i,r){var o=this.range,a=o.slice(),s=e...
  function BV (line 45) | function BV(t){PN(t),t.registerComponentModel(DV),t.registerComponentVie...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function m (line 45) | function m(t){var e=g.getModel(t?"selectedDataBackground":"dataBackgroun...
  function c (line 45) | function c(t){var e=ju(n.handles[t].parent,this.group),a=Ku(0===t?"right...
  function ZV (line 45) | function ZV(t){return"vertical"===t?"ns-resize":"ew-resize"}
  function jV (line 45) | function jV(t){t.registerComponentModel(FV),t.registerComponentView(YV),...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function u (line 45) | function u(t){return t===a[0]?"min":t===a[1]?"max":(+t).toFixed(Math.min...
  function a (line 45) | function a(n){QV(e.color)&&!n.inRange&&(n.inRange={color:e.color.slice()...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function r (line 45) | function r(e,n){i.push({value:e,color:t(e,n)})}
  function aB (line 45) | function aB(t,e,n){if(n[0]===n[1])return n.slice();for(var i=(n[1]-n[0])...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function s (line 45) | function s(t){return o[t]}
  function l (line 45) | function l(t,e){o[t]=e}
  function uB (line 45) | function uB(t,e,n){var i=t.option,r=i.align;if(null!=r&&"auto"!==r)retur...
  function hB (line 45) | function hB(t,e){return P(t||[],(function(t){null!=t.dataIndex&&(t.dataI...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function r (line 45) | function r(t,e,n){for(var i=0,r=t.length;i<r;i++){var o=Cr(t[i].seriesId...
  function o (line 45) | function o(t,e){var n=[];for(var i in t)if(t.hasOwnProperty(i)&&null!=t[...
  function yB (line 45) | function yB(t,e,n,i){return new ru({shape:{points:t},draggable:!!n,curso...
  function vB (line 45) | function vB(t){var e=t.get("hoverLinkOnHandle");return!!(null==e?t.get("...
  function mB (line 45) | function mB(t){return"vertical"===t?"ns-resize":"ew-resize"}
  function l (line 45) | function l(t){return vg(e,i,t)}
  function u (line 45) | function u(t,n){_g(e,i,t,n)}
  function wB (line 45) | function wB(t,e,n,i){for(var r=e.targetVisuals[i],o=TT.prepareVisualType...
  function MB (line 45) | function MB(t){var e=t&&t.visualMap;F(e)||(e=e?[e]:[]),SB(e,(function(t)...
  function IB (line 45) | function IB(t,e){return t&&t.hasOwnProperty&&t.hasOwnProperty(e)}
  function CB (line 45) | function CB(t){TB||(TB=!0,t.registerSubTypeDefaulter("visualMap",(functi...
  function DB (line 45) | function DB(t){t.registerComponentModel(oB),t.registerComponentView(gB),...
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function o (line 45) | function o(t,e,n){return t&&t[e]&&t[e].hasOwnProperty(n)}
  function s (line 45) | function s(r,o){var a=i.getRepresentValue({interval:r});o||(o=i.getValue...
  function kB (line 45) | function kB(t,e){var n=t.inverse;("vertical"===t.orient?!n:n)&&e.reverse()}
  function e (line 45) | function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type...
  function OB (line 45) | function OB(t){t.registerComponentModel(AB),t.registerComponentView(PB),...
  function EB (line 45) | function EB(t,e){var n=t.getModel("aria");if(n.get("enabled")){var i=w(R...
  function VB (line 45) | function VB(t){if(t&&t.aria){var e=t.aria;null!=e.show&&(e.enabled=e.sho...
  function t (line 45) | function t(t){if(null==(this._condVal=H(t)?new RegExp(t):$(t)?t:null)){v...
  function t (line 45) | function t(){}
  function t (line 45) | function t(){}
  function t (line 45) | function t(){}
  function t (line 45) | function t(){}
  function t (line 45) | function t(){}
  function YB (line 45) | function YB(t,e){if(!0===t||!1===t){var n=new GB;return n.value=t,n}var ...
  function ZB (line 45) | function ZB(t,e,n){var i=e[t],r="";F(i)||vr(r),i.length||vr(r);var o="an...
  function jB (line 45) | function jB(t){return X(t)&&!k(t)}
  function t (line 45) | function t(t,e){this._cond=YB(t,e)}
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type...
  function e (line 45) | function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type...

FILE: Modern Development/Service Portal Widgets/Create diagram using GoJS library/client.js
  function infoString (line 11) | function infoString(obj) {
  function geoFunc (line 37) | function geoFunc(geoname) {
  function spotConverter (line 101) | function spotConverter(dir) {
  function loop (line 338) | function loop() {
  function onSelectionChanged (line 360) | function onSelectionChanged(e) {

FILE: Modern Development/Service Portal Widgets/Custom attachment variable/controller.js
  function setAttachments (line 25) | function setAttachments(attachments, action) {
  function appendError (line 44) | function appendError(error) {

FILE: Modern Development/Service Portal Widgets/Digital Clock/script.js
  function updateTime (line 2) | function updateTime() {

FILE: Modern Development/Service Portal Widgets/Drag & drop Widget/client.js
  function findColType (line 59) | function findColType(element) {

FILE: Modern Development/Service Portal Widgets/Fill survey or item from url/Survey or form filler widget.js
  function fillAnswers (line 29) | function fillAnswers() {

FILE: Modern Development/Service Portal Widgets/Konami Code Easter Egg/KonamiCodeEasterEgg.js
  function activateCheats (line 32) | function activateCheats() {

FILE: Modern Development/Service Portal Widgets/Location hierarchy/server script.js
  function getData (line 23) | function getData(locationType, parent) {

FILE: Modern Development/Service Portal Widgets/Paginated Data/paginated-data-server-script.js
  function calculatePaginationPages (line 58) | function calculatePaginationPages(totalRecords, recordsPerPage, currentP...

FILE: Modern Development/Service Portal Widgets/Signature Pad Widget/Client Controller.js
  function getPosition (line 31) | function getPosition(event) {
  function startDraw (line 46) | function startDraw(e) {
  function draw (line 52) | function draw(e) {
  function endDraw (line 64) | function endDraw() {

FILE: Modern Development/Service Portal/dark-mode-switcher/avatarDropDown.js
  function avatarDropDown (line 1) | function avatarDropDown($compile){

FILE: Modern Development/Service Portal/dark-mode-switcher/themeSwitcherMenu.js
  function themeSwitcherMenu (line 1) | function themeSwitcherMenu(){

FILE: Modern Development/Service Portal/sn-watchlist/snWatchListDirective.js
  function snWatchlistDirective (line 1) | function snWatchlistDirective($http, $q) {

FILE: Modern Development/Service Portal/spGlideAjax/spGlideAjaxService.js
  function spGlideAjaxService (line 1) | function spGlideAjaxService($http, $q, $httpParamSerializerJQLike){

FILE: Modern Development/Service Portal/validate-data-field/script.js
  function onChange (line 2) | function onChange(control, oldValue, newValue, isLoading) {

FILE: Server-Side Components/Background Scripts/Add Comments/addComment.js
  function addComments (line 1) | function addComments(tableName,recSysId, userName, fieldName){

FILE: Server-Side Components/Background Scripts/Attachment Size Audit/attachmentSizeAudit.js
  function formatBytes (line 73) | function formatBytes(bytes) {

FILE: Server-Side Components/Background Scripts/Auto-Deactivate Users Not Logged In for X Days/Auto_Deactivate_Users_Not_Logged_In_for_X_Days.js
  function deactivateDormantUsers (line 8) | function deactivateDormantUsers(daysInactive) {

FILE: Server-Side Components/Background Scripts/Bulk Create Records in Multiple Tables/BulkCreateRecordsMultipleTables.js
  function bulkCreateRecords (line 24) | function bulkCreateRecords(target) {

FILE: Server-Side Components/Background Scripts/Bulk Delete Records in Multiple Tables with Conditions/BulkDeleteRecordsMultipleTablesWithConditions.js
  function bulkDelete (line 18) | function bulkDelete(target) {

FILE: Server-Side Components/Background Scripts/Bulk Update Tables/BulkUpdateWithConditions.js
  function bulkUpdate (line 16) | function bulkUpdate(table, query, data) {

FILE: Server-Side Components/Background Scripts/Capitalize Title Words/CapitalizeTitleWords.js
  function processTitle (line 12) | function processTitle(title) {

FILE: Server-Side Components/Background Scripts/Change Update Set Application Scope/changeApplicationScope.js
  function changeUpdateSetApplicationScope (line 1) | function changeUpdateSetApplicationScope(updateSetName, currentApplicati...
  function getApplicationScopeSysId (line 17) | functio
Condensed preview — 2956 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,366K chars).
[
  {
    "path": ".github/pull_request_template.md",
    "chars": 1783,
    "preview": "# PR Description: \nreplace this with your description\n\n# Pull Request Checklist\n\n## Overview\n- [x] Put an x inside of th"
  },
  {
    "path": ".github/scripts/validate-structure.js",
    "chars": 3814,
    "preview": "#!/usr/bin/env node\n\nconst { execSync } = require('child_process');\n\nconst allowedCategories = new Set([\n  'Core Service"
  },
  {
    "path": ".github/workflows/hacktrack.yml",
    "chars": 1061,
    "preview": "#This file is for ServiceNow Dev Program Hacktoberfest Tracking and can be ignored or deleted.\n\nname: Record Hacktrack E"
  },
  {
    "path": ".github/workflows/pages.yml",
    "chars": 2951,
    "preview": "# GitHub Pages deployment workflow\nname: Deploy GitHub Pages\n\non:\n  workflow_dispatch:\n\n# Sets permissions of the GITHUB"
  },
  {
    "path": ".github/workflows/pr-auto-unassign-stale.yml",
    "chars": 6239,
    "preview": "name: Auto-unassign stale PR assignees\n\non:\n  schedule:\n    - cron: \"*/15 * * * *\"   # run every 15 minutes\n  workflow_d"
  },
  {
    "path": ".github/workflows/validate-structure.yml",
    "chars": 5578,
    "preview": "name: Validate Folder Structure\n\non:\n  pull_request_target:\n    branches:\n      - main\n\npermissions:\n  contents: read\n "
  },
  {
    "path": ".gitignore",
    "chars": 68,
    "preview": ".DS_Store\r\n\r\n# Claude Code settings\r\n.claude/\r\nsettings.local.json\r\n"
  },
  {
    "path": "AGENTS.md",
    "chars": 5696,
    "preview": "# AGENTS.md\n\nThis file provides guidance to AI Coding Agents when working with code in this repository.\n\n## Repository O"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 6420,
    "preview": "# How to Contribute\r\n\r\nWe welcome contributions to the **ServiceNow Developer Program's Code Snippets Repository**! Foll"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Add Label For Attachment/README.md",
    "chars": 79,
    "preview": "Code Snippet to add a label to the attachment for a Catalog Item on the Portal."
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Add Label For Attachment/add_label_for_attachment.js",
    "chars": 280,
    "preview": "function onLoad() {\n    var attachmentElement = top.document.querySelectorAll('[ng-if=\"c.showAttachments()\"]');\n    \n\tif"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Add Rows in MRVS/README.md",
    "chars": 215,
    "preview": "With this simple script you can through a client script add rows in the MRVS if you like. Ex. you want to prefill a few "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Add Rows in MRVS/addrows.js",
    "chars": 367,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n\tif (isLoading)\n\t\treturn;\n\n\tvar obj = (g_form.getValue('mult"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Auto Save Draft Feature/README.md",
    "chars": 2954,
    "preview": "# Auto Save Draft Feature for Catalog Items\r\n\r\nThis snippet provides automatic draft saving functionality for ServiceNow"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Auto Save Draft Feature/advanced_implementation.js",
    "chars": 4274,
    "preview": "/**\r\n * Advanced Auto-save Draft Implementation with Enhanced Features\r\n * This version adds multi-draft support and adv"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Auto Save Draft Feature/basic_implementation.js",
    "chars": 1820,
    "preview": "/**\r\n * Basic Auto-save Draft Implementation\r\n * This version provides core functionality for auto-saving catalog item f"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Auto Save Draft Feature/script.js",
    "chars": 2227,
    "preview": "/**\r\n * Auto-save draft feature for Catalog Client Script\r\n * \r\n * This script automatically saves form data as a draft "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Auto-populate field from URL/README.md",
    "chars": 856,
    "preview": "This piece of code is designed for an usecase where you might want to populate a field value that you're passing as a qu"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Auto-populate field from URL/popdatefromurl.js",
    "chars": 335,
    "preview": "//Logic to fetch the u_date field value passed in the url and setting it in the actual field.\n\n\nvar fetchUrl = top.locat"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Autofilling the request details from previous request/Auto fill script include.JS",
    "chars": 806,
    "preview": "var GetRecentRequestValues = Class.create();\nGetRecentRequestValues.prototype = Object.extendsObject(AbstractAjaxProcess"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Autofilling the request details from previous request/Client script Autofill.js",
    "chars": 877,
    "preview": "function onLoad() {\n  var user = g_user.userID;\n  var itemID = g_form.getUniqueValue();\n\n  var ga = new GlideAjax('GetRe"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Autofilling the request details from previous request/Readme.md",
    "chars": 459,
    "preview": "Recent Request Autofill for ServiceNow Catalog.it automatically offers to fill in fields based on the user's most recent"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Autopopulate Department/README.md",
    "chars": 912,
    "preview": "# Autopopulate Department Catalog Client Script\n\nUse this onChange catalog client script to populate a **department** va"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Autopopulate Department/autopopulateDepartment.js",
    "chars": 253,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n  g_form.getReference(\"requested_for\", function (gr) {\n    g"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Autopopulate user information fields/ClientCallableScriptInclude.js",
    "chars": 778,
    "preview": "/*\n* The following is a client callable script include. This can be used with the onChange Client script to be able to g"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Autopopulate user information fields/README.md",
    "chars": 594,
    "preview": "## Overview\nThis onchange catalog client script and script inlcude work together autopopulate the user fields that might"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Autopopulate user information fields/onChangeClientScript.js",
    "chars": 976,
    "preview": "/*\n* In order for this to work make sure to have an onChange catalog client script on a variable that is type Requested "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Block Submit/README.md",
    "chars": 186,
    "preview": "Code Snippet to block submission of catalog item based on answer to other yes/no variable.\n\n#update\nTo fix a task from i"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Block Submit/block_submit.js",
    "chars": 454,
    "preview": "//Block the user from submitting the form based on variable answer\nfunction onSubmit() {\n  var someVariable = g_form.get"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Calculate age on based on date of birth/Calculate age based on dob.js",
    "chars": 1485,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading || newValue == '') {\n       return;\n    }\n"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Calculate age on based on date of birth/README.md",
    "chars": 430,
    "preview": "# Age Calculator - On Change Client Script\n\nThis script is designed to calculate a person's age based on their date of b"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Catalog Approval/Readme.md",
    "chars": 289,
    "preview": "This project adds a dynamic preview feature to Service Catalog items, allowing users to see the full approval chain befo"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Catalog Approval/client script.js",
    "chars": 402,
    "preview": "function onLoad() {\n  var ga = new GlideAjax('ApprovalChainHelper');\n  ga.addParam('sysparm_name', 'getApprovers');\n  ga"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Catalog Approval/script include.js",
    "chars": 614,
    "preview": "var ApprovalChainHelper = Class.create();\nApprovalChainHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, {\n"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Clear all fields/README.md",
    "chars": 799,
    "preview": "# Clear all fields on a catalog item form\n\nThis function clears all editable fields on a form, except those explicitly e"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Clear all fields/script.js",
    "chars": 1650,
    "preview": "/**\n * Clears or resets all editable fields on a form, except those explicitly excluded.\n * Compatible with Classic UI a"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Combine variables into Description/README.md",
    "chars": 585,
    "preview": "OnSUbmit Catalog Client script is created to Combine all variable values required and display in Description field.\nStep"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Combine variables into Description/script.js",
    "chars": 503,
    "preview": "// Combine variables into Description\n// Type: onSubmit\n\nfunction onSubmit()\n{\n  \n  // Combine provided all fields to De"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Control all RITM variables in one go/README.md",
    "chars": 471,
    "preview": "# Control all RITM variables in one go\n\nRequirement : We need to make all the variables on the RITM (sc_req_item) form r"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Control all RITM variables in one go/script.js",
    "chars": 199,
    "preview": "function onLoad()\n{\n  \n   g_form.setVariablesReadOnly(true); //if you want to make all variables read-only\n  \n   g_form."
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Currency Validation/README.md",
    "chars": 358,
    "preview": "## Currency Validation \n\nUse this catalog client script to validate the value of a variable used to get currency. As of "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Currency Validation/currency_validation.js",
    "chars": 1188,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading || newValue == '') {\n        return;\n    }"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/CustomAlert/README.md",
    "chars": 544,
    "preview": "These scripts helps you to create custom popup easily. follow the below steps to implement it on your instance.\n\nSteps\n1"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/CustomAlert/Screenshots/README.md",
    "chars": 35,
    "preview": "Please see the example Screenshots\n"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/CustomAlert/custom_alert.js",
    "chars": 1478,
    "preview": "function onLoad() {\n    // Function to show a custom link in a GlideModal\n    function showCustomLinkInGlideModal() {\n  "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/CustomAlert/custom_alert_box.js",
    "chars": 3384,
    "preview": "*****************HTML Section Start*****************\n<style>\n    /* dialog styles */\n    .dialog_content {\n        width"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Date Management/Date Management.js",
    "chars": 1449,
    "preview": "//Various useful ways to interact with dates on the client without needing to make a trip to the server\n\n\n//Use the foll"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Date Management/README.md",
    "chars": 404,
    "preview": "#### Useful ways to interact with variable date/time values without needing to make a trip to the server\n\nThe following "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Document validation/Client script.JS",
    "chars": 365,
    "preview": "function onSubmit() {\n  var ga = new GlideAjax('DocumentValidationHelper');\n  ga.addParam('sysparm_name', 'validateAttac"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Document validation/Readme.md",
    "chars": 281,
    "preview": "This project enhances a Service Catalog item by allowing users to upload supporting documents (e.g., ID proof, approval "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Document validation/Script include.js",
    "chars": 784,
    "preview": "var DocumentValidationHelper = Class.create();\nDocumentValidationHelper.prototype = Object.extendsObject(AbstractAjaxPro"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Dynamically Update Reference Qualifier/Catalog Item onLoad.js",
    "chars": 957,
    "preview": "function onLoad() {\n\tvar filterString = 'sys_class_name=cmdb_ci_ip_router^ORsys_class_name=cmdb_ci_ip_switch^ORsys_class"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Dynamically Update Reference Qualifier/README.md",
    "chars": 2166,
    "preview": "When we have a reference variable that is used in a (single row) variable set, sometimes we want to update the Reference"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Dynamically Update Reference Qualifier/Script Include.js",
    "chars": 411,
    "preview": "var refQualUtils = Class.create();\nrefQualUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {\n   \n   \tsetSys"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Dynamically Update Reference Qualifier/Variable Set onLoad.js",
    "chars": 924,
    "preview": "function onLoad() {\n\tvar filterString = 'sys_class_name=cmdb_ci_ip_router^ORsys_class_name=cmdb_ci_ip_switch' //Referenc"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Get Display Value of MRVS/README.md",
    "chars": 566,
    "preview": "## Get Display Value of MultiRow Variableset (MRVS)\n\nWhile there are different ways to do this, the easiest of them is t"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Get Display Value of MRVS/mrvs.js",
    "chars": 279,
    "preview": "\nvar script = new global.VariableUtil();\nvar gr = new GlideRecord(\"sc_req_item\");\ngr.addEncodedQuery(\"sys_id=<Copy & Pas"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Get MRVS Values from Parent/README.md",
    "chars": 583,
    "preview": "# Get Multi-row Variable Set Values from parent form\n\nSometimes you need to query the current set of values for a MRVS f"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Get MRVS Values from Parent/onload.js",
    "chars": 990,
    "preview": "function onLoad() {\n\n    /*\n     * work out the parent form based on platform and return the given MRVS data\n     * This"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Hide Variables of Catalog Item on Order Guide/Hide Variables.js",
    "chars": 343,
    "preview": "function onLoad(){\n  if(g_service_catalog.isOrderGuide()){\n    //variable_name1, varaible_name2 are the fields already p"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Hide Variables of Catalog Item on Order Guide/README.md",
    "chars": 613,
    "preview": "1. The onLoad catalog client script can be used to hide the catalog varaibles on catalog form when the catalog item is b"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Hide attachment icon/Hide Attachment icon.js",
    "chars": 233,
    "preview": "//Hide attachment icon on catalog item\nfunction onLoad() {\n    var document = document || top.document;\n    (jQuery || t"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Hide attachment icon/README.md",
    "chars": 899,
    "preview": "# Hide Attachment Icon on Catalog Items\n\n## Use Case / Requirement\nHide the attachment icon on a specific catalog item w"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/SentimentAnalyzer.js",
    "chars": 675,
    "preview": "var SentimentAnalyzer = Class.create();\nSentimentAnalyzer.prototype = Object.extendsObject(AbstractAjaxProcessor, {\n    "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/onChangeClientscript.js",
    "chars": 403,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading || !newValue) return;\n\n    var ga = new Gl"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Incident Sentiment Detector (Using Simple Word Matching, No AI)/readme.md",
    "chars": 1086,
    "preview": "Incident Sentiment Detector (No AI, Pure JavaScript)\n\nA lightweight ServiceNow utility that detects sentiment (Positive "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS Email Validation with Mutation Observer/EmailValidationOnCatalogUI.js",
    "chars": 2125,
    "preview": "/**\n * This is a client script that validates the email address in the MRVS field.\n * It uses MutationObserver to observ"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS Email Validation with Mutation Observer/README.md",
    "chars": 1163,
    "preview": "# Email Validation on Catalog UI\n\nThis file contains a client script that validates email addresses in the MRVS (Multi-R"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS Interact With Parent Form/Portal onLoad.js",
    "chars": 431,
    "preview": "//Using this Catalog Client Script that Applies to the Catalog Item will enable g_form methods like setValue and clearVa"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS Interact With Parent Form/README.md",
    "chars": 582,
    "preview": "Use this code snippet to interact with the parent form (i.e the main Cataloge Item) from within a Catalog Client Script "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS Interact With Parent Form/Write to Parent Form.js",
    "chars": 651,
    "preview": "//These methods can be used onLoad, onChange, or onSubmit in a script that Applies to the MRVS \n\n//Retrieve a variable v"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS Loop Rows/README.md",
    "chars": 107,
    "preview": "Use this to loop through a Multi Row Variable Set and create an array of objects with the variables in it.\n"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS Loop Rows/loopRows.js",
    "chars": 572,
    "preview": "var mrvsObj = [];\nvar multiRow = variable.mrvsName; //replace with the actual name of the mrvs\nif (multiRow.getRowCount("
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS Reference Qualifier from Catalog Item Variable/Catalog Client Script.js",
    "chars": 1090,
    "preview": "function onLoad() {\n\tvar mgr = g_service_catalog.parent.getValue('v_manager'); //if using this script onLoad of the MRVS"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS Reference Qualifier from Catalog Item Variable/README.md",
    "chars": 1449,
    "preview": "On a reference variable in a multi-row variable set, sometimes you want the reference qualifier to include the value of "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS Reference Qualifier from Catalog Item Variable/Script Include.js",
    "chars": 411,
    "preview": "var refQualUtils = Class.create();\nrefQualUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {\n   \n   \tsetSys"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS dependent ref qual 1st row/AccountUtils.js",
    "chars": 685,
    "preview": "var AccountUtils = Class.create();\nAccountUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {\n\n    //Populat"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS dependent ref qual 1st row/README.md",
    "chars": 628,
    "preview": "This Catalog Client Script and Script Include are used with a reference qualifier similar to\njavascript: 'disable=false'"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/MRVS dependent ref qual 1st row/onLoad.js",
    "chars": 617,
    "preview": "function onLoad() {\n    //applies to MRVS, not Catalog Item. This will pass the first selected account (if there is one)"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Make OOB Attachment Mandatory/README.md",
    "chars": 631,
    "preview": "# Make out of the box attahcment mandatory onChange of a field in Catalog Item\n\nThis scripts makes the out of the box at"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Make OOB Attachment Mandatory/onChange.js",
    "chars": 215,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading || newValue == 'No') {\n\t\tsetAttachmentMand"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Mandatory Attachments with 'n' numbers/README.md",
    "chars": 486,
    "preview": "# Enable Mandatory Attachments Count wtih 'n' numbers on Service Catalog item\n**Problem:** Check if exact 'n' number of "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Mandatory Attachments with 'n' numbers/onSubmitClientScript.js",
    "chars": 826,
    "preview": "function onSubmit() {\n\t//Type appropriate comment here, and begin script below\n\nvar count = 3; //Pass the number to ensu"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Multi-User Collaboration/Readme.md",
    "chars": 245,
    "preview": "This project introduces a collaboration feature for Service Catalog requests, allowing multiple users to contribute to a"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Multi-User Collaboration/Script include.JS",
    "chars": 574,
    "preview": "var CollaboratorHandler = Class.create();\nCollaboratorHandler.prototype = Object.extendsObject(AbstractAjaxProcessor, {\n"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Multi-User Collaboration/client script.JS",
    "chars": 467,
    "preview": "function onSubmit() {\n  var collaborators = g_form.getValue('collaborators'); // Multi-user reference field\n  if (collab"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Multi-User Collaboration/widget client controller.JS",
    "chars": 447,
    "preview": "function($scope, $http) {\n  $scope.approve = function(sysId) {\n    $http.post('/api/x_your_scope/collab_action', {\n     "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Multi-User Collaboration/widget server script.JS",
    "chars": 410,
    "preview": "(function() {\n  var collabs = [];\n  var gr = new GlideRecord('x_your_scope_collaborators');\n  gr.addQuery('request', $sp"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Normalise and Reset a MRVS based on Variable Changes/README.md",
    "chars": 1388,
    "preview": "# MRVS - Normalise and Reset Rows on Change\n\n## What this solves\nWhen a controlling variable changes (for example, Envir"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Normalise and Reset a MRVS based on Variable Changes/mrvs_normalise_onchange.js",
    "chars": 1391,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n  if (isLoading) return;\n\n  var MRVS_NAME = 'MY_MRVS';      "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Normalise and Reset a MRVS based on Variable Changes/variant_reset_specific_columns.js",
    "chars": 481,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n  if (isLoading) return;\n\n  var MRVS_NAME = 'MY_MRVS';\n  var"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Onsubmit validation/Readme.md",
    "chars": 404,
    "preview": "This project adds pre-validation for hardware availability in ServiceNow Catalog Items. Before submitting a request, the"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Onsubmit validation/on submit scriptinclude.JS",
    "chars": 808,
    "preview": "var HardwareValidationUtils = Class.create();\nHardwareValidationUtils.prototype = Object.extendsObject(AbstractAjaxProce"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Onsubmit validation/submit validation client script.js",
    "chars": 730,
    "preview": "function onSubmit() {\n    \n\n    var hardware = g_form.getValue('hardware_name');\n    var qty = g_form.getValue('quantity"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Open modal widget in an Onsubmit/README.md",
    "chars": 406,
    "preview": "Code snippet to stop submission of a form in an Onsubmit Client Script, use an asynchronous call, and open a Widget in M"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Open modal widget in an Onsubmit/openmodal.js",
    "chars": 1752,
    "preview": "    function onSubmit() {\n\n      \n        if (g_scratchpad.isFormValid)\n            return true;\n\n      //We can do some"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/PAN Validation/PAN Validation.js",
    "chars": 607,
    "preview": "function onChange(control, oldValue, newValue, isLoading, isTemplate) {\n    if (isLoading || newValue === '') {\n        "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/PAN Validation/README.md",
    "chars": 1031,
    "preview": "PAN is a ten-digit unique alphanumeric number issued by the Income Tax Department.\nIndian PAN (Permanent Account Number)"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Passport Validation/README.md",
    "chars": 1660,
    "preview": "This OnChange Catalog Client Script is for validating passport number, date of issue, and date of expiry. \n\nIt follows t"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Passport Validation/passportvalidity.js",
    "chars": 1680,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading) return;\n  \n    var passportNumber = g_for"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Password Validation Script/README.md",
    "chars": 637,
    "preview": "Description of the Combined Password Validation Script\nPurpose\nThe script validates the password entered by the user in "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Password Validation Script/Script.js",
    "chars": 1366,
    "preview": "function onSubmit() {\n    // Get the password value from the field\n    var password = g_form.getValue('password'); // Ch"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Percentage Symbol/readme.md",
    "chars": 312,
    "preview": "Sets the field value to the formatted percentage string (e.g., 45 becomes 45.00%).\n\nRetrieves the current value of the f"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Percentage Symbol/script.js",
    "chars": 817,
    "preview": "/*Sets the field value to the formatted percentage string (e.g., 45 becomes 45.00%).\n\nRetrieves the current value of the"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/PopulateDropdown/README.md",
    "chars": 984,
    "preview": "## Load / Populate the options for the second dropdown field (select box) based on what user chooses in the first dropdo"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/PopulateDropdown/script.js",
    "chars": 602,
    "preview": "// Please check readme for the set up\nvar data = {\n  Japan: [\"Tokyo\", \"Osaka\"],\n  USA: [\"New York\", \"Chicago\", \"San Dieg"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Prevent duplicate records on MRVS/README.md",
    "chars": 633,
    "preview": "# Prevent duplicate records to be selected in Multi row variable set\n\nWe have many ways to do this but this is bit uniqu"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Prevent duplicate records on MRVS/script.js",
    "chars": 610,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n\tif (isLoading || newValue == '') {\n\t\treturn;\n\t}\n\t\n\tvar MRVS"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Real time count of letters/Count letters.js",
    "chars": 820,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading) {\n        return;\n    }\n\n    var maxChars"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Real time count of letters/readme.md",
    "chars": 218,
    "preview": "This onChange Catalog Client Script displays the current character count for a text field and enforces a maximum limit b"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Remove reference icon from portal/README.md",
    "chars": 359,
    "preview": "# Remove reference icon from portal using Catalog Client script of a Catalog Item\n\nThis catalog client script is design "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Remove reference icon from portal/remove-reference-icon-from-portal-onLoad.js",
    "chars": 288,
    "preview": "function onLoad() {\n    setTimeout(function() {\n        var referenceElement = top.document.getElementsByClassName('btn "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Restrict Number of rows in Multi Row Variable/README.md",
    "chars": 144,
    "preview": "## restrict_multi_row.js\nUse this to restrict multi row variable set rows to 1. this value can be changed to any number "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Restrict Number of rows in Multi Row Variable/restrict_multi_row.js",
    "chars": 130,
    "preview": "function onLoad() {\n\tvar field = g_form.getField(\"mrvs_variable_set_name\");\n\tif (field != null) {\n\t\tfield.max_rows_size "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Return Date Validation/README.md",
    "chars": 1097,
    "preview": "This piece of code was written as a part of an usecase where the return date value validation was expected to be after s"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Return Date Validation/validateReturndate.js",
    "chars": 1233,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading || newValue == '') {\n        return;\n    }"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Reusable GlideAjax Client Script/DynamicTableQueryUtil.js",
    "chars": 2387,
    "preview": "var DynamicTableQueryUtil = Class.create();\nDynamicTableQueryUtil.prototype = Object.extendsObject(AbstractAjaxProcessor"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Reusable GlideAjax Client Script/Readme.md",
    "chars": 1013,
    "preview": "This solution provides a generic and reusable GlideAjax-based client-server interaction in ServiceNow that allows queryi"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Reusable GlideAjax Client Script/clientscript.js",
    "chars": 1130,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading || newValue === '') {\n        return;\n    "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Rounding Money or Price Field/README.md",
    "chars": 570,
    "preview": "This script is OnChange, and will automatically round the selected field to [x] value.\nThe script can either be applied "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Rounding Money or Price Field/catalog_client_script.js",
    "chars": 974,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n\n    //Value for increment rounding\n    var roundTo = [ROUND"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Rounding Money or Price Field/catalog_client_script_config.md",
    "chars": 153,
    "preview": "Name: Round [Field] to nearest [Rounding Amount]\nUI Type: All\nType: onChange\n\nVariable name: [VAR NAME]\n\nScript: see `ca"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Schedule Request/Readme.JS",
    "chars": 205,
    "preview": "This project allows users to schedule a Service Catalog request for a future date and time. Instead of submitting immedi"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Schedule Request/scheduled client script.js",
    "chars": 617,
    "preview": "function onSubmit() {\n  var scheduledTime = g_form.getValue('scheduled_time');\n  var currentTime = new Date().toISOStrin"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Schedule Request/scheduled scriptinclude.JS",
    "chars": 523,
    "preview": "var ScheduledRequestHelper = Class.create();\nScheduledRequestHelper.prototype = Object.extendsObject(AbstractAjaxProcess"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Schedule Request/scheduled_job.JS",
    "chars": 384,
    "preview": "var now = new GlideDateTime();\nvar gr = new GlideRecord('x_snc_scheduled_requests');\ngr.addQuery('scheduled_time', '<=',"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Set User Field Values on Load/README.md",
    "chars": 462,
    "preview": "On Load Catalog client script is created to auto set the field values and make that field read only\n - Navigate to your "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Set User Field Values on Load/script.js",
    "chars": 229,
    "preview": "/*\nSet user field value on load using catalog cleint script and make the field readonly\n*/\n\nfunction onLoad()\n{\n  var us"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Set and Lock Variable by Group/README.md",
    "chars": 549,
    "preview": "**Set and Lock Variable by Group**\n\nThis solution provides a secure and dynamic way to control data entry on a Service C"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Set and Lock Variable by Group/set_lock_variable_by_grp.js",
    "chars": 1291,
    "preview": "// onload Catalog Client Script with Catalog Name \nfunction onLoad() {\n    var variableName = 'bypass_approval_reason';\n"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Set fields from URL Parameter 2/CatalogClientScript.js",
    "chars": 914,
    "preview": "function onLoad() {\n   \n    var taskId = getParameterValue(\"taskid\");\n   \n    if (taskId != \"\" && taskId != null && task"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Set fields from URL Parameter 2/KMXOUtils.js",
    "chars": 694,
    "preview": "var KMXOUtils = Class.create();\nKMXOUtils.prototype = {\n    initialize: function() {\n    },\n\n  /*\n  * Receives a um sys_"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Set fields from URL Parameter 2/README.md",
    "chars": 958,
    "preview": "# Set fields on a catalog item from URL parameters.\n\nThe mission was to get a sys_id from the URL, query a record and re"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Set fields from URL Parameter 2/UtilsAjax.js",
    "chars": 365,
    "preview": "var UtilsAjax = Class.create();\nUtilsAjax.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {\n\n  getTaskNum"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Set fields from URL Parameters/README.md",
    "chars": 717,
    "preview": "# Set fields on a catalog item from URL parameters.\n\nThis only works on both the classic ui and service portal.\n\nTo use "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Set fields from URL Parameters/script.js",
    "chars": 568,
    "preview": "function onLoad() {\n\n\ttry{ // Classic UI\n\t\tvar pFields = g_form.nameMap;\n\t\tconsole.log(pFields);\n\t\tpFields.forEach(funct"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Validate a Credit Card Number/README.md",
    "chars": 611,
    "preview": "**Description of the Credit Card Number Validation Script**\nPurpose\nThe script validates a credit card number entered by"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/Validate a Credit Card Number/Script.js",
    "chars": 770,
    "preview": "function onSubmit() {\n    var cardNumber = g_form.getValue('credit_card'); // Change 'credit_card' to your field name\n  "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/catalog Draft/Readm.md",
    "chars": 456,
    "preview": "This project implements an Auto Save Draft feature for ServiceNow Catalog Items. It automatically saves the user’s progr"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/catalog Draft/Script include.JS",
    "chars": 948,
    "preview": "var CatalogDraftUtils = Class.create();\nCatalogDraftUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {\n    "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/catalog Draft/client script.js",
    "chars": 663,
    "preview": "function onLoad() {\n    console.log('Auto Save Draft initialized');\n\n    setInterval(function() {\n        var draftData "
  },
  {
    "path": "Client-Side Components/Catalog Client Script/onCellEdit Catalog Task State Change Restriction/README.md",
    "chars": 292,
    "preview": "# Catalog Task state should not be closed from list edit\nThe onCellEdit Client Script type is used for lists rather than"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/onCellEdit Catalog Task State Change Restriction/script.js",
    "chars": 385,
    "preview": "function onCellEdit(sysIDs, table, oldValues, newValue, callback) {\n  var saveAndClose = true;\n //Type appropriate comme"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/previous Request/Readme.MD",
    "chars": 327,
    "preview": "Show previous request ON requested for selection\n\nThis feature enhances the Service Catalog experience by displaying pre"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/previous Request/previous request client script.js",
    "chars": 949,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading || newValue == '') return;\n\n    var ga = n"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/previous Request/previous request script include.js",
    "chars": 755,
    "preview": "var PreviousRequestsUtils = Class.create();\nPreviousRequestsUtils.prototype = Object.extendsObject(AbstractAjaxProcessor"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/spModal for Sweet Alerts/readme.md",
    "chars": 1154,
    "preview": "In ServiceNow, Open catalog client Scripts [catalog_script_client] and paste the code snippet of [spModalSweetAlerts.js]"
  },
  {
    "path": "Client-Side Components/Catalog Client Script/spModal for Sweet Alerts/spModalSweetAlerts.js",
    "chars": 1015,
    "preview": "function onChange(control, oldValue, newValue) {\n    if (newValue == 'Yes') {\n        spModal.open({\n            title: "
  },
  {
    "path": "Client-Side Components/Client Scripts/Abort action when description is empty/Code.js",
    "chars": 357,
    "preview": "function onSubmit() {\n    //Type appropriate comment here, and begin script below\n    var description = g_form.getValue("
  },
  {
    "path": "Client-Side Components/Client Scripts/Abort action when description is empty/ReadMe.md",
    "chars": 326,
    "preview": "When an Incident record is being closed, the system should validate that the Description field is not empty and state is"
  },
  {
    "path": "Client-Side Components/Client Scripts/Abort direct incident closure without Resolve State/readme.md",
    "chars": 1240,
    "preview": "📘 README — Incident State Validation (Client Script)\nOverview\n\nThis Client Script enforces the correct ITIL incident lif"
  },
  {
    "path": "Client-Side Components/Client Scripts/Abort direct incident closure without Resolve State/script.js",
    "chars": 867,
    "preview": "function onChange(control, oldValue, newValue, isLoading, isTemplate) {\n    // Prevent execution during form load or whe"
  },
  {
    "path": "Client-Side Components/Client Scripts/Add Field Decoration/Add Field Decoration.js",
    "chars": 130,
    "preview": "function onLoad() {\n    // Adding Field Decorators\n    g_form.addDecoration(\"caller_id\", \"icon-user-profile\", \"The Reque"
  },
  {
    "path": "Client-Side Components/Client Scripts/Add Field Decoration/README.md",
    "chars": 198,
    "preview": "# Client Script - Add Field Decoration\n\nA client script that added field decoration.\n\n## Usage\n\n- Create a new OnLoad sc"
  },
  {
    "path": "Client-Side Components/Client Scripts/Add Image to Field Based on Company/AddImageToFieldBasedOnCompany.js",
    "chars": 942,
    "preview": "function onLoad() {\n    //Type appropriate comment here, and begin script below\n\t\n\t//Get element of the field\n    var re"
  },
  {
    "path": "Client-Side Components/Client Scripts/Add Image to Field Based on Company/README.md",
    "chars": 390,
    "preview": "# Add Image to Field Based on Company\nFrom the User Profile get the Company associated to the User using a Display Busin"
  },
  {
    "path": "Client-Side Components/Client Scripts/Add Image to Field Based on Company/SetCompanyScratchPadValue.js",
    "chars": 251,
    "preview": "(function executeRule(current, previous /*null when async*/) {\n\n\t// Set the Scratchpad value for Company which would be "
  },
  {
    "path": "Client-Side Components/Client Scripts/Adding Placeholder on Resolution Notes/README.md",
    "chars": 939,
    "preview": "# Adding Placeholder Text in Resolution Notes\n\nTo maintain consistency and ensure specific information is captured in re"
  },
  {
    "path": "Client-Side Components/Client Scripts/Adding Placeholder on Resolution Notes/script.js",
    "chars": 380,
    "preview": "function onChange(control, oldValue, newValue, isLoading, isTemplate) {\n    if (isLoading || newValue === '') {\n        "
  },
  {
    "path": "Client-Side Components/Client Scripts/Auto Update Priority based on Impact and Urgency/readme.md",
    "chars": 2733,
    "preview": "🧩 Readme : Client Script: Auto Priority Update Based on Impact and Urgency\n📘 Overview\n\nThis client script automatically "
  },
  {
    "path": "Client-Side Components/Client Scripts/Auto Update Priority based on Impact and Urgency/script.js",
    "chars": 2885,
    "preview": "//Auto Priority Update based on Impact and Urgency\n\n// ================================================================="
  },
  {
    "path": "Client-Side Components/Client Scripts/Auto-Populate Planned End Date/README.md",
    "chars": 423,
    "preview": "An onChange client script that calls the script includes one that adds the specified number of business days to the plan"
  },
  {
    "path": "Client-Side Components/Client Scripts/Auto-Populate Planned End Date/autoPopulatePlannedEndDate.js",
    "chars": 971,
    "preview": "//Client script\n//Table: Change Request\n//UI Type: All\n//Type: onChange\n//Field: Planned Start Date\nfunction onChange(co"
  },
  {
    "path": "Client-Side Components/Client Scripts/Auto-Populate Short Discription/Auto populate short description.js",
    "chars": 1117,
    "preview": "function onChange(control, oldValue, newValue, isLoading, isTemplate) {\n    if (isLoading || newValue === '') {\n        "
  },
  {
    "path": "Client-Side Components/Client Scripts/Auto-Populate Short Discription/README.md",
    "chars": 2416,
    "preview": "\n# Auto-Populate Short Description Client Script\n\n## Overview\n\nThis client script is designed to enhance the user experi"
  },
  {
    "path": "Client-Side Components/Client Scripts/Auto-Populate Short Discription/Readme.md",
    "chars": 1365,
    "preview": "# Auto-Populate Short Description (Client Script)\n## Overview\n\nThis client script automatically updates the Short Descri"
  },
  {
    "path": "Client-Side Components/Client Scripts/Auto-Populate Short Discription/autoPopulateSD.js",
    "chars": 994,
    "preview": "// Client Script to Auto-Populate Short Description based on Category\n\nfunction onChangeCategory() {\n    var categoryFie"
  },
  {
    "path": "Client-Side Components/Client Scripts/Auto-populate watch_list based on company/README.md",
    "chars": 281,
    "preview": "Table: Incident\nType: onChange\nfield: caller_id\n\nSometimes customers have a requirement to add users or distribution lis"
  },
  {
    "path": "Client-Side Components/Client Scripts/Auto-populate watch_list based on company/script.js",
    "chars": 623,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading) {\n        return;\n    }\n    var callerID "
  },
  {
    "path": "Client-Side Components/Client Scripts/Call SI to recover User data/README.md",
    "chars": 326,
    "preview": "# Call Script Include to recover User data\n\nIn this onChange Client Script, the scenario is this:\n- In a form, we have a"
  },
  {
    "path": "Client-Side Components/Client Scripts/Call SI to recover User data/script.js",
    "chars": 1083,
    "preview": "/*\nType: onChange\nField: a reference to the User table\n*/\nfunction onChange(control, oldValue, newValue, isLoading, isTe"
  },
  {
    "path": "Client-Side Components/Client Scripts/Change Label of Field/Change Label of Field.js",
    "chars": 202,
    "preview": "function onLoad() {\n    //Type appropriate comment here, and begin script below\n    if (g_form.getValue('priority') == '"
  },
  {
    "path": "Client-Side Components/Client Scripts/Change Label of Field/README.md",
    "chars": 325,
    "preview": "\n# Change Label of Field \n\n• Modify field labels dynamically in the ServiceNow platform.\n\n• Change labels through the UI"
  },
  {
    "path": "Client-Side Components/Client Scripts/Change incident Number label color based on priority/Script.js",
    "chars": 333,
    "preview": "function onLoad ()\n{\n  var aPriority = g_form.getValue('priority');\n  var label = g_form.getLable('number');\n  label.sty"
  },
  {
    "path": "Client-Side Components/Client Scripts/Change incident Number label color based on priority/readme.md",
    "chars": 74,
    "preview": "Write Client Script \nChange Incident Number Lable color based on priority\n"
  },
  {
    "path": "Client-Side Components/Client Scripts/Check all mandatory fields using mandatoryCheck()/README.md",
    "chars": 970,
    "preview": "# Mandatory Field Check on Form Change\n\nThis client script demonstrates how to use `g_form.mandatoryCheck()` to validate"
  },
  {
    "path": "Client-Side Components/Client Scripts/Check all mandatory fields using mandatoryCheck()/script.js",
    "chars": 665,
    "preview": "function onChange(control, oldValue, newValue, isLoading, isTemplate) {\n   if (isLoading || newValue === '') {\n      ret"
  },
  {
    "path": "Client-Side Components/Client Scripts/Client Validation of Attachments by File Type and Count/README.md",
    "chars": 627,
    "preview": "This ServiceNow client script is designed to validate file attachments on a form before submission. It's most likely use"
  },
  {
    "path": "Client-Side Components/Client Scripts/Client Validation of Attachments by File Type and Count/code.js",
    "chars": 771,
    "preview": "(function executeRule(gForm, gUser, gSNC) {\n    var attachments = gForm.getAttachments();\n    if (!attachments || attach"
  },
  {
    "path": "Client-Side Components/Client Scripts/Client script using getMessage() function without filling Messages field/README.md",
    "chars": 701,
    "preview": "# Client scripts using getMessage() function without filling Messages field\n\n**Problem scenario :**\nDevelopers while wri"
  },
  {
    "path": "Client-Side Components/Client Scripts/Client script using getMessage() function without filling Messages field/script.js",
    "chars": 322,
    "preview": "function onSubmit() {\n   \n\tvar messages = g_form.getValue('messages');\n\tvar script = g_form.getValue('script');\n\tvar cou"
  },
  {
    "path": "Client-Side Components/Client Scripts/Color-coded Priority field for improved UX/README.md",
    "chars": 661,
    "preview": "# Field Color-Coding Based on Choice Values\n\n## Purpose\nDynamically change the background color of any choice field on a"
  },
  {
    "path": "Client-Side Components/Client Scripts/Color-coded Priority field for improved UX/setColor.js",
    "chars": 447,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n\n  var colorMap = {\n    '1': '#e74c3c',  // Critical - stron"
  },
  {
    "path": "Client-Side Components/Client Scripts/Conditional Auto-Routing and Dynamic Mandatory Fields/Conditional_AutoRouting_Dynamic_Mandatory_Fields.js",
    "chars": 613,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading) return;\n\n    if (newValue === 'hardware')"
  },
  {
    "path": "Client-Side Components/Client Scripts/Conditional Auto-Routing and Dynamic Mandatory Fields/Readme.md",
    "chars": 179,
    "preview": "If an Incident Category = Hardware, make Asset Tag mandatory and automatically assign to Hardware Support Group.\nIf Soft"
  },
  {
    "path": "Client-Side Components/Client Scripts/Conditional Form Section based on Role/README.md",
    "chars": 636,
    "preview": "# Conditional Form Sections Based on User Role\n\n## Overview\nThis client script dynamically shows or hides specific secti"
  },
  {
    "path": "Client-Side Components/Client Scripts/Conditional Form Section based on Role/script.js",
    "chars": 300,
    "preview": "function onLoad() {\n  var userHasRole = g_user.hasRole('case_manager'); // Check if user has specific role\n\n  if (userHa"
  },
  {
    "path": "Client-Side Components/Client Scripts/Control Form Behaviour from Reference Lookup/README.md",
    "chars": 976,
    "preview": "# Use Case\n\nClicking the lookup icon on a reference field opens the list view for the referenced table. On clicking the "
  },
  {
    "path": "Client-Side Components/Client Scripts/Control Form Behaviour from Reference Lookup/script.js",
    "chars": 444,
    "preview": "\nvar url = new GlideURL();\nurl.setFromCurrent();\nvar source = url.getParam('sysparm_nameofstack'); // Always 'reflist' w"
  },
  {
    "path": "Client-Side Components/Client Scripts/Count Assigned To Field/README.md",
    "chars": 599,
    "preview": "Count Assigned To Field\n\n1. Write a Client Script name as getAssignedToCount\n2. Glide the Incident Table\n3. Use onChange"
  },
  {
    "path": "Client-Side Components/Client Scripts/Count Assigned To Field/getAssignedToCount.js",
    "chars": 607,
    "preview": "function onChange(control,oldValue,newValue,isLoading,isTemplate) {\n  if(isLoading || newValue === '') {\n    return;\n  }"
  },
  {
    "path": "Client-Side Components/Client Scripts/Date Range Validation (Within 30 Days)/README.md",
    "chars": 770,
    "preview": "Date Range Validation (Within 30 Days) in Client Side\n\nThis ServiceNow client script provides real-time date validation "
  },
  {
    "path": "Client-Side Components/Client Scripts/Date Range Validation (Within 30 Days)/dateRangeValidation.js",
    "chars": 905,
    "preview": "function onChange(control, oldValue, newValue, isLoading, isTemplate) {\n    if (isLoading || newValue === '') {\n        "
  },
  {
    "path": "Client-Side Components/Client Scripts/Detect oldValue newValue and Operation in Glide List Type Fields/detectOldValuenewValueOperation.js",
    "chars": 1303,
    "preview": "function onChange(control, oldValue, newValue, isLoading, isTemplate) {\n    if (isLoading) {\n        return;\n    }\n\n    "
  },
  {
    "path": "Client-Side Components/Client Scripts/Detect oldValue newValue and Operation in Glide List Type Fields/readme.md",
    "chars": 1854,
    "preview": "In Client Scripts, oldValue will display the value of last value/record which is stored in that field. \nFor new records,"
  },
  {
    "path": "Client-Side Components/Client Scripts/Detect oldValue newValue and Operation in Glide List Type Fields/watchListCandidatesUtil.js",
    "chars": 979,
    "preview": "var watchListCandidatesUtil = Class.create();\nwatchListCandidatesUtil.prototype = Object.extendsObject(AbstractAjaxProce"
  },
  {
    "path": "Client-Side Components/Client Scripts/Display Custom Field Based on Incident Channel Field and populate with Caller Information/GlideAjaxCallerInfo.js",
    "chars": 662,
    "preview": "var CallerInfoHelper = Class.create();\nCallerInfoHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, {\n\n    g"
  },
  {
    "path": "Client-Side Components/Client Scripts/Display Custom Field Based on Incident Channel Field and populate with Caller Information/README.md",
    "chars": 1906,
    "preview": "# Display Custom Email/Phone Field Based on Incident Channel Field and Populate those Field with Caller Information\n\nDis"
  },
  {
    "path": "Client-Side Components/Client Scripts/Display Custom Field Based on Incident Channel Field and populate with Caller Information/clientScriptOnChangeCaller.js",
    "chars": 720,
    "preview": "function onChange(control, oldValue, newValue, isLoading) {\n    if (isLoading || newValue === '') return;\n\n    var ga = "
  },
  {
    "path": "Client-Side Components/Client Scripts/Display Incident Count of Assigned-To User When Field Changes/README.md",
    "chars": 825,
    "preview": "## Display Info Message of Incident Count of Assigned-To User When Field Assigned-To Changes\n\nDisplays a message showing"
  }
]

// ... and 2756 more files (download for full content)

About this extraction

This page contains the full source code of the ServiceNowDevProgram/code-snippets GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2956 files (4.6 MB), approximately 1.4M tokens, and a symbol index with 2297 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!