snaker文档 下载本文

engine.process(); 获取实例服务

engine.order(); 获取任务服务

engine.task(); 获取查询服务

engine.query(); 获取管理服务

engine.manager(); 启动流程

流程实例由引擎API的startInstance......方法完成,方法的参数一般为流程定义的id或者是name、version。

根据流程定义id启动实例 engine.startInstanceById(String id); engine.startInstanceById(String id, String operator); engine.startInstanceById(String id, String operator, Map args); 根据流程定义name、version启动实例 engine.startInstanceByName(String name); engine.startInstanceByName(String name, Integer version); engine.startInstanceByName(String name, Integer version, String operator); engine.startInstanceByName(String name, Integer version, String operator, Map args); 启动实例方法会返回一个Order对象,并且能够根据模型创建相应的任务Task

执行任务

执行任务由引擎API的executeTask......方法完成,方法的参数一般为任务的id,操作人operator,变量数据args。

engine.executeTask(String taskId); engine.executeTask(String taskId, String operator); engine.executeTask(String taskId, String operator, Map args); 执行任务方法会返回一个Task集合,并且能够根据模型创建下一步任务Task

驳回、任意跳转任务

任务驳回有两种场景:驳回至上一步;驳回至任意节点。

engine.executeAndJumpTask(String taskId, String operator, Map args, String nodeName); 方法的参数nodeName决定驳回的方式:

?

nodeName为空时,则驳回至上一步,不需要传递参与者数据

? ?

nodeName不为空,则表示任意跳转,此时需要传递参与者数据。

?

创建自由任务

engine.createFreeTask(String orderId, String operator, Map args, TaskModel model); 创建自由任务时,需要新建任务模型对象TaskModel,再根据此模型创建对应的任务数据。 流程定义

流程定义服务作为工作流平台中最频繁调用的服务,并且流程定义是业务流程的静态逻辑数据,所以一般使用缓存,以减少数据库io访问次数。

snaker在设计流程定义服务时,通过实现缓存管理器包装接口来实现流程定义的缓存。默认使用内存缓存方式,同时也支持ehcache缓存框架。只需要依赖snaker-ehcache包即可。

org.snaker.engine.IProcessService org.snaker.engine.cache.CacheManagerAware

发布 重新发布 卸载 更新类别 查询接口 快速入门章节的流程定义已经介绍如何通过设计器创建新的流程,本章节主要介绍对已经创建好的流程定义,如何操作。 流程发布统一使用InputStream输入流作为流程定义的数据。可借助

org.snaker.engine.helper.StreamHelper 流帮助类完成,方法如下定义:

InputStream的方法名称 getStreamFromString getStreamFromFile getStreamFromClasspath getStreamFromUrl 描述 根据字符串获取输入流 根据文件对象获取输入流 根据类路径下的资源文件名称获取输入流 根据url远程资源获取输入流 注意:snaker的流程定义编码格式统一使用UTF-8 发布 ?

deploy(InputStream inputStream) engine.process().deploy(StreamHelper .getStreamFromClasspath(\发布后的版本号默认为0,如果存在同名的流程定义,则新的流程定义版本号依次加1,并不会影响其它已经运行的流程实例。

重新发布 ?

redeploy(String processId, InputStream inputStream) engine.process().redeploy(processId, StreamHelper .getStreamFromClasspath(\重新发布流程会影响已经运行的流程实例

卸载 ?

undeploy(String processId) engine.process().undeploy(processId) 卸载流程只会更新状态state值,不会删除物理数据

更新类别 ?

updateType(String processId, String type) engine.process().updateType(processId, type) 更新类别主要用于业务流程较多,并且存在分类情况时使用

查询接口 Process getProcessById(String id) Process getProcessByName(String name) Process getProcessByVersion(String name, Integer version) public List getProcesss(QueryFilter filter) public List getProcesss(Page page, QueryFilter filter) 模型操作

通过流程定义章节的查询接口可以轻松获取到Process实体对象,该实体中的model属性就是流程图的对象表达形式了,可通过getModel方法获取ProcessModel。

process.getModel()

流程模型 流程模型 Start节点 name获取节点 类型获取所有节点 所有任务节点 后续一级节点集合 org.snaker.engine.model.ProcessModel 流程模型、流程定义的XML文件、流程图三种表现形式可互相转换,流程模型对象不仅包含了自身的属性(如:

name displayName instanceUrl expireTime instanceNoClass ),同时也包含了所有节点模型对象以及它们的关系。

Start节点 org.snaker.engine.model.StartModel Start节点作为流程启动的入口,只有输出路由,其输入路由为空,可通过getInputs方法进行验证

name获取节点 NodeModel getNode(String nodeName) 根据节点的name属性获取到节点模型对象

类型获取所有节点 List getModels(Class clazz) 根据节点类型获取所有该类型的模型对象集合。常用于如下方式:

List taskModels = processModel.getModels(TaskModel.class)