Create a ServiceNow Catalog Client Script (onSubmit) that validates a selected server's related parent records asynchronously. It prevents submission if operational servers are found (displaying an alert) and allows submission otherwise.
Scanned 5/30/2026
Install via CLI
openskills install ECNU-ICALK/AutoSkill---
id: "45be840c-9bbf-4aad-b1bf-ebfe14e51997"
name: "ServiceNow Catalog Client Script for Async Server Validation"
description: "Create a ServiceNow Catalog Client Script (onSubmit) that validates a selected server's related parent records asynchronously. It prevents submission if operational servers are found (displaying an alert) and allows submission otherwise."
version: "0.1.0"
tags:
- "ServiceNow"
- "Client Script"
- "GlideAjax"
- "Catalog Validation"
- "Asynchronous"
triggers:
- "servicenow catalog client script onsubmit validation"
- "prevent submission based on server status"
- "glideajax check before submit"
- "alert and block catalog request"
- "check parent server operational status"
---
# ServiceNow Catalog Client Script for Async Server Validation
Create a ServiceNow Catalog Client Script (onSubmit) that validates a selected server's related parent records asynchronously. It prevents submission if operational servers are found (displaying an alert) and allows submission otherwise.
## Prompt
# Role & Objective
Act as a ServiceNow Client Scripting expert. Create an onSubmit Catalog Client Script that validates a selected server reference variable against related CMDB records using asynchronous GlideAjax.
# Operational Rules & Constraints
1. **Trigger**: The script must run on `onSubmit`.
2. **Input**: Identify the reference variable (e.g., `select_server`) referring to `cmdb_ci_server`.
3. **Async Check**:
- Use `g_form.getReference` to fetch the server record and get its `ip_address`.
- Use `GlideAjax` to call a server-side Script Include (e.g., `CheckOpStatus`).
- Pass the `ip_address` to the Script Include.
4. **Server-Side Logic (Context)**: The Script Include queries `cmdb_rel_ci` for parent records where `child.ip_address` matches the input IP and checks if `operational_status == '1'.
5. **Response Handling**:
- **If operational servers are found**:
- Parse the JSON response.
- Display an alert box listing the names of the operational servers.
- Clear the value of the reference variable (`g_form.clearValue`).
- **Prevent** form submission.
- **If no operational servers are found**:
- Allow the form to submit.
6. **Asynchronous Submission Control**:
- Because `GlideAjax` is asynchronous, the initial `onSubmit` must return `false` to block submission while waiting.
- Use a mechanism (e.g., `sessionStorage` or global flags) to persist the validation state across the callback.
- If validation passes (no operational servers), programmatically trigger `g_form.submit()` or `g_form.save()` within the callback.
- Ensure flags are cleared after submission to prevent loops.
# Anti-Patterns
- Do not use synchronous `getXMLWait()` as it blocks the browser.
- Do not rely solely on in-memory variables if the page might reload or state needs to persist across the async boundary without complex flag management.
# Interaction Workflow
1. User clicks Submit.
2. Script checks if server is selected. If not, allow submit.
3. If selected, initiate GlideAjax call and return `false`.
4. On callback:
- If error/block condition: Alert user, clear field, keep submission blocked.
- If success condition: Set success flag, trigger `g_form.submit()`.
## Triggers
- servicenow catalog client script onsubmit validation
- prevent submission based on server status
- glideajax check before submit
- alert and block catalog request
- check parent server operational status
No comments yet. Be the first to comment!