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

如何自动填充目录项中Manager字段对应下属用户至Members列表收集器?

实现经理下属自动填充到列表收集器的方案

实现步骤

  1. 给Manager字段绑定onChange客户端脚本,触发下属查询逻辑
  2. 创建可客户端调用的Script Include,负责从服务器端查询指定经理的下属
  3. 将查询到的用户ID列表赋值给Members列表收集器

客户端脚本(onChange,针对Manager变量)

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue === '') {
        return;
    }

    // 先清空现有成员列表
    g_form.setValue('members', '');

    var ajaxCall = new GlideAjax('ManagerSubordinatesAjax');
    ajaxCall.addParam('sysparm_name', 'getSubordinates');
    ajaxCall.addParam('sysparm_manager_id', newValue);
    
    ajaxCall.getXMLAnswer(function(response) {
        if (response) {
            var subordinateIds = JSON.parse(response);
            // 将下属ID列表赋值给Members收集器
            g_form.setValue('members', subordinateIds.join(','));
        }
    });
}

服务器端脚本(Script Include,名称:ManagerSubordinatesAjax)

需勾选Client callable选项,允许客户端调用:

var ManagerSubordinatesAjax = Class.create();
ManagerSubordinatesAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getSubordinates: function() {
        var managerSysId = this.getParameter('sysparm_manager_id');
        var subordinateIds = [];

        // 查询该经理的所有直接下属
        var userGr = new GlideRecord('sys_user');
        userGr.addQuery('manager', managerSysId);
        userGr.query();
        
        while (userGr.next()) {
            subordinateIds.push(userGr.getValue('sys_id'));
            // 如果需要获取间接下属(下属的下属),取消下面注释并启用递归方法
            // subordinateIds = subordinateIds.concat(this.getIndirectSubordinates(userGr.getValue('sys_id')));
        }

        return JSON.stringify(subordinateIds);
    },

    // 可选:递归获取间接下属的辅助方法
    getIndirectSubordinates: function(userId) {
        var indirectIds = [];
        var userGr = new GlideRecord('sys_user');
        userGr.addQuery('manager', userId);
        userGr.query();
        
        while (userGr.next()) {
            indirectIds.push(userGr.getValue('sys_id'));
            indirectIds = indirectIds.concat(this.getIndirectSubordinates(userGr.getValue('sys_id')));
        }
        return indirectIds;
    },

    type: 'ManagerSubordinatesAjax'
});

关键注意事项

  • 字段名匹配:确保脚本中的members和manager与你目录项里的变量名称完全一致
  • 权限配置:执行脚本的用户需要有sys_user表的读取权限,否则无法查询下属数据
  • 递归开关:根据业务需求选择是否启用间接下属查询,默认只获取直接下属
  • 空值处理:当Manager字段被清空时,脚本会自动清空Members列表收集器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:50:44