-
演示部署
?
?
?
?
下载
snaker-web
的
war
包
创建数据库
部署应用
访问应用
下载
snaker-web
的
war
包
在网盘下载
snaker-
web-..*.war
文件
创建数据库
选择一款数据库软件,创
建
snaker
的数据库
注意:只需要创建数据库,不需要手动执行脚本
部署应用
将
snaker-web-*.*.*.war
文件部署至
Tomcat(
版本
>=6
即可
)
的
webapps
目录下
访问应用
启动
Tomcat
,访问
(*
号是当前的
版本号
)
http://localhost:8080/snaker-web-*.*.*
测试账号为:
管理员
[admin/123456]
测试账号
[snaker/123456;test/123456]
如果此处出现问题,请检查数据源配置是否正确,具体配置文件为:
WEB-INF/classes/ties
快速入门
快速入门章节主要介绍流程
是如何定义的,以及如何通过常用的
api
操作来启动、执行直
至结束。
?
流程定义
?
如何使
用
Eclipse
的设计器插件定义一个流程
< br>
如何使用
snaker-web
项目中的
web
设计器定义一个流程
?
?
流程发布
?
如何发布定义好的流程
?
?
流程启动
?
如何启动已发布的流程定义
?
?
任务执行
?
如何执行任务
?
流程定义
?
?
?
p>
使用
Eclipse
设计器插件
使用
web
设计器
p>
组件模型属性
使用
Eclipse
设计器插件
eclipse
设计器插件是在
eclipse4.3(kepler)
版本开发的
,
经测试,是可以在
eclipse4.3+
,
myeclipse9+
上面运行
?
安装<
/p>
Eclipse
插件
?
在百度网盘上下载
snaker-designer-*.*.
*.jar
插件包,直接
copy
至<
/p>
eclipse
安装目录下的
plugi
ns
文件夹里即可使用。
考虑到大家下载的
eclipse
版本可能无
法使用设计器,建议直接从百度网盘上下载经过测试的
eclipse-
kepler
版本
Myecli
pse
安装插件时,可直接把插件包
copy
< br>至
dropins
文件夹下面即可
?
?
创建流程定义
?
1)
新建流程
依次选择
File->New->Other->Snaker
,如下图所
示
:
选择
Snaker Process File
并输入文件名称,如下图所
示
:
点击
Finish
,则打开流程设
计器主界面,其中包括两大部分
:
流程组件、属性
Properties
视图,如下图所
示
:
2)
定义节点
由于节点定义都是拖拽式的,所以不方便用图形来演示。这里仅仅贴上一个定义好的请假流程图:
定义流程的几个注意点:
1)
一个流程必须设置
name
、
di
splayname
属性
2)
最常用的节点是
task
< br>,如果是人工任务,则需要设置
assignee[
参与
者
]
、
form[
设置表单
url]
,表单
url<
/p>
的规则可以表示
contextPath
下面的绝对路径,也可以表示相对路径
[
相对路径是用于页面<
/p>
include
情况
]
3)decision
节点用于决策
分支,必须设置
expr
属性,如果有多个选择分支,则建议设
置连接线的
expr
属性,可参考测试用
例
4)snaker
支持的会签,仅仅是设置
task
的
performType
5)snaker
支持三种参与者方式
直接设置静态参与者,即
assig
nee
值为用户、部门或角色的标识符
通过运行时动态传递,即
assig
nee
值为变量名称,在调用流程引擎的
api
时,通过
map
参数传递这个变量值
< br>
通过自定义类
[
继承
Assignment
类
]
,设置
assignmentHandler
属性,
assign
方法返回值就是参与者
6)
主办、协办
是通过
task
节点的
taskTyp
e
设置的。
snaker
既支持单独的
节点作为协办节点,也支持主办节点动态的创建协
办任务
3)
保存定义
流程定义的保存,实际上就是将图形元素转换为
xml
格式并
保存。上面请假流程的
xml
数据为
/snakerflow/snaker-
web/blob/master/src/main/resources/flows/
< br>使用
web
设计器
web
设计器是基于
myflow
开发的,使用的技术为
raphael
。
集成
web
设计器
设计器代码位于
snaker-
web
项目的
snaker-websrcmainwebap
pstylesjssnaker
目录下。
如果已有的项目需要集成
web
p>
版本的设计器,主要是
copy
这个目录,
并且参考
snaker-websrcmainwebappWEB-INFcon
p>
tentsnaker
目录下
proces
s
开头的
jsp
文件,因为设计器需要
页面来编辑和展现。
?
创建流程定义
使用
< br>web
设计器的前提是已经成功运行
snaker-we
b
应用,具体可参考“
1.5
演示部署
”章节
1)
新建流程
以
admin
账号登录
snaker
-web
,点击左栏菜单:流程管理
->
流程定义,如下图所示:
![image](/)
点击“设计”按钮,则打开
web<
/p>
流程设计器,如下图所示:
![image](/)
web
版本
的流程设计器布局与样式尽量与
eclipse
的设计器插件保
持一致。其节点和属性参考“组件模型属性”介绍
在流程定义列表页面,点击“初始化”按钮,即可产生
6
个用于测试的业务流程,如下图所示:
![image](/)
注意:流
程的状态表示当前流程是否可用,版本号用于管理同名流程的多版本管理
![image](/)
上图中的
四个图标按顺序分别表示:启动流程、编辑、重新设计、禁用。点击重新设计,可打开已经定义好的业务流程,如
下图所示:
![image](/)
2)
定义节点
web
设计器定义流程时注意以下两点:
< br>1)web
流程设计器还是适用于开发人员,不适合业务人员。如果面向业务人员
,需要多设计器进行改造
2)
p>
设计器中连接线需要先点击连接线图标,再选择节点
1
、节点
2
,这样才能连接两个节点。连接线的删除是
通过
del
键盘
去操作的
3)
保存定义
也是将图形元素转换为
xml
格式,并保存至数
据库中,参见
wf_process
的
content
字段。
组件模型属性
组件模型
属性
描述
通用属性
name
组件名称,模型内名称唯一
displayName
组件中文显示名称,方便阅读
preInterceptors
前置拦截器
postInterceptors
后置拦截器
Process
expireTime
期望完成时间,设置表达式变量由参数传递
instanceUrl
流程定义列表页面直接启动流程实例的
URL
instanceNoClass
流程实例编号生成类
Transition
expr
决策选择
< br>Decision
节点的输出变迁表达式
Task
form
用户参与的表单任务对应的
URL
assignee
任务参与者变量
assignmentHandler
任务参与者处理类
taskType
任务类型(主办<
/p>
/
协办)
performType
任务参与类
型(针对多个参与者),
ANY
为其中一个参与者完成即往下流
转;
ALL
为所有参与者完成
才往下流
转
reminderTime
任务提醒时间
reminderRepeat
提示重复次数
expireTime
期望完成时间
autoExecute
超时是否自动执行
callback
自动执行的回调设置
Custom
clazz
自定义节点的
Java
类路径,两种方式:
< br>1.
实现
IHandler
接口
,实现接口时不需要设置下面三个属性。
2.
无接口实现的普通
java
类,需要设置下面方法名称
、参数属性
methodName
定义需要执行的
java
类的方法名称
args
定义传递的参数表达式
流程部署
?
deploy
s().deploy(StreamHelper
.getStreamFromClasspath(
部署后的版本号默认为
0
,如果存在同名的流程定义,则新的流程定义版本号依次加
1
,并不会影响其它已经运行的流程实
例。
?
redeploy
s().redeploy(processId, StreamHelper
.getStreamFromClasspath(
重新部署流程会影响已经运行的流程实例
?
undeploy
s().undeploy(processId)
卸载流程
只会更新状态
state
值,不会删除数据
流程启动
可根据流程定义的<
/p>
id
或者
name
启动流程实例。如果相同的流程名称存在不同的版本,并使用
name
启动实例时,会以最新
的版本号来启动,其它低版本运行中的流程实例不会受到
影响,这样就允许流程的多个版本同时运行。
?
根据
id
启动实例
nstanceById(processId);
nstanceById(processId, operator);
nstanceById(processId, operator, args);
startInstanceById
方法的参数为:流程定义
id
、操作人
operator
、参数列表
args
?
根据
na
me
启动实例
nstanceByName(name)
nstanceByName(name, version)
nstanceByName(name, version, operator)
nstanceByName(name, version, operator,
args)
startInstanceByName
方法的
参数为:流程名称
name
、版本号
v
ersion
、操作人
operator
、参数列表
args
任务执行
<
/p>
执行任务是工作流平台中最常见的操作,其处理逻辑包括两部分:
?
?
完成当前任务
按照流程定义驱动产生新的任务
执行任务的调用方法如下:
eTask(taskId);
eTask(taskId,
operator);
eTask(taskId, operator,
args);
executeTask
参数分别表示:任务标
识
taskId
、操作人
operat
or
、参数列表
args
应用整合
为了方便整合,
snaker
提供了应用示例提供参考
?
snaker-
springmvc
/yuqs/snaker-
springmvc
基于<
/p>
SpringMVC
、
Spring3<
/p>
、
Hibernate3
、
Snaker
的快速整合示例,仅仅包括流程管理的功能,所有涉及到操作人
员的
部分全部使用
admin
,如果整
合到具体项目时,一定要替换成系统当前登录的用户
?
snaker-
struts2
/yuqs/snaker-
struts2
基于
Struts2
、
Spring3
、
Mybatis
、
Sn
aker
的快速整合示例,仅仅包括流程管理的功能,所有涉及到操作人员的部分全
p>
部使用
admin
,如果整合到具体项目时
,一定要替换成系统当前登录的用户
?
snaker-
web
/yuqs/snaker-
web
基于
SpringMVC
、
Spring3
、
Hibernate3
、
S
hiro
、
Snaker
搭建的基础演
示应用,包含:用户管理、部门管理、角色管理、
权限管理、资源管理、菜单管理、流程
管理、数据字典等常用功能模块
?
jfaker
/yuqs/jfaker
基于
JFinal
、
< br>Shiro
、
Snaker
搭建
的基础演示应用,包含:用户管理、部门管理、角色管理、权限管理、资源管理、菜
单管
理、流程管理、数据字典等常用功能模块
目前
Snaker
可独立运行,以
API
< br>方式整合,同时也支持
spring
、
< br>jfinal
、
nutz
三个平
台,并且能够将事务托管给平台管理。
其它情况下,需要自定义扩展。
< br>
?
API
?
A
PI
方式的事务由
snaker
自身管
理,保证每次
api
调用事务的正确性。
snaker
提供的测试用例目前就采用这种方式。
?
?
spring
?
与
spring
< br>整合过程,需要配置服务、事务,以保证事务交给
spring
< br>管理。可以参考
snaker-
web
项目
jfinal
?
<
/p>
与
Jfinal
整合类似于
API
方式
?
?
nutz
?
<
/p>
与
Nutz
整合类似于
< br>API
方式
?
API
整合
如果使用
api
集成,需要在
中配置
DBAccess
、
Transaction
、
Dialect
import urce;
import
Engine;
import lper;
import
uration;
public class SnakerHelper {
private static final SnakerEngine
engine;
static {
//
使用项目中已有的
DataSource
< br>、
SessionFactory
、
SqlSessionFactory
对象
//
传递至
init
AccessDBObject
方法中都可以
DataSource dataSource =
aSource();
engine = new
Configuration()
.initAccessDBObject(dataSource)
.buildSnakerEngine();
}
public static SnakerEngine getEngine() {
return engine;
}
}
initAccessDBObject
< br>方法传递的参数值与
配置的数据库访问对应关系:
参数类型
访问对象
事务管理拦截器
依赖库
DataSource
JdbcAccess
DataSourceTransactionInterceptor
SessionFactory
HibernateAccess
Hibernate3TransactionInterceptor
hibernate-*-
SqlSessionFactory
MybatisAccess
MybatisTransactionInterceptor
initAccessDBObject
方法也可以不调用,而使用
ties
中的
< br>jdbc.
或
hibernate.
来初始化
DataSource
、
SessionFactory
、
SqlSessionFac
tory
。但在实际的项目,还是建议使用该项目已有的
Dat
aSource
、
SessionFactory
、
SqlSessionFactory
Spring
整合
?
?
?
?
p>
增加
maven
依赖或
jar
配置
DBAccess
配置服务类
配置事务管理
增加
< br>maven
依赖或
jar
maven
坐标如下:
如果非
maven
项目,需要到百度网
盘下载
jar
包
配置
DBAccess
访问类型
springjdbc
hibernate
hibernate
mybatis
类路径
JdbcAccess
ate3Access
ate4Access
sAccess
如配置
Hibernate
方式的
DBAccess
:
配置服务类
配置事务管理
需要将流程引擎的事务
托管给
spring
统一管理
<
br>
详细说明
本章主要详细介绍
Snaker
使用过程中各种常用的操作
表定义
?
?
?
表关系图
表关系图
表详细说明
字段详细说明
Snaker
流程引擎核心共
7
张表,关系图如下所示
表详细说明:
表名称
描述
wf_process
流程定义表
wf_order
活动实例表
wf_task
活动任务表
wf_task_actor
活动任务参与者表
wf_hist_order
历史实例表
wf_hist_task
历史任务表
wf_hist_task_actor
历史任务参与者表
wf_surrogate
委托代理管理表
wf_cc_order
抄送实例表
字段详细说明:
wf_process
:
字段名称
字段描述
id
主键
ID
name
流程名称
display_Name
流程显示名称
type
流程类型
instance_Url
实例
url
state
流程是否可用
content
流程模型定义
version
版本
create_Time
创建时间
creator
创建人
wf_order
:
字段名称
字段描述
id
主键
ID
parent_Id
父流程
ID
process_Id
流程定义
ID
creator
发起人
create_Time
发起时间
expire_Time
期望完成时间
last_Update_Time
上次更新时间
last_Updator
上次更新人
priority
优先级
parent_Node_Name
父流程依赖的节点名称
order_No
流程实例编号
variable
附属变量
json
存储
version
版本
wf_hist_order
:
字段名称
字段描述
id
主键
ID
parent_Id
父流程
ID
process_Id
流程定义
ID
creator
发起人
create_Time
发起时间
expire_Time
期望完成时间
end_Time
完成时间
priority
优先级
order_No
流程实例编号
variable <
/p>
附属变量
json
存储
order_State
状态
wf_task
:
字段名称
字段描述
id
主键
ID
order_Id
流程实例
ID
task_Name
任务名称
display_Name
任务显示名称
task_Type
任务类型
perform_Type
参与类型
operator
任务处理人
create_Time
任务创建时间
finish_Time
任务完成时间
expire_Time
任务期望完成时间
action_Url
任务处理的
url
parent_Task_Id
父任务
ID
variable
p>
附属变量
json
存储
version
版本
wf_hist_task
:
字段名称
字段描述
id
主键
ID
order_Id
流程实例
ID
task_Name
任务名称
display_Name
任务显示名称
task_Type
任务类型
perform_Type
参与类型
operator
任务处理人
create_Time
任务创建时间
finish_Time
任务完成时间
expire_Time
任务期望完成时间
action_Url
任务处理的
url
parent_Task_Id
父任务
ID
variable
p>
附属变量
json
存储
task_State
任务状态
wf_task_actor
:
字段名称
字段描述
task_Id
任务
ID
actor_Id
参与者
ID
wf_hist_task_actor:
字段名称
字段描述
task_Id
任务
ID
actor_Id
参与者
ID
wf_surrogate
:
字段名称
字段描述
id
主键
ID
process_Name
流程名称
operator
授权人
surrogate
代理人
odate
操作时间
sdate
开始时间
edate
结束时间
state
状态
wf_cc_order
:
字段名称
字段描述
order_Id
流程实例
ID
actor_Id
参与者
ID
create_Time
抄送时间
finish_Time
完成时间
creator
发起人
status
状态
数据库支持