snaker文档 下载本文

public class CustomAccessStrategy extends GeneralAccessStrategy { protected List ensureGroup(String operator) { //此处根据实际项目获取操作人对应的组列表 return ShiroUtils.getGroups(); } } ?

配置 在snaker.xml中增加下面的配置

snaker的拦截器支持所有的节点前后拦截,并且支持全局、局部拦截器。拦截器统一实现SnakerInterceptor接口

org.snaker.engine.SnakerInterceptor

全局拦截器 局部拦截器 全局拦截器

全局拦截器会拦截所有新产生的任务对象。自定义的全局拦截器需要配置到snaker.xml中。如默认支持的日志拦截器

局部拦截器支持节点执行的前置、后置拦截。需要配置到task节点模型的preInterceptors[前置拦截]、postInterceptors[后置拦截]属性 委托代理

委托代理主要用于流程平台中,主办人由于出差、休假等原因无法处理任务时,通过委托其它人员去处理此人的某类业务流程的待办任务。

表结构 委托代理配置 管理委托代理 表结构

委托代理表主要保存委托代理的记录信息

wf_surrogate 委托代理配置

需要在snker.xml中配置委托代理的拦截器

委托代理的数据管理由管理服务类完成

org.snaker.engine.IManagerService 管理服务接口针对委托代理提供以下方法:

void saveOrUpdate(Surrogate surrogate) void deleteSurrogate(String id) Surrogate getSurrogate(String id) List getSurrogate(QueryFilter filter) String getSurrogate(String operator, String processName) List getSurrogate(Page page, QueryFilter filter) 决策表达式

决策表达式主要用于decision(选择分支)节点,该节点支持三种路由选择方式

decision的expr transition的expr 自定义类 decision的expr

decision节点的expr有两种方式来设置

1.表达式中增加判断逻辑,如:${day > 3 ? 't1' : 't2'},此时根据day的值决定走t1、或t2的路由,用于设置范围值的情况 2.表达式仅仅是一个变量,如:${tname},此时,传递tname的值为路由name即可,用于设置具体值的情况(如:同意、不同意) transition的expr

如果decision节点的expr为空,可设置输出路由的expr,必须返回boolean类型

路由1设置expr的值为:${content==1}, 路由2设置expr的值为${content > 1}。 自定义类

自定义类需要实现DecisionHandler接口的decide方法

org.snaker.engine.DecisionHandler 该方法返回字符串即表示输出路由的name

Snaker默认支持Juel、SringEL两种表达式引擎,需要在snaker.xml中配置。配置如下:

?

Juel表达式引擎常用语法 String expr1 = \Map args1 = new HashMap(); args1.put(\System.out.println(eval(String.class, expr1, args1)); String expr2 = \Map args2 = new HashMap(); //此处不仅支持数字类型,也支持字符串类型,但是值必须可转换为数字 args2.put(\System.out.println(eval(String.class, expr2, args2)); String expr3 = \Map args3 = new HashMap(); //此处只要是数字类型即可,如1或0.5等 args3.put(\System.out.println(eval(String.class, expr3, args3)); //juel支持表达式为字符串类型而参数为数字类型 String expr4 = \Map args4 = new HashMap(); //此处不仅可以写字符串\,也可以写char类型'1',写数字类型1,浮点类型1.00 args4.put(\System.out.println(eval(String.class, expr4, args4)); //逻辑表达式与,使用&&表示 String expr5 = \Map args5 = new HashMap(); //此处不仅可以写字符串\,也可以写char类型'1',写数字类型1,浮点类型1.00 args5.put(\System.out.println(eval(String.class, expr5, args5)); //逻辑表达式或,使用||表示 String expr6 = \Map args6 = new HashMap(); //此处不仅可以写字符串\,也可以写char类型'1',写数字类型1,浮点类型1.00 args6.put(\System.out.println(eval(String.class, expr6, args6)); //逻辑表达式 String expr7 = \Map args7 = new HashMap(); //此处不仅可以写字符串\,也可以写char类型'1',写数字类型1,浮点类型1.00 args7.put(\System.out.println(eval(String.class, expr7, args7)); ?

Spring EL表达式引擎常用语法 String expr1 = \Map args1 = new HashMap(); args1.put(\System.out.println(expr1 + \ String expr2 = \Map args2 = new HashMap(); //此处仅支持数字类型 args2.put(\System.out.println(expr2 + \ String expr3 = \Map args3 = new HashMap(); //此处只要是数字类型即可,如1或0.5等 args3.put(\System.out.println(expr3 + \ //spel支持表达式为字符串类型而参数为数字类型 String expr4 = \Map args4 = new HashMap(); //此处仅支持字符串\args4.put(\System.out.println(expr4 + \ //逻辑表达式与,使用and表示 String expr5 = \Map args5 = new HashMap(); //此处仅支持数字类型 args5.put(\System.out.println(expr5 + \ //逻辑表达式或,使用||表示 String expr6 = \Map args6 = new HashMap(); //此处不仅可以写字符串\,也可以写char类型'1',写数字类型1,浮点类型1.00 args6.put(\System.out.println(expr6 + \ //逻辑表达式 String expr7 = \Map args7 = new HashMap(); //此处不仅可以写字符串\,也可以写char类型'1',写数字类型1,浮点类型1.00 args7.put(\System.out.println(expr7 + \子流程

子流程的作用是将一个复杂的业务流程进行细化拆分,提高流程的复用性。