# 参与者规则
# 流程启动者
在ide中,可以设置人工活动的参与者为流程启动者,创建新的人工活动节点时,默认是流程启动者。
### 参与者列表获取在ide中,可以设置人工活动的参与者为从参与者列表获取。
### 复杂参与者规则 - 分类介绍部门+岗位:此类规则是分别选择部门和岗位来确定参与者的,其中部门可以选择指定机构、发起人所在机构或者上一环节处理人所在机构。
**部门+角色**:此类规则是分别选择部门和角色来确定参与者的,其中部门可以选择指定机构、发起人所在机构或者上一环节处理人所在机构。 ide中配置复杂参与者规则# 业务参与者规则
* 分类介绍:上一环节处理人默认参与者规则: 此类规则是以上一环节处理人为参照对象,分别提供了上一环节处理人的相关规则人员。
规则 (上一环节处理人) | 描述 |
---|---|
上一环节处理人分管领导 | 上一环节处理人所在机构的分管领导 |
上一环节处理人所在一级部门负责人 | 上一环节处理人的所在一级部门的负责人 |
上一环节处理人 | 上一环节的处理人 |
上一环节处理人直属上级 | 上一环节处理人所在机构的负责人 |
上一环节处理人所属机构 | 该规则指上一环节处理人所属机构下的所有人员 |
上一环节处理人上级部门负责人 | 上一环节处理人所在部门的上级部门的负责人 |
上一环节处理人上级部门 | 上一环节处理人所在部门的上级部门下的人员 |
上一环节处理人所在一级部门 | 上一环节处理人所在部门的一级部门下的人员 |
流程发起人默认参与者规则: 此类规则是以流程发起人为参照对象,分别提供了流程发起人的相关规则人员。
| 规则 (流程发起人) | 描述 | | :--------------------------- | :----------------------------------- | | 流程发起人上级部门 | 流程发起人所在部门的上级部门下的人员 | | 流程发起人所在一级部门 | 流程发起人所在部门的一级部门下的人员 | | 流程发起人分管领导 | 流程发起人所在机构的分管领导 | | 流程发起人 | 流程开始时的发起人 | | 流程发起人所在部门 | 流程发起人所在部门下的人员 | | 流程发起人直属领导 | 流程发起人所在机构的负责人 | | 流程发起人所在一级部门负责人 | 流程发起人所在部门的一级部门的负责人 | | 流程发起人上级部门负责人 | 流程发起人所在部门的上级部门的负责人 |引擎参与者规则:引擎参与者规则是在开发阶段在ide中创建的流程业务规则,然后可以在业务配置中进行切换。
ide中的业务参与者规则配置编辑器设置:
新建构建包,创建数据集和表单,然后右键工作流,选择新建,填写相关信息,绑定表单即可创建工作流。
新创建的工作流只有开始和结束图元,点击开始图元,选择人工活动,再点击人工活动后选择下一个人工活动,选择连线到结束图元,创建一条最少包含两个人工活动的工作流。
双击第二个人工活动,在弹出的编辑器中点击参与者,点击参与者规则,再点击下拉框,即可根据需求设置该环节的相关参与者规则。
ide中可以在业务参与者规则配置逻辑流作为参与者的获取方式
在ide中新建一个流程事件逻辑流
在流程中配置业务参与者规则,选择逻辑流,然后保存即可 > **注意:**使用逻辑流时只能使用当前应用下的逻辑流,否则不能使用!# 表单数据
在ide中,首先,先在表单设计页面,将对应参与者的属性字段的组件类型选择为人员选择组件
然后再高级设置中,勾选流程参与者配置 在活动中设置参与者为表单数据 ### 活动执行者在ide中,可以设置后续活动的参与者为其他前序活动的执行者。
# 相关数据
在ide中,先在活动的参与者配置处填写变量名称,后调用相关数据接口在业务中进行具体数据值的指定(参与者的指定)。
``` 相关数据的key可以是任意值,相关数据的值可以是WFParticipant对象或者List# 动态参与者规则
# 后续环节单独配置环节参与者
配置 | |
---|---|
是否默认 | 是否使用环节全局配置 |
指定后续环节参与者 | 是否指定后续环节参与者 |
参与者单选 | 是否启用参与者单选 |
参与者范围 | 环节参与者候选来源 |
# 表单中配置流程参与者
在表高级设置的事件(表单提交前)中添加如下代码
rule部分的数据可以通过查看配置的保存接口快速生成
// 活动定义的id可以在流程设计页面找到
// 根据不同的活动环节返回指定的环节配置
if (processContext.activityDefID == "manualActivity1") {
return {
"destActivity": false,//指定活动环节
"destActivitySingle": false,// 活动环节是否单选
"links": [// 后续环节配置
{
"id": "",//后续环节id
"useLinkData": false,//是否使用流程配置的环节设置
"rule": {
"destActivityParticipant": true,//指定活动参与者
"destParticipants": [//指定的参与者
{
"id": "27",
"name": "test5",
"typeCode": "emp"
},
{
"id": "25",
"name": "yuan",
"typeCode": "emp"
}
],
"participantScope": "dest",//参与者范围
"participantSingle": true,// 参与者是否单选
"defaultGlobal": false// 使用全局配置
}
}
]
}
}
# 参与者规则拓展
系统除了提供默认的参与者规则,还支持用户自定义参与者规则。
# 功能描述
自定义参与者规则要求用户自己编写JAVA方法,自定义适合场景的参与者规则。但系统规定了JAVA方法的写法必须使用相对应的注解。
# 功能说明
# 注解
系统提供了两个注解,分别是@ParticipantRuleFunctionClass
和@ParticipantRuleFunction
,将这两个注解放在对应的JAVA类和方法上,系统会自动识别成参与者规则的类。
@ParticipantRuleFunctionClass
- 使用:该注解放在JAVA类上,用来定义该类为参与者规则类,对应系统默认参与者规则的两大类。
- 参数:该注解总共有三个参数,分别是displayName(显示名称,和value互为别名),value(类名,和displayName互为别名),scope(使用范围)。
@ParticipantRuleFunction
- 使用:该注解放在JAVA类里面的方法上,用来定义该方法为具体的参与者规则,对应系统默认参与者规则的两大类中的分类。
- 参数:该注解总共有三个参数,分别是displayName(显示名称,和value互为别名),value(显示名称,和displayName互为别名),params(方法参数)。
# 方法
系统规定使用注解来表示方法为参与者规则,自动识别参与者规则,所以对参与者规则(JAVA类里面的方法)的入参、出参进行了统一规定。
出参:WFParticipant
- 说明:WFParticipant由流程引擎提供,用来记录参与者的信息。
- 属性:WFParticipant有四个属性,分别是id(参与者ID),name(参与者名称),typeCode(参与者类别),attributes(参与者拓展属性,MAP类别)。
入参:入参有两个,分别是Map<String, Object>和ProcessContext
Map<String, Object>类型:
- 名称:relativeData(名称不做限定,类型必须一致)
- 说明:该参数用来记录流程的相关数据,包括流程定义的参数等
ProcessContext类型:
- 名称:processContext(名称不做限定,类型必须一致)
- 说明:该参数是流程上下文,用来记录流程上下文的相关数据,包括流程ID、名称、表单信息等。
# 功能示例
自定义参与者规则定义在个人应用里面,本例自定义参与者规则为上一环节处理人,具体JAVA代码如下:
import com.primeton.gocom.afcenter.common.constants.CommonConstants;
import com.primeton.gocom.afcenter.common.constants.PartyTypeAdapter;
import com.primeton.gocom.afcenter.model.org.Employee;
import com.primeton.gocom.afcenter.sdk.AFCClientFactory;
import com.primeton.gocom.afcenter.sdk.IAFCClient;
import com.primeton.gocom.bfp.common.annotation.ParticipantRuleFunction;
import com.primeton.gocom.bfp.common.annotation.ParticipantRuleFunctionClass;
import com.primeton.gocom.bfp.common.entity.ProcessContext;
import com.primeton.gocom.bfp.common.util.UserUtil;
import com.primeton.workflow.api2.model.WFParticipant;
import org.apache.commons.lang3.StringUtils;
import java.util.Map;
@ParticipantRuleFunctionClass("自定义默认参与者规则")
public class MyParticipantRule {
@ParticipantRuleFunction("自定义上一环节处理人")
public WFParticipant getCustomizeRule(Map<String, Object> relativeData, ProcessContext processContext) {
String currentEmpId = null;
if(StringUtils.isAllBlank(processContext.getCurrentUser())) {
currentEmpId = (String) UserUtil.getCurrentUserObject().get(CommonConstants.EMPLOYEE_ID);
}else {
currentEmpId=processContext.getCurrentUser();
}
IAFCClient afcClient = AFCClientFactory.getInstance().createAFCClient();
Employee emp = afcClient.getEmployeeAPI().findEmployeeById(currentEmpId);
WFParticipant participant = new WFParticipant();
participant.setName(emp.getName());
participant.setId(emp.getId());
participant.setTypeCode(PartyTypeAdapter.EMP.getCode());
return participant;
}
}
定义好参与者规则,打开参与者设置页面,设置页面参考参与者规则。
可以看到,自定义的参与者规则已经被系统识别并展现,至此,参与者规则介绍结束。