工作流引擎之一

目录

一,什么是工作流

1.1  工作流介绍

1.2 工作流实现方式        

1.3 工作流实现原理分析

二,什么是activiti7

2.1 activiti 介绍

2.1.1  BPM (Business Process Management) 即业务流程管理

2.1.2  BPM 软件 就是有业务流程的地方都可以 BPM 软件进行管理,业务流程管理软件

2.1.3  BPMN(Business Process Model And Notation) 业务流程模型和符号

2.2 activiti 如何使用

2.2.1 整合activiti

2.2.2 实现业务流程建模,使用BPMN实现业务流程图        

2.2.3 部署activiti 

2.2.4 流程定义

2.2.5 流程定义部署

2.2.6 启动一个流程实例(ProcessInstance)

2.2.7 用户查询待办任务(Task)

2.2.8 用户办理任务

2.2.9 流程结束


一,什么是工作流

1.1  工作流介绍

        工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者 之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标, 或者促使此目标的实现”。

1.2 工作流实现方式        

        在没有专门的工作流引擎之前,我们之前为了实现流程控制,通常的做法就是采用状态字段的值来 跟踪流程的变化情况。这样不用角色的用户,通过状态字段的取值来决定记录是否显示。

         针对有权限可以查看的记录,当前用户根据自己的角色来决定审批是否合格的操作。如果合格将状 态字段设置一个值,来代表合格;当然如果不合格也需要设置一个值来代表不合格的情况。

        这是一种最为原始的方式。通过状态字段虽然做到了流程控制,但是当我们的流程发生变更的时候, 这种方式所编写的代码也要进行调整。

        那么有没有专业的方式来实现工作流的管理呢?并且可以做到业务流程变化之后,我们的程序可以 不用改变,如果可以实现这样的效果,那么我们的业务系统的适应能力就得到了极大提升。

1.3 工作流实现原理分析

如何可以做到我们在业务流程发生变更后,我们的业务系统代码可以不发生改变?此时我们就来分 析一下原理。 具体分析过程如下图所示:

二,什么是activiti7

2.1 activiti 介绍

2.1.1  BPM (Business Process Management) 即业务流程管理

        是一种以规范化的构造端到端的卓越 业务流程为中心,以持续的提高组织业务绩效为目的系统化方法,常见商业管理教育如 EMBA、MBA 等均将 BPM 包含在内(并不是技术,而是管理的类型)

2.1.2  BPM 软件 就是有业务流程的地方都可以 BPM 软件进行管理,业务流程管理软件

2.1.3  BPMN(Business Process Model And Notation) 业务流程模型和符号

        2.1.3.1 BPMN 是由 BPMI(Business Process Management Initiative)开发的一套标准的业务流程建模符号,使用 BPMN 提供的符号可以 创建业务流程。 2004 年 5 月发布了 BPMN1.0 规范.BPMI 于 2005 年 9 月并入 OMG(The Object Management Group 对象管理组织)组织。OMG 于 2011 年 1 月发布 BPMN2.0 的最终版本。

         2.1.3.2  BPMN 是目前被各 BPM 厂商广泛接受的 BPM 标准。Activiti 就是使用 BPMN 2.0 进行流程建 模、流程执行管理,它包括很多的建模符号,比如: Event 用一个圆圈表示,它是流程中运行过程中发生的事情。

        

​ 

 Bpmn 图形其实是通过 xml 表示业务流程,随便找一个Bpmn 图像的xml 代码展示下:

