zoukankan      html  css  js  c++  java
  • activiti小结

    前提:业务流程复杂且流程频繁变更的,建议使用工作流;其他情况不建议使用。

    activiti(v5.14),工作流引擎,基于jbpm。使用建模语言BPMN2.0进行定义。

    工作流数据需要写入数据库,activiti(v5.14)支持的数据库有:db2、h2、mssql、mysql、oracle、postgres。

    需要说明的是,activiti(v5.14)底层调用MyBatis来操作数据库。

    activiti自带创建数据库表的SQL文件,执行即可。或者XML中设置通过创建ProcessEngine对象时检测有无activiti的表,如果没有则创建。(true)
        --ge通用表,存储上传的图片及BPMN文件等。
        --history历史表,流程执行过程的历史数据。
        --id用户身份表,存储用户信息、组信息、用户和组的关系。
        --re资源表,存储流程定义的信息、部署流程的信息。
        --ru表,存储当前正在执行的流程相关信息,当前执行任务、流程变量等。
    XML中需要配置数据源DataSource和ProcessEngineConfiguration。

    使用步骤:

    ProcessEngineConfiguration(加载xml)

    --> ProcessEngine(单例管理!!!)

    --> Activiti_Service(多个不同的service:RepositoryService,TaskService,IdentityService,FormService,RuntimeService,ManagementService,HistoryService)

    概念①:流程定义流程实例任务流程变量

    对比Java语言来说,流程定义就是类,流程实例就是类的实例化对象,任务则是类中的方法,流程变量则是方法的形参。

      【】略微不同的是,流程中的任务是有顺序的,而类中的方法则可以随意调用。

    所以可以存在多个流程定义(比如同时存在报销流程、采购流程等),每个流程定义又可以存在多个流程实例(多人同时报销,多人同时采购等)。

    每个流程实例的任务列表(步骤)虽然一致,但进度彼此无关(例如甲刚申请报销,乙已经审核完毕等)。

    同样的,每个流程实例的流程变量也彼此无关(例如报销金额)。

    概念②:工作流引擎、各个Service

    activiti的核心就是流程引擎ProcessEngine。系统通过ProcessEngineConfiguration加载配置文件,并生成ProcessEngine,再通过ProcessEngine调用各个service。

    如下图所示:

    RepositoryService:资源Service,用于部署流程定义。

    RuntimeService:运行Service,用于开启流程实例。

    TaskService:任务Service,用于处理任务相关操作:完成任务等。

    ManagementService:管理Service,用于(暂缺)。

    IdentityService:身份Service,用于处理用户、用户组、用户和用户组的关系。

    HistoryService:历史Service,用于查看历史记录。

    FormService:自定义表单Service,用于处理自定义的表单数据。

    流程变量通过Map对象存入,可以是基本类型,也可以是pojo(需要实现Serializable接口)。Map对象的Key就是流程变量的Key。

      用法,UEl表达式:${ key > 5000 || key < 2000}         

    在工作流操作的表如报销单表中添加一个流程实例字段,使用该字段访问流程。


    任务有任务人、候选人、候选组。 候选人/组,都可以有多个,以逗号分开。
    建议候选组,这样就是组任务。用户只要隶属于用户组即可。

    组用户查询组(待办)任务、拾取组(待办)任务-->个人待办任务、完成个人待办任务。
        查询过程:创建查询、添加查询信息、查询、处理查询结果。
        组任务和个人任务可以同时存在。
        【】【】activiti没对拾取组任务的用户做限制,任何人都可以拾取。所以需要手动校验后再拾取!!!
    通过IdentityService添加/删除用户组、用户、关系。
        identityService.saveUser(user);
        identityService.saveGroup(group);
        identityService.deleteMembership(user, group); //
        identityService.createMembership(user, group); //

    小知识:

    排他网关
        实现流程分支,也叫异或(XOR)网关。
        经过它的流程分支,只会有一条执行。如果分支条件都不满足,就会抛出异常,但流程并没有异常结束。
        如果不使用排他网关,遇到分支都不符合条件的时候,流程会异常结束。【】【】

    activiti(v5.14)中文手册

  • 相关阅读:
    jinja2模板引擎生成HTML【转】
    Hadoop集群安装
    批量执行工具之pssh
    Linux下安装JDK1.8
    pycharm打开远程linux ssh terminal
    tar高阶操作之加密分卷压缩与解密压缩
    Docker/Dockerfile debug调试技巧
    docker容器内挂载目录无权限 ls cannot open directory Permission denied
    bmc Linux ipmi远程管理口配置查询及密码重置
    js对input框的可编辑属性设置
  • 原文地址:https://www.cnblogs.com/larryzeal/p/5351707.html
Copyright © 2011-2022 走看看