最新Snaker用户手册.docx

上传人:1595****071 文档编号:47987935 上传时间:2022-10-04 格式:DOCX 页数:62 大小:592.38KB
返回 下载 相关 举报
最新Snaker用户手册.docx_第1页
第1页 / 共62页
最新Snaker用户手册.docx_第2页
第2页 / 共62页
点击查看更多>>
资源描述

《最新Snaker用户手册.docx》由会员分享,可在线阅读,更多相关《最新Snaker用户手册.docx(62页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateSnaker用户手册Snaker用户手册Snaker 用户手册 目录 Snaker 用户手册1一、 常用操作31、 流程定义部署3 deploy3 redeploy3 undeploy42、 启动流程实例4 根据 id 启动实例4 根据 name 启动实例43、 执行任务54、 转派任务55、 撤回任务56、 提取任务57、 任务驳回68、 自由流程69、 动态添加、

2、减少参与者710、 编码设置参与者711、 节点拦截器812、 参与者使用组 . 9 自定义访问策略 . 9 获取待办任务 . 9 执行任务 . 9 13、 委托代理 . 10 增加委托代理表 . 10 配置拦截器 . 10 管理委托代理 . 10 14、 子流程 . 11 二、 应用整合 . 12 1、 API 方式整合 . 12 配置 snaker.xml . 12 编写帮助类 . 12 调用流程引擎 . 14 2、 与 Spring 整合 . 14 SnakerEngine 配置 . 14 DBAccess 配置 . 15 事务配置 . 16 三、 流程设计器 . 18 四、 API 说

3、明 . 24 一、 常用操作 1、 流程定义部署 如何使用流程设计器定义流程请参考三、流程设计器。 部署的相关方法包含:deploy、redeploy、undeploy,分别表示流程定义的部署、重新部署、卸载。部署时统一使用 InputStream 输入流作为流程定义的数据。可借助org.snaker.engine.helper.StreamHelper帮助类完成。方法如下定义: InputStream的方法名称 描述 getStreamFromString 根据字符串获取输入流 getStreamFromFile 根据文件对象获取输入流 getStreamFromClasspath 根据类路

4、径下的资源文件名称获取输入流 getStreamFromUrl 根据 Url 远程资源获取输入流 deploy engine.process().deploy(StreamHelper. getStreamFromClasspath(test/task/simple/process.snaker); 部署相同的流程定义,会产生版本号依次加1的新的流程定义数据。但是不会对同名的流程实例产生影响。 redeploy engine.process().redeploy(processId, StreamHelper. getStreamFromClasspath(test/task/simple/p

5、rocess.snaker); 重新部署流程会影响当前流程实例的执行 undeploy engine.process().undeploy(processId); 卸载流程只会更新状态state值,不会物理删除数据。 2、 启动流程实例 可根据流程定义的id或者名称启动流程实例。如果相同的流程名称存在不同的版本,并使用名称启动实例时,会按照最新的版本来启动,其它低版本运行中的流程实例不会受到影响,这样就允许流程的多个版本同时运行。 根据 id 启动实例 engine.startInstanceById(processId); engine.startInstanceById(processId

6、, admin); engine.startInstanceById(processId, admin, args); 由id启动实例的参数为:流程定义id、操作人operator、参数列表args 根据 name 启动实例 engine.startInstanceByName(simple); engine.startInstanceByName(simple, 0); engine.startInstanceByName(simple, 0, admin); engine.startInstanceByName(simple, 0, admin, args); 由name启动实例的参数为:

7、流程定义name、版本号version、操作人operator、参数列表args 流程实例的启动会在以下的表中产生数据: wf_order、wf_hist_order 3、 执行任务 执行任务的处理逻辑包括两部分: 完成当前任务 按照流程定义产生新的任务执行任务的 api 如下: engine.executeTask(taskId); engine.executeTask(taskId, admin); engine.executeTask(taskId, admin, args); 执行任务的参数为:任务号taskId、操作人operator、参数列表args 4、 转派任务 任务转派的业务

8、逻辑是结束当前任务,并创建新的任务给转派人。其调用的 api 为: engine.task().createNewTask(task.getId(), 0, test); engine.task().complete(task.getId(); createNewTask方法中的第二个参数“任务类型”表示创建主办、协办任务。 5、 撤回任务 根据历史任务id,撤回由该历史任务派发的所有活动任务,如果无活动任务,则不允许撤回。抛出SnakerException异常 engine.task().withdrawTask(taskId, admin); 6、 提取任务 任务提取一般发生在参与者为部门

9、、角色等组的情况下,该组的某位成员提取任务后,其它成员无法处理任务。 engine.task().take(taskId, admin); 7、 任务驳回 任务驳回有多种场景,常见的有:驳回上一步、驳回到任意节点 engine.executeAndJumpTask(String taskId, String operator, Map args, String nodeName) 方法的参数nodeName决定驳回的方式: nodeName为空(null或空字符),则驳回至上一步(不允许驳回至fork、join、 suprocess以及会签任务) nodeName非空,则根据nodeName确

10、定跳转的目标节点。该实现原理与其它流程引擎思路一致,通过动态创建连接完成跳转。 8、 自由流程 Snaker支持两种自由流: 已经定义流转节点,由用户随意在节点之间跳转 在engine.executeAndJumpTask方法已经支持,参考任务驳回 未定义流转节点,即流程定义没有流程模型的情况,由用户随意创建自定义任务(任务名称、任务参与者、任务关联的表单等) TaskModel tm1 = new TaskModel(); tm1.setName(task1); tm1.setDisplayName(任务1); List tasks = null; tasks = engine.create

11、FreeTask(orderId, 1, args, tm1); for(Task task : tasks) engine.task().complete(task.getId(), 1, null); 自由任务需要调用engine.task().complete 方法结束任务。并且需要手动结束流程实例。 engine.order().complete(order.getId(); 自由流程存在强制终止的情况,此时需要调用 void terminate(String orderId); void terminate(String orderId, String operator); 强制终止

12、实例先结束该实例所有活动的任务,最后结束流程实例。 9、 动态添加、减少参与者 添加参与者需要判断所属的任务模型的参与类型(ANY、ALL) ITaskService提供两个添加参与者的方法: addTaskActor(String taskId, String. actors); 该方法根据taskId对应的任务模型判断是否属于会签任务,如果属于ALL的参与类型,则添加的每个actor都会产生新的任务。如果属于ANY的参与类型,则只是将 actor添加到当前的任务中 addTaskActor(String taskId, Integer performType, String. actors

13、); 该方法根据performType类型确定是否产生新的任务 removeTaskActor(String taskId, String. actors); 减少参与者仅仅是将所属任务的参与者删除(参考表:wf_task_actor) 10、 编码设置参与者 编码设置参与者主要用到AssignmentHandler 接口,并在定义任务模型时,需要配置该接口的实现类: public class TaskAssign implements AssignmentHandler public Object assign(Execution execution) return admin; 此处方便测

14、试,直接返回字符串。实际使用时,应该根据执行对象的args参数来判断执行人。 11、 节点拦截器 Snaker支持对任意类型的节点提供前置、后置拦截器处理。 preInterceptors 为前置拦截器属性配置、postInterceptors 为后置拦截器属性配置。自定义拦截器需要实现接口:SnakerInterceptor。如下代码片段即实现对产生的任务拦截并输出日志信息: public class LocalTaskInterceptor implements SnakerInterceptor private static final Logger log = LoggerFactor

15、y.getLogger(LocalTaskInterceptor.class); public void intercept(Execution execution) if(log.isInfoEnabled() log.info(LocalTaskInterceptor start.); for(Task task : execution.getTasks() StringBuffer buffer = new StringBuffer(100); buffer.append(创建任务标识=).append(task.getId(); buffer.append(,名称=).append(t

16、ask.getDisplayName(); buffer.append(,创建时间=).append(task.getCreateTime(); buffer.append(,参与者=); if(task.getActorIds() != null) for(String actor : task.getActorIds() buffer.append(actor).append(;); buffer.append(); log.info(buffer.toString(); log.info(LocalTaskInterceptor finish.); -参与者使用组 自定义访问策略 pub

17、lic class CustomAccessStrategy extends GeneralAccessStrategy protected List ensureGroup(String operator) List groups = new ArrayList(); if(operator.equals(test) groups.add(test); else groups.add(role1); return groups; 继承GeneralAccessStrategy类,实现ensureGroup方法,根据操作人获取该操作人对应的组(部门、角色等)在snaker.xml中增加访问策略

18、类的配置: 获取待办任务 获取待办任务时,设置的参与者数组增加组的信息即可 String actorIds = new Stringusername, groups; snakerEngine.query().getWorkItems(page, new QueryFilter().setOperators(actorIds); 执行任务 执行任务的方式没有改变,依然是调用 snakerEngine.executeTask(taskId, userName, args); 委托代理 增加委托代理表 表名称为wf_surrogate,其字段定义如下: 配置拦截器 在类路径下的snaker.xml

19、中增加拦截器配置,如下: 由于在 snaker.xml 中配置的拦截器,属于全局任务拦截器,则当产生新的任务时,会执行该拦截器负责检查委托代理表,是否存在委托授权情况,如存在,则增加代理人的参与权限。 管理委托代理 保存或更新委托代理配置 engine.manager().saveOrUpdate(Surrogate surrogate); 删除委托代理配置 engine.manager().deleteSurrogate(String id); 根据id获取委托代理对象 engine.manager().getSurrogate(String id); 根据当前操作人、流程名称获取该操作人的

20、代理人,支持多级代理 engine.manager().getSurrogate(String operator, String processName) 子流程 子流程定义,主要是设置 processName(子流程的名称 name 值)属性 二、 应用整合 1、 API 方式整合 API 整合方式适用于无业务容器托管的场景。 配置 snaker.xml 参数类型 访问对象 事务管理拦截器 DataSource JdbcAccess DataSourceTransactionInterceptor SessionFactory HibernateAccess Hibernate3Transa

21、ctionInterceptor SqlSessionFactory MybatisAccess MybatisTransactionInterceptor 编写帮助类 import javax.sql.DataSource; import org.snaker.engine.SnakerEngine; import org.snaker.engine.access.jdbc.JdbcHelper; import org.snaker.engine.cfg.Configuration; /* * Snaker引擎帮助类 */ public class SnakerHelper private

22、static final SnakerEngine engine; static DataSource dataSource = JdbcHelper.getDataSource(); engine = new Configuration() .initAccessDBObject(dataSource) .buildSnakerEngine(); public static SnakerEngine getEngine() return engine; 考虑到与现有应用整合,故提供initAccessDBObject方法,由应用系统提供具体的数据库访问对象,目前支持(jdbc方式DataSo

23、urce、hibernate方式SessionFactory、mybatis方式SqlSessionFactory)。测试用例的基类中没有调用该方法。代码如下: 类路径:org.snaker.engine.test.TestSnakerBase public class TestSnakerBase protected String processId; protected SnakerEngine engine = getEngine(); protected IProcessService processService = engine.process(); protected IQuer

24、yService queryService = engine.query(); private SnakerEngine getEngine() return new Configuration().buildSnakerEngine(); 为了方便测试,Snaker根据所使用的DBAccess实现类,从snaker.properties中获取初始化参数,如下: jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:/localhost:3306/snaker jdbc.username=root jdbc.password=root 调用

25、流程引擎 SnakerHelper.getEngine().process().deploy(); 2、 与 Spring 整合 Spring 集成 Snaker 时,需要配置流程引擎、事务管理、数据访问方式.具体可参考 snakerdemo。具体配置如下: SnakerEngine 配置 DBAccess 配置 Hibernate 方式 使用hibernate时,需要在sessionFactory配置中增加snaker映射文件的mappingResources属性: hbm/snaker.task.hbm.xml hbm/snaker.order.hbm.xml hbm/snaker.ccorder.hbm.xml hbm/snaker.process.hbm.xml hbm/snaker.taskactor.hbm.xml hbm/snaker.workitem.hbm.xml hbm/snaker.surrogate.hbm.xml SpringJdbc 方式 Mybatis 方式 使用mybatis,需要在mybatis.cfg.xml配置文件中增加snaker的类型及映射文件 事务配置 基于 Spring 的项目在使用 Snaker 时,完全将事务交给 Spring 托管,其事务配置如下: tx:advice id=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com