flowable自选人节点
时间: 2023-07-25 17:10:18 浏览: 119
在 Flowable 中,可以使用自定义的 Java 类来实现自选人节点,以便在流程中动态选择任务的执行人。
以下是实现自选人节点的一般步骤:
1. 创建自定义的 Java 类,继承 `org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior` 类,并重写 `execute` 方法。
2. 在 `execute` 方法中,通过 `delegateTask.getTaskDefinition()` 方法获取任务定义,再通过 `taskDefinition.getTaskFormHandler()` 方法获取表单处理器。
3. 在表单处理器中,可以设置自定义的表单属性,以便在表单中显示自定义的控件。
4. 在表单中,可以使用自定义的控件来选择任务执行人,例如下拉列表、多选框、文本输入框等。
5. 在流程中,当执行到自选人节点时,系统会调用自定义的 Java 类,弹出自定义的表单界面,以便选择任务执行人。
6. 在表单提交后,系统将从自定义表单控件中获取任务的执行人,并将其设置为任务的候选人或者直接分配给执行人。
以下是一个示例代码:
```java
public class CustomUserTaskActivityBehavior extends UserTaskActivityBehavior {
@Override
public void execute(final DelegateExecution execution) {
final TaskDefinition taskDefinition = this.taskDefinition;
final TaskFormHandler taskFormHandler = taskDefinition.getTaskFormHandler();
// 设置自定义表单属性
final FormPropertyImpl customFormProperty = new FormPropertyImpl();
customFormProperty.setId("customProperty");
customFormProperty.setName("Custom Property");
customFormProperty.setType(new StringFormType());
customFormProperty.setWritable(true);
customFormProperty.setReadable(true);
customFormProperty.setRequired(false);
taskFormHandler.getFormProperties().add(customFormProperty);
// 打开自定义表单界面
final String formKey = taskFormHandler.getFormKey(execution);
final FormService formService = Context.getProcessEngineConfiguration().getFormService();
final Object customFormValue = formService.getRenderedTaskForm(taskDefinition.getKey(), formKey, "en", execution);
// 处理表单提交
final String customProperty = (String) execution.getVariable("customProperty");
taskService.setVariable(taskId, "customProperty", customProperty);
// 将任务分配给执行人
final String assignee = (String) execution.getVariable("assignee");
if (StringUtils.isNotBlank(assignee)) {
taskService.setAssignee(taskId, assignee);
} else {
final List<String> candidateUsers = new ArrayList<>();
candidateUsers.add("user1");
candidateUsers.add("user2");
taskService.addCandidateUsers(taskId, candidateUsers);
}
}
}
```
在这个示例代码中,我们继承了 `UserTaskActivityBehavior` 类,并重写了 `execute` 方法。在 `execute` 方法中,我们设置了一个自定义的表单属性,并打开了自定义的表单界面。在表单提交后,我们将任务分配给任务执行人。需要注意的是,在实际应用中,我们需要根据具体的场景进行修改和定制。
阅读全文