一、运行官方例子
activiti-admin.war
activiti-app.war
工作流平台:localhost:8080/activiti-app admin test
管理平台:localhost:8080/activiti-admin admin admin
二、流程引擎配置
1、指定自己的配置文件
ProcessEngineConfiguration processEngineConfiguration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti.xml");
ProcessEngineConfiguration processEngineConfiguration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti.xml", "beanName");
2、数据库更新策略
3、历史配置
等
三、组件
RepositoryService:管理流程定义,流程部署。
RuntimeService:流程运行时,对管理流程实例。
TaskService:管理流程任务,如任务提醒、任务完成、创建任务、分配任务。
IdentityService:管理流程角色数据,包括用户组、用户以及它们之间的关系。
ManagementService:管理、维护流程引擎。
HistoryService:操作流程的历史数据,包括查询、删除这些历史数据。
DynamicBpmnService:使用该服务,可以不需要重新部署流程模型,就可以实现对流程模型的部分修改。
三、表设计
ACT_GE(general):通用数据
ACT_GE_BYTEARRAY:流程图、流程流、流程过程中的图
ACT_GE_PROPERTY:activiti内置数据
ACT_RE(repository):保存流程定义、部署信息
ACT_RE_DEPLOYMENT:一次部署可能包含多个流程
ACT_RE_PROCDEF:流程定义表
ACT_ID(identity):身份数据表,没有与流程做关联
ACT_ID_USER:用户表
ACT_ID_GRUP:分组表
ACT_ID_MEMBERSHIP:用户分组表
ACT_ID_INFO:保存用户账号、用户信息 (type: account, userinfo, NULL,patient_id:自关联),类似EVA,一条userinfo表示一个column。
ACT_RU(runtime):保存流程运行时的数据,流程实例、执行流、任务、参数等
ACT_RU_EXECUTION:保存流程实例,执行流
ACT_RU_TASK:任务表
ACT_RU_VARIABLE:任务参数、流程参数
ACT_RU_IDENTITYLINK:流程任务与身份的关系表
ACT_RU_JOB:一般工作表
ACT_RU_TIMER_JOB:定时执行工作表
ACT_RU_SUSPENDED_JOB:中断工作表
ACT_RU_DEADLETTER_JOB:无法执行的工作表
ACT_RU_EVENT_SUBSCR:事件描述表,流程到达事件节点写入事件数据
ACT_HI(history):历史数据表,跟运行时相对应
ACT_HI_PROCINST:流程实例的历史数据
ACT_HI_TASKINST:历史任务表,流程到达某个任务点时写入数据
ACT_HI_VARINST:历史参数表
ACT_HI_ACTINST:历史行为表,追踪完整流程信息
ACT_HI_ATTACHMENT:附件表
ACT_HI_COMMENT:评论表
ACT_DMN:activiti自带规则引擎的表
四、查询
createXxxQuery()
Query:
asc()
desc()
count()
list()
listPage()
singleResult()
五、
流程部署
查询流程文件/图
删除部署资源
六、
流程定义
中止、激活
七、任务
任务角色:
任务候选人(组)
任务持有人
任务代理人
taskService.claim
taskService.complete
任务参数设置和获取
任务参数
本地参数:作用域本流程节点。taskService.setVariableLocal,taskService.complete之后,重新查询出task的对应variable为空
全局参数:作用域整个流程。taskService.setVariable 或者 配置<dataObject>到<process>里
附件:设置附件,taskService.createAttachment。获取附件,taskService.getAttachment
八、
执行流
Execution <— ProcessInstance
主执行流,子执行流(当前产生的分支)
可以根据任务获取执行流
启动流程
runtimeService.startProcessInstanceById
runtimeService.startProcessInstanceByKey
runtimeService.startProcessInstanceByMessage
流程参数
本地参数:runtimeService.setVariableLocal
全局参数:runtimeService.setVariable
九、
receiveTask
receiveTask用trigger,onlyChildExecutions查找子执行流
signal
信号事件:广播
捕获事件:添加信号事件配置<intermediateCatchEvent><signalEventDefinition>和<signal>
抛出事件:执行runtimeService.signalEventReceived("signalId")
message
消息事件:订阅投递
捕获事件:添加消息事件配置<intermediateCatchEvent><messageEventDefinition>和<message>
抛出事件:执行runtimeService.messageEventReceived("msgId", execution.getId())
十、
serviceTask
工作
异步任务
配置异步执行器asyncExecutorActivate为true
配置<serviceTask activiti:class="xxx.MyDelegateClass" activiti:async="true">(不是BPMN规范)
MyDelegateClass实现JavaDelegate,实现execute方法
定时事件
添加定时事件配置<intermediateCatchEvent><timerEventDefinition>和内部的<timeDuration>或<timeCycle>
暂停的工作
runtimeService.suspendProcessInstanceById
runtimeService.activateProcessInstanceById
无法执行的工作
十一、
事件
开始事件
无指定开始事件
定时器开始事件
消息开始事件
错误开始事件:事件子流程
结束事件
无指定结束事件
错误结束事件——错误开始事件/错误边界事件
取消结束事件:事务子流程——取消边界事件
终止结束事件
中间事件
定时器中间事件
信号中间事件
消息中间事件
边界事件
定时器边界事件
错误边界事件
信号边界事件
补偿边界事件
十二、任务
ServiceTask
分类
Java Service Task
activiti:class指定的类为JavaDelegate ActivityBehavior的实现类
activiti:delegateExpression="${myDelegation}"且设置参数,其类需实例化
activiti:expression="${myBean.print(execution)}" 或 activiti.expression="${execution.setVariable('myName', myBean.name)}"
Shell Task
Java执行shell脚本方式
java.lang.Runtime
java.lang.ProcessBuilder
activiti扩展配置 activiti:type="shell",可以配置输入参数及输出结果到流程实例参数
Web Service Task
SendTask
邮件任务
activiti:type="mail"并配置发、收邮件信息
发邮件需配置activiti的bean的mail属性
ReceiveTask
类似捕获事件
runtimeService.trigger
UserTask
候选人(用户、用户组)、代理人(一个代理人)
设置权限方法
可在xml按照BPMN规范配置
或者可在xml按照activiti扩展配置
或者可用api设置
或者在任务监听器(xml配置)里用api设置
或者JUEL在xml里结合activiti扩展配置进行动态配置(流程定义时,调用的实例需参数化,其类需序列化)
ManualTask
类似抛出事件
BusinessRuleTask
ScriptTask
十三、监听器
任务监听器(activiti扩展,用于UserTask)
<activiti:taskListener>
指定方式
class="" activiti配置activiti:taskListener监听类及监听触发条件event,监听类需实现TaskListener
delegateExpression="${myDelegation}",需实现序列化和TaskListener
expression="${myBean.testBean(task)}",实现序列化,不需实现TaskListener
event
create 用户任务产生时
assignment 用户任务指定代理人时
complete 用户任务完成时
给监听器注入参数
<activiti:field name="userName" stringValue="zhangsan" />
流程监听器
<activiti:executionListener>
指定方式(类似用户任务监听器)
可以监听
流程的开始、结束
活动的开始、过渡、结束
流程网关的开始
中间事件的开始、结束
开始事件的结束,结束时间的开始
十四、子流程
嵌入式子流程
调用式子流程(适用于有公共流程)
(若一个子流程,因为两个流程则产生四条执行流)
runtimeService.createProcessInstanceQuery().superProcessInstanceId()
输入参数,输出参数
事件子流程:由各种事件触发的子流程
可终止的事件子流程
不可终止的事件子流程
事务子流程
也是一种嵌入式子流程,触发补偿
特殊子流程
子流程内任务没有特定顺序(配置【并行】或者 【按顺序但不由配置指定而是由API指定】),多个执行流
十五、顺序流、网关
顺序流
条件顺序流
源:网关、流程活动
配置在<sequenceFlow>内
所有条件不满足,抛出异常->流程实例是否会结束/删除?->经实操,会删除流程实例。
都满足呢?->报错
默认顺序流
不配置条件
如果是多个默认顺序流都满足呢?
网关
单向网关
就是普通的条件顺序流
并行网关
分叉、合并,没有条件
兼容网关
可以单向、可以并行
事件网关
哪个事件先触发就触发哪个事件的流程
组合网关
activiti6.0不支持
十六、流程活动
多实例活动
<multiInstanceLoopCharacteristics>
设置参数
方式一:<loopDataInputRef>
方式二:activiti:collection
获取参数
<inputDataItem name="data">
内置参数
nrOfInstances
nrOfActiveInstances
nrOfCompletedInstances
loopCounter
循环结束条件
<completionCondition>
十七、Drools规则引擎:关注业务规则的匹配
关键字
package, rule, when, then, function
全局变量 global
规则属性
activation-group "xxx" 规则分组
salience 10 优先级
条件语法
when 后面 && ||
行为语法
then
向WorkingMemory insert update delete
与Activiti整合:
1、activiti配置处配置规则部署器
2、bpmn文件配置输入、输出参数
3、部署bpmn时加载bpmn配置文件和drools配置文件
十八、DMN(Decision Model and Notation)规范:定义规则引擎的规范,定义决策模型
<difinitions>
<decision>
<decisionTable>
<input>
<output>
<rule>
DMN框架类似activiti,配置dmn,编写dmn配置文件,部署,启动及使用DMN API
十九、MVEL表达式
简单参数表达式
对象执行表达式
自定义函数表达式
二十、activiti-rest.war
部署并修改数据库
http://localhost:9990/activiti-rest/service/management/properties 测试rest部署成功与否
Activiti API 文档: https://www.activiti.org/userguide
查询所有processDefinitions: GET http://localhost:9990/activiti-rest/service/repository/process-definitions
二十一、Activiti表单
方法一:taskService根据流程定义查询出配置的多个表单字段,可以遍历显示到页面,达到动态表单的效果。
方法二:配置文件引用外部表单
二十二、流程图与流程操作
流程图
节点:一个位置信息
衔接:两个位置信息
activiti-bpmn-converter-6.0.0.jar(还需要activiti-bpmn-model-6.0.0.jar)
BpmnXMLConverter可以通过代码的方式生成xml配置(包含process和diagram)
流程操作
流程回退
方法一:业务处理
方法二:补偿事件
会签(按数量通过、按比例通过、一票否决、一票通过)
多实例,设置不同完成条件