# 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.

- Skill: `ecnu-icalk/servicenow-catalog-client-script-for-async-server-validation` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/servicenow-catalog-client-script-for-async-server-validation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/servicenow-catalog-client-script-for-async-server-validation/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/servicenow-catalog-client-script-for-async-server-validation

---


# 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

