首页 > 编程知识 正文

snaker流程,sneaker什么梗

时间:2023-05-03 17:17:17 阅读:137510 作者:903

snaker使用指南和设计介绍snaker是一个基于Java的开源工作流引擎,适用于企业APP应用程序中的常见业务流程。 轻量、简单、灵巧的理念设计,定位于简单的集成、多环境支持。

进程源代码(oscgit ) :

3358 git.oschina.net/yuqs/snaker flow

演示源(oscgit ) :

3358 git.oschina.net/yuqs/snaker-web

源代码(oscgit ) :

3358 git.oschina.net/yuqs/snaker-designer

为什么snaker超轻,只需要7张表就可以开始驱动使用业务流程? 与JBPM、Activti十几张表相比,熟练使用和使用的难度较低。 如果是典型的工作流组织,且场景不是很复杂,请考虑部署snaker。 源代码的设计、编写非常规范,简单易懂,易于改造。 对于学习工作流程的原理和二次开发非常亲切。 也有很多不足之处。 支持场景不充分。 部分功能不稳定。 云功能等。 了解snaker使用指导activiti,jbpm,可以通过了解和使用snaker顺利迁移。 API的使用方法和流程模型的定义基本相同。

如果您没有接触过工作流,也可以立即开始定义简单的snaker流程模型和丰富的示例。

官方示例参考snaker-core源代码工程test

主要提供流程引擎组件和功能点的测试、API使用用例。

所有支持的流程模型测试用例都位于snaker flowsnaker-coresrctestresourcestest路径中

snaker-spring源代码项目test

spring集成示例

snaker-web源项目

完整工作流应用示例。 业务用、集成snaker可以完全参考该工程配置。

技术堆栈: springmvcshirohibernatesnakerraphael.jsmysql

流程设计器snaker提供Eclipse插件和web流程设计器。

web流程设计器在线设计、编辑和保存流程模型。 通过浏览snaker-web,可以将预设计的流程模型直接部署到APP应用程序中并使用。

基于raphael.js开发的网页设计师和流程的可视化表示。

拖动注意事项工具栏,根据业务需求制作即可。 请注意,使用transaction组件单击源节点,然后单击目标节点即可完成连接。

具体节点属性的配置用弹出表单配置即可。

还可以在生成的xml流程模型文件中修改属性,并通过重新上载进行更新和复盖。

APP应用开发API使用方法APP应用开发主要使用流程引擎接口API,服务对象仅用于调用流程引擎,不应该直接调用底层的API。

获取工作流引擎//api集成方法,并使用SnakerEngine对象snakerengineengine=new configuration ().buildSnakerEngine; //spring的集成方法是、 通过配置注入来配置SnakerEngine对象bean class=' org.snaker.engine.spring.springsnakerengine ' property name=' process service ef=' orderservice '/property name=' task service ' ref=' task service '/property name=' managerservice engine.process ().deploy ) stream helper.getstreamfromclasspath (' test/task/simple/process.snaker ' ) )进程根据流程名称启动流程实例order order=engine.startinstancebyname (name,version,operator ); 查询任务//历史任务engine.query (.gethistorytasks (newpagehistorytask ),new QueryFilter ).setoperator ) ' foo ' );

// 查询当前责任人的任务engine.query().getActiveTasks(new Page<Task>(), new QueryFilter().setOperator("foo"));// 根据当前用户查询待办任务列表engine.query().getWorkItems(page, new QueryFilter().setOperator("foo")); 执行任务 // 根据流程定义ID,系统调用、执行任务List<Task> tasks = engine.query().getActiveTasks(new QueryFilter().setOrderId(order.getId()));for(Task task : tasks) { engine.executeTask(task.getId(), "foo", args);}// 根据任务提交请求,执行任务。args 可以认同为提交的表单内容。engine.executeTask(task.getId(), "foo", args); snaker-web 使用指导

web工程 内置提供了‘请假流程测试’、‘借款申请流程’,可以直接使用。

IDEA 添加jetty 运行配置,启动即可。

访问 http://localhost:8080/snaker-web/login ,使用admin 用户登录即可使用所有的功能。

业务流程集成示例

业务流程如果简单,可以直接把业务数据存在流程实例的变量中。如果复杂业务,可以在业务表中增加order_id、task_id 来支持业务流引擎的集成。业务表属于应用层,流程表属于服务层,高层依赖底层,底层不能耦合高层。表设计千万注意。

‘借款申请流程’发起申请,可以参考,作为样本代码使用。

snaker 设计浅析

整体的设计思路和activiti、jbpm 相似。snaker 基于轻量的方向,只有流程引擎驱动相关的表,只提供经典的工作流特性。

工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。

###流程引擎

定义的对象 Process 流程定义、流程模型实体类Order 流程工作单实体类(一般称为流程实例)Task 任务实体类TaskActor 任务参与者实体类NodeModel 节点元素(存在输入输出的变迁),特别注意 CustomModel 提供的Service对象 IProcessService 流程模型服务。提供的功能:保存流程定义、根据流程模型文件部署流程、根据主键ID获取流程定义对象IOrderService 流程实例服务。提供的功能:根据流程定义创建流程实例、添加全局变量、完成流程实例、终止流程实例ITaskService 任务服务。提供的功能:创建任务、添加删除参与者、完成任务、撤回任务、回退任务、提取任务IQueryService 流程相关的查询服务。提供的功能:分页查询流程实例、任务、历史流程实例、任务参与者IManagerService 管理服务接口,用于流程管理控制服务委托管理时限控制。 功能实现 任务驱动实现 public List<Task> executeTask(String taskId, String operator, Map<String, Object> args) { // 1.完成当前任务,并且构造执行对象 Execution execution = execute(taskId, operator, args); ProcessModel model = execution.getProcess().getModel(); if(model != null) { // 反查当前任务,对应在流程定义中的节点 NodeModel nodeModel = model.getNode(execution.getTask().getTaskName()); // 2.该任务对应的节点模型执行(根据路由策略,递归调用,驱动调用的核心设计!) nodeModel.execute(execution); } return execution.getTasks();} 流程定义文件的保存

snker 的流程模型是以字节码的形式存在数据库中的。

流程定义版本支持

如果是根据processId 查询,那么对应的版本就是固定的。

如果是根据processName 查询,那么应该查询最新的版本的流程定义。

// 根据name获取process对象public Process getProcessByVersion(String name, Integer version) { if(version == null) { // select max(version) from wf_process where name = ? version = access().getLatestProcessVersion(name); } if(version == null) { version = 0; } // select * from wf_process where 1=1 and name in(?) and version = ? order by name asc List<Process> processs = access().getProcesss(null, new QueryFilter().setName(name).setVersion(version)); return processs.get(0);}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。