You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AD account expires映射ServiceNow sys_user表日期字段脚本问题

AD accountExpires 转 ServiceNow u_account_expiration 脚本修正

问题分析

现有脚本存在以下关键问题导致未达预期:

  • 仅通过字符串首字符判断有效值,遗漏了AD accountExpires 字段的其他合法非永不过期值,且未处理AD官方定义的另一个永不过期标记值 9223372036854775807
  • 未先校验source.u_accountexpires的数值有效性,若字段为null或非数值类型会直接引发转换错误
  • 为空字段赋值时使用空字符串,不符合ServiceNow日期字段的规范操作逻辑

修正后的OnBefore Transform脚本

// 更新ServiceNow账号过期时间字段
var adExpireValue = source.u_accountexpires;
// AD accountExpires的两个官方永不过期标记值
var neverExpireValues = [0, 9223372036854775807];

// 校验源字段为有效数值且不属于永不过期情况
if (adExpireValue && !neverExpireValues.includes(parseInt(adExpireValue))) {
    var dtUtil = new DateTimeUtils();
    try {
        // 将AD的64位整数时间转换为GlideDateTime对象
        var gDate = dtUtil.int8ToGlideDateTime(adExpireValue);
        // AD的accountExpires存储的是到期日次日0点,减1天得到实际到期日期
        gDate.addDaysLocalTime(-1);
        target.u_account_expiration = gDate;
    } catch (e) {
        // 转换失败时清空目标字段
        target.u_account_expiration.setNull();
    }
} else {
    // 永不过期或无有效值时,清空目标字段
    target.u_account_expiration.setNull();
}

关键修改说明

  • 完善有效值判断:明确AD官方定义的两个永不过期标记,先校验源字段是否为有效数值再执行转换
  • 增加异常处理:用try-catch包裹转换逻辑,避免非法值导致的脚本中断
  • 规范空值处理:使用ServiceNow官方推荐的setNull()方法清空日期字段,替代空字符串赋值
  • 严谨性提升:先判断源字段存在性,避免null值引发的类型转换错误

内容的提问来源于stack exchange,提问作者Ruchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:31:34