精华内容
下载资源
问答
  • Snaker

    千次阅读 2019-01-24 09:39:44
    WF_PROCESS:存放流程定义的,通过编辑一个后缀为.snaker的xml文档来定义流程的走向;然后在流程定义管理里有个部署流程的按钮,可以将编辑好的xml文档保存到WF_PROCESS表中,并产生一条记录。xml文档里有流程的名字...

    七张表

     

    WF_PROCESS   //流程定义

    WF_ORDER     //流程实例

    WF_HIST_ORDER  //历史流程实例

    WF_TASK    //任务

    WF_HIST_TASK  //历史任务(就是执行完了的任务)

    WF_TASK_ACTOR   //每个任务对应的参与者(记住谁可以签收或处理)

    WF_HIST_TASK_ACTOR   //历史的参与者表

     

     

    WF_PROCESS:存放流程定义的,通过编辑一个后缀为.snaker的xml文档来定义流程的走向;然后在流程定义管理里有个部署流程的按钮,可以将编辑好的xml文档保存到WF_PROCESS表中,并产生一条记录。xml文档里有流程的名字,如果这个名字在WF_PROCESS已经存在了,则保存时产生的新的记录的version字段值会自动加1。当然processId肯定是每条记录都是不一样的;

     

     

    WF_ORDER:存放流程实例的。开启一个流程实例WF_ORDER时。WF_ORDER表有个字段PROCESS_ID和流程定义的process_id相关联,他们是一对多的关系。当开启一个流程实例WF_ORDER时,在WF_ORDER和WF_HIST_ORDER都新增一条记录,其中WF_HIST_ORDER比WF_ORDER多一个字段ORDER_STATUS,当流程没跑完时,ORDER_STATUS的值是1。当整个事件流程跑完了,WF_ORDER表的那条记录会被删除,WF_HIST_ORDER表对应的那条记录的ORDER_STATUS的值变成0,表示流程实例跑完了。WF_ORDER和WF_HIST_ORDER同时产生的那两条记录的主键id是一样的。

     

     

    WF_TASK:存当前任务的;当流程执行完当前任务节点时,WF_TASK的这条记录会被剪切到WF_HIST_TASK表中,然后在WF_TASK表中新增下一个任务节点的信息记录。新增的下一任务节点的task有个字段 parent_task_id记住上一个任务节点在WF_HIST_TASK表里的WF_HIST_TASK_ID(上一个任务节点从WF_TASK表剪切到WF_HIST_TASK了);这样就可以实现回退等功能。

     

     

    WF_TASK_ACTOR:存哪个任务关联了那些参与者的,就是哪些人可以签收或者处理。如果当前任务节点被执行了,则相关的参与者会被剪切到WF_HIST_TASK_ACTOR表里,和WF_TASK、WF_HIST_TASK类似,这样回退时,就知道以前这一步是谁处理的。

     

     

     

     

     

    操作流程

     

    select id,name,display_Name,type,instance_Url,state, content, version,create_Time,creator from wf_process where id = ?

     

    insert into wf_order (id,process_Id,creator,create_Time,parent_Id,parent_Node_Name,expire_Time,last_Update_Time,last_Updator,order_No,variable,version) values (?,?,?,?,?,?,?,?,?,?,?,?)

     

    insert into wf_hist_order (id,process_Id,order_State,creator,create_Time,end_Time,parent_Id,expire_Time,order_No,variable) values (?,?,?,?,?,?,?,?,?,?)

     

    insert into wf_task (id,order_Id,task_Name,display_Name,task_Type,perform_Type,operator,create_Time,finish_Time,expire_Time,action_Url,parent_Task_Id,variable,version) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)

     

    insert into wf_task_actor (task_Id, actor_Id) values (?, ?)

     

     

    insert into wf_hist_task (id,order_Id,task_Name,display_Name,task_Type,perform_Type,task_State,operator,create_Time,finish_Time,expire_Time,action_Url,parent_Task_Id,variable) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)

     

     

    insert into wf_hist_task_actor (task_Id, actor_Id) values (?, ?)

     

     

    delete from wf_task_actor where task_Id = ?

    delete from wf_task where id = ?

    update wf_order set last_Updator=?, last_Update_Time=?, variable = ?, expire_Time=?, version = version + 1 where id=? and version = ?

     

    insert into wf_task (id,order_Id,task_Name,display_Name,task_Type,perform_Type,operator,create_Time,finish_Time,expire_Time,action_Url,parent_Task_Id,variable,version) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)

     

     

    insert into wf_task_actor (task_Id, actor_Id) values (?, ?)

     

     

     

     

     

     

     

     

     

    public void deleteTask(Task task) {

    if (!this.isORM()) {

    Object[] args = new Object[]{task.getId()};

    int[] type = new int[]{12};

    this.saveOrUpdate(this.buildMap("delete from wf_task_actor where task_Id = ?", args, type));

    this.saveOrUpdate(this.buildMap("delete from wf_task where id = ?", args, type));

    }

    //启动

    public void saveOrder(Order order) {

    HistoryOrder history = new HistoryOrder(order);

    history.setOrderState(STATE_ACTIVE);

    this.access().saveOrder(order);

    this.access().saveHistory(history);

    }

    }

     

    //执行删除task 插入历史表

    public void complete(String orderId) {

    Order order = this.access().getOrder(orderId);

    HistoryOrder history = this.access().getHistOrder(orderId);

    history.setOrderState(STATE_FINISH);

    history.setEndTime(DateHelper.getTime());

    this.access().updateHistory(history);

    this.access().deleteOrder(order);

    Completion completion = this.getCompletion();

    if (completion != null) {

    completion.complete(history);

    }

    总结修改以及转转载别人的

     

     

    展开全文
  • snaker源码

    2017-09-07 11:36:01
    snaker源码,包含snaker-spring,snaker-mybatis,snaker-herbirnate,等,snaker工作流开发叫哦我IE改记录就是独立开发哪里看见了看见
  • Snaker文档

    2019-02-20 15:05:28
    解压后打开文件 snaker文档.zip\book\index.html 即可浏览
  • snaker-core

    2018-07-27 09:45:15
    snaker-core snaker工作流核心jarsnaker-core snaker工作流核心jar
  • snaker-web

    2018-07-27 09:49:02
    snaker-web 放在tomcat根目录下可以直接运行 第一次运行会自动创建snaker相关表 支持h2 mysql 等数据库 snaker工作流的可视化 管理
  • snaker.vue

    2020-08-24 16:00:01
    前端工作流程图转换成.xml文件,给后台生成.snaker文件。需要配合我写的工作流程图的数据格式进行转换。
  • Snaker教学PPT

    2018-04-13 15:07:36
    Snaker 13年就没有在更新过,估计作者over了。 我把整合流程,以及api做了一个整合,工作需要,要给小组讲一下。所以弄了一个PPT!
  • snaker实现的工作流

    2018-08-07 15:28:30
    snaker实现的工作流snaker实现的工作流snaker实现的工作流snaker实现的工作流
  • snaker学习手册工作流

    2018-12-19 14:41:04
    snaker学习手册,工作流学习,snaker入门,snaker基本使用方式
  • 工作流引擎 Snaker

    2017-04-24 10:59:42
    工作流引擎 Snaker
  • snaker-core.zip

    2019-11-01 09:59:19
    maven依赖的snaker-core.jar 源码 <groupId>org.snaker <artifactId>snaker-core <version>1.6.6 <dependency>
  • snaker简介

    万次阅读 2017-12-06 09:24:02
    Snaker工作流引擎本着轻量、简单、灵巧理念设计。 一、轻量: 1、可以使用JDBC+Dbutils独立运行,也可以依赖主流的ioc、orm框架运行 2、整个jar占用170K 二、简单: 1、流程组件简单。 这方面纠结很久,像...

    Snaker工作流引擎本着轻量、简单、灵巧理念设计。

    一、轻量:

    1、可以使用JDBC+Dbutils独立运行,也可以依赖主流的ioc、orm框架运行

    2、整个jar占用170K



    二、简单:

    1、流程组件简单。

    203427_3faaed90_13178.png

    这方面纠结很久,像jbpm包括(State/Hql/Sql/Jms/Custom/Java/Script等)真正用到的有几个呢?很多组件仅仅是附属品,但是会增加学习成本

    2、表设计简单(目前只有7张表)

    http://git.oschina.net/yuqs/snaker/wikis/DataBase

    实际上,如果各种数据库对表分区支持较好,可去除历史记录的3张表。

    3、上手简单

    只需要根据实际的项目环境配置snaker.properties/snaker.xml两个文件即可



    三、灵巧:

    1、扩展性:暴露较多的可扩展接口,甚至是核心的流程组件(只需在snaker.xml中增加bean的配置即可)。

    2、数据持久层面支持jdbc+dbutils、mybatis、hibernate、springjdbc。目前支持的数据库有oracle、mysql、sqlserver。



    当然,基于以上三点设计肯定会损失流程引擎的一些特性。所以Snaker目前主要针对中小型项目需要增加工作流特性的系统。



    如果,你的项目中部分业务需要使用工作流而觉得JBPM、ACTIVITI开发成本太高时,可考虑Snaker!





    项目包括三部分:

    Snaker:流程引擎,负责流程的调度与执行

    Snaker-Designer:流程设计器(基于Eclipse RCP设计的插件)

    Snaker-Web:使用SpringMVC、Shiro、Spring、Hibernate整合的一套案例平台

    数据库表设计:

    http://git.oschina.net/yuqs/snaker/wikis/DataBase

    入门手册:

    http://git.oschina.net/yuqs/snaker/wikis/QuickStart



    支持以下流程模型:<br>

    1、简单直流:

    153019_729ddee2_13178.png



    2、选择分支:

    110913_0c9eb890_13178.png



    3、并行:

    153138_9cc15c47_13178.png



    4、子流程串行:

    153201_38f47831_13178.png



    5、子流程并行:

    153211_0d30b75a_13178.png



    6、请假流程的案例:

    153230_5380b706_13178.png



    目前流程设计器的图形元素使用JBPM-JPDL的元素(个人觉得图标比较美观),如下图:

    153330_7c3f4fa6_13178.png





    具体请参考:

    wiki:http://git.oschina.net/yuqs/snaker/wikis/home

    source:http://git.oschina.net/yuqs/snaker

    展开全文
  • snaker用户手册

    2014-07-22 11:45:05
    snaker用户手册pdf,官方文档,绝对经典
  • snaker工作流引擎学习记录。任务1: 完成一个完整的流程设计图。任务2: 搞懂方法中的参数的作用以及使用场景。任务3: 写一个会签测试Demo。snaker中的会签功能取决于节点中performType属性的属性值来决定是否产生...

    snaker工作流引擎学习记录。

    任务1: 完成一个完整的流程设计图。

    任务2: 搞懂方法中的参数的作用以及使用场景。

    任务3: 写一个会签测试Demo。

    526dd84fac9be6b73f1b01eb529f1461.png

    snaker中的会签功能取决于节点中performType属性的属性值来决定是否产生多个相同的任务。

    performType的属性只有两个: ANY(代表多个参与者时,只要有一个参与者通过,则流程便可以继而往下流转)、ALL(代表多个参与者时,必须所有的参与者都必须通过,流程才会往西继续流转)。

    在写会签节点时,参与者是在哪里添加的呢?

    参与者的设置方法在snaker官方文档中有介绍,这里我使用的是在代码中动态添加一个参与者。

    如图:

    a82bfa41a73b83be0ab710904dc870b7.png

    在设计图中只有一个参与者,但只是一个标记,在流程数据构造的时候,会给每个标记赋予对应的角色。

    在设计图时参与者的名称必须和数据构造时给的标记是一致的,否则程序就会找不到对应到参与者,会报一个无法执行下一步的错误。

    /** 流程数据构造开始 */

    Map params = new HashMap();

    String falg= ShiroUtils.getOrgCode();

    String falg1= ShiroUtils.getParentOrgCode(falg);

    String falg2= ShiroUtils.getParentOrgCode(falg1);

    String falg3= ShiroUtils.getParentOrgCode(falg2);

    params.put("apply.operator",SecurityUtil.getApprover(prop.get("falg"), falg));

    params.put("cwh.operator", SecurityUtil.getApprover(prop.get("falg"), falg1));

    params.put("sybAndJdxz.operator",SecurityUtil.getApprover(prop.get("falg"), falg2));

    params.put("mzj.operator", SecurityUtil.getApprover(prop.get("flag"), falg3));

    /** 流程数据构造结束 */

    数据流程构造的时候给了他一个角色,也就是参与者。接下来在会签节点对应的方法中再为它动态的添加一个参与者。

    engine.task().addTaskActor(taskId, 1 ,SecurityUtil.getApprover(prop.get("falg"), falsg4));

    这样会签需要的参与者就搞定了。

    然后就是决策,每个节点的返回结果无非就是同意/不同意,通过/不通过 等等。。这个结果可以以变量的形式来储存,以${result}这种形式返回给流程,告诉它这个节点的最后决定是什么,是否继续往下流转。

    ebb1334ba73d21c39ce3a2defb118f33.png

    if(result.equals("甲同意") && result.equals("乙同意")){

    setAttr("result", "甲乙同意");

    }else{

    setAttr("result", "甲乙不同意");

    }

    在开始并执行流程的时候需要实现这样一个方法,其中有三个参数,分别代表任务ID、当前操作人员ID(当前登录人员)、参与者列表集合(流程数据构造时的集合)

    /**

    * 根据任务主键ID,操作人ID,参数列表执行任务

    * @param taskId 任务主键ID

    * @param operator 操作人主键ID

    * @param args 参数列表

    * @return List 任务集合*/

    public List executeTask(String taskId, String operator, Map args);

    写过的东西记录下来,方便后用。

    展开全文
  • Snaker flow2.5.1下载

    2016-03-22 11:22:11
    Snaker2.5.1最新版本下载
  • Snaker工作流PPT

    2018-04-13 09:46:37
    Snaker 13年就没有在更新过,估计作者over了。 我把整合流程,以及api做了一个整合,工作需要,要给小组讲一下。所以弄了一个PPT!
  • snaker mybatis 配置

    2018-01-03 10:12:21
    snaker mybatis 配置

    目标 : 把snaker和mybatis结合 
    环境 : spring mybatis mysql 
    1,首先导入 snaker-mybatis.jar 
    2,配置好 anaker数据源 和数据库 
    3,引入底下的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
        default-lazy-init="true">
    
        <description>SnakerEngine配置 </description>
        <bean class="org.snaker.engine.spring.SpringSnakerEngine">
            <property name="processService" ref="processService"/>
            <property name="orderService" ref="orderService"/>
            <property name="taskService" ref="taskService"/>
            <property name="queryService" ref="queryService"/>
            <property name="managerService" ref="managerService"/>
        </bean>
    
        <bean id="dbAccess" class="org.snaker.engine.access.mybatis.MybatisAccess">
            <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
        </bean>
    
        <bean id="processService" class="org.snaker.engine.core.ProcessService">
            <property name="access" ref="dbAccess"/>
            <property name="cacheManager" ref="cacheManager"/>
        </bean>
        <bean id="orderService" class="org.snaker.engine.core.OrderService">
            <property name="access" ref="dbAccess"/>
        </bean>
        <bean id="taskService" class="org.snaker.engine.core.TaskService">
            <property name="access" ref="dbAccess"/>
        </bean>
        <bean id="managerService" class="org.snaker.engine.core.ManagerService">
            <property name="access" ref="dbAccess"/>
        </bean>
        <bean id="queryService" class="org.snaker.engine.core.QueryService">
            <property name="access" ref="dbAccess"/>
        </bean>
    
        <bean id="cacheManager" class="org.snaker.engine.cache.memory.MemoryCacheManager"/>
        <!-- spring jdbc access
        <bean id="dbAccess" class="org.snaker.engine.access.spring.SpringJdbcAccess">
            <property name="dataSource" ref="dataSource"/>
            <property name="lobHandler" ref="lobHandler"/>
        </bean>
        <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
         -->
    </beans>
    展开全文
  • snaker 工作流引擎

    2014-10-20 16:44:18
    Snaker是一个基于Java的开源工作流引擎 Snaker工作流引擎本着轻量、简单、灵巧理念设计
  • Retro-Snaker 贪吃蛇大作战
  • Snaker 用户手册

    千次阅读 2019-11-13 10:30:42
    Snaker 用户手册一、 常用操作deployredeployundeploy2、 启动流程实例根据 id 启动实例根据 name 启动实例3、 执行任务完成当前任务按照流程定义产生新的任务执行任务的 api 如下:4、 转派任务5、 撤回任务6、 ...
  • 开源流程引擎Snaker

    千次阅读 2018-11-12 11:46:21
    开源流程引擎Snaker
  • snaker-core-2.5.0.rar

    2017-01-16 17:05:01
    内含:snaker-core-2.5.0.jar,snaker-ehcache-2.5.0.jar,snaker-mybatis-2.5.0.jar ,snaker-spring-2.5.0.jar
  • snaker-web-master工作流

    2019-02-20 15:02:32
    注意修改数据库配置:snaker-web-master.war\WEB-INF\classes\application.properties,需要先建库snaker-web,程序运行时会自动创建表。
  • Java开源工作流引擎snaker1.01,非maven版本
  • 03_Snaker流程demo

    2021-02-08 14:56:02
    本篇以一个小Case带大家熟悉下 Snaker是如何运作的,对于初入门的老铁可以先跟着我得思路走,你会逐步熟悉Snaker提供的操作 请假案例 流程定义文件存放位置 Snaker中的流程定义文件是以.snaker结尾 流程定义模型 ...
  • 01_Snaker简介

    2021-02-05 14:36:33
    Snaker学习 介绍 Snakerflow是一个基于Java的开源工作流引擎,适用于企业应用中常见的业务流程。 优点 本着轻量、简单、灵巧理念设计,定位于简单集成,多环境支持 轻量: snaker-core.jar大小208K,代码行数约7000...
  • 包含了snaker workflow源码以及配置文件
  • snaker game

    2018-10-11 11:34:19
    Visual studio 2018环境下用C++开发一款经典小游戏 贪吃蛇游戏 界面简单 运行流畅 完成高分作业
  • snaker工作流引擎实例

    热门讨论 2015-06-29 14:21:35
    Snaker是一个基于Java的开源工作流引擎,适用于企业应用中常见的业务流程。本着轻量、简单、灵巧理念设计,定位于简单集成,多环境支持 轻量:核心代码行数大约7000行,强大的扩展性,支持Spring、Jfinal、Nutz...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 312
精华内容 124
关键字:

snaker