Activiti工作流引擎-----入门

准备工作

   开始的一些准备工作,网上教程很多,就不赘述。

  1. 在eclipse中安装插件,
  2. 下载Activiti的jar,我使用的是5.22.
  3. 用ecplise来创建一个Activiti的project。
  4. 下载mysql的驱动jar。

  初始化数据库

     初始化数据库有两种方式,跑java代码去初始化,或者手动执行sql语句去初始化。我一般用第二种,方便快捷。

    这里我用的mysql5.5的版本。请选择跟环境对应的sql语句。

作图

流程图一般在diagrams下。画一张简单的图,如下。bpmn文件允许将流程图转为xml文件打开查看。

代码部分

   部署流程

    刚才不是画了一张图嘛,现在将该图部署起来。会在数据库中能够查看到该process 定义。

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploymentProcessDefinition() {
		//操作了数据库,向数据库表中插入数据
		Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的service
					.createDeployment() //创建一个部署对象
					.name("helloworld入门")
					.addClasspathResource("diagrams/HelloWorld.bpmn") //从classpath的资源加载,一次只能加载一个文件
					.addClasspathResource("diagrams/HelloWorld.png")
					.deploy(); //完成部署
		System.out.println(deployment.getId());
		System.out.println(deployment.getName());
	}

 需要有初始化processEngine。

执行该代码块,process的id会返回。

同时数据库的re表系列会有记录生成。

启动流程

   所有操作都离不开引擎ProcessEngine.引擎写完一定是Service,我们操作的都是Service的API。

/**
	 * 启动流程实例
	 */
	@Test
	public void deploymentProcessInition() {
		
		ProcessInstance instance = processEngine.getRuntimeService()//与正在执行的流程相关的service
		            .startProcessInstanceByKey("helloworld");//使用流程定义的key来启动实例,
					//好处:使用key启动,按照最新版本的流程定义启动。							
		System.out.println(instance.getId());//流程实例id
		System.out.println(instance.getProcessDefinitionId());//流程定义id
		
	}

得到的返回数据。5001是实例ID。2504的流程定义的id.

 

数据库中也能够查询到数据。

查询当前任务

//查询当前人的个人任务
	@Test
	public void findMyPersonTask() {
		String assignee = "张三";
		List<Task> myQueue = processEngine.getTaskService()
					.createTaskQuery()//创建任务查询对象
					.taskAssignee(assignee)
					.list();
		if(myQueue != null && myQueue.size() > 0) {
			for(Task task : myQueue) {
				System.out.println("任务ID : " + task.getId());
				System.out.println("任务name : " + task.getName());
				System.out.println("任务时间 : " + task.getCreateTime());
				System.out.println("任务办理人 : " + task.getAssignee());
				System.out.println("流程实例id : " + task.getProcessInstanceId());
				System.out.println("流程实例id : " + task.getProcessInstanceId());
			}
		}
	}

得到的是act_ru_task中的记录,只显示在assignee名下的task.其他id查询不到。

完成任务

  表示该case由当前人员操作完成,进入下一个activity。交给下一个人员去操作。最后当都操作完成就进入history表。

/**
	 * 完成我名下的任务
	 */
	@Test
	public void completeTask() {
		String taskId= "5004";
		processEngine.getTaskService()
					.complete(taskId);
		System.out.println("完成任务,任务ID : " + taskId);
	}

猜你喜欢

转载自blog.csdn.net/Damon__Wang/article/details/82556272