zoukankan      html  css  js  c++  java
  • 工作流笔记第一天_简单介绍activiti

    1、什么是工作流?

           工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。

      工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完成。

    2、工作流主要解决的主要问题是:

      为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

    工作流:
    ①指定流程:在指定流程的过程中,会经历很多版本。
    ②流程正式启动
    ③启动流程实例
    ④申请
    ⑤审批
    ⑥流程结束
    注:虽然利用数据库也可以控制业务流程,但是设计的表通用性不强,根据业务可能需要经常性的进行变更。
    学习JBPM重点在于:①流程定义文档XML②JBPM API③数据库的结构(重点)

    3.activiti中表介绍

      activiti自带的表一共有23个。

      ACT_GE_*:GE是general,通用的。

      ACT_HI_*:HI是history,历史表,一个流程实例跑完就会插入历史表。

      ACT_ID_*:ID是identity,与id相关的表。

      ACT_RE_*:RE是repository,存储的是一些静态资源,如流程的资源。

      ACT_RU_*:RU是run,存储的是一些运行时的信息。

    4.activiti中的Service

      

    5、在Eclipse中添加工作流的插件

          在help-->install new softWare-->work with中直接搜索activiti然后选择安装即可,然后新建项目new-->other-->Activiti-->activiti project,要画工作流流程图new-->other-->Activiti-->activiti Diagram

    6、入门程序

    配置文件(aciviti.cfg.xml):

    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <bean id="processEngineConfiguration"
    class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
    <!-- 设置数据库连接 -->
    <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
    <property name="jdbcUrl"
    value="jdbc:mysql://localhost:3306/activiti"/>
    <property name="jdbcUsername" value="root" />
    <property name="jdbcPassword" value="123" />
    <!-- 设置创建表的方式 -->
    <property name="databaseSchemaUpdate" value="true" />
    </bean>
    </beans>

    代码实现:

    package itheima.process1;

    import java.util.List;

    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;

    public class HelloWord {
    // 获得工作流引擎对象
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /* 部署流程定义 */
    @Test
    public void deloymentProcessDefinition() {
    Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
    .createDeployment()// 创建部署对象
    .name("helloWord入门程序")// 添加部署名称
    .addClasspathResource("diagrams/helloWord.bpmn")// 从classPath的资源中加载,一次只能加载一个文件
    .addClasspathResource("diagrams/helloWord.png").deploy();// 完成部署
    System.out.println("部署id:" + deploy.getId());
    System.out.println("部署名称:" + deploy.getName());
    }

    /* 启动流程实例 */
    @Test
    public void startProcessInstance() {
    // 流程定义的key
    String processDefinitionKey = "helloWord";
    ProcessInstance processInstance = processEngine.getRuntimeService()// 与正在执行的流程实例和流程对象有关的service
    .startProcessInstanceByKey(processDefinitionKey);
    // 使用流程定义的key启动流程实例,key与helloWord.bpmn中的id值相同
    System.out.println("流程实例id:" + processInstance.getId());
    System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());
    }

    /* 查询当前人的个人任务 */
    @Test
    public void findMyPersonalTask() {
    String assignee = "张三";
    List<Task> list = processEngine.getTaskService()// 获取与正在执行任务的service
    .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());
    }
    }
    }
    }

  • 相关阅读:
    iOS电商类App研发学习总结
    Swift4.0复习闭包
    Swift4.0复习函数
    Swift4.0复习Optional
    SQL面试题
    sql(join on 和where的执行顺序)
    算法四:回溯和分支界定
    算法三:贪婪算法
    编程之美2.11:寻找最近的点对
    编程之美2.5:寻找最大的K个数
  • 原文地址:https://www.cnblogs.com/smile-nn/p/7376004.html
Copyright © 2011-2022 走看看