Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

Complete Guide to Server-Side Scripting in ServiceNow.

Tushar8649
Tera Contributor

 

 

🔷 1. Introduction to Server-Side Scripting

Server-side scripting in ServiceNow refers to JavaScript code executed on the server, responsible for handling business logic, database operations, automation, and backend processing.

  • Executes on the ServiceNow instance (server)

  • Not visible to end users (secure & tamper-proof)

  • Handles data integrity, automation, and integrations

📌 Common Use Cases:

  • Auto-updating fields

  • Data validation

  • Triggering notifications/events

  • Processing large datasets

  • Integration with external systems (ServiceNow)


🔷 2. Client vs Server-Side (Foundation You MUST Understand)

Aspect Client-Side Server-Side

Runs OnBrowserServer
PurposeUI interactionBusiness logic
APIsg_form, g_userGlideRecord, gs
SecurityLess secureHighly secure

👉 Key Insight:
Server-side scripting is mandatory for enforcing business rules and maintaining data consistency. (infocenter.io)


🔷 3. Core Server-Side Script Types

These are the building blocks:

3.1 Business Rules (Most Important)

A Business Rule is a server-side script that runs when a record is:

🔹 Types of Business Rules

Type When it Runs Use Case

BeforeBefore DB saveModify current record
AfterAfter saveUpdate related records
AsyncBackground after savePerformance-heavy tasks
DisplayBefore form loadPass data to client

📌 Example (Before Business Rule):

if (current.priority == 1) {
    current.urgency = 1;
}

📌 Key Rule:

  • Never use current.update() in before rules


3.2 Script Includes (Reusable Logic)

Script Includes are reusable server-side classes/functions.

  • Centralized logic

  • Called from Business Rules, Client Scripts, APIs

  • Improve maintainability

📌 Definition:
Reusable server-side logic that executes only when called (ServiceNow)

📌 Example:

var IncidentUtils = Class.create();
IncidentUtils.prototype = {
    initialize: function() {},

    getActiveIncidents: function() {
        var gr = new GlideRecord('incident');
        gr.addActiveQuery();
        gr.query();
        return gr.getRowCount();
    }
};

3.3 GlideRecord (Most Critical API)

GlideRecord is the backbone of server-side scripting.

👉 Used for:

  • Query

  • Insert

  • Update

  • Delete records

📌 Example:

var gr = new GlideRecord('incident');
gr.addQuery('active', true);
gr.query();

while (gr.next()) {
    gs.info(gr.number);
}

📌 Key Insight:
GlideRecord is used in almost every server-side implementation. (ServiceNow Guru)


3.4 GlideSystem (gs Object)

Used for:

  • Logging

  • User info

  • System operations

📌 Example:

gs.info("Incident created successfully");

3.5 Scheduled Jobs (Background Automation)

  • Run at defined intervals

  • Used for batch processing

📌 Example Use Cases:

  • Cleanup scripts

  • Data archiving

  • Reports generation


3.6 Background Scripts

  • Used for testing and quick execution

  • Runs immediately

📌 Important:

  • Powerful but risky (direct DB impact)


🔷 4. Execution Flow (Critical Concept)

Understanding execution order is key for debugging:

  1. Query Business Rules

  2. Display Business Rules

  3. Before Business Rules

  4. Database Operation

  5. After Business Rules

  6. Async Business Rules


🔷 5. Advanced Concepts

🔶 5.1 Query Business Rules

  • Modify queries before execution

  • Affect all GlideRecord queries

⚠️ Use carefully → can impact performance and debugging (ServiceNow)


🔶 5.2 GlideAggregate

Used for:

  • Count

  • Sum

  • Avg

📌 Example:

var agg = new GlideAggregate('incident');
agg.addAggregate('COUNT');
agg.query();

if (agg.next()) {
    gs.info(agg.getAggregate('COUNT'));
}

🔶 5.3 Event-Driven Architecture

  • Use gs.eventQueue() to trigger notifications

📌 Example:

gs.eventQueue('incident.created', current, current.sys_id, gs.getUserID());

🔶 5.4 Script Includes + GlideAjax

  • Bridge client → server

  • Fetch data asynchronously


🔶 5.5 Security in Server Scripts

  • Use GlideRecordSecure

  • Respect ACLs

  • Avoid exposing sensitive logic


🔷 6. Best Practices (Highly Important)

Coding Standards

  • Avoid hardcoding values (ServiceNow)

  • Use Script Includes for reuse

  • Keep scripts modular

Performance

  • Use conditions in Business Rules

  • Avoid unnecessary queries

  • Prefer async for heavy operations

Maintainability

  • Proper naming conventions

  • Avoid duplicate logic

  • Use logging (gs.info)


🔷 7. Common Mistakes to Avoid

Using GlideRecord in loops inefficiently
Writing logic in Client Script instead of server
No conditions in Business Rules
Overusing synchronous Business Rules
Not using Script Includes


🔷 8. Real-World Use Case (End-to-End)

👉 Scenario: Auto-update related incidents

var gr = new GlideRecord('incident');
gr.addQuery('short_description', current.short_description);
gr.addQuery('active', true);
gr.query();

while (gr.next()) {
    gr.work_notes = "Similar incident updated";
    gr.update();
}

Conclusion

If you want to become a strong ServiceNow Developer, server-side scripting is non-negotiable.

It is not just about writing scripts — it is about:

  • Designing efficient logic

  • Maintaining data integrity

  • Building scalable solutions

0 REPLIES 0