在宜搭中,要获取“发起者所在部门的全体成员”,通常有两种场景:
流程设计:在审批节点中,需要让该部门所有人审批(会签)或任意一人审批。
数据/业务逻辑:需要在表单中显示这些人,或者通过集成自动化给这些人发消息、写入数据。
由于宜搭的表单字段属性中没有直接名为“发起者部门全员”的动态选项,你需要通过以下几种方式实现:
方法一:在流程设计中设置(最常用,无需代码)
如果你只是希望审批节点由发起者部门的所有人来处理(例如:部门会签)。
进入 流程设计 页面。
点击某个 审批节点。
在右侧面板找到 “审批人” 设置。
选择 “动态计算” (或“指定成员”下的公式/脚本模式)。
在成员选择器中,按以下逻辑配置:
选择范围:“发起人的部门” (系统通常有预设变量
发起人.部门)。具体人员:选择 “部门全体成员”。
注意:部分版本界面可能显示为:选择“角色/部门” -> 选择“部门” -> 值选择公式
{{startUserId.department}}(具体变量名视版本而定,通常在选人控件的“动态数据”里能找到“发起人所属部门”)。会签设置:如果是要所有人审批,确保下方审批方式选择 “会签” (需所有审批人同意)。
方法二:使用“集成&自动化”获取名单(推荐,灵活度高)
如果你需要在流程中给这些人发消息,或者将名单记录到子表单中,必须使用集成自动化。
步骤 1:创建自动化流
进入应用管理 -> 集成&自动化。
点击 “新建自动化流”。
触发器:选择 “当流程实例启动时” (或“当节点审批通过时”,视需求而定)。
选择对应的表单和流程。
步骤 2:获取发起者部门 ID
添加动作:“执行代码” (JavaScript) 或 “数据查询”。
更简单的方式是利用系统变量:触发器输出中通常包含
startUserId(发起者ID)。添加动作:“钉钉连接器” -> “获取用户详情”。
输入用户ID:选择触发器的
startUserId。输出:你会得到
deptIdList(部门ID列表,因为一个人可能在多个部门,通常取第一个deptIdList[0])。
步骤 3:获取部门所有成员
添加动作:“钉钉连接器” -> “获取部门成员” (Get Department User List)。
部门ID:填入上一步获取的
deptId。包含子部门:根据需求选是/否。
获取结果:该动作会返回一个 数组 (List),包含该部门所有用户的
userId,name,mobile等。
步骤 4:使用名单 (分支场景)
拿到这个数组后,你可以做以下操作:
场景 A:群发消息
添加动作:“钉钉连接器” -> “发送工作通知”。
收件人:选择上一步输出的 用户ID 数组。
内容:编写通知模板。
场景 B:写入表单子表
添加动作:“新增/更新数据” (当前表单或其他表单)。
如果是写入子表单:宜搭支持将数组直接映射到子表单字段(需开启“循环新增”或类似选项,将数组中的
name映射到子表的姓名列,userId映射到工号列)。注意:如果自动化不支持直接循环写入子表,可能需要加一个 “循环” 节点,遍历数组,每次循环执行一次“新增子表数据”。
场景 C:作为变量传递给后续流程
目前宜搭流程变量对“人员数组”的支持有限。如果需要动态设置后续节点的审批人,建议在自动化中调用 “更新流程节点审批人” 的接口(如果支持),或者直接在流程设计的“动态计算”中用公式解决(见方法三)。
方法三:使用公式(仅限部分场景)
在宜搭的 公式编辑器 中,可以使用 GETDEPTUSER 相关函数(取决于你的宜搭版本是否开放了此高级函数)。
在表单中创建一个 多行文本 或 成员选择 组件(设为隐藏)。
设置该组件的 默认值公式。
尝试使用公式:
// 伪代码,具体函数名需在公式面板查找 // 获取发起人的部门ID VAR deptId = DEPTID(STARTUSER()); // 获取该部门所有用户 GETDEPARTMENTUSERS(deptId)
现状提示:目前宜搭原生公式对“获取部门全员并返回数组”的支持并不完美,往往只能返回人数或第一个用户。因此,强烈建议使用方法二(集成自动化)。
方法四:前端 JS 开发(高级,实时性最好)
如果你需要在用户打开表单的瞬间,就在页面上看到一个列表(例如“本部门同事确认”子表),可以使用自定义页面或表单 JS。
进入表单设计 -> 页面设置 -> 高级设置 -> 表单加载后 (didMount)。
编写 JavaScript 代码:
export function didMount() { // 1. 获取当前登录用户信息 this.utils.getUserInfo().then(res => { const userId = res.userId; // 2. 调用宜搭内置 API 或 自定义连接器 获取部门ID // 注意:宜搭前端没有直接获取部门全员的公开 API,通常需要调用后端连接器 // 这里建议触发一个“远程请求”动作,该动作指向一个集成自动化 this.$('button_get_dept_users').click(); // 触发一个隐藏的按钮,该按钮绑定了集成自动化 }); }更优解:创建一个 自定义连接器 (在集成自动化中暴露一个接口),前端通过
this.utils.request调用该接口,传入startUserId,接口返回部门全员列表,然后前端循环this.$('subTable').addRow(...)添加到子表中。
总结建议
| 需求场景 | 推荐方案 | 难度 |
|---|---|---|
| 审批节点需要部门全员会签 | 流程设计 -> 动态计算审批人 (选择发起人部门->全员) | ⭐ (最简单) |
| 流程开始后给部门全员发消息 | 集成&自动化 (获取用户详情 -> 获取部门成员 -> 发送通知) | ⭐⭐ |
| 在表单子表中列出部门全员 | 集成&自动化 (获取成员 -> 循环新增子表数据) | ⭐⭐⭐ |
| 前端页面实时展示并交互 | 自定义页面/JS + 自定义连接器 | ⭐⭐⭐⭐ |
核心提示:
宜搭本身没有“一键获取部门全员”的现成字段。“集成&自动化” 是解决此类复杂组织架构数据获取的标准路径。利用钉钉开放平台提供的标准接口(获取用户详情、获取部门成员)是最稳定可靠的方法。