1. 流程定义
如何新建流程图和如何保存流程图
1.1 在IDEA有activiti插件的基础上新建BpmnFile
1.2 完成流程图
1.3 并将每个流程编写不同名字区分
1.4 将Bpmn文件修改后缀名改为xml文件并从新打开
1.5 右键此xml文件将他改为图
1.6 生成一张流程图
1.7 保存至当前Resources路径
2. 流程部署
2.1 编写activiti.cfg.xml配置文件
<!--数据源--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/activiti-y2170"/> <property name="username" value="root"/> <property name="password" value="123"/> </bean> <!--配置Activiti使用的processEngine对象 默认命名为processEngineConfiguration--> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <!--注入数据源--> <property name="dataSource" ref="dataSource"/> <!--配置数据源方式二:--> <!--<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>--> <!--指定数据库生成策略--> <property name="databaseSchemaUpdate" value="true"/> </bean>
2.2 编写日志配置文件
# Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal log4j.rootCategory=debug, CONSOLE, LOGFILE # Set the enterprise logger category to FATAL and its only appender to CONSOLE. log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE # CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=d:axis.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m
2.3 编写测试代码进行部署
@Test public void deployment(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取RepositoryService对象进行流程部署 RepositoryService repositoryService = processEngine.getRepositoryService(); //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("bpmnfile/holiday.bpmn") //加载流程文件 .addClasspathResource("bpmnfile/holiday.png") .name("请假流程") //设置流程名称 .key("holidayKey") .deploy(); //部署 //输出部署信息 System.out.println("流程名称:"+deployment.getName()); System.out.println("流程ID:"+deployment.getId()); System.out.println("流程Key:"+deployment.getKey()); }
2.4 控制台效果
2.5 数据库改变的表
3. 创建流程实例
Service总览
编写测试代码
@Test public void startInstance(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取到RunimeService对象 RuntimeService runtimeService=processEngine.getRuntimeService() ; //创建流程实例 ProcessInstance holiday=runtimeService.startProcessInstanceByKey("holiday"); //输出实例信息 System.out.println("流程部署ID:"+holiday.getDeploymentId()); System.out.println("流程实例ID:"+holiday.getId()); System.out.println("活动 ID:"+holiday.getActivityId()); }
控制台效果
4. 用户查询代办任务
代码测试
//查看代办任务 @Test public void getTask(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取一个TaskService对象 TaskService taskService=processEngine.getTaskService(); //查询代办业务 createTaskQuery查询任务 taskCandidateOrAssigned查询任务执行者 processDefinitionKey:查询流程 /** * taskCandidateOrAssigned匹配规则:1.Assigned 2.配置bpmn文件中定义的值 * taskAssignee匹配规则:1.Assigned */ List<Task> list=taskService.createTaskQuery().taskCandidateOrAssigned("lisi").processDefinitionKey("holiday").list(); for (Task task:list){ System.out.println("任务名称:"+task.getName()); System.out.println("任务执行人:"+task.getAssignee()); System.out.println("任务ID:"+task.getId()); System.out.println("流程实例ID:"+task.getProcessInstanceId()); } }
控制台效果
5. 用户进行任务处理
@Test public void completeTask(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取一个TaskService对象 TaskService taskService=processEngine.getTaskService(); //任务处理 taskService.complete("2505"); }
6. 在查询zhangsan代办任务时就已经没有
7. 当业务流程结束后通过历史可以查看到已经走完的流程
编写测试代码
//当业务流程结束后通过历史可以查看到已经走完的流程 @Test public void getHistory(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取HistoryService接口 HistoryService historyService = processEngine.getHistoryService(); //获取历史任务 HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery(); //获取指定流程实例的任务 historicActivityInstanceQuery.processInstanceId("2501"); //获取任务列表 List<HistoricActivityInstance> list = historicActivityInstanceQuery.list(); for (HistoricActivityInstance ai : list) { System.out.println("任务节点ID:"+ai.getActivityId()); System.out.println("任务节点名称:"+ai.getActivityName()); System.out.println("流程实例ID信息:"+ai.getProcessDefinitionId()); System.out.println("流程实例ID信息:"+ai.getProcessInstanceId()); System.out.println("=============================="); } }
控制台效果