`
eric_weitm
  • 浏览: 234998 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于camunda的工作流开发

 
阅读更多

一、定义

工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。解决的主要问题是:为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

二、作用

1、企业太大时,做一件事情需要多个部门、多个人一起去合作完成,随着人员的流动,可能没有人能了解所有的流程细节,这时使用工作流来自动化的连接不同的部门和人员,简单的东西可以自动由程序来完成,每个具体的人只需要关注自己的一个工作就可以了。(流程能固化和自动化,流程是企业积累的重要资产,之前是积累到具体的人,而不是企业)

2、确定每个人的权限和责任,保证事事有人做,人人有事做(管理上更高效,减少扯皮的事情,企业最大的消耗是所谓的沟通和开会)

3、监控过程(每次修改,每个人的产出,所有的数据,流程都有记录),可以控制人员、设备、数据等方面的风险

4、减少沟通、开会成本。减少部门间,个人间扯皮的成本

 

三、Business Process Modeling Notation,

1、业务流程建模与标注,包括这些图元如何组合成一个业务流程图(Business Process Diagram),是iso标准。BPMN的主要目标就是要提供被所有业务用户理解的一套标记语言,包括业务分析者、软件开发者以及业务管理者与监察者。BPMN还将支持生成可执行的BPEL4WS语言。所以,BPMN在业务流程设计与流程实现之间搭建了一条标准化的桥梁。

BPMN定义了业务流程图,其基于流程图技术,同时为创建业务流程操作的图形化模型进行了裁减。业务流程的模型就是图形化对象的网图,包括活动(也可以说工作)和定义操作顺序的流控制。

2、底层数据格式是xml。定义了一些标签的标准含义和图形表示。一方面通过图形方便所有人理解流程,另一方面限制实现方必须按着流程的要求来实现。

3、Pool:参与方,比如亚马逊公司,内部包括lane。

Lane:pool的细化,比如亚马逊内部的部门,可以嵌套

Event:用一个圆圈表示,它是流程运行过程中发生的事情。事件的发生会影响到流程的流转.事件包含Start\Intermediate\End三种类型

Activities 活动,圆角矩形,分为task, sub-process

userTask:人工操作 serviceTask:程序自动操作 mannultask:线下操作,比如发快递;callactivity,调用别的子流程

Gateway,网关,菱形,用来表示流程的分支和聚合

前后顺序,带箭头的实线。

4、排他网关(中间是×):只会走一个出的方向(xor)

并行网关(中间是+)进入时等待所有的都到达,出去时多个分支同时走(and)

包容网关(中间是圈) 允许多个分支

与uml的区别

uml:oop,面向设计和实现

bpmn:面向流程,是更高层面的操作,重点是不同部门,不同人之间的交互

与程序流程图的区别

流程图:面向指令或控制语句的粒度,属于程序逻辑实现的层面

工作流:面向一个任务,可能对应了软件里的一个系统。一般情况下,一个人就可以搞定的任务,都属于一个工作流节点,必须要换人操作时(比如需要经理的权限,需要跨部门,需要交叉复核),就必须要切分成多个工作流节点

 

四、Camunda

1、Camunda BPM 是一个灵活的工作流和过程自动化框架,它的核心是一个在Java虚拟机内部运行的原生BPMN2.0流程引擎,因此它可以嵌入到任何Java应用程序或运行时容器中。

2、提供的功能

流程实现和执行组件:camunda engine(负责执行BPMN 2.0流程)、REST API

流程设计组件:camunda modeler

流程操作组件(engine级别的管理后台):camunda engine、camunda cockpit

任务管理组件:camunda tasklist

前端组件:formsdk.js

 

五、基本概念

ProcessEngine:整个流程引擎 

Multi-Tenancy:多个子公司之间的数据隔离

静态部分:

  Process Definitions 流程定义,对应一个BPMN xml,内部映射为一个图结构

 Keys and Versionskey是id,相同key多次提交是不同version

  Suspend Process Definitions  暂时挂起,不允许执行

  Process Instances 一次执行,有中断状态时,会存库,用户操作后状态往后走

  Activity 一个活动(process的下一级),包括task和subprocess

  Task 需要用户或系统操作的任务

runtime动态部分:

  Variables 输入输出的数据

  Executions执行的路径(可能是并行的流程中的一个,也可能是子流程),可以表达一个变量的范围

  token state :整个执行的过程是token传递的过程

  job具体调度的内容,execution的下一层,实际做的事情由jobHandler确定

 

核心服务

RepositoryService 存储流程定义

RuntimeService 管理运行实例,用事件来trigger流程往后走

TaskService人员需要处理的任务

IdentityService 身份验证

FormService 前端接口

HistoryService 历史数据的统处理

ManagementService 数据库操作

FilterService 筛选

ExternalTaskService 外部任务

 

六、开发环境

jdk + maven + tomcat + camunda + camunda modeler + eclipse

camunda引擎使用和工作流开发方式

整个环境是 java web 程序

camunda内嵌入web 容器中

预先发布restapi、admin、cockpit、tasklist等web app

每个新的流程定义一个app,并发布,内部可以实现与tasklist的交互,比如每一个usertask的form界面

mvn clean tomcat7:redeploy或mvn clean tomcat7:deploy

 

七、工作流程

可视化编辑bpmn(业务人员和技术人员合作)

扩展bpmn,包括添加逻辑变量、设置类型、添加表单、代码逻辑等

编写后端代码(java)并做相应配置

前端编写js和html,来处理逻辑

部署到tomcat和camunda中进行调度

根据runtime的调度来修改bug,返回到第三步,一直迭代到没有bug

八、坑

别人给过来的bpmn有各种问题,需要仔细检查,有可能有严重的逻辑错误

java代码中修改 process id,不然发布不成功

设置和修改id ,isExecutable设为true

所有分支设置default

所有非默认分支都需要添加条件

简单验证可以添加多个formfield,后面可以直接在变量里引用

内嵌中文的form   存储时存成utf-8, <html lang="zh-cmn-Hans">

js脚本中添加 debugger; 可以添加断点来调试(chrome)

INOUT映射:外部的variable与delegate内部的变量之间的名字映射

九、引擎内部实现

org.camunda.bpm.engine.impl.persistence.entity对应各个表的数据结构

org.camunda.bpm.engine.impl.db.sql.DbSqlSession 用于真正的进行sql操作

使用mybatis进行持久化

 

1、表模式缩写:

PROC:process

INST:instance

DEF:definition

RU:runtime

RE:repository

HI:history

GE:general 

2、核心表概览:

ACT_ID_GROUP 组

ACT_ID_USER 账号

ACT_ID_MEMBERSHIP 归属关系

ACT_RU_AUTHORIZATION 资源、服务与账户、组之间的对应关系

ACT_GE_PROPERTY 系统运行时属性

ACT_GE_BYTEARRAY 字节数据

ACT_RE_DEPLOYMENT发布

ACT_RU_EXECUTION执行路径

ACT_RU_JOBruntime一个调度的单位

ACT_RU_JOBDEF 作业定义

ACT_RE_PROCDEF 流程定义,区分版本

ACT_RU_TASK一个工作流中的任务

ACT_RU_VARIABLE workflow中跨越节点的数据

ACT_RU_METER_LOG作业调度中的详细日志

ACT_HI_PROCINST 流程实例

ACT_HI_ACTINST活动实例

ACT_HI_TASKINST任务实例

ACT_HI_VARINST  变量实例

ACT_HI_DETAIL   变量的详细信息,比如a proc下,有个a1 act,之下有个a11 task,之下有个a111变量,这个变量和ACT_GE_BYTEARRAY的对应关系,类型等信息

ACT_HI_COMMENT 对某个task的评论

ACT_HI_OP_LOG 详细操作日志,比如某个人接了某个任务

 

3、前端

基于 "angular","jquery",实现了"camunda-commons-ui","camunda-bpm-sdk-js","angular-data-depend",方便进行模块化的ui开发。

camunda-bpm-sdk中提供CamSDK CamSDK.Client taskService(list, form)等封装 

 

十、admin默认账号 demo/demo

act_ru_authorization

`REV_` 一直是1

`TYPE_`  allow deny global(允许所有人) 这时user_id是*

`GROUP_ID_` 、`USER_ID_`  一般只会设置一个

`RESOURCE_TYPE_` 流程定义、流程实例、任务、组相关、账户授权 等各种类型

`RESOURCE_ID_` 具体的内容

`PERMS_` 权限,读。写。更新 创建等

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics