activiti 工作流 第一天
多的废话不多说了,直接上最简单的操作、快速掌握activiti 工作流.........................
首先创建
activiti 的概念 、请自行查阅、、、
1、流程定义如:helloworld.bpmn
helloworld.png
2、生成数据库表 手动 jdbc
@Test
public void createTable(){
// 创建activiti 配置对象的实例
ProcessEngineConfiguration configuration=ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
// 设置数据库链接对象
configuration.setJdbcUrl("jdbc:mysql://localhost:3306/itcast0711activiti?useUnicode=true&characterEncoding=utf8");
configuration.setJdbcDriver("com.mysql.jdbc.Driver");
configuration.setJdbcUsername("root");
configuration.setJdbcPassword("root");
/**
* 设置建表策略
*/
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
ProcessEngine processEngines=configuration.buildProcessEngine();
System.out.println("流程核心对象"+processEngines);
}
加载 配置文件 activiti.cfg.xml
@Test
public void loadActivitiXml(){
// 加载classPath 下名为 activiti.cfg.xml 的xml文件,创建核心流程引擎对象 、系统会自动创建数据库表
ProcessEngine processEngine=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
.buildProcessEngine();
System.out.println("流程引擎对象创建数据库表:"+processEngine);
}
3、流程部署 有三种方式
第一种:addClasspathResource()
Deployment deployment=proce.getRepositoryService().....
.....
.addClasspathResource("diagrams/xx.bpmn");
.addClasspathResource("diagrams/xx.png")
.deploy()
第二种:zip 部署 InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");
ZipInputStream zipInputStream=new ZipInputStream(inputStream);
Deployment deployment=proce.getRepositoryService().....
.....
.addZipInputStream(zipInputStream);
.deploy();
第三种:
InputStream bpm=this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.bpmn");
InputStream png=this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.png");
Deployment deployment=processEngine.getRepositoryService()
.createDeployment()
.name("way")
.addInputStream("helloworld.bpmn", bpm)
.addInputStream("helloworld.png", png)
.deploy();
System.out.println("部署ID"+deployment.getId());
System.out.println("部署名称"+deployment.getName());
4、启动流程实例
4.1 获取 流程实例的可以 如:String procsskey="helloworld"; 使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
ProcessInstance processInstance=processEngine.getRuntimeService() //与正在执行的流程实例和执行对象相关的service
.startProcessInstanceByKey(processKey);//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
System.out.println("流程实例ID:"+processInstance.getId()); // 101
System.out.println("流程定义ID:"+processInstance.getProcessDefinitionId()); // helloworld:1:4
5、查询当前人的个人任务
5.1 获取 办理人的 String assigne="小唐";
List<Task> list=processEngine.getTaskService()
.createTaskQuery()
.taskAssignee(assignee)
.list();
if(list!=null && list.size()>0){
for (Task task : list) {
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务创建时间:"+task.getCreateTime());
System.out.println("任务经的办理人:"+task.getAssignee());
System.out.println("流程实例ID"+task.getProcessInstanceId());
System.out.println("流程执行对象ID:"+task.getExecutionId());
System.out.println("流程定义Id"+task.getProcessDefinitionId());
System.out.println("-------------------------------------------------------");
}
}
6、查询当前人完成的任务
6.1 首先获取任务Id 如:String taskId="104" ;
@Test
public void completeMyPersonalTask(){
// 任务id 104
String taskId="104";
processEngine.getTaskService().complete(taskId);
System.out.println("完成任务:任务Id:"+taskId);
}