activiti学习(十七)

197 阅读2分钟

image.png 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

Activiti的使用

我们继续看下activiti的API怎么用。

开启一个流程

将流程定义部署到Activiti引擎后,我们可以从中启动新的流程实例。对于每个流程定义,通常有许多流程实例。流程定义是蓝图,而流程实例是其运行时。 与进程运行时状态相关的所有内容都可以在RuntimeService中找到。有多种方法可以启动新流程实例。在下面的代码段中,我们使用在流程定义xml中定义的key来启动流程实例。我们还可以在流程实例开始时提供一些流程变量,因为第一个用户任务的描述将在其表达式中使用这些变量。通常使用流程变量,因为它们为特定流程定义的流程实例赋予了不同意义。通常,流程变量使流程实例彼此不同。

Map<String, Object> variables = new HashMap<String, Object>();
variables.put("employeeName", "Kermit");
variables.put("numberOfDays", new Integer(4));
variables.put("vacationMotivation", "I'm really tired!");

RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("vacationRequest", variables);

// Verify that we started a new process instance
Log.info("Number of process instances: " + runtimeService.createProcessInstanceQuery().count());

完成一个任务

当流程开始时,第一步将是用户任务。这是必须由系统用户执行的步骤。通常,这样的用户会有一个任务收件箱,其中列出了该用户需要完成的所有任务。以下代码段显示了查询这些任务:

TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("management").list();
for (Task task : tasks) {
  Log.info("Task available: " + task.getName());
}

流程实例继续往下走。

挂起和激活流程

我们可以挂起流程定义。当流程定义被挂起时,无法创建新的流程实例(引擎会抛出异常)。通过RepositoryService的suspendProcessDefinitionByKey挂起流程定义。
要重新激活流程定义,只需调用其中一个repositoryService的activateProcessDefinitionXXX方法。 还可以挂起流程实例。挂起后,流程将无法继续(例如,完成任务会引发异常),并且不会执行任何作业(例如计时器)。可以通过调用runtimeService的suspendProcessInstance方法来挂起流程实例。通过调用runtimeService的activateProcessInstanceXXX方法再次激活流程实例。