Flowable-6.7.2 源码注释地址:https://github.com/solojin/flowable-6.7.2-annotated
HumanTaskActivityBehavior 人类任务活动行为类
/**
* 人类任务活动行为
*
* @author Joram Barrez
*/
public class HumanTaskActivityBehavior extends TaskActivityBehavior implements PlanItemActivityBehavior, CmmnActivityWithMigrationContextBehavior {
protected HumanTask humanTask;
public HumanTaskActivityBehavior(HumanTask humanTask) {
super(humanTask.isBlocking(), humanTask.getBlockingExpression());
this.humanTask = humanTask;
}
@Override
public void execute(CommandContext commandContext, PlanItemInstanceEntity planItemInstanceEntity) {
execute(commandContext, planItemInstanceEntity, null);
}
@Override
public void execute(CommandContext commandContext, PlanItemInstanceEntity planItemInstanceEntity, MigrationContext migrationContext) {
if (evaluateIsBlocking(planItemInstanceEntity)) {
CmmnEngineConfiguration cmmnEngineConfiguration = CommandContextUtil.getCmmnEngineConfiguration(commandContext);
TaskService taskService = cmmnEngineConfiguration.getTaskServiceConfiguration().getTaskService();
ExpressionManager expressionManager = CommandContextUtil.getExpressionManager(commandContext);
TaskEntity taskEntity = taskService.createTask();
taskEntity.setScopeId(planItemInstanceEntity.getCaseInstanceId());
taskEntity.setSubScopeId(planItemInstanceEntity.getId());
taskEntity.setScopeDefinitionId(planItemInstanceEntity.getCaseDefinitionId());
taskEntity.setScopeType(ScopeTypes.CMMN);
taskEntity.setTenantId(planItemInstanceEntity.getTenantId());
// 如果此计划项(任务)属于某个阶段,请设置阶段实例id
taskEntity.setPropagatedStageInstanceId(planItemInstanceEntity.getStageInstanceId());
taskEntity.setTaskDefinitionKey(humanTask.getId());
String taskName = humanTask.getName();
if (planItemInstanceEntity.getName() != null) {
taskName = planItemInstanceEntity.getName();
}
CreateHumanTaskBeforeContext beforeContext = new CreateHumanTaskBeforeContext(humanTask, planItemInstanceEntity, taskName,
humanTask.getDocumentation(), humanTask.getDueDate(), humanTask.getPriority(), humanTask.getCategory(),
humanTask.getFormKey(), humanTask.getAssignee(), humanTask.getOwner(),
humanTask.getCandidateUsers(), humanTask.getCandidateGroups());
if (cmmnEngineConfiguration.getCreateHumanTaskInterceptor() != null) {
cmmnEngineConfiguration.getCreateHumanTaskInterceptor().beforeCreateHumanTask(beforeContext);
}
handleTaskName(planItemInstanceEntity, expressionManager, taskEntity, beforeContext);
handleTaskDescription(planItemInstanceEntity, expressionManager, taskEntity, beforeContext);
handleAssignee(planItemInstanceEntity, taskService, expressionManager, taskEntity, beforeContext, migrationContext);
handleOwner(planItemInstanceEntity, taskService, expressionManager, taskEntity, beforeContext);
handlePriority(planItemInstanceEntity, expressionManager, taskEntity, beforeContext);
handleFormKey(planItemInstanceEntity, expressionManager, taskEntity, beforeContext);
handleDueDate(commandContext, planItemInstanceEntity, expressionManager, taskEntity, beforeContext);
handleCategory(planItemInstanceEntity, expressionManager, taskEntity, beforeContext);
TaskHelper.insertTask(taskEntity, true, cmmnEngineConfiguration);
if (cmmnEngineConfiguration.isLoggingSessionEnabled()) {
CmmnLoggingSessionUtil.addLoggingData(CmmnLoggingSessionConstants.TYPE_HUMAN_TASK_CREATE, "Human task '" +
taskEntity.getName() + "' created", taskEntity, planItemInstanceEntity, cmmnEngineConfiguration.getObjectMapper());
if (StringUtils.isNotEmpty(taskEntity.getAssignee())) {
ObjectNode loggingNode = CmmnLoggingSessionUtil.fillBasicTaskLoggingData("Set task assignee value to " +
taskEntity.getAssignee(), taskEntity, planItemInstanceEntity, cmmnEngineConfiguration.getObjectMapper());
loggingNode.put("taskAssignee", taskEntity.getAssignee());
LoggingSessionUtil.addLoggingData(CmmnLoggingSessionConstants.TYPE_HUMAN_TASK_SET_ASSIGNEE, loggingNode, ScopeTypes.CMMN);
}
if (StringUtils.isNotEmpty