所有任务节点 List
后续一级节点集合 List
流程实例服务主要配合引擎完成实例的开始、结束状态。
org.snaker.engine.IOrderService
完成实例
完成实例 强制终止 唤醒实例 流程实例的完成,是通过complete方法处理的。
void complete(String orderId) 一般情况下,该方法不需要显示调用,流程引擎在执行最后一个任务,流向End节点时,会自动触发完成实例的动作。
如果你手动调用complete方法,会造成实例数据与任务数据不一致的情况,仅仅是结束了实例,但是该实例下的所有活动任务依然存在。
强制终止
如果需要把一个活动的流程实例结束掉,并且同时结束该实例下的所有活动任务,那么可以调用terminate方法进行处理。
void terminate(String orderId) void terminate(String orderId, String operator) 如果不传递operator,那么会存在权限不够,活动任务无法结束的情况。此时建议您传递SnakerEngine.ADMIN超级权限去终止。
唤醒实例
如果一个已经结束的实例,希望重新激活至最后一步,该如何操作呢。那么调用resume方法即可实现此功能。
Order resume(String orderId) 唤醒实例后,会重新产生一个活动实例的数据记录Order,同时会唤醒最后一个历史任务为活动任务记录。 活动任务
任务服务主要配合流程引擎在调度过程中任务数据的操作。
org.snaker.engine.ITaskService
转派
转派 撤回 提取 驳回跳转 唤醒 更新 任务转派是向指定人创建新的任务。转派api支持主办、协办两种任务类型
createNewTask(String taskId, int taskType, String... actors) taskType:0 主办任务类型
taskType:1 协办任务类型
撤回
根据历史任务id,撤回由该历史任务派发的所有活动任务,如果无活动任务,则不允许撤回,抛出unchecked异常:SnakerException withdrawTask(String taskId, String operator) 提取
任务提取一般发生在参与者为部门、角色等组的情况下,该组的某位成员提取任务后,不允许其它成员处理该任务。
take(String taskId, String operator) 驳回、跳转
任务驳回、跳转请参考流程引擎API章节 唤醒
如果一个已经结束的任务,希望重新激活为活动状态,该如何操作呢。那么调用resume方法即可实现此功能。
Task resume(String taskId, String operator) 更新
如果一个活动任务,需要更新部分字段,则可以使用更新方法完成。
updateTask(Task task) 可更新任务对象的finish_Time、operator、expire_Time、variable 流程变量
数据存储 设计方法 Snaker的流程变量 变量数据获取 流程引擎在设计的过程中,需要考虑数据的分类存储
数据存储
业务数据 一般保存在业务表中 流程数据 一般保存在流程引擎的表中,如`wf_process` `wf_order` `wf_task`等 关联数据 流程变量保存的就是关联数据 设计方法
变量表 目前主流的流程引擎如Jbpm、Activiti都常用变量表方式,其优点是支持丰富的变量类型,变量值无长度限制,支持查询。缺点是很多使用者过于依赖变量表,将大部分业务数据保存在变量表中,数据过多时性能急剧下降。 变量字段 变量字段方式适用于中小型流程平台,只支持少量字段的存储,强制用户适用业务表保存业务数据,流程变量仅保存少量的关联数据。变量数据随实例、任务记录一次查询即可获得。但是缺点也很明显,不支持关联数据的查询,如果需要查询,只能将关联数据在业务表重复保存一份。 snaker的流程变量
snaker使用变量字段保存关联数据的方式,并支持在运行时动态添加全局变量数据
全局变量 全局变量的作用域是流程实例从启动至结束的所有过程 局部变量 局部变量的作用域是任务执行的单个过程 动态添加全局变量数据,可通过addVariable方法完成。
engine.order().addVariable(String orderId, Map
变量数据取可通过实例对象Order HistoryOrder、任务对象Task HistoryTask的getVariableMap()方法获取 任务参与者
snaker的任务支持静态配置、动态传递、自定义类处理、动态设置、组等方式。
参与者设置 动态添加、删除参与者 组支持 参与者设置
直接设置静态参与者,即assignee值为用户、部门或角色的标识符 通过运行时动态传递,即assignee值为变量名称,在调用流程引擎的api时,通过map参数传递这个变量值 通过自定义类[继承Assignment类],设置assignmentHandler属性,assign方法返回值就是参与者 动态添加、删除参与者
向指定任务动态添加参与者,同时支持设置参与类型
performType为0,则仅仅向wf_task_actor表中增加一条参与者信息 performType为1,则会在wf_task表中增加一条任务数据。
engine.task().addTaskActor(String taskId, String... actors) engine.task().addTaskActor(String taskId, Integer performType, String... actors) 对指定任务动态删除其中的参与者
engine.task().removeTaskActor(String taskId, String... actors) 组支持
由于snaker引擎与用户权限完全解耦的,所以对于组的支持,仅仅是你设置组作为参与者,你就要自定义一个任务的访问策略,能够根据操作人得到所有的组集合,这样流程引擎才能允许该操作人处理任务。
?
自定义任务访问策略类