zoukankan      html  css  js  c++  java
  • flowable一个简单的例子


    holiday-request.bpmn20.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                 xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
                 xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
                 xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
                 xmlns:activiti="http://activiti.org/bpmn"
                 typeLanguage="http://www.w3.org/2001/XMLSchema"
                 expressionLanguage="http://www.w3.org/1999/XPath"
                 targetNamespace="http://www.flowable.org/processdef">
    
        <process id="holidayRequest" name="Holiday Request" isExecutable="true">
    
            <startEvent id="startEvent"/>
            <sequenceFlow sourceRef="startEvent" targetRef="approveTask"/>
    
            <userTask id="approveTask" name="Approve or reject request" activiti:candidateGroups="managers"/>
            <sequenceFlow sourceRef="approveTask" targetRef="decision"/>
    
            <exclusiveGateway id="decision"/>
            <sequenceFlow sourceRef="decision" targetRef="externalSystemCall">
                <conditionExpression xsi:type="tFormalExpression">
                    <![CDATA[
                      ${approved}
                    ]]>
                </conditionExpression>
            </sequenceFlow>
            <sequenceFlow  sourceRef="decision" targetRef="sendRejectionMail">
                <conditionExpression xsi:type="tFormalExpression">
                    <![CDATA[
                      ${!approved}
                    ]]>
                </conditionExpression>
            </sequenceFlow>
    
            <serviceTask id="externalSystemCall" name="Enter holidays in external system" activiti:class="com.sky.flowable.CallExternalSystemDelegate"/>
            <sequenceFlow sourceRef="externalSystemCall" targetRef="holidayApprovedTask"/>
    
            <userTask id="holidayApprovedTask" name="Holiday approved" activiti:assignee="${employee}"/>
            <sequenceFlow sourceRef="holidayApprovedTask" targetRef="approveEnd"/>
    
            <serviceTask id="sendRejectionMail" name="Send out rejection email" activiti:class="com.sky.flowable.SendRejectionMail"/>
            <sequenceFlow sourceRef="sendRejectionMail" targetRef="rejectEnd"/>
    
            <endEvent id="approveEnd"/>
    
            <endEvent id="rejectEnd"/>
    
        </process>
    
    </definitions>
    

    main:

    package com.sky.flowable;
    
    import org.activiti.engine.*;
    import org.activiti.engine.history.HistoricActivityInstance;
    import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.ProcessDefinition;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Scanner;
    
    /**
     * @author sky
     * @version 1.0
     * @since 4.0
     */
    public class main {
        public static void main(String[] args) {
            ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
                    .setJdbcUrl("jdbc:h2:mem:flowable;DB_CLOSE_DELAY=-1")
                    .setJdbcUsername("sa")
                    .setJdbcPassword("")
                    .setJdbcDriver("org.h2.Driver")
                    .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
    
            ProcessEngine processEngine = cfg.buildProcessEngine();
    
            /*创建了一个新的部署*/
            RepositoryService repositoryService = processEngine.getRepositoryService();
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("holiday-request.bpmn20.xml")     //TODO holiday.xml命名为何不行?
                    .deploy();
    
            /*部署流程定义*/
            ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                    .deploymentId(deployment.getId())
                    .singleResult();
            System.out.println("Found process definition : " + processDefinition.getName());
    
            Scanner scanner= new Scanner(System.in);
            System.out.println("Who are you?");
            String employee = scanner.nextLine();
            System.out.println("How many holidays do you want to request?");
            Integer nrOfHolidays = Integer.valueOf(scanner.nextLine());
            System.out.println("Why do you need them?");
            String description = scanner.nextLine();
    
            RuntimeService runtimeService = processEngine.getRuntimeService();
            /*参数传递*/
            Map<String, Object> variables = new HashMap<String, Object>();
            variables.put("employee", employee);
            variables.put("nrOfHolidays", nrOfHolidays);
            variables.put("description", description);
            /*通过RuntimeService启动流程实例*/
            ProcessInstance processInstance =
                    runtimeService.startProcessInstanceByKey("holidayRequest", variables);
    
            /*得到实际的“managers”组任务列表*/
            TaskService taskService = processEngine.getTaskService();
            List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("managers").list();
            System.out.println("You have " + tasks.size() + " tasks:");
            for (int i=0; i<tasks.size(); i++) {
                System.out.println((i+1) + ") " + tasks.get(i).getName());
            }
    
            /*获取特定的流程实例变量*/
            System.out.println("Which task would you like to complete?");
            int taskIndex = Integer.valueOf(scanner.nextLine());
            Task task = tasks.get(taskIndex - 1);
            Map<String, Object> processVariables = taskService.getVariables(task.getId());
            System.out.println(processVariables.get("employee") + " wants " + processVariables.get("nrOfHolidays") + " of holidays. Do you approve this?");
    
            /*完成任务,传递排他网关条件*/
            boolean approved = scanner.nextLine().toLowerCase().equals("y");
            variables = new HashMap<String, Object>();
            variables.put("approved", approved);
            taskService.complete(task.getId(), variables);
    
            /*只有一个特定流程实例的活动
              只有完成的活动
              按结束时间排序*/
            HistoryService historyService = processEngine.getHistoryService();
            List<HistoricActivityInstance> activities =
                    historyService.createHistoricActivityInstanceQuery()
                            .processInstanceId(processInstance.getId())
                            .finished()
                            .orderByHistoricActivityInstanceEndTime().asc()
                            .list();
            for (HistoricActivityInstance activity : activities) {
                System.out.println(activity.getActivityId() + " took "
                        + activity.getDurationInMillis() + " milliseconds");
            }
        }
    }
    
    CallExternalSystemDelegate :
    public class CallExternalSystemDelegate implements JavaDelegate {
        public void execute(DelegateExecution execution) {
            System.out.println("Calling the external system for employee "
                    + execution.getVariable("employee"));
        }
    }
    
    SendRejectionMail :
    public class SendRejectionMail implements JavaDelegate {
        public void execute(DelegateExecution execution) {
            System.out.println("Calling the external system for employee "
                    + execution.getVariable("employee") + "   Rejection---------------------");
        }
    }
    

      

  • 相关阅读:
    hdu 1032 水题也wrong 两次(于是乎更有刷水题的必要了)
    淘宝刷钻员
    hdu 4006 求第K大的数 优先队列
    骗子满天飞
    hdu 2115 :I Love This Game(Presentation Error容易输出wrong)
    hdu 1048 (map的使用)
    hdu 1722 数论题
    hdu 1237 简单计算器
    Android编码规范
    xamarin开发实例(一) android PC 基于Tcp双向通信
  • 原文地址:https://www.cnblogs.com/skyLogin/p/7088053.html
Copyright © 2011-2022 走看看