Loading...
Loading...
Compare original and translation side by side
| Type | Timing | Use Case | Performance Impact |
|---|---|---|---|
| Before | Before database write | Validate, modify current record | Low |
| After | After database write | Create related records, notifications | Medium |
| Async | Background (after commit) | Heavy processing, integrations | None (background) |
| Display | When form loads | Modify form display, set defaults | Low |
| 类型 | 执行时机 | 适用场景 | 性能影响 |
|---|---|---|---|
| Before | 数据库写入前 | 验证、修改当前记录 | 低 |
| After | 数据库写入后 | 创建关联记录、发送通知 | 中 |
| Async | 后台执行(提交后) | 大量数据处理、系统集成 | 无(后台运行) |
| Display | 表单加载时 | 修改表单显示、设置默认值 | 低 |
// In Business Rules, these are always available:
current // The record being operated on
previous // The record BEFORE changes (update/delete only)
gs // GlideSystem utilities// 在Business Rules中,以下对象始终可用:
current // 当前操作的记录
previous // 变更前的记录(仅更新/删除操作可用)
gs // GlideSystem工具类// Prevent update if condition not met
(function executeRule(current, previous) {
if (current.state == 7 && previous.state != 6) {
current.setAbortAction(true);
gs.addErrorMessage('Must resolve before closing');
}
})(current, previous);// Auto-populate fields
(function executeRule(current, previous) {
if (current.isNewRecord()) {
current.setValue('caller_id', gs.getUserID());
current.setValue('opened_by', gs.getUserID());
}
})(current, previous);current.update()// 不满足条件时阻止更新
(function executeRule(current, previous) {
if (current.state == 7 && previous.state != 6) {
current.setAbortAction(true);
gs.addErrorMessage('必须先解决才能关闭');
}
})(current, previous);// 自动填充字段
(function executeRule(current, previous) {
if (current.isNewRecord()) {
current.setValue('caller_id', gs.getUserID());
current.setValue('opened_by', gs.getUserID());
}
})(current, previous);current.update()// Create child record when priority is P1
(function executeRule(current, previous) {
if (current.priority.changesTo(1)) {
var task = new GlideRecord('task');
task.initialize();
task.setValue('short_description', 'P1 Follow-up: ' + current.number);
task.setValue('parent', current.sys_id);
task.insert();
}
})(current, previous);// Update parent record
(function executeRule(current, previous) {
var parent = new GlideRecord('problem');
if (parent.get(current.problem_id)) {
parent.setValue('related_incidents', parent.related_incidents + 1);
parent.update();
}
})(current, previous);// 当优先级变为P1时创建子记录
(function executeRule(current, previous) {
if (current.priority.changesTo(1)) {
var task = new GlideRecord('task');
task.initialize();
task.setValue('short_description', 'P1 跟进: ' + current.number);
task.setValue('parent', current.sys_id);
task.insert();
}
})(current, previous);// 更新父记录
(function executeRule(current, previous) {
var parent = new GlideRecord('problem');
if (parent.get(current.problem_id)) {
parent.setValue('related_incidents', parent.related_incidents + 1);
parent.update();
}
})(current, previous);// External integration
(function executeRule(current, previous) {
var integrator = new ExternalSystemIntegration();
integrator.syncIncident(current.sys_id);
})(current, previous);// Send custom notification
(function executeRule(current, previous) {
gs.eventQueue('incident.priority.high', current, current.assigned_to, gs.getUserID());
})(current, previous);// 外部系统集成
(function executeRule(current, previous) {
var integrator = new ExternalSystemIntegration();
integrator.syncIncident(current.sys_id);
})(current, previous);// 发送自定义通知
(function executeRule(current, previous) {
gs.eventQueue('incident.priority.high', current, current.assigned_to, gs.getUserID());
})(current, previous);current.isNewRecord() // True if insert
current.isValidRecord() // True if record exists
current.getValue('field') // Get field value
current.setValue('field', val) // Set field value
current.setAbortAction(true) // Cancel the operation
current.operation() // 'insert', 'update', 'delete'
current.isActionAborted() // Check if abortedcurrent.isNewRecord() // 插入操作时返回True
current.isValidRecord() // 记录存在时返回True
current.getValue('field') // 获取字段值
current.setValue('field', val) // 设置字段值
current.setAbortAction(true) // 取消当前操作
current.operation() // 返回操作类型:'insert', 'update', 'delete'
current.isActionAborted() // 检查操作是否已取消current.priority.changes() // Field changed (any value)
current.priority.changesTo(1) // Changed TO this value
current.priority.changesFrom(3) // Changed FROM this value
current.priority.nil() // Field is emptycurrent.priority.changes() // 字段发生变更(任意值)
current.priority.changesTo(1) // 字段变更为指定值
current.priority.changesFrom(3) // 字段从指定值变更
current.priority.nil() // 字段为空// Check if field was modified
if (current.state != previous.state) {
gs.info('State changed from ' + previous.state + ' to ' + current.state);
}
// Check specific change
if (current.assigned_to.changes() && !previous.assigned_to.nil()) {
gs.info('Reassignment occurred');
}// 检查字段是否被修改
if (current.state != previous.state) {
gs.info('状态从 ' + previous.state + ' 变更为 ' + current.state);
}
// 检查特定变更场景
if (current.assigned_to.changes() && !previous.assigned_to.nil()) {
gs.info('发生了重新分配');
}| Condition | Meaning |
|---|---|
| Only active records |
| Only on insert |
| Only when priority changes |
| Only for admins |
| Only when unassigned |
| 条件 | 含义 |
|---|---|
| 仅针对活跃记录 |
| 仅在插入操作时执行 |
| 仅在优先级变更时执行 |
| 仅管理员可触发 |
| 仅针对未分配组的记录 |
// Before Insert/Update
if (current.assignment_group.changes() && !current.assignment_group.nil()) {
var members = new GroupMembers(current.assignment_group);
current.assigned_to = members.getNextAvailable();
}// 插入/更新前执行
if (current.assignment_group.changes() && !current.assignment_group.nil()) {
var members = new GroupMembers(current.assignment_group);
current.assigned_to = members.getNextAvailable();
}// After Update
if (current.state.changesTo(7)) { // Closed
var tasks = new GlideRecord('task');
tasks.addQuery('parent', current.sys_id);
tasks.addQuery('state', '!=', 7);
tasks.query();
while (tasks.next()) {
tasks.setValue('state', 7);
tasks.update();
}
}// 更新后执行
if (current.state.changesTo(7)) { // 已关闭
var tasks = new GlideRecord('task');
tasks.addQuery('parent', current.sys_id);
tasks.addQuery('state', '!=', 7);
tasks.query();
while (tasks.next()) {
tasks.setValue('state', 7);
tasks.update();
}
}