<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:activiti="http://activiti.org/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="sample-diagram" targetNamespace="http://www.jeecg.com" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
  <bpmn2:process id="process_16369455" name="扩展子流程55">
    <bpmn2:extensionElements>
      <activiti:executionListener class="org.jeecg.modules.extbpm.listener.execution.ProcessEndListener" event="end" />
    </bpmn2:extensionElements>
    <bpmn2:startEvent id="Start" name="开始" activiti:initiator="applyUserId">
      <bpmn2:outgoing>Flow_1v00nil</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:userTask id="Activity_0jhkcz3" name="经理审批" activiti:assignee="admin">
      <bpmn2:incoming>Flow_1v00nil</bpmn2:incoming>
      <bpmn2:outgoing>Flow_114pqwm</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:sequenceFlow id="Flow_1v00nil" sourceRef="Start" targetRef="Activity_0jhkcz3" />
    <bpmn2:sequenceFlow id="Flow_114pqwm" sourceRef="Activity_0jhkcz3" targetRef="Activity_0a8e5m4" />
    <bpmn2:userTask id="Activity_1n3fjzz" name="总监审批" activiti:assignee="admin">
      <bpmn2:incoming>Flow_167gend</bpmn2:incoming>
      <bpmn2:outgoing>Flow_1qeo3ls</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:endEvent id="Event_0wa0mji">
      <bpmn2:incoming>Flow_1qeo3ls</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="Flow_1qeo3ls" sourceRef="Activity_1n3fjzz" targetRef="Event_0wa0mji" />
    <bpmn2:subProcess id="Activity_0a8e5m4">
      <bpmn2:incoming>Flow_114pqwm</bpmn2:incoming>
      <bpmn2:outgoing>Flow_167gend</bpmn2:outgoing>
      <bpmn2:startEvent id="Event_0r2bn7o">
        <bpmn2:outgoing>Flow_1uztnap</bpmn2:outgoing>
      </bpmn2:startEvent>
      <bpmn2:userTask id="Activity_1si9vok" name="子-节点1" activiti:assignee="jeecg">
        <bpmn2:incoming>Flow_1uztnap</bpmn2:incoming>
        <bpmn2:outgoing>Flow_0jewez1</bpmn2:outgoing>
      </bpmn2:userTask>
      <bpmn2:userTask id="Activity_0e11pl3" name="子-节点2" activiti:assignee="jeecg">
        <bpmn2:incoming>Flow_0jewez1</bpmn2:incoming>
        <bpmn2:outgoing>Flow_0pvd24k</bpmn2:outgoing>
      </bpmn2:userTask>
      <bpmn2:endEvent id="Event_1geenoq">
        <bpmn2:incoming>Flow_0pvd24k</bpmn2:incoming>
      </bpmn2:endEvent>
      <bpmn2:sequenceFlow id="Flow_0pvd24k" sourceRef="Activity_0e11pl3" targetRef="Event_1geenoq" />
      <bpmn2:sequenceFlow id="Flow_0jewez1" sourceRef="Activity_1si9vok" targetRef="Activity_0e11pl3" />
      <bpmn2:sequenceFlow id="Flow_1uztnap" sourceRef="Event_0r2bn7o" targetRef="Activity_1si9vok" />
    </bpmn2:subProcess>
    <bpmn2:sequenceFlow id="Flow_167gend" sourceRef="Activity_0a8e5m4" targetRef="Activity_1n3fjzz" />
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="process_16369455">
      <bpmndi:BPMNEdge id="Flow_167gend_di" bpmnElement="Flow_167gend">
        <di:waypoint x="890" y="230" />
        <di:waypoint x="990" y="230" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1qeo3ls_di" bpmnElement="Flow_1qeo3ls">
        <di:waypoint x="1090" y="230" />
        <di:waypoint x="1172" y="230" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_114pqwm_di" bpmnElement="Flow_114pqwm">
        <di:waypoint x="330" y="230" />
        <di:waypoint x="400" y="230" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1v00nil_di" bpmnElement="Flow_1v00nil">
        <di:waypoint x="178" y="230" />
        <di:waypoint x="230" y="230" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="Start_di" bpmnElement="Start">
        <dc:Bounds x="142" y="212" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="149" y="255" width="22" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0jhkcz3_di" bpmnElement="Activity_0jhkcz3">
        <dc:Bounds x="230" y="190" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1n3fjzz_di" bpmnElement="Activity_1n3fjzz">
        <dc:Bounds x="990" y="190" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_0wa0mji_di" bpmnElement="Event_0wa0mji">
        <dc:Bounds x="1172" y="212" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0sq49ka_di" bpmnElement="Activity_0a8e5m4" isExpanded="true">
        <dc:Bounds x="400" y="140" width="490" height="180" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="Flow_1uztnap_di" bpmnElement="Flow_1uztnap">
        <di:waypoint x="458" y="230" />
        <di:waypoint x="510" y="230" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0jewez1_di" bpmnElement="Flow_0jewez1">
        <di:waypoint x="610" y="230" />
        <di:waypoint x="670" y="230" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0pvd24k_di" bpmnElement="Flow_0pvd24k">
        <di:waypoint x="770" y="230" />
        <di:waypoint x="832" y="230" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="Event_0r2bn7o_di" bpmnElement="Event_0r2bn7o">
        <dc:Bounds x="422" y="212" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1si9vok_di" bpmnElement="Activity_1si9vok">
        <dc:Bounds x="510" y="190" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0e11pl3_di" bpmnElement="Activity_0e11pl3">
        <dc:Bounds x="670" y="190" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_1geenoq_di" bpmnElement="Event_1geenoq">
        <dc:Bounds x="832" y="212" width="36" height="36" />
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

