Java_Activiti5_菜鸟也来学Activiti5工作流_之入门简单例子(一)

 1 // VacationRequest.java
 2 
 3 /**
 4  * author : 冯孟活 ^_^ 
 5  * dates : 2015年9月1日 下午10:32:58 
 6  * class : 演示简单的公司请假流程
 7  * 
 8  *         一个简单的流程分三个步骤:
 9  *                 1、发布流程(部署流程定义)
10  *                 2、启动流程实例
11  *                 3、完成任务(先查询任务,后完成任务)
12  *                 4、挂起、激活一个流程实例(可选)
13  */
14 public class VacationRequest {
15     public static void main(String[] args) {
16 
17         /**
18          *  第一步:发布流程
19          */
20         ProcessEngine processEngine = ProcessEngineConfiguration // 通过流程引擎配置类来创建流程引擎
21                 .createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
22         RepositoryService repositoryService = processEngine.getRepositoryService(); // 通过流程引擎来得到知识库服务
23         repositoryService.createDeployment().addClasspathResource("VacationRequest.bpmn").deploy(); // 通过只是库部署流程定义
24         System.out.println("流程定义的个数="+repositoryService.createDeploymentQuery().count()); // 查询所有发布的流程定义的个数
25         
26         /**
27          *  第二步:启动一个流程实例
28          */
29         /*定义Map来存放流程变量:流程变量经常会被用到,因为他们赋予来自同一个流程定义的不同流程实例
30            的特别含义,简单来说,流程变量是区分流程实例的关键
31         */
32         Map<String, Object> variables = new HashMap<>(); // 定义一个Map来存放流程变量
33         variables.put("employeeName","Kermit");
34         variables.put("numberOfDays",new Integer(4));
35         variables.put("vacationMotivation","I'm really tired!");
36         RuntimeService runtimeService = processEngine.getRuntimeService(); // 获取运行服务
37         runtimeService.startProcessInstanceByKey("vacationRequest",variables); // 通过运行服务来启动流程实例,并且设置流程变量(通过key 或者 id 部署都可以)
38         System.out.println("流程实例的个数="+runtimeService.createProcessInstanceQuery().count()); // 通过运行服务来查询所有的流程实例的个数
39         
40         /**
41          *  第三部:完成任务
42          */
43         TaskService taskService = processEngine.getTaskService(); // 通过流程引擎获取任务服务
44         List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("management").list(); // 通过任务服务来查询任务候选组(这是通过组来分区)
45         for (Task task : tasks) { // 遍历打印任务
46             System.err.println("能找到的任务="+task.getName());
47         }
48         Task task = tasks.get(0); // 获取第一个任务
49         Map<String,Object> taskVariables = new HashMap<>(); // 定义一个Map来存放任务变量
50         taskVariables.put("vacationApproved","false");
51         taskVariables.put("managerMotivation","We have a tight deadline!");
52         taskService.complete(task.getId(),taskVariables); // 根据Id来完成任务
53         
54         /**
55          *  挂起,激活一个流程
56          */
57         /*
58          * 我们可以挂起一个流程定义。当挂起流程定义时, 就不能创建新流程了(会抛出一个异常)。 
59          * 可以通过RepositoryService挂起一个流程:
60          */
61         //repositoryService.suspendProcessDefinitionByKey("vacationRequest"); // 挂起一个流程定义
62         //try{
63             //runtimeService.startProcessInstanceByKey("vacationRequest"); // 启动一个流程实例
64         //}catch(ActivitiException e){ // 这里会抛出一个Activiti自定义异常
65             //e.printStackTrace();
66         //}
67         
68         /*
69          * 备注下:
70          *         也可以挂起一个流程实例。挂起时,流程不能继续执行(比如,完成任务会抛出异常),
71          * 异步操作(比如定时器)也不会执行。 挂起流程实例可以调用 runtimeService.suspendProcessInstance方法。 
72          * 激活流程实例可以调用runtimeService.activateProcessInstanceXXX方法。
73          */
74     }
75 }
 1 <!-- activiti.cfg.xml -->
 2 
 3 <?xml version="1.0" encoding="UTF-8"?>
 4 <beans xmlns="http://www.springframework.org/schema/beans"
 5        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans
 7        http://www.springframework.org/schema/beans/spring-beans.xsd">
 8  
 9     <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
10         <property name="databaseSchemaUpdate" value="update"/>
11         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db_activiti?useUnicode=true&amp;characterEncoding=utf-8"/>
12         <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
13         <property name="jdbcUsername" value="root"/>
14         <property name="jdbcPassword" value="root"/>
15         <property name="jobExecutorActivate" value="true"/>
16     </bean>
17     
18 </beans>
 1 <!-- VacationRequest.bpmn -->
 2 <?xml version="1.0" encoding="UTF-8" ?>
 3 <definitions id="definitions"
 4              targetNamespace="http://activiti.org/bpmn20"
 5              xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
 6              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 7              xmlns:activiti="http://activiti.org/bpmn">
 8 
 9   <process id="vacationRequest" name="Vacation request">
