工作流(3)--activit 5.14 开发测试(绘制流程、发布流程、启动实例、流程运转)

1. 绘制流程,以简单的请假流程为例

wKioL1Lg2YbQQ8ODAADFI9VWjgI767.jpg

2. 发布流程

    2.1 流程发布有多种方式,可以单独发布BPMN20.xml,也可以将资源文件(xml,png,form)打包成zip或者bar文件,进行发布,zip的ant代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="iworkflow" default="workflow.package.leave">
    <!-- 路径设置 -->
    <property name="workflow.diagrams" value="src/main/resources/diagrams"></property>
    <property name="workflow.developments" value="src/main/resources/developments"></property>
                                                                                                                                                   
    <!-- 流程定义路径 -->
    <property name="myLeave" value="${workflow.diagrams}/leave"></property>
    <property name="myPayment" value="${workflow.diagrams}/payment"></property>
    <!-- 流程发布路径
    <property name="p_myLeave" value="${workflow.developments}/leave"></property>
    <property name="p_myPayment" value="${workflow.developments}/payment"></property>
     -->
                                                                                                                                                    
    <!-- 请假流程定义打包 -->
    <target name="workflow.package.leave">
        <echo>打包流程定义:请假流程</echo>
        <copy file="myLeave.bpmn" tofile="myLeave.bpmn20.xml" />
        <zip destfile="myLeave.bar" basedir="." update="true" includes="*20.xml,*.png,*.form" />
        <copy file="myLeave.bar" tofile="../../developments/myLeave.bar" />
        <delete file="myLeave.bpmn20.xml" />
        <delete file="myLeave.bar" />
    </target>
</project>

   

   2.2 发布流程定义,Java代码如下:

@Test
    public void publish(){
        String file = "src/main/resources/developments/myLeave.bar";
        ZipInputStream inputStream = null;
        try {
            inputStream = new ZipInputStream(new FileInputStream(file));
            repoService.createDeployment().name("Leave.bar").addZipInputStream(inputStream).deploy();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

   

   2.3 查看数据库新增内容,我这里选用mysql5.5,涉及的数据表为act_re_*

wKiom1Lg3IyQCDymAAJJPgwXiGw447.jpg


3. 启动流程实例

   此处操作可参见activiti5.14 官方API,以下是测试代码

//启动流程
    @Test
    public void startProcess(){
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("employeeName", "hruser");
        //一般在流程模型中使用的ID,在Activiti中都是Key
        ProcessInstance pi = runService.startProcessInstanceByKey("myLeave", variables);
        System.out.println("Number of process instances: " + runService.createProcessInstanceQuery().count());
    }

4.流程运转

   流程实例启动后,需要各环节办理相应的任务,才能将工作流进行,运转代码如下:

//获取代办,并处理相应任务
    @Test
    public void getTaskList(){
        List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("hr").list();//流程环节配置为候选群组
//      List<Task> tasks = taskService.createTaskQuery().taskAssignee("hr").list();//流程环节配置为候选人
        Task task = tasks.get(0);
        Map<String, Object> taskVariables = new HashMap<String, Object>();
        taskVariables.put("leader", "hr");
        taskVariables.put("managerMotivation", "no problem!");
        taskService.complete(task.getId(), taskVariables);
    }

   运转过程中,可以查看数据库中运转中的流程实例信息(代办)和流程运转的历史信息(已办)的历史信息,如下图所示

wKioL1Lg3s2CKI6bAALBgAayMr4501.jpg






本文出自 “寂寞肖申克” 博客,谢绝转载!

你可能感兴趣的:(工作流,Activiti,启动流程,发布流程,绘制流程,实例运转)