宜搭如何解析发起者所在部门的全体成员

阿里云服务器

在宜搭中,要获取“发起者所在部门的全体成员”,通常有两种场景:

  1. 流程设计:在审批节点中,需要让该部门所有人审批(会签)或任意一人审批。

  2. 数据/业务逻辑:需要在表单中显示这些人,或者通过集成自动化给这些人发消息、写入数据。

由于宜搭的表单字段属性中没有直接名为“发起者部门全员”的动态选项,你需要通过以下几种方式实现:


方法一:在流程设计中设置(最常用,无需代码)

如果你只是希望审批节点由发起者部门的所有人来处理(例如:部门会签)。

  1. 进入 流程设计 页面。

  2. 点击某个 审批节点

  3. 在右侧面板找到 “审批人” 设置。

  4. 选择 “动态计算” (或“指定成员”下的公式/脚本模式)。

  5. 在成员选择器中,按以下逻辑配置:

    • 选择范围:“发起人的部门” (系统通常有预设变量 发起人.部门)。

    • 具体人员:选择 “部门全体成员”

    • 注意:部分版本界面可能显示为:选择“角色/部门” -> 选择“部门” -> 值选择公式 {{startUserId.department}} (具体变量名视版本而定,通常在选人控件的“动态数据”里能找到“发起人所属部门”)。

  6. 会签设置:如果是要所有人审批,确保下方审批方式选择 “会签” (需所有审批人同意)。


方法二:使用“集成&自动化”获取名单(推荐,灵活度高)

如果你需要在流程中给这些人发消息,或者将名单记录到子表单中,必须使用集成自动化。

步骤 1:创建自动化流

  1. 进入应用管理 -> 集成&自动化

  2. 点击 “新建自动化流”

  3. 触发器:选择 “当流程实例启动时” (或“当节点审批通过时”,视需求而定)。

  4. 选择对应的表单和流程。

步骤 2:获取发起者部门 ID

  1. 添加动作:“执行代码” (JavaScript) 或 “数据查询”

  2. 更简单的方式是利用系统变量:触发器输出中通常包含 startUserId (发起者ID)。

  3. 添加动作:“钉钉连接器” -> “获取用户详情”

    • 输入用户ID:选择触发器的 startUserId

    • 输出:你会得到 deptIdList (部门ID列表,因为一个人可能在多个部门,通常取第一个 deptIdList[0])。

步骤 3:获取部门所有成员

  1. 添加动作:“钉钉连接器” -> “获取部门成员” (Get Department User List)。

    • 部门ID:填入上一步获取的 deptId

    • 包含子部门:根据需求选是/否。

    • 获取结果:该动作会返回一个 数组 (List),包含该部门所有用户的 userId, name, mobile 等。

步骤 4:使用名单 (分支场景)

拿到这个数组后,你可以做以下操作:

  • 场景 A:群发消息

    • 添加动作:“钉钉连接器” -> “发送工作通知”

    • 收件人:选择上一步输出的 用户ID 数组

    • 内容:编写通知模板。

  • 场景 B:写入表单子表

    • 添加动作:“新增/更新数据” (当前表单或其他表单)。

    • 如果是写入子表单:宜搭支持将数组直接映射到子表单字段(需开启“循环新增”或类似选项,将数组中的 name 映射到子表的 姓名 列,userId 映射到 工号 列)。

    • 注意:如果自动化不支持直接循环写入子表,可能需要加一个 “循环” 节点,遍历数组,每次循环执行一次“新增子表数据”。

  • 场景 C:作为变量传递给后续流程

    • 目前宜搭流程变量对“人员数组”的支持有限。如果需要动态设置后续节点的审批人,建议在自动化中调用 “更新流程节点审批人” 的接口(如果支持),或者直接在流程设计的“动态计算”中用公式解决(见方法三)。


方法三:使用公式(仅限部分场景)

在宜搭的 公式编辑器 中,可以使用 GETDEPTUSER 相关函数(取决于你的宜搭版本是否开放了此高级函数)。

  1. 在表单中创建一个 多行文本成员选择 组件(设为隐藏)。

  2. 设置该组件的 默认值公式

  3. 尝试使用公式:

    // 伪代码,具体函数名需在公式面板查找
    // 获取发起人的部门ID
    VAR deptId = DEPTID(STARTUSER()); 
    // 获取该部门所有用户
    GETDEPARTMENTUSERS(deptId)

    现状提示:目前宜搭原生公式对“获取部门全员并返回数组”的支持并不完美,往往只能返回人数或第一个用户。因此,强烈建议使用方法二(集成自动化)


方法四:前端 JS 开发(高级,实时性最好)

如果你需要在用户打开表单的瞬间,就在页面上看到一个列表(例如“本部门同事确认”子表),可以使用自定义页面或表单 JS。

  1. 进入表单设计 -> 页面设置 -> 高级设置 -> 表单加载后 (didMount)

  2. 编写 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 + 自定义连接器⭐⭐⭐⭐

核心提示
宜搭本身没有“一键获取部门全员”的现成字段。“集成&自动化” 是解决此类复杂组织架构数据获取的标准路径。利用钉钉开放平台提供的标准接口(获取用户详情、获取部门成员)是最稳定可靠的方法。