10 
11     <startEvent id="request" activiti:initiator="employeeName">
12       <extensionElements>
13         <activiti:formProperty id="numberOfDays" name="Number of days" type="long" value="1" required="true"/>
14         <activiti:formProperty id="startDate" name="First day of holiday (dd-MM-yyy)" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" />
15         <activiti:formProperty id="vacationMotivation" name="Motivation" type="string" />
16       </extensionElements>
17     </startEvent>
18     <sequenceFlow id="flow1" sourceRef="request" targetRef="handleRequest" />
19 
20     <userTask id="handleRequest" name="Handle vacation request" >
21       <documentation>
22         ${employeeName} would like to take ${numberOfDays} day(s) of vacation (Motivation: ${vacationMotivation}).
23       </documentation>
24       <extensionElements>
25          <activiti:formProperty id="vacationApproved" name="Do you approve this vacation" type="enum" required="true">
26           <activiti:value id="true" name="Approve" />
27           <activiti:value id="false" name="Reject" />
28         </activiti:formProperty>
29         <activiti:formProperty id="managerMotivation" name="Motivation" type="string" />
30       </extensionElements>
31       <potentialOwner>
32         <resourceAssignmentExpression>
33           <formalExpression>management</formalExpression>
34         </resourceAssignmentExpression>
35       </potentialOwner>
36     </userTask>
37     <sequenceFlow id="flow2" sourceRef="handleRequest" targetRef="requestApprovedDecision" />
38 
39     <exclusiveGateway id="requestApprovedDecision" name="Request approved?" />
40     <sequenceFlow id="flow3" sourceRef="requestApprovedDecision" targetRef="sendApprovalMail">
41       <conditionExpression xsi:type="tFormalExpression">${vacationApproved == 'true'}</conditionExpression>
42     </sequenceFlow>
43 
44     <task id="sendApprovalMail" name="Send confirmation e-mail" />
45     <sequenceFlow id="flow4" sourceRef="sendApprovalMail" targetRef="theEnd1" />
46     <endEvent id="theEnd1" />
47 
48     <sequenceFlow id="flow5" sourceRef="requestApprovedDecision" targetRef="adjustVacationRequestTask">
49       <conditionExpression xsi:type="tFormalExpression">${vacationApproved == 'false'}</conditionExpression>
50     </sequenceFlow>
51 
52     <userTask id="adjustVacationRequestTask" name="Adjust vacation request">
53       <documentation>
54         Your manager has disapproved your vacation request for ${numberOfDays} days.
55         Reason: ${managerMotivation}
56       </documentation>
57       <extensionElements>
58         <activiti:formProperty id="numberOfDays" name="Number of days" value="${numberOfDays}" type="long" required="true"/>
59         <activiti:formProperty id="startDate" name="First day of holiday (dd-MM-yyy)" value="${startDate}" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" />
60         <activiti:formProperty id="vacationMotivation" name="Motivation" value="${vacationMotivation}" type="string" />
61         <activiti:formProperty id="resendRequest" name="Resend vacation request to manager?" type="enum" required="true">
62           <activiti:value id="true" name="Yes" />
63           <activiti:value id="false" name="No" />
64         </activiti:formProperty>
65       </extensionElements>
66       <humanPerformer>
67         <resourceAssignmentExpression>
68           <formalExpression>${employeeName}</formalExpression>
69         </resourceAssignmentExpression>
70       </humanPerformer>
71     </userTask>
72     <sequenceFlow id="flow6" sourceRef="adjustVacationRequestTask" targetRef="resendRequestDecision" />
73 
74     <exclusiveGateway id="resendRequestDecision" name="Resend request?" />
75     <sequenceFlow id="flow7" sourceRef="resendRequestDecision" targetRef="handleRequest">
76       <conditionExpression xsi:type="tFormalExpression">${resendRequest == 'true'}</conditionExpression>
77     </sequenceFlow>
78 
79      <sequenceFlow id="flow8" sourceRef="resendRequestDecision" targetRef="theEnd2">
80       <conditionExpression xsi:type="tFormalExpression">${resendRequest == 'false'}</conditionExpression>
81     </sequenceFlow>
82     <endEvent id="theEnd2" />
83 
84   </process>
85 
86 </definitions>

posted @ 2015-09-05 20:36  冯孟活  阅读(4696)  评论(0编辑  收藏  举报