Skip to content

操作人

工作任务的操作人在流程流转过程中动态设置,其依据为节点配置中的操作人规则。

概览

如下图所示,操作人规则包含条件、人员、状态、优先级信息。支持规则停用、启用,支批量更新优先级。

operator

条件

用于确定此规则是否生效,具体功能请查看条件生成器

注意

设置条件后,需要点击“修改”按钮保存设置。

人员

用于指定人员。引擎提供了丰富的人员选择方式,下面分别介绍。

未指定

不指定操作人,用于办理人不确定的特殊场景。此时无法由用户办理,只能通过引擎 API 办理。

提示

特别地,不指定操作人的节点可以当作一个“等待”节点,等到特定条件满足后再使用 API 推进工作。

指定人员

设置具体的人员作为操作人。

指定角色

拥有指定系统角色的人员作为操作人。

注意

拥有指定角色的人员数量不能过多,否则会被截断。

指定岗位

按岗位来选择操作人。由于不同组织机构(部门)下可能存在相同岗位,因此使用岗位时必须指定组织机构,以缩小数据范围。

station

岗位限定模式

限定岗位的组织信息可以手动指定,也可以来自表单;范围可以为本部门、含上级、含下级。

sta-dept

提示

为了满足业务需要,这里提供了“部门”和“组织”选项。组织包含中心、部门、组等类型,而“部门”则特指部门。

人员部门的获取逻辑为:从其所在组织开始,沿着组织机构树向上查找,直到发现类型为“部门”的组织为止。

指定组织机构

根据组织机构来选择操作人。

dept

提示

组织机构的选择模式与上一节岗位限定模式中的介绍相同。

表单字段

可以以表单中的人员,或表单中的岗位对应的人员作为操作人。

form

提示

通过指定“人员关系”,可以使用表单人员的上、下级作为操作人。

提示

当使用表单中的岗位字段时,同样需要指定组织信息。

流程发起人

可以指定流程发起人作为本节点操作人。

creator

提示

通过指定“人员关系”,可以使用人员的上、下级作为操作人。

节点操作人

还可以指定其它节点的实际操作人作为本节点操作人。

operator

提示

通过指定“人员关系”,可以使用人员的上、下级作为操作人。

自定义接口

当以上方式都不能满足需要时,开发人员可以通过实现自定义服务指定节点操作人, 服务类必须实现 WorkflowUserSelector 接口。

示例

java
@Component
public class NodeUserSelectorExp implements WorkflowUserSelector {
    // 注入服务类
    // @Autowired FooService service;

    /**
     * 选择人员
     *
     * @param context 上下文对象
     * @return 人员编号列表
     */
    @Override
    public List<String> select(WorkflowUserSelectContext context) {
        // 加载主数据
        // Foo data = service.getById(id);
        // 业务逻辑
        if (context.getVersion() == 2) {
            return Collections.singletonList("992371847343374338");
        }

        return Collections.singletonList("1555023051462033409");
    }
}

WorkflowUserSelectContext

context 对象提供以下属性:

名称类型说明
bizIdString业务标识
workflowCodeString流程code
versionNumber流程版本号
nodeCodeString节点code
createUserString发起人id
currentUserSimpleUserVo当前操作人

然后将节点的自定义接口配置为服务名:nodeUserSelectorExp

.NET 差异

.NET 中对应接口为 IWorkflowUserSelector, 实现类需要添加 DisplayName 特性声明服务名。示例如下。

csharp
[Service(typeof(IWorkflowUserSelector))]
[DisplayName("testUserChose")]
public class TestWfUserChoser(ILogger<TestWfUserChoser> logger) : IWorkflowUserSelector
{
  public List<string> Select(WorkflowUserSelectContext context)
  {
    logger.LogInformation("进入选择人员方法,bizId:{}", context.BizId);
    return ["1014355886581219328", "1061293320324513792"];
  }
}

优先级

必须指定操作人规则的优先级,数字越小优先级越高。引擎按照优先级从高到低依次执行规则,获得操作人。

特别地,如果规则的优先级相同,则会将它们视作一组。组内的规则会全部执行,并且会合并执行结果, 即操作人可以来自同组的多条规则。

提示

对于办理人员,从一组规则成功获得操作人信息后,则不再执行后续规则组。 而抄送人员则略有不同,引擎会执行全部规则组