2.2 activiti 如何使用

2.2.1 整合activiti

        Activiti是一个工作流引擎,业务系统使用Activiti来对系统的业务流程进行自动化管理,为了方便业务系统访问(操作)Activiti的接口或功能,通常将Activiti和业务系统的环境集成在一起。

2.2.2 实现业务流程建模,使用BPMN实现业务流程图        

  • 使用Activiti流程建模工具定义业务流程(.bpmn文件)。
  • .bpmn文件就是业务流程定义文件,通过xml定义业务流程。
  • 如果使用其他公司开发的工作引擎一般都提供了可视化的建模工具(Process Designer)用于生成流程定义文件,建模工具操作直观,一般都支持图形化拖拽方式、多窗口的用户界面、丰富的过程图形元素、过程元素拷贝、粘贴、删除等功能。

2.2.3 部署activiti 

        Activiti 是一个工作流引擎(其实就是一堆 jar 包 API),业务系统使用 activiti 来对系统的业务流程进行自动化管理,为了方便业务系统访问(操作)activiti 的接口或功能,通常将 activiti 环境与业务系统的环境集成在一起。

2.2.4 流程定义

        使用 activiti 流程建模工具(activity-designer)定义业务流程(.bpmn 文件) 。 .bpmn 文件就是业务流程定义文件,通过 xml 定义业务流程。

        如果使用其它公司开发的工作作引擎一般都提供了可视化的建模工具(Process Designer)用于生 成流程定义文件,建模工具操作直观,一般都支持图形化拖拽方式、多窗口的用户界面、丰富的过 程图形元素、过程元素拷贝、粘贴、删除等功能。

2.2.5 流程定义部署

        向 activiti 部署业务流程定义(.bpmn 文件)。 使用 activiti 提供的 api 向 activiti 中部署.bpmn 文件(一般情况还需要一块儿部署业务流程的图片.png)

2.2.6 启动一个流程实例(ProcessInstance)

        启动一个流程实例表示开始一次业务流程的运行,比如员工请假流程部署完成,如果张三要请假就可以启动一个流程实例,如果李四要请假也启动一个流程实例,两个流程的执行互相不影 响,就好比定义一个 java 类,实例化两个对象一样,部署的流程就好比 java 类,启动一个流程 实例就好比 new 一个 java 对象。

2.2.7 用户查询待办任务(Task)

        因为现在系统的业务流程已经交给 activiti 管理,通过 activiti 就可以查询当前流程执行到哪了, 当前用户需要办理什么任务了,这些 activiti帮我们管理了,而不像上边需要我们在 sql语句中的where 条件中指定当前查询的状态值是多少。

2.2.8 用户办理任务

        用户查询待办任务后,就可以办理某个任务,如果这个任务办理完成还需要其它用户办理,比如采 购单创建后由部门经理审核,这个过程也是由 activiti 帮我们完成了,不需要我们在代码中硬编码指 定下一个任务办理人了。

2.2.9 流程结束

当任务办理完成没有下一个任务/结点了,这个流程实例就完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vegetari

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值