子流程模型 父子流程的关联 子流程模型
子流程模型类型为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);