操作人
工作任务的操作人在流程流转过程中动态设置,其依据为节点配置中的操作人规则。
概览
如下图所示,操作人规则包含条件、人员、状态、优先级信息。支持规则停用、启用,支批量更新优先级。
条件
用于确定此规则是否生效,具体功能请查看条件生成器。
注意
设置条件后,需要点击“修改”按钮保存设置。
人员
用于指定人员。引擎提供了丰富的人员选择方式,下面分别介绍。
未指定
不指定操作人,用于办理人不确定的特殊场景。此时无法由用户办理,只能通过引擎 API 办理。
提示
特别地,不指定操作人的节点可以当作一个“等待”节点,等到特定条件满足后再使用 API 推进工作。
指定人员
设置具体的人员作为操作人。
指定角色
拥有指定系统角色的人员作为操作人。
注意
拥有指定角色的人员数量不能过多,否则会被截断。
指定岗位
按岗位来选择操作人。由于不同组织机构(部门)下可能存在相同岗位,因此使用岗位时必须指定组织机构,以缩小数据范围。
岗位限定模式
限定岗位的组织信息可以手动指定,也可以来自表单;范围可以为本部门、含上级、含下级。
提示
为了满足业务需要,这里提供了“部门”和“组织”选项。组织包含中心、部门、组等类型,而“部门”则特指部门。
人员部门的获取逻辑为:从其所在组织开始,沿着组织机构树向上查找,直到发现类型为“部门”的组织为止。
指定组织机构
根据组织机构来选择操作人。
提示
组织机构的选择模式与上一节岗位限定模式中的介绍相同。
表单字段
可以以表单中的人员,或表单中的岗位对应的人员作为操作人。
提示
通过指定“人员关系”,可以使用表单人员的上、下级作为操作人。
提示
当使用表单中的岗位字段时,同样需要指定组织信息。
流程发起人
可以指定流程发起人作为本节点操作人。
提示
通过指定“人员关系”,可以使用人员的上、下级作为操作人。
节点操作人
还可以指定其它节点的实际操作人作为本节点操作人。
提示
通过指定“人员关系”,可以使用人员的上、下级作为操作人。
自定义接口
当以上方式都不能满足需要时,开发人员可以通过实现自定义服务指定节点操作人, 服务类必须实现 WorkflowUserSelector
接口。
示例
@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 对象提供以下属性:
名称 | 类型 | 说明 |
---|---|---|
bizId | String | 业务标识 |
workflowCode | String | 流程code |
version | Number | 流程版本号 |
nodeCode | String | 节点code |
createUser | String | 发起人id |
currentUser | SimpleUserVo | 当前操作人 |
然后将节点的自定义接口配置为服务名:nodeUserSelectorExp
。
.NET 差异
.NET 中对应接口为 IWorkflowUserSelector
, 实现类需要添加 DisplayName
特性声明服务名。示例如下。
[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"];
}
}
优先级
必须指定操作人规则的优先级,数字越小优先级越高。引擎按照优先级从高到低依次执行规则,获得操作人。
特别地,如果规则的优先级相同,则会将它们视作一组。组内的规则会全部执行,并且会合并执行结果, 即操作人可以来自同组的多条规则。
提示
对于办理人员,从一组规则成功获得操作人信息后,则不再执行后续规则组。 而抄送人员则略有不同,引擎会执行全部规则组。