参与者
一个公司的组织模型中,参与者是可以区分出类型的,所有参与者可以按照类型分成若干类。如:机构类型、员工类型等。并且,参与者之间存在"父子"关系。每一个参与者可以包含多个不同类型的子参与者,同时也可以从属于多个不同类型的父参与者。比如:员工类型的参与者就是机构类型参与者的子参与者。在多种参与者中,必定存在一个叶子参与者(基本参与者),叶子参与者不再包含其他的子参与者。我们的参与者类型目前支持如下几种类型:
参与者类型 | 参与者编码 |
---|---|
员工 | emp |
角色 | role |
机构 | org |
工作组 | group |
注:员工(emp)类型的参与者为叶子参与者即基本参与者。 员工类型的参与者是机构类型参与者、角色类型参与者和工作组类型参与者的子参与者。
# 1 指定参与者
在参与者配置tab页进行设置,也可以在BFP中的业务配置进行设置。
# 1.1 流程启动者
人工活动图元默认的参与者就是流程启动者,就是发起流程的人。例如:张三是某个流程的发起人,某个环节设置的参与者是流程启动者,则流程在流转到这个活动时,张三就是这个活动参与者。
注:开始活动后的第一个人工活动的参与者只能设置成为流程启动者,因为发起流程时会直接完成第一个人工活动。
# 1.2 指定参与者
指定参与者可以直接指定员工、角色、工作组和机构这几种参与者类型。可以指定多个参与者(多种类型)。
# 1.2.1 员工
参与者为员工时,就是指组织机构中的员工。
# 1.2.2 角色
参与者为角色时,这个角色下的所有员工都能收到待办任务,只要一个员工完成了这个任务则此环节完成。
# 1.2.3 机构
参与者为机构时,这个机构下的所有员工都能收到待办任务,只要一个员工完成了这个任务则此环节完成。
# 1.2.4 工作组
参与者为工作组时,这个工作组下的所有员工都能收到待办任务,只要一个员工完成了这个任务则此环节完成。
# 1.3 复合参与者规则
复合参与者规则是通过机构+岗位和机构+角色共同来决定最终参与者的一种方式,最终的参与者会取两者员工的交集。
# 1.3.1 机构+岗位
此类规则是分别选择部门和岗位来确定参与者的,其中部门可以选择指定机构、发起人所在机构或者上一环节处理人所在机构。
# 1.3.2 机构+角色
此类规则是分别选择部门和角色来确定参与者的,其中部门可以选择指定机构、发起人所在机构或者上一环节处理人所在机构。
# 2 业务参与者规则
业务参与者规则分为平台提供的上一环节处理人默认参与者规则和流程发起人默认参与者规则,以及流程定义中的业务规则中的参与者规则,以及逻辑流。对这些规则如下分别介绍。
# 2.1 内置参与者规则
平台默认提供了两种规则,分别为上一环节处理人默认参与者规则和流程发起人默认参与者规则
这里对默认规则中的名词做一个解释
分管领导:机构指定的分管领导对应的员工
直属上级:员工所属机构的机构负责人对应的员工
一级部门负责人:员工所属机构的一级机构部门负责人对应的员工
# 2.1.1 上一环节处理人默认参与者规则
规则 | 描述 | 规则说明 |
---|---|---|
上一环节处理人分管领导 | 上一环节处理人所属机构的分管领导 | 处理人所属机构不存在或者分管领导不存在抛出异常 |
上一环节处理人所在一级部门负责人 | 上一环节处理人的所在一级部门的负责人 | 一级部门不存在或者一级部门负责人不存在抛出异常 |
上一环节处理人 | 上一环节的处理人 | 处理人不存在抛出异常 |
上一环节处理人直属上级 | 上一环节处理人所在机构的负责人 | 处理人所属机构不存在或者直属上级不存在抛出异常 |
上一环节处理人所属机构 | 该规则指上一环节处理人所属机构下的所有员工 | 处理人所属机构不存在抛出异常 |
上一环节处理人上级部门负责人 | 上一环节处理人所在部门的上级部门的负责人 | 上级部门不存在时返回当前部门,上级部门和当前部门都不存在或者当前部门和上级部门负责人不存在抛出异常 |
上一环节处理人上级部门 | 上一环节处理人所在部门的上级部门下的员工 | 上级部门不存在时返回当前部门,上级部门和当前部门都不存在抛出异常 |
上一环节处理人所在一级部门 | 上一环节处理人所在部门的一级部门下的员工 | 一级部门不存在抛出异常 |
# 2.1.2 流程发起人默认参与者规则
规则 | 描述 | 规则说明 |
---|---|---|
流程发起人上级部门 | 流程发起人所在部门的上级部门下的员工 | 流程发起人上级部门不存在抛出异常 |
流程发起人所在一级部门 | 流程发起人所在部门的一级部门下的员工 | 流程发起人一级部门不存在抛出异常 |
流程发起人分管领导 | 流程发起人所在机构的分管领导 | 流程发起人不存在或者发起人所属部门不存在或者发起人部门分管领导不存在抛出异常 |
流程发起人 | 流程开始时的发起人 | |
流程发起人所在部门 | 流程发起人所在部门下的员工 | 流程发起人不存在或者发起人部门不存在抛出异常 |
流程发起人直属领导 | 流程发起人所在机构的负责人 | 流程发起人不存在或者发起人部门不存在或者发起人直属领导不存在抛出异常 |
流程发起人所在一级部门负责人 | 流程发起人所在部门的一级部门的负责人 | 流程发起人一级部门不存在或者一级部门负责人不存在抛出异常 |
流程发起人上级部门负责人 | 流程发起人所在部门的上级部门的负责人 | 流程发起人上级部门不存在或者上级部门负责人不存在抛出异常 |
# 2.2 参与者规则扩展
# 2.2.1 自定义参与者规则
如果默认提供的参与者规则不满足需求,可参考自定义参与者规则使用
注:编写完成后,需要打包放置在afcenter的lib下才能使用,并且如果是自己新创建的包,参考 spring.factories扩展机制,将该jar包进行自动装配来识别定义扩展实现,或者参考bfp中的com.primeton.gocom.bfp.framework.rule.logic.impl.DefaultCurrentParticipantFunctions类,将自定义类的全路径更改为这个路径后打包,放置在afcenter的lib下重启后也可使用。
# 2.2.2 逻辑流
使用逻辑流,用户可以根据相关数据和流程上下文信息进行自定义参与者获取逻辑。在IDE中新建一个逻辑流。开发获取参与者逻辑,完成后保存逻辑流即可。最后,在流程中配置业务参与者规则,选择逻辑流,然后保存即可(具体的逻辑流开发请参考服务设计)
创建的逻辑流入参如下图:
其中逻辑流的入参出参必须严格按照如下配置:
类型 | 名称 | 数据类型 |
---|---|---|
参数 | relativeData | Map |
参数 | processContext | ProcessContext |
返回值 | out | WFParticipant |
其中relativeData是流程的相关数据,processContext是流程实例基本信息,返回值是WFParticipant的数组。
注:使用逻辑流时只能使用当前应用下的逻辑流,否则不能使用!如果是微服务模式需要使用nacos。
其中WFParticipant 的类全名是com.eos.workflow.omservice.WFParticipant。
# 2.2.3 业务规则中的复合参与者规则
流程定义本身可以创建分支规则和复合参与者规则两种业务规则,在流程参与者配置处可以配置使用业务规则中的复合参与者规则。
流程定义属性配置页面新增复合参与者规则
一个公司的组织模型中,参与者是可以区分出类型的,所有参与者可以按照类型分成若干类。如:机构类型、员工类型等。并且,参与者之间存在"父子"关系。每一个参与者可以包含多个不同类型的子参与者,同时也可以从属于多个不同类型的父参与者。比如:员工类型的参与者就是机构类型参与者的子参与者。在多种参与者中,必定存在一个叶子参与者(基本参与者),叶子参与者不再包含其他的子参与者。
我们的参与者类型目前支持如下几种类型:
参与者类型 | 参与者编码 |
---|---|
员工 | emp |
角色 | role |
机构 | org |
工作组 | group |
注:员工(emp)类型的参与者为叶子参与者即基本参与者。 员工类型的参与者是机构类型参与者、角色类型参与者和工作组类型参与者的子参与者。
通过参与者规则可以结合业务指定活动的参与者
在复合参与者规则中,当左值和右值满足运算符关系时该规则生效
# 配置
在流程属性,业务配置,业务规则页面;在业务规则区域点击新建复合参与者规则
# 左值
左值可选的类型为:内部变量、流程表单、当前操作人、流程发起人、指定用户、业务变量
内部变量:
- 流程定义:流程定义属性
- 流程实例:流程实例属性
- 活动定义:活动定义属性
- 活动实例:活动实例属性
流程表单
可选择流程绑定表单的属性
当前操作人
可选内容如下:
- 当前部门
- 当前部门领导
- 上级部门
- 上级部门领导
- 直属领导
- 分管VP
- 是否是分管VP
- 岗位列表
- 角色列表
流程发起人
同当前操作人
指定用户
可选内容同当前操作人,点击人员按钮可以指定表单相关字段
业务变量
使用流程配置-业务配置-业务变量
# 右值
可选类型
类型 | 说明 |
---|---|
常量 | 输入文本 |
业务字典 | 选择字典内容 |
实体 | 选择实体和字段 |
组织 | 可以选择机构和用户 |
角色 | 可以选择角色 |
岗位 | 可以选择岗位 |
表单 | 可以选择流程表单字段 |
变量 | 可以选择 流程属性-业务配置里的业务变量和流程变量 |
# 操作符
操作符 | 描述 |
---|---|
等于 | a == b |
大于 | a > b |
不小于 | a >= b |
小于 | a < b |
不大于 | a <= b |
不等于 | a != b |
在集合 | a in set |
不在集合 | a not in set |
包含 | set1.issuperset(set2) 或 set1 >= set2 |
不包含 | not set1.issuperset(set2) 或 set1 < set2 |
开始于 | string.startswith(prefix) 或 sequence[0] == element |
结束于 | string.endswith(suffix) 或 sequence[-1] == element |
为空 | len(collection) == 0 或 collection == [] |
不为空 | len(collection) > 0 或 collection != [] |
注意:(在集合)(不在集合)时右值需要多选,其他的右值都是单选(组织/角色/岗位/数据字典/实体)
# 使用
在人工活动,参与者-选择参与者-业务参与者规则中选择复合参与者即可
# 3 来自表单数据
表单数据中可以设置人员选择组件来设置参与者。
首先,先在表单设计页面,将对应参与者的属性字段的组件类型选择为人员选择组件
然后再高级设置中,勾选流程参与者配置
在活动中设置参与者为表单数据中的字段即可,流程实例将使用该字段的值作为参与者
如果字段绑定了选人控件
如果字段绑定了选机构控件
如果该字段未绑定选人控件或者机构控件,则用户自己选择
# 4 来自相关数据
先在活动的参与者配置处填写变量名称,后调用相关数据接口在业务中进行具体数据值的指定(参与者的指定)。
注:相关数据的key可以是任意值,相关数据的值可以是WFParticipant对象或者List
对象,也可以是String类型的字符串。
格式 | 描述 |
---|---|
字符串 | 必须按照如下格式编写: __participant:+参与者id+,+参与者名称+,+参与者类型 ,例如:"__participant:3,test,emp",多个参与者用 | 分隔。 |
WFParticipant对象 | {"id":"1","name":"test","typeCode":"emp"<br/>} |
List | [{"id":"1","name":"test","typeCode":"emp"},{"id":"2","name":"test2", "typeCode":"emp"}] |
参与者类型编码分为emp(员工),role(角色),org(机构)这三种,如果相关数据是WFParticipant对象或者List
# 5 活动执行者
可以设置后续活动的参与者为其他前序活动的执行者。
注: 如果指定的活动开启了多工作项,则本活动也必须开启多工作项配置。