if (taskDefinition != null) {
taskInstance.setTaskDefinition(taskDefinition);
}
if (executionContext != null) {
TokenEntity token = executionContext.getToken();
taskInstance.setToken(token);
// taskInstance.initializeVariables();
try {
// update the executionContext
executionContext.setTaskDefinition(taskDefinition);
executionContext.setTaskInstance(taskInstance);
// executionContext.setEventSource(task);
// 设置会签分组
if (taskGroup != null) {
taskInstance.setTaskGroup(taskGroup);
}
// 通过表达式获取任务主题
// String description = null;
if (taskDefinition != null && taskDefinition.getDescriptionExpression() != null) {
Object result = ExpressionMgmt.execute(taskDefinition.getDescriptionExpression(), executionContext);
if (result != null) {
taskInstance.setDescription(result.toString());
} else {
taskInstance.setDescription(token.getFlowNode().getName());
}
} else {
// ProcessDefinitionBehavior processDefinitionBehavior =
// token.getProcessInstance().getProcessDefinition();
if (token.getProcessInstance().getSubject() != null && !token.getProcessInstance().getSubject().equals("")) {
taskInstance.setDescription(token.getProcessInstance().getSubject());
} else {
taskInstance.setDescription(token.getFlowNode().getName());
}
/*
* if (processDefinitionBehavior.getTaskSubject() != null &&
* processDefinitionBehavior
* .getTaskSubject().getExpressionValue() != null) {
*
* Object result =
* ExpressionMgmt.execute(token.getProcessInstance
* ().getProcessDefinition
* ().getTaskSubject().getExpressionValue(),
* executionContext);
*
* if (result != null) {
* taskInstance.setDescription(result.toString()); } } else
* {
* taskInstance.setDescription(token.getFlowNode().getName(
* )); }
*/
}
// 设置任务预计执行时间
taskInstance.setExpectedExecutionTime(taskDefinition.getExpectedExecutionTimeValue());
UserTaskBehavior userTask = (UserTaskBehavior) taskDefinition.getUserTaskNode();
// 获取操作表单
String formUri = userTask.getFormUri();
// 获取浏览表单
String formUriView = userTask.getFormUriView();
if (formUri != null && !formUri.equals("")) {
Object returnObject = ExpressionMgmt.execute(formUri, executionContext);
if (returnObject != null) {
taskInstance.setFormUri(returnObject.toString());
}
} else {
FormUri formUriObj=token.getProcessInstance().getProcessDefinition().getFormUriObj();
String expressionValue=null;
if (formUriObj != null && formUriObj.getExpression() != null) {
expressionValue = formUriObj.getExpression().getValue();
}
Object returnObject = ExpressionMgmt.execute(expressionValue, executionContext);
if (returnObject != null) {
taskInstance.setFormUri(StringUtil.getString(returnObject));
}
else {
throw new FixFlowException(userTask.getId() + " 节点没有指定表单,请检查流程配置!");
}
}
if (taskInstance.getFormUri() == null || taskInstance.getFormUri().equals("")) {
throw new FixFlowException(userTask.getId() + " 节点没有指定表单,请检查流程配置!");
}
if (formUriView != null && !formUriView.equals("")) {
Object returnObject = ExpressionMgmt.execute(formUriView, executionContext);
if (returnObject != null) {
taskInstance.setFormUriView(returnObject.toString());
}
} else {
taskInstance.setFormUriView(taskInstance.getFormUri());
}
if (taskInstance.getFormUriView() == null || taskInstance.getFormUriView().equals("")) {
throw new FixFlowException(userTask.getId() + " 节点没有指定添加、浏览表单,请检查流程配置!");
}
String taskPriorityExpression = userTask.getTaskPriority();
if (taskPriorityExpression != null && !taskPriorityExpression.equals("")) {
Object returnObject = ExpressionMgmt.execute(taskPriorityExpression, executionContext);
if (returnObject != null) {
int taskPriority = StringUtil.getInt(returnObject);
taskInstance.setPriority(taskPriority);
}
}
// 创建任务实例
taskInstance.create(executionContext);
//设置任务的类型
taskInstance.setTaskInstanceType(taskDefinition.getTaskInstanceType());
// 对已经分配的任务进行分配
if (taskDefinition != null) {
// 如果为退回任务的话则读取退回任务的处理者
if (executionContext.getRollBackAssignee() != null) {
taskInstance.setAssignee(executionContext.getRollBackAssignee());
} else {
taskInstance.assign(executionContext);
}
// 任务分配事件
((FlowNodeImpl) token.getFlowNode()).fireEvent(BaseElementEvent.EVENTTYPE_TASK_ASSIGN, executionContext, taskInstance);
}
} catch (Exception e) {
throw new FixFlowException("任务分配出错", e);