snaker文档 下载本文

子流程模型 父子流程的关联 子流程模型

子流程模型类型为SubProcessModel,其主要属性为processName,根据流程的name进行关联,由于流程定义支持一个name多个版本同时运行,那么子流程关联只设置name,即表示与最新版本的子流程关联。

父子流程的关联

对于表结构的设计中,父子流程的关联字段为

?

wf_order[parent_Id、parent_Node_Name] ? ?

wf_hist_order[parent_Id] ?

时限控制

时限控制常用于流程平台中的超时处理(提醒、自动执行等)、以及任务监控的查询统计等功能。

依赖包

依赖包 配置 实现提醒接口 snaker默认支持quartz定时器调度框架,只需要依赖snaker-quartz的包即可。 配置

在snaker.xml中配置时限控制的拦截器、定时调度的实现类

以上两步已经完成了时限的配置工作,下面就可以针对提醒、超时自动执行做自定义扩展了。

超时提醒

?

编写自定义的提醒类,实现IReminder接口。并配置到snaker.xml中即可。

? ?

任务节点配置超时提醒属性:reminderTime、reminderRepeat。

?

reminderTime是一个变量,表示提醒开始时间,当你调用api时需要传递此变量值,值的类型为date。 reminderRepeat是一个数字,表示重复提醒间隔时间,以分钟为单位 ? ?

默认提醒一次就结束,如果希望提醒多次,可通过snaker.properties中配置scheduler.repeat属性,该值是个数字,表示提醒次数。

节假日配置

#是否启用节假日,默认为false scheduler.useCalendar=true/false #节日配置,格式为yyyy-MM-dd,... scheduler.holidays=2014-12-26,2014-12-27 #工作日设置,格式为1,2,3...7,表示周一至周日 scheduler.weeks=1,2,3,4,5 #工作时间设置,格式为8:00-18:00 scheduler.workTime=8:00-18:00 超时自动完成

?

任务节点配置超时处理属性:expireTime、autoExecute、callback expireTime是一个变量,表示期望完成时间,当你调用api时需要传递此变量值,值的类型为date。 autoExecute的值为Y/N,表示超时是否自动执行 callback是一个字符串,表示自动执行的回调类路径配置 ?

编写回调类

通过实现JobCallback接口

org.snaker.engine.scheduling.JobCallback 实例抄送

实例的抄送类似于邮箱里面的抄送功能,一般用于将该流程实例抄送给领导查阅。

表结构

表结构 创建抄送 更新状态 抄送记录表主要保存抄送的记录信息

wf_cc_order 创建抄送

根据实例id、创建人、抄送人创建抄送记录

engine.order().createCCOrder(String orderId, String creator, String... actorIds) 更新状态

更新状态用于更新抄送记录为已经阅读

engine.order().updateCCStatus(String orderId, String... actorIds) 会签任务

snaker的会签目前相对比较简单,仅仅是根据任务节点的performType属性值确定是否产生多个相同任务。

performType的值有两种,分别是ANY、ALL。

ANY 多个参与者时,任何一个完成任务即继续流转

ALL 多个参与者时,所有都需要完成任务才能继续流转

会签任务节点 动态加签 会签百分比 串行会签 会签任务节点

只需要在流程定义时,将任务节点的属性performType值设置为ALL即可,当调用api时传递多个参与者时,则自动派发与参与者数量相同的任务。会签任务必须等待所有参与者完成后,才继续流转

动态加签

可调用任务服务的addTaskActor方法实现动态加签。

engine.task().addTaskActor(String taskId, 1, String... actorIds) 会签百分比

暂未实现 串行会签

暂未实现 Fork/Join

snaker流程引擎中的所有节点模型都支持fork/join的并行流转。

建议fork/join配对使用,否则会造成流程数据不一致。

测试用例中的forkjoin流程图如下所示:

自定义节点

snaker的自定义节点可完成流程的全自动编排。只需要在自定义节点模型中配置处理类即可。

自定义节点的处理类有两种方式:

实现IHandler接口 只需要配置clazz属性即可

?

普通java类 需要设置clazz methodName args var 自定义节点的执行不需要外部触发,只要抵达节点立即执行绑定的类进行处理。并记录历史任务,处理类返回值保存在历史任务的变量字段中 级联删除

级联删除主要用于流程定义、流程实例的数据。一般情况下,不建议在正式环境里使用此功能,顾名思义,会删除所有的关联数据,谨慎使用。

流程定义 engine.process().cascadeRemove(String processId) 会删除流程定义以及该定义启动的所有流程实例、任务,谨慎使用。

?

流程实例 engine.order().cascadeRemove(String orderId) 会删除流程实例以及该实例创建的所有任务,谨慎使用。 综合查询

综合查询服务不仅提供流程实例、活动/历史任务、待办任务的查询,同时支持原生SQL语句的查询服务。

org.snaker.engine.IQueryService 根据流程实例ID获取流程实例对象 Order getOrder(String orderId); 根据流程实例ID获取历史流程实例对象 HistoryOrder getHistOrder(String orderId);