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

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/servicenow-catalog-client-script-for-async-server-validation" ~/.claude/skills/ecnu-icalk-autoskill-servicenow-catalog-client-script-for-async-server-validatio && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8_GLM4.7/servicenow-catalog-client-script-for-async-server-validation/SKILL.md
source content

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