用途
该清单用于审查 ServiceNow 服务端代码,包括 Business Rules、Script Includes、Scheduled Jobs 等。它把审查重点归纳为若干类别,并给出每类问题的错误示例与正确写法,帮助审查者系统性地发现并标注问题。
主要能力
1. ES5 合规性(CRITICAL)
清单要求检查并标记所有 ES6+ 语法为严重错误,包括:
const x = 5;应改用varlet items = [];应改用var- 箭头函数
() => {}应改用function() {} - 模板字符串
`template ${var}`应改用'string ' + var for (x of arr)应改用传统 for 循环- 解构赋值
{a, b} = obj应改用obj.a, obj.b
2. 安全问题
- SQL/GlideRecord 注入:避免将用户输入直接放入查询,如
gr.addEncodedQuery(userInput);应验证并清理输入,例如使用new GlideSysAttachment().cleanFileName(userInput)。 - 跨站脚本(XSS):避免未转义输出,如
gs.addInfoMessage(userInput);应使用GlideStringUtil.escapeHTML(userInput)转义 HTML。 - 访问控制:查询记录后应检查权限,例如
if (gr.get(userProvidedSysId) && gr.canRead())。 - 敏感数据泄露:禁止在日志中记录密码、API Key 等凭据,只记录非敏感信息如用户名。
3. 性能问题
- 循环内查询(N+1):避免在循环中逐条
gr.get(),应使用单次查询配合addQuery("sys_id", "IN", userIds.join(","))。 - 缺少 setLimit():查询前应设置
gr.setLimit(1000),避免返回海量记录。 - 不必要的查询:仅检查单条记录是否存在时,应使用
gr.get("number", incNumber)而非查询后判断getRowCount()。 - GlideRecord 与 GlideAggregate:计数应使用
GlideAggregate的addAggregate("COUNT"),而非循环累加。
4. 代码质量问题
- 硬编码 sys_id:避免直接写死 sys_id,应使用系统属性
gs.getProperty()或按名称查询获取。 - 魔法数字/字符串:使用命名常量,如
var STATE_RESOLVED = 6。 - 缺少错误处理:调用外部请求后应检查状态码并 try/catch,记录错误并返回。
- 日志规范:日志应包含上下文,如脚本名、记录编号、用户名。
5. Business Rule 特有事项
- 递归预防:在 Before 规则中调用
current.update()可能导致无限循环,应使用current.setWorkflow(false)与current.setWorkflow(true)控制。 - 规则类型选择:Before 规则应保持快速,重量级操作(集成、重处理)应移至 Async 规则。
使用方式
按清单逐项检查代码,并按照指定的输出格式组织反馈:
- Code Review Summary
- Critical Issues (Must Fix):如 [SECURITY]、[ES5]
- Performance Issues (Should Fix):如 [PERF]
- Code Quality (Nice to Have):如 [QUALITY]
- Positive Observations:指出良好实践
严重级别分为:
- CRITICAL:部署前必须修复,如安全漏洞、ES6 语法
- HIGH:应当修复,如性能问题、缺少错误处理
- MEDIUM:建议修复,如代码质量、硬编码值
- LOW:可考虑修复,如风格、细微改进
适用场景
适用于对 ServiceNow 平台服务端脚本进行人工或自动化代码审查,尤其适合团队在部署前统一检查安全、性能与合规问题。
限制
该资料为审查清单,未提供自动化工具、安装命令、收费或价格信息,也未说明具体平台版本兼容范围;实际使用需结合具体代码环境判断。