snaker文档文档格式.docx
- 文档编号:22041796
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:41
- 大小:503.29KB
snaker文档文档格式.docx
《snaker文档文档格式.docx》由会员分享,可在线阅读,更多相关《snaker文档文档格式.docx(41页珍藏版)》请在冰豆网上搜索。
如何启动已发布的流程定义
任务执行
如何执行任务
∙使用Eclipse设计器插件
∙使用web设计器
∙组件模型属性
使用Eclipse设计器插件
eclipse设计器插件是在eclipse4.3(kepler)版本开发的,经测试,是可以在eclipse4.3+,myeclipse9+上面运行
安装Eclipse插件
在XX网盘上下载snaker-designer-*.*.*.jar插件包,直接copy至eclipse安装目录下的plugins文件夹里即可使用。
考虑到大家下载的eclipse版本可能无法使用设计器,建议直接从XX网盘上下载经过测试的eclipse-kepler版本
Myeclipse安装插件时,可直接把插件包copy至dropins文件夹下面即可
创建流程定义
1)新建流程
依次选择File->
New->
Other->
Snaker,如下图所示:
选择SnakerProcessFile并输入文件名称,如下图所示:
点击Finish,则打开流程设计器主界面,其中包括两大部分:
流程组件、属性Properties视图,如下图所示:
2)定义节点
由于节点定义都是拖拽式的,所以不方便用图形来演示。
这里仅仅贴上一个定义好的请假流程图:
定义流程的几个注意点:
1)一个流程必须设置name、displayname属性
2)最常用的节点是task,如果是人工任务,则需要设置assignee[参与者]、form[设置表单url],表单url的规则可以表示contextPath下面的绝对路径,也可以表示相对路径[相对路径是用于页面include情况]
3)decision节点用于决策分支,必须设置expr属性,如果有多个选择分支,则建议设置连接线的expr属性,可参考测试用例
4)snaker支持的会签,仅仅是设置task的performType
5)snaker支持三种参与者方式
直接设置静态参与者,即assignee值为用户、部门或角色的标识符
通过运行时动态传递,即assignee值为变量名称,在调用流程引擎的api时,通过map参数传递这个变量值
通过自定义类[继承Assignment类],设置assignmentHandler属性,assign方法返回值就是参与者
6)主办、协办是通过task节点的taskType设置的。
snaker既支持单独的节点作为协办节点,也支持主办节点动态的创建协办任务
3)保存定义
流程定义的保存,实际上就是将图形元素转换为xml格式并保存。
上面请假流程的xml数据为
使用web设计器
web设计器是基于myflow开发的,使用的技术为raphael。
集成web设计器
设计器代码位于snaker-web项目的\snaker-web\src\main\webapp\styles\js\snaker目录下。
如果已有的项目需要集成web版本的设计器,主要是copy这个目录,并且参考\snaker-web\src\main\webapp\WEB-INF\content\snaker目录下process开头的jsp文件,因为设计器需要页面来编辑和展现。
∙创建流程定义
使用web设计器的前提是已经成功运行snaker-web应用,具体可参考“1.5演示部署”章节
以admin账号登录snaker-web,点击左栏菜单:
流程管理->
流程定义,如下图所示:
!
[image](
点击“设计”按钮,则打开web流程设计器,如下图所示:
web版本的流程设计器布局与样式尽量与eclipse的设计器插件保持一致。
其节点和属性参考“组件模型属性”介绍
在流程定义列表页面,点击“初始化”按钮,即可产生6个用于测试的业务流程,如下图所示:
流程的状态表示当前流程是否可用,版本号用于管理同名流程的多版本管理
上图中的四个图标按顺序分别表示:
启动流程、编辑、重新设计、禁用。
点击重新设计,可打开已经定义好的业务流程,如下图所示:
web设计器定义流程时注意以下两点:
1)web流程设计器还是适用于开发人员,不适合业务人员。
如果面向业务人员,需要多设计器进行改造
2)设计器中连接线需要先点击连接线图标,再选择节点1、节点2,这样才能连接两个节点。
连接线的删除是通过del键盘去操作的
3)保存定义
也是将图形元素转换为xml格式,并保存至数据库中,参见wf_process的content字段。
组件模型属性
组件模型
属性
描述
通用属性
name
组件名称,模型内名称唯一
displayName
组件中文显示名称,方便阅读
preInterceptors
前置拦截器
postInterceptors
后置拦截器
Process
expireTime
期望完成时间,设置表达式变量由参数传递
instanceUrl
流程定义列表页面直接启动流程实例的URL
instanceNoClass
流程实例编号生成类
Transition
expr
决策选择Decision节点的输出变迁表达式
Task
form
用户参与的表单任务对应的URL
assignee
任务参与者变量
assignmentHandler
任务参与者处理类
taskType
任务类型(主办/协办)
performType
任务参与类型(针对多个参与者),ANY为其中一个参与者完成即往下流转;
ALL为所有参与者完成才往下流转
reminderTime
任务提醒时间
reminderRepeat
提示重复次数
期望完成时间
autoExecute
超时是否自动执行
callback
自动执行的回调设置
Custom
clazz
自定义节点的Java类路径,两种方式:
1.实现IHandler接口,实现接口时不需要设置下面三个属性。
2.无接口实现的普通java类,需要设置下面方法名称、参数属性
methodName
定义需要执行的java类的方法名称
args
定义传递的参数表达式
var
定义返回值变量名称
SubProcess
processName
子流程名称(对应process的name属性)
Decision
决策选择表达式
handleClass
决策选择的处理类,实现DecisionHandler接口
流程部署
∙deploy
engine.process().deploy(StreamHelper
.getStreamFromClasspath("
flows/leave.snaker"
)
部署后的版本号默认为0,如果存在同名的流程定义,则新的流程定义版本号依次加1,并不会影响其它已经运行的流程实例。
∙redeploy
engine.process().redeploy(processId,StreamHelper
重新部署流程会影响已经运行的流程实例
∙undeploy
engine.process().undeploy(processId)
卸载流程只会更新状态state值,不会删除数据
可根据流程定义的id或者name启动流程实例。
如果相同的流程名称存在不同的版本,并使用name启动实例时,会以最新的版本号来启动,其它低版本运行中的流程实例不会受到影响,这样就允许流程的多个版本同时运行。
∙根据id启动实例
engine.startInstanceById(processId);
engine.startInstanceById(processId,operator);
engine.startInstanceById(processId,operator,args);
startInstanceById方法的参数为:
流程定义id、操作人operator、参数列表args
∙根据name启动实例
engine.startInstanceByName(name)
engine.startInstanceByName(name,version)
engine.startInstanceByName(name,version,operator)
engine.startInstanceByName(name,version,operator,args)
startInstanceByName方法的参数为:
流程名称name、版本号version、操作人operator、参数列表args
执行任务是工作流平台中最常见的操作,其处理逻辑包括两部分:
∙完成当前任务
∙按照流程定义驱动产生新的任务
执行任务的调用方法如下:
engine.executeTask(taskId);
engine.executeTask(taskId,operator);
engine.executeTask(taskId,operator,args);
executeTask参数分别表示:
任务标识taskId、操作人operator、参数列表args
应用整合
为了方便整合,snaker提供了应用示例提供参考
∙snaker-springmvc
基于SpringMVC、Spring3、Hibernate3、Snaker的快速整合示例,仅仅包括流程管理的功能,所有涉及到操作人员的部分全部使用admin,如果整合到具体项目时,一定要替换成系统当前登录的用户
∙snaker-struts2
基于Struts2、Spring3、Mybatis、Snaker的快速整合示例,仅仅包括流程管理的功能,所有涉及到操作人员的部分全部使用admin,如果整合到具体项目时,一定要替换成系统当前登录的用户
∙snaker-web
基于SpringMVC、Spring3、Hibernate3、Shiro、Snaker搭建的基础演示应用,包含:
用户管理、部门管理、角色管理、权限管理、资源管理、菜单管理、流程管理、数据字典等常用功能模块
∙jfaker
基于JFinal、Shiro、Snaker搭建的基础演示应用,包含:
目前Snaker可独立运行,以API方式整合,同时也支持spring、jfinal、nutz三个平台,并且能够将事务托管给平台管理。
其它情况下,需要自定义扩展。
API
API方式的事务由snaker自身管理,保证每次api调用事务的正确性。
snaker提供的测试用例目前就采用这种方式。
spring
与spring整合过程,需要配置服务、事务,以保证事务交给spring管理。
可以参考snaker-web项目
jfinal
与Jfinal整合类似于API方式
nutz
与Nutz整合类似于API方式
API整合
如果使用api集成,需要在snaker.xml中配置DBAccess、Transaction、Dialect
importjavax.sql.DataSource;
importorg.snaker.engine.SnakerEngine;
importorg.snaker.engine.access.jdbc.JdbcHelper;
importorg.snaker.engine.cfg.Configuration;
publicclassSnakerHelper{
privatestaticfinalSnakerEngineengine;
static{
//使用项目中已有的DataSource、SessionFactory、SqlSessionFactory对象
//传递至initAccessDBObject方法中都可以
DataSourcedataSource=JdbcHelper.getDataSource();
engine=newConfiguration()
.initAccessDBObject(dataSource)
.buildSnakerEngine();
}
publicstaticSnakerEnginegetEngine(){
returnengine;
}
initAccessDBObject方法传递的参数值与snaker.xml配置的数据库访问对应关系:
参数类型
访问对象
事务管理拦截器
依赖库
DataSource
JdbcAccess
DataSourceTransactionInterceptor
commons-dbcp-1.4.jar
commons-dbutils-1.5.jar
commons-pool-1.5.4.jar
SessionFactory
HibernateAccess
Hibernate3TransactionInterceptor
hibernate-*-3.5.5.jar
SqlSessionFactory
MybatisAccess
MybatisTransactionInterceptor
mybatis-3.2.3.jar
initAccessDBObject方法也可以不调用,而使用snaker.properties中的jdbc.或hibernate.来初始化DataSource、SessionFactory、SqlSessionFactory。
但在实际的项目,还是建议使用该项目已有的DataSource、SessionFactory、SqlSessionFactory
Spring整合
∙增加maven依赖或jar
∙配置DBAccess
∙配置服务类
∙配置事务管理
增加maven依赖或jar
maven坐标如下:
<
dependency>
<
groupId>
com.github.snakerflow<
/groupId>
artifactId>
snaker-spring<
/artifactId>
version>
*.*.*<
/version>
/dependency>
如果非maven项目,需要到XX网盘下载jar包
配置DBAccess
访问类型
类路径
springjdbc
org.snaker.engine.spring.SpringJdbcAccess
hibernate
org.snaker.engine.access.hibernate.Hibernate3Access
org.snaker.engine.access.hibernate4.Hibernate4Access
mybatis
org.snaker.engine.access.mybatis.MybatisAccess
如配置Hibernate方式的DBAccess:
beanid="
dbAccess"
class="
org.snaker.engine.access.hibernate.Hibernate3Access"
>
propertyname="
sessionFactory"
ref="
/>
/bean>
配置服务类
--流程引擎配置-->
beanclass="
org.snaker.engine.spring.SpringSnakerEngine"
processService"
orderService"
taskService"
queryService"
managerService"
org.snaker.engine.core.ProcessService"
access"
cacheManager"
org.snaker.engine.core.OrderService"
org.snaker.engine.core.TaskService"
org.snaker.engine.core.ManagerService"
org.snaker.engine.core.QueryService"
配置事务管理
需要将流程引擎的事务托管给spring统一管理
--流程事务配置aop的pointcut中增加:
orexecution(*org.snaker.engine..*.*(..))-->
tx:
attributes>
methodname="
start*"
propagation="
REQUIRED"
execute*"
save*"
delete*"
/>
update*"
remove*"
add*"
assign*"
create*"
complete*"
finish*"
terminate*"
take*"
deploy*"
redeploy*"
undeploy*"
withdrawTask*"
native*"
get*"
read-only="
true"
find*"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- snaker 文档