1、如何启动已发布的流程定义任务执行如何执行任务使用Eclipse设计器插件使用web设计器组件模型属性使用Eclipse设计器插件 eclipse设计器插件是在eclipse4.3(kepler)版本开发的,经测试,是可以在eclipse4.3+,myeclipse9+上面运行安装Eclipse插件 在XX网盘上下载snaker-designer-*.*.*.jar插件包,直接copy至eclipse安装目录下的plugins文件夹里即可使用。 考虑到大家下载的eclipse版本可能无法使用设计器,建议直接从XX网盘上下载经过测试的eclipse-kepler版本 Myeclipse安装插件时,
2、可直接把插件包copy至dropins文件夹下面即可创建流程定义1)新建流程依次选择File-New-Other-Snaker,如下图所示:选择Snaker Process File并输入文件名称,如下图所示:点击Finish,则打开流程设计器主界面,其中包括两大部分:流程组件、属性Properties视图,如下图所示:2)定义节点由于节点定义都是拖拽式的,所以不方便用图形来演示。这里仅仅贴上一个定义好的请假流程图:定义流程的几个注意点:1)一个流程必须设置name、displayname属性2)最常用的节点是task,如果是人工任务,则需要设置assignee参与者、form设置表单url,
3、表单url的规则可以表示contextPath下面的绝对路径,也可以表示相对路径相对路径是用于页面include情况3)decision节点用于决策分支,必须设置expr属性,如果有多个选择分支,则建议设置连接线的expr属性,可参考测试用例4)snaker支持的会签,仅仅是设置task的performType5)snaker支持三种参与者方式直接设置静态参与者,即assignee值为用户、部门或角色的标识符通过运行时动态传递,即assignee值为变量名称,在调用流程引擎的api时,通过map参数传递这个变量值通过自定义类继承Assignment类,设置assignmentHandler属性
4、,assign方法返回值就是参与者6)主办、协办是通过task节点的taskType设置的。snaker既支持单独的节点作为协办节点,也支持主办节点动态的创建协办任务3)保存定义流程定义的保存,实际上就是将图形元素转换为xml格式并保存。上面请假流程的xml数据为使用web设计器web设计器是基于myflow开发的,使用的技术为raphael。集成web设计器设计器代码位于snaker-web项目的snaker-websrcmainwebappstylesjssnaker目录下。如果已有的项目需要集成web版本的设计器,主要是copy这个目录,并且参考snaker-websrcmainweba
5、ppWEB-INFcontentsnaker目录下process开头的jsp文件,因为设计器需要页面来编辑和展现。创建流程定义使用web设计器的前提是已经成功运行snaker-web应用,具体可参考“1.5演示部署”章节以admin账号登录snaker-web,点击左栏菜单:流程管理-流程定义,如下图所示:!image(点击“设计”按钮,则打开web流程设计器,如下图所示:web版本的流程设计器布局与样式尽量与eclipse的设计器插件保持一致。其节点和属性参考“组件模型属性”介绍在流程定义列表页面,点击“初始化”按钮,即可产生6个用于测试的业务流程,如下图所示:流程的状态表示当前流程是否可用
6、,版本号用于管理同名流程的多版本管理上图中的四个图标按顺序分别表示:启动流程、编辑、重新设计、禁用。点击重新设计,可打开已经定义好的业务流程,如下图所示:web设计器定义流程时注意以下两点:1)web流程设计器还是适用于开发人员,不适合业务人员。如果面向业务人员,需要多设计器进行改造2)设计器中连接线需要先点击连接线图标,再选择节点1、节点2,这样才能连接两个节点。连接线的删除是通过del键盘去操作的3)保存定义也是将图形元素转换为xml格式,并保存至数据库中,参见wf_process的content字段。组件模型属性组件模型属性描述通用属性name组件名称,模型内名称唯一displayNam
7、e组件中文显示名称,方便阅读preInterceptors前置拦截器postInterceptors后置拦截器ProcessexpireTime期望完成时间,设置表达式变量由参数传递instanceUrl流程定义列表页面直接启动流程实例的URLinstanceNoClass流程实例编号生成类Transitionexpr决策选择Decision节点的输出变迁表达式Taskform用户参与的表单任务对应的URLassignee任务参与者变量assignmentHandler任务参与者处理类taskType任务类型(主办/协办)performType任务参与类型(针对多个参与者),ANY为其中一个参
8、与者完成即往下流转;ALL为所有参与者完成才往下流转reminderTime任务提醒时间reminderRepeat提示重复次数期望完成时间autoExecute超时是否自动执行callback自动执行的回调设置Customclazz自定义节点的Java类路径,两种方式:1.实现IHandler接口,实现接口时不需要设置下面三个属性。2.无接口实现的普通java类,需要设置下面方法名称、参数属性methodName定义需要执行的java类的方法名称args定义传递的参数表达式var定义返回值变量名称SubProcessprocessName子流程名称(对应process的name属性)Deci
9、sion决策选择表达式handleClass决策选择的处理类,实现DecisionHandler接口流程部署deployengine.process().deploy(StreamHelper .getStreamFromClasspath(flows/leave.snaker)部署后的版本号默认为0,如果存在同名的流程定义,则新的流程定义版本号依次加1,并不会影响其它已经运行的流程实例。redeployengine.process().redeploy(processId, StreamHelper重新部署流程会影响已经运行的流程实例undeployengine.process().unde
10、ploy(processId)卸载流程只会更新状态state值,不会删除数据可根据流程定义的id或者name启动流程实例。如果相同的流程名称存在不同的版本,并使用name启动实例时,会以最新的版本号来启动,其它低版本运行中的流程实例不会受到影响,这样就允许流程的多个版本同时运行。根据id启动实例engine.startInstanceById(processId);engine.startInstanceById(processId, operator);engine.startInstanceById(processId, operator, args);startInstanceById方
11、法的参数为:流程定义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执行任务是工作流平台
12、中最常见的操作,其处理逻辑包括两部分:完成当前任务按照流程定义驱动产生新的任务执行任务的调用方法如下:engine.executeTask(taskId);engine.executeTask(taskId, operator);engine.executeTask(taskId, operator, args);executeTask参数分别表示:任务标识taskId、操作人operator、参数列表args应用整合为了方便整合,snaker提供了应用示例提供参考snaker-springmvc 基于SpringMVC、Spring3、Hibernate3、Snaker的快速整合示例,仅仅包
13、括流程管理的功能,所有涉及到操作人员的部分全部使用admin,如果整合到具体项目时,一定要替换成系统当前登录的用户snaker-struts2 基于Struts2、Spring3、Mybatis、Snaker的快速整合示例,仅仅包括流程管理的功能,所有涉及到操作人员的部分全部使用admin,如果整合到具体项目时,一定要替换成系统当前登录的用户snaker-web 基于SpringMVC、Spring3、Hibernate3、Shiro、Snaker搭建的基础演示应用,包含:用户管理、部门管理、角色管理、权限管理、资源管理、菜单管理、流程管理、数据字典等常用功能模块jfaker 基于JFinal
14、、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.
15、xml中配置DBAccess、Transaction、Dialectimport javax.sql.DataSource;import org.snaker.engine.SnakerEngine;import org.snaker.engine.access.jdbc.JdbcHelper;import org.snaker.engine.cfg.Configuration;public class SnakerHelper private static final SnakerEngine engine; static /使用项目中已有的DataSource、SessionFactory
16、、SqlSessionFactory对象 /传递至initAccessDBObject方法中都可以 DataSource dataSource = JdbcHelper.getDataSource(); engine = new Configuration() .initAccessDBObject(dataSource) .buildSnakerEngine(); public static SnakerEngine getEngine() return engine;initAccessDBObject方法传递的参数值与snaker.xml配置的数据库访问对应关系:参数类型访问对象事务管理
17、拦截器依赖库DataSourceJdbcAccessDataSourceTransactionInterceptorcommons-dbcp-1.4.jarcommons-dbutils-1.5.jarcommons-pool-1.5.4.jarSessionFactoryHibernateAccessHibernate3TransactionInterceptorhibernate-*-3.5.5.jarSqlSessionFactoryMybatisAccessMybatisTransactionInterceptormybatis-3.2.3.jarinitAccessDBObject方
18、法也可以不调用,而使用snaker.properties中的jdbc.或hibernate.来初始化DataSource、SessionFactory、SqlSessionFactory。但在实际的项目,还是建议使用该项目已有的DataSource、SessionFactory、SqlSessionFactorySpring整合增加maven依赖或jar配置DBAccess配置服务类配置事务管理增加maven依赖或jarmaven坐标如下: com.github.snakerflowartifactIdsnaker-springversion*.*.*/dependency如果非maven项目
19、,需要到XX网盘下载jar包配置DBAccess访问类型类路径springjdbcorg.snaker.engine.spring.SpringJdbcAccesshibernateorg.snaker.engine.access.hibernate.Hibernate3Accessorg.snaker.engine.access.hibernate4.Hibernate4Accessmybatisorg.snaker.engine.access.mybatis.MybatisAccess如配置Hibernate方式的DBAccess:bean id=dbAccess class=org.sn
20、aker.engine.access.hibernate.Hibernate3Accessproperty name=sessionFactory ref=/bean配置服务类- 流程引擎配置 -bean class=org.snaker.engine.spring.SpringSnakerEngineprocessServiceorderServicetaskServicequeryServicemanagerServiceorg.snaker.engine.core.ProcessServiceaccesscacheManagerorg.snaker.engine.core.OrderSe
21、rviceorg.snaker.engine.core.TaskServiceorg.snaker.engine.core.ManagerServiceorg.snaker.engine.core.QueryService配置事务管理需要将流程引擎的事务托管给spring统一管理- 流程事务配置 aop的pointcut中增加:or execution(* org.snaker.engine.*.*(.)-tx:attributesmethod name=start* propagation=REQUIREDexecute*save*delete* /update*remove*add*assign*create*complete*finish*terminate*take*deploy*redeploy*undeploy*withdrawTask*native*get* read-only=truefind*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1