AgentSkillsCN

servicenow-script-server-logic

通用的服务器端操作,包括系统交互、用户会话管理、事件队列以及实用工具函数。该技能涵盖 GlideSystem(gs)方法、日志记录、系统属性,以及后台任务协调。适用于系统级任务、用户上下文操作、事件发布,或在执行非特定于数据操作、流程或安全性的管理功能时使用。

SKILL.md
--- frontmatter
name: servicenow-script-server-logic
description: General server-side operations including system interactions, user session management, event queuing, and utility functions. Covers GlideSystem (gs) methods, logging, system properties, and background job coordination. Use for system-level tasks, user context operations, event publishing, or when performing administrative functions not specific to data manipulation, flows, or security.

General Server Logic

Quick start

System operations:

javascript
// Get current user
var userId = gs.getUserID();
var userName = gs.getUser().getName();
var userEmail = gs.getUser().getEmail();

// Logging
gs.info('Information message');
gs.warn('Warning message');
gs.error('Error message');
gs.debug('Debug message', myObject);

// System properties
var timeout = gs.getProperty('system.timeout', '30000');
var isProduction = gs.getProperty('glide.install.type') === 'prod';

Event queue management:

javascript
// Queue a business event
gs.eventQueue('my.custom.event', current, oldCurrent, {
    priority: 1
});

// Publish event for other listeners
gs.eventQueue('incident.priority.updated', current, oldCurrent);

Session management:

javascript
// Current session context
var domainId = gs.getDomainID();
var sessionID = gs.getSessionID();
var timezoneID = gs.getTimeZoneID();

Impersonation (admin only):

javascript
var impersonate = new GlideImpersonate();
impersonate.loginAs('admin');
// Now running as admin
impersonate.back();
// Back to original user

Common patterns

Scoped evaluation:

javascript
var evaluator = new GlideScopedEvaluator();
var result = evaluator.evaluateScript(grRecord, 'script_field', {});

Locale and formatting:

javascript
var locale = GlideLocale.get();
var datePattern = locale.getDatePattern();
var timePattern = locale.getTimePattern();

Secure random generation:

javascript
var random = GlideSecureRandomUtil.getRandomString(16);
var randomInt = GlideSecureRandomUtil.getRandomInt(1, 100);

Best practices

  • Use descriptive variable names (grIncident for GlideRecord)
  • Use PascalCase for classes, camelCase for functions
  • Never use eval() or dynamic code execution
  • Never hardcode sys_ids; use System Properties
  • Avoid global synchronous calls like getXMLWait()
  • Log important actions for audit trails
  • Use domain context for multi-tenant operations
  • Queue async work instead of waiting for results

Key APIs

APIPurpose
GlideSystem (gs)Core system operations
GlideUser (gs.getUser())Current user context
GlideLocaleLocale and formatting
GlideScopedEvaluatorSafe script evaluation
GlideImpersonateAdmin user context switching

Reference

For advanced patterns, debugging techniques, and best practices, see BEST_PRACTICES.md