内容发布更新时间 : 2024/12/22 23:47:40星期一 下面是文章的全部内容请认真阅读。
由于节点定义都是拖拽式的,所以不方便用图形来演示。这里仅仅贴上一个定义好的请假流程图:
定义流程的几个注意点:
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数据为
https://github.com/snakerflow/snaker-web/blob/master/src/main/resources/flows/leave.snaker 使用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演示部署”章节
1)新建流程 以admin账号登录snaker-web,点击左栏菜单:流程管理->流程定义,如下图所示: ![image](http://snakerflow.qiniudn.com/11.jpg) 点击“设计”按钮,则打开web流程设计器,如下图所示: ![image](http://snakerflow.qiniudn.com/14.jpg) web版本的流程设计器布局与样式尽量与eclipse的设计器插件保持一致。其节点和属性参考“组件模型属性”介绍 在流程定义列表页面,点击“初始化”按钮,即可产生6个用于测试的业务流程,如下图所示: ![image](http://snakerflow.qiniudn.com/12.jpg) 注意:流程的状态表示当前流程是否可用,版本号用于管理同名流程的多版本管理 ![image](http://snakerflow.qiniudn.com/13.jpg) 上图中的四个图标按顺序分别表示:启动流程、编辑、重新设计、禁用。点击重新设计,可打开已经定义好的业务流程,如下图所示: ![image](http://snakerflow.qiniudn.com/15.jpg) 2)定义节点 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 提示重复次数 expireTime 期望完成时间 autoExecute 超时是否自动执行 callback 自动执行的回调设置 Custom clazz 自定义节点的Java类路径,两种方式: 1.实现IHandler接口,实现接口时不需要设置下面三个属性。 2.无接口实现的普通java类,需要设置下面方法名称、参数属性 methodName 定义需要执行的java类的方法名称 args 定义传递的参数表达式 流程部署
deploy engine.process().deploy(StreamHelper .getStreamFromClasspath(\部署后的版本号默认为0,如果存在同名的流程定义,则新的流程定义版本号依次加1,并不会影响其它已经运行的流程实例。
?
redeploy engine.process().redeploy(processId, StreamHelper .getStreamFromClasspath(\重新部署流程会影响已经运行的流程实例
?
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启动实例