"databaseSchemaUpdate"
"true"
/>
name=
value=
jdbcUrl为你电脑数据库的url
jdbcUsername为数据库用户名
jdbcPassword为数据库密码
2)在main/java目录下创建任意目录和类编写创建Activiti数据表方法
publicclassCreateTable{
/****
*创建流程表
**/
@Test
publicvoidcreateTable(){
ProcessEngineprocessEngine=("")
.buildProcessEngine();
"------processEngine:
"+processEngine);
}
}
然后运行该测试方法
.如果运行成功
.在数据库中应该会产生
25张Activiti
的相
关数据表
Activiti表说明
下面是概括了几个常用的数据表
流程部署相关表
act_re_deployement部署对象表
act_rep_procdef流程定义表
act_ge_bytearray资源文件表
act_ge_prperty
主键生成策略表(对于部署对象表的主键
ID)
流程实例相关表
act_ru_execution程可能流程实例
正在执行的执行对象表ID不一样)
(包含执行对象
ID
和流程实例
ID.
如果有多个线
act_hi_procinstact_hi_actinst
流程实例历史表
存放历史所有完成的任务
Task任务相关表
act_ru_task代办任务表(只对应节点是UserTask的)
act_hi_taskinst代办任务历史表(只对应节点是UserTask的)
act_hi_actinst所有节点活动历史表(对应流程的所有节点的活动历史.从开始节点一直到结束节点中间的所有节点的活动都会被记录)
流程变量表
act_ru_variable正在执行的流程变量表
act_hi_variable流程变量历史表
3.核心API
ProcessEngine
说明:
1)在Activiti中最核心的类.其他的类都是由他而来。
2)产生方式
ProcessEngineprocessEngine=();
3)可以产生RepositoryService
RepositoryServicerepositoryService=();
4)可以产生RuntimeService
RuntimeServiceruntimeService=();
5)可以产生TaskServiceTaskServicetaskService=();
各个Service的作用
RepositoryService管理流程定义
RuntimeService
TaskService
执行管理
操作
任务管理
.包括启动
.推进
.删除流程实例等
RepositoryService
Activiti
该service
的仓库服务类。
所谓的仓库指流程定义文档的两个文件:
可以用来删除部署的流程定义。
bpmn文件和流程图片
RuntimeService
是Activiti的流程执行服务类.可以从这个服务类中获取很多关于流程执行的相关的信息。
TaskService
是Activiti的任务服务类。
可以从这个类中获取任务的相关信息.如当前正在执行的个人待
办和用户组待办任务。
HistoryService
是Activiti的查询历史信息的类.在一个流程执行完成后.这个对象为我们提供查询历史信息.可以跟踪流程实例对应所有待办节点的运行情况。
ProcessDefinition
流程定义类.可以从这里获得资源文件等。
ProcessInstance
代表流程定义的执行实例.当一个部署的流程图启动后.该流程只有一条流程实例数据.但是它的流程任务可以有多个.每个任务对应流程图中相应的流程节点。
4.入门HelloWorld程序
创建流程图方法
点击ActivitiTest
在当前项目右键选择
项目.在src/main/java目录下创建一个diagrams目录用来存放流程图
ActivitiDiagram流程图输入流程图名称HelloWorld.然后点击OK.
在控制面板的右边栏有相关的画图图标操作
其中一个流程必须包含一个开始节点和一个结束节点.结束节点可以有多个。
然后使用StartEvent,UserTask,EndEvent画出下面的流程图.然后用Connection
中的
SequenceFlow
连线连接起来。
创建流程图.如下图
指定流程图名称.ID和UserTask的处理人
1)选中第一个节点.在General中的name属性中输入当前节点的名称,在Mainconfig的Assignee中输入该节点的处理人.然后以此类推将3个节点的值设置完成。
中
.
2)然后在流程图旁边的空白出点击一下.输入流程的ID和Name值.然后保存
将流程图部署到Activiti的数据表中
启动完成后在
数据信息.
act_re_deployment
流程部署表和
act_re_procdef
流程定义表中会有对应的
启动流程实例
其中
("HelloWorldKey"
);
中的
HelloWorldKey
对应流程图中的
ID
值,在数据表中对应
act_re_procdef
流程定义表中的
key
字段
启动完流程后在act_ru_execution表中会产生一条数据
任务.其中act_id_字段的值对应流程图节点的ID值
.这条数据为当前流程正在执行的
在act_ru_task键.proc_inst_id_
表中会产生一条任务数据,execution_id_
为流程实例值为流程节点名称.assignee_
对应act_ru_execution字段为该待办当前的处理人
主
查询待办任务
指定查询张三的待办.可以查询出待办为第一个节点的处理任务。
完成待办任务
其中taskId对应act_ru_task表的主键ID.因为当前待办任务为第一个节点提交申请.当执
行完这个待办后下一条待办数据将会流转到审批【部门经理】那.然后以此类推可以将部门
经理和总经理的待办任务全部查询和执行完成。
5.查询和删除流程定义
1)查询流程定义
2)删除流程定义
6.流程变量操作
设置流程变量
1)设置流程变量有多种方式.可以在流程启动.和任务执行的时候设置
a.启动流程的时候设置
b.通过taskService或者runtimeService设置
提示:
如果设置的流程变量值是一个对象类型.这个对象必须实现序列化Serializable
操作,并且要为该对象类指定一个版本ID
获取流程变量
见工程操作
7.流程连线
在画流程图的时候可以对流程的连线设置表达式.然后在执行的时候设置流程变量值.然后
Activiti会根据对应的值走对应的节点
点击一条连线.在Main
线设置为${message=='
config不同意
中的Condition属性值中设置${message=='
'}.然后在代码中设置对应流程变量值。
同意'}.
另外一条
见工程操作
8.排他网关
如下图,其中黑色的叉叉对应eclipse画流程图图标中的ExclusiveGateWay图标
然后对每条线的Condition属性指定对应的表达式.然后在执行任务时候设置对应的流程变量
Activiti会根据变量的值来判断对应连线中的表达式走对应的流程节点路线。
见工程操作
9.并行网关
十字图标对应图标中的
ParallelGateway
并行网关不需要指定连线的表达式
.当流程流转到并行任务时会出发多个任务
.当多个任务
完成后在会将流程流转到下一个节点
见工程操作
10.个人任务的三种指定方式
在Assignee中指定任务具体的处理人
在Assignee中指定任务的处理人或角色变量
当指定Assignee为一个变量值后需要在代码中设置对应的处理人.比如在启动的时候设置
userId的值
在工程中可以将起草人的处理变量设置为userId.审批人的处理变量设置为appUserId.然
后通过业务模块和登录人来获取对应模块的审批人。
为任务节点设置一个监听类来设置当前节点的处理人
如果设置了监听类就不需要在设置Assignee的值
1)创建一个监听器类.需要实现TaskListener接口
2)点击任务节点.选择Listener选项卡.点击New.将Event的值改为create然后选择创建的TaskListenerImpl实现类
然后当任务到达该节点后Activiti会触发监听实现类的notify方法
11.组任务的三种指定方式
在任务节点中设置Candidateuser候选人
设置的候选处理人用英文输入法的逗号隔开.当任务到达该节点后.设置的候选人其中任何
一个人都可以处理当前待办.处理完成后待办结束。
在Candidateuser中设置一个变量作为处理人
然后通过启动或者执行流程向下传递的时候设置该流程变量值
通过监听类来设置待办处理人
如果设置了监听类就不需要在设置Assignee的值
和个人任务的监听类一样实现TaskListener接口.然后设置CandidateUser的值