通过下面的API发布流程,所有与Activiti引擎的交互都是通过services
Deployment deployment = repositoryService.createDeployment() .addClasspathResource("FinancialReportProcess.bpmn20.xml") .deploy();启动一个新流程实例,使用我们定义在流程定义里的id(对应XML文件中的process元素).注意这里的id对于Activiti来说,应该叫做key,一般在流程模型中使用的ID,在Activiti中都是Key:比如任务ID
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("financialReport");这样创建一个流程实例:
首先进入开始事件
开始事件之后,它会沿着所有的外出连线执行,到达第一个任务(“制作月度财报”)
Activiti会把一个任务保存到数据库里.这时,分配到这个任务的用户或群组会被解析,也会保存到数据库里
需要注意,Activiti引擎会继续执行流程的环节,除非遇到一个 等待状态:比如用户任务
在等待状态下,当前的流程实例的状态会保存到数据库中.直到用户决定完成任务才能改变这个状态
这时,引擎会继续执行,直到遇到下一个等待状态,或流程结束
如果中间引擎重启或崩溃,流程状态也会安全的保存在数据库里
任务创建之后,startProcessInstanceByKey会在到达用户任务这个等待状态之后才会返回.这时,任务分配给了一个组,这意味着这个组是执行这个任务的候选组
现在将所有东西都放在一起,来创建一个简单的java程序:
创建一个Java项目,把Activiti的jar和依赖放到classpath下:这些都可以在Activiti发布包的libs目录下找到
在调用Activiti服务之前,我们必须构造一个ProcessEngine,可以让我们访问服务
这里我们使用[单独运行]的配置,这会使用demo安装时的数据库来构建ProcessEngine
public static void main(String[] args) { // Create Activiti process engine ProcessEngine processEngine = ProcessEngineConfiguration .createStandaloneProcessEngineConfiguration() .buildProcessEngine(); // Get Activiti services RepositoryService repositoryService = processEngine.getRepositoryService(); RuntimeService runtimeService = processEngine.getRuntimeService(); // Deploy the process definition repositoryService.createDeployment() .addClasspathResource("FinancialReportProcess.bpmn20.xml") .deploy(); // Start a process instance runtimeService.startProcessInstanceByKey("financialReport"); } 任务列表可以通过TaskService来获得任务,添加以下逻辑:
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser("kermit").list();注意传入的用户必须是accountancy组的一个成员,要和流程定义中相对应:
<potentialOwner> <resourceAssignmentExpression> <formalExpression>accountancy</formalExpression> </resourceAssignmentExpression> </potentialOwner>也可以使用群组名称,通过任务查询API来获得相关的结果.在代码中添加如下逻辑:
TaskService taskService = processEngine.getTaskService(); List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("accountancy").list();因为配置的ProcessEngine使用了与demo相同的数据,可以登录到Activiti Explorer.默认,accountancy(会计)组里没有任何人:
登录
点击组
创建一个新组
点击用户
把组分配给fozzie
使用fozzie/fozzie登录