`
kjj
  • 浏览: 171639 次
  • 性别: Icon_minigender_1
  • 来自: 陕西
社区版块
存档分类
最新评论

OSWorlflow 工作流回退办法

阅读更多
使用osworkflow 回退是个难题,我从数据库层使用存储过程解决回退问题,用户可以调用就可以实现回退,一次回退一个步骤,遇到join fork 自动返回前一步骤
数据库是基于mysql 5.0.45 的。前面版本对存储过程支持不是很好

主过程 rl

   DELIMITER $$

DROP PROCEDURE IF EXISTS `assess`.`rl`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE  `assess`.`rl`(entryid bigint)
BEGIN
   DECLARE curid BIGINT;
   DECLARE c_previd bigint;
   DECLARE hisid BIGINT;
   DECLARE done INT default 0;
   DECLARE curcount int;
   DECLARE cur1 CURSOR FOR select id from os_currentstep where entry_id=entryid;
   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
   SET AUTOCOMMIT = 0;
   
   select count(*)  into curcount from os_currentstep;
   if curcount > 1 then
      START TRANSACTION;
      
      
      select id into curid from os_currentstep where entry_id=entryid group by entry_id;
      
      select previous_id into hisid from os_currentstep_prev where id = curid;
      
      OPEN cur1;
      REPEAT
        fetch cur1 into c_previd;
        delete from os_currentstep_prev where id=c_previd;
        delete from os_stepids where id=c_previd;
      UNTIL done END REPEAT;
      CLOSE cur1;
      
      delete from os_currentstep where entry_id=entryid;
      
      insert into os_currentstep select * from os_historystep where id=hisid;
      
      update os_currentstep  set status='Underway' where id=hisid;

      
      insert into os_currentstep_prev(previous_id,id) select previous_id,id from os_historystep_prev where id=hisid;
      
      delete from os_historystep_prev where id=hisid;
      delete from os_historystep where id=hisid;

      
      update os_wfentry set state=1 where id=entryid;
      COMMIT;
    elseif curcount = 1 then
     select id into curid from os_currentstep where entry_id=entryid;
     call cl(curid);
     update os_wfentry set state=1 where id=entryid;

   end if;
   SET AUTOCOMMIT = 1;
   select id from os_stepids where id=0;
END $$

DELIMITER ;


call cl(curid);

子过程 cl
DELIMITER $$

DROP PROCEDURE IF EXISTS `assess`.`cl`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE  `assess`.`cl`(cid bigint(20))
BEGIN
   
   DECLARE cdone INT default 0;
   DECLARE hisid BIGINT(20);
   DECLARE cur2 CURSOR FOR select previous_id from os_currentstep_prev where id=cid;
   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET cdone = 1;
   SET AUTOCOMMIT = 0;
   START TRANSACTION;
   open cur2;
   repeat
     fetch cur2 INTO hisid;
     insert INTO os_currentstep select * from os_historystep where id=hisid;
     update os_currentstep set status='Underway' where id=hisid;
     insert INTO os_currentstep_prev(previous_id,id) select previous_id,id from os_historystep_prev where id=hisid;
     delete from os_historystep_prev where id=hisid;
     delete from os_currentstep_prev where id=cid;
     delete from os_historystep where id=hisid;
   UNTIL cdone END REPEAT;
   close cur2;
   delete from os_currentstep where id=cid;
   delete from os_stepids where id=cid;
   COMMIT;
END $$

DELIMITER ;


分享到:
评论

相关推荐

    工作流中的回退业务实现

    工作流中的回退业务实现是流程管理中的一个重要环节,它涉及到流程执行的错误纠正和效率优化。回退,或者说Rollback WorkItem,是指在工作流系统中,参与者主动将已经执行过的任务从待办任务列表中回退,以便某个...

    工作流回退常用模式分析

    工作流回退是一种在工作流管理系统中常见的操作,它允许用户将流程实例回滚到先前的状态,以便纠正错误或响应业务需求的变化。胡长城(银狐999)在他的文章《工作流回退常用模式分析》中深入探讨了工作流回退的各种...

    工作流回退模式设计分析

    ### 工作流回退模式设计分析 #### 回退的概念与重要性 在现代企业信息化建设中,工作流管理已成为提升工作效率、优化业务流程的关键技术之一。而在工作流的实际应用过程中,不可避免地会遇到需要回退的情况。所谓*...

    工作流回退模式分析.docx

    工作流回退模式是流程管理中的一个重要概念,它允许参与者在发现任务处理错误或不应由自己处理时,将任务退回给之前的执行者。这一机制确保了流程的正确性和灵活性,帮助纠正错误,防止流程停滞不前。以下是关于工作...

    一种工作流运行时流程回退方法的研究与实现

    :为了解决在流程回退操作中产生的死锁和数据不一致问题,本文在...持工作流运行时回退的应用模型。该模型在开源工作流引擎Shark中得到了实现,并对流程可能出现的回退场景进行了 验证。实验的结果和分析的结果一致。

    JWFDv0.96工作流节点回退算法说明.doc

    JWFDv0.96工作流节点回退算法说明.doc JWFDv0.96工作流节点回退算法说明.doc

    工作流回退模式分析

    回退(RollbackWorkItem)回退是工作流参与者对自己“待办任务”(实际是对工作项)的一种操作,即参与者主动回退待办任务列表中的任务到已经执行过的人工节点。为什么要回退?参与者接受任务后,发现不应由自己办理...

    ABAP 工作流配置示例

    2. **保存并激活工作流**:保存工作流设置后,通过回退按钮回到主界面,然后激活此工作流。 #### 四、测试工作流 1. **创建物料**:使用事务代码`MM01`创建一个新的物料。 2. **查看邮箱**:使用事务代码`SBWP`查看...

    上海普元EOS6工作流教程

    【上海普元EOS6工作流教程】是一份面向软件设计和开发人员的文档,旨在帮助读者掌握如何使用primeton EOS workflow产品进行业务流程的管理。该教程要求读者具备J2EE的基本知识,如HTML、JavaScript、Java、JSP、Jsp...

    华为mate10系统回退详细教程

    #### 回退准备工作 1. **确保当前使用的是华为官方版本**:为了保证回退过程的安全性和稳定性,请确保您的华为Mate10当前使用的系统是华为官方提供的EMUI9.0版本,并且未曾进行任何非官方版本的升级。 2. **禁止解锁...

    工作流实例 工作流实例

    工作流实例是业务自动化中的一个重要概念,它涵盖了组织内各种任务、活动和决策的系统化管理,以确保流程的高效性和一致性。工作流实例是指在特定时间启动并按预定顺序执行的一系列工作流程活动。这些实例是根据预先...

    工作流小demo

    4. 回退和重试机制:在流程执行过程中,可能会遇到错误或异常,工作流系统需要有处理这些问题的策略,如回滚到上一步骤或重新执行某个任务。 5. 数据管理:工作流实例往往涉及数据交换,例如文章内容、审核意见等,...

    回退N重传机制的实现,网络实验

    本实验旨在通过编写 C/C++ 代码来实现回退N重传机制,从而深入理解这一机制的工作原理及其在网络通信中的应用。通过对实验代码的分析,我们了解到了实验的基本框架,包括 GUI 界面的设计以及必要的库文件的使用。...

    版本发布回退方案.pdf

    回退步骤包括通知用户系统开始回退,通知各关联系统进行版本回退,回退存储过程等数据对象,配置数据回退,应用程序、接口程序、工作流等版本回退。最后,需要回退完成通知各周边关联系统,进行SHAKEDOWN测试,通知...

    华为手机回退包

    【华为手机回退包】是针对华为特定型号设备,如荣耀4X全网通版,用于将设备系统从当前版本恢复到之前稳定版本的工具。这种回退包通常由华为官方提供,旨在解决新版本系统可能存在的问题,或者帮助用户因个人需求退回...

    Fragmeng回退栈小例子

    本示例"Fragment回退栈小例子"将深入讲解如何管理Fragment的回退栈,以及其在实际应用中的工作原理。 首先,我们需要理解什么是回退栈(Back Stack)。在Android系统中,回退栈是一个LIFO(后进先出)的数据结构,...

    一套完整自定义工作流的实现

    5. **异常处理和回退机制**:工作流系统需要有完善的异常处理机制,当发生错误时能够及时通知,并提供回退到前一状态的能力,确保流程的正确性。 6. **审计和监控**:为了保证工作流的透明度和可追溯性,系统应提供...

    jquery+js两种方式实现的禁止退格键回退

    在网页应用中,有时我们需要禁用用户使用退格键(Backspace)进行页面回退,以防止意外的数据丢失或功能误触发。标题提到的“jquery+js两种方式实现的禁止退格键回退”主要涉及JavaScript和jQuery这两种方法来阻止...

Global site tag (gtag.js) - Google Analytics