直接修改EOS流程引擎数据,实现单工作项变多工作项

    在客户需求变化时,可能会碰到流程引擎中单工作项的数据拆分成多工作项,下面提供一种实现方式来达到多工作项的拆分.对于新流程是不需要拆分,只是对于流程实例中已运行到相应环节才需要处理。以下提到方法,不是通过EOS流程引擎修改,而是通过直接更新数据库实现。

    单工作项的拆分成多工作为如下几步:

                1.列出需要拆分工作项的流程实例,并更新流程图,发布时,不要生成新的版本。

               2.工作项的循环拆分,并将以前的工作项表中记录的删除或者将工作项记录状态修改为12

              3.删除工作项对应的参与者,并按多工作项要求增加参与者记录。

   如下提供了一种拆分的实例:是通过ORACLE的存储过程实现。

create or replace procedure UPDATE_WORKITEM_INFO is

begin
  declare
 
    k number default - 5000000;---工作项ID
    i number default - 1000000;---参与者ID
    --每一次使用都需要调整这个值  这个值用来做参与者表主键
  begin
    --迭代所有需要修改的工作项
    FOR each in (select *
                   from wfworkitem wf
                  where (wf.currentstate = 4)
                    and wf.activitydefid = "Provider"  
                    and wf.processdefid = 15) LOOP
      --删除与者表中参与者信息
      update wfwiparticipant wfw
         set wfw.wiparticid = 0 - wfw.wiparticid,
             wfw.workitemid = 0 - wfw.workitemid
       where wfw.workitemid = each.workitemid;
   
      --根据工作项的流程实例找到相应的参与者
      for tt in (select distinct busman
                   from t_mm_material tmm
                  where tmm.materialid in
                        (select t.materialid
                           from t_mm_orderinfodetail t
                          where t.orderid in
                                (select tm.orderid
                                   from t_mm_orderinfo tm
                                  where tm.processinstid = each.processinstid))) loop
     
        i := i + 1;
        k := k + 1;
     
        --更新参与者表信息
        insert into wfwiparticipant
          (wiparticid,
           workitemid,
           participanttype,
           participant,
           participant2,
           workitemstate,
           partiintype,
           extend1)
        values
          (i,
           k,
           "person",
           tt.busman,
           tt.busman,
           "10",---工作项状态
           "EXE",
           "P{" || tt.busman || "}");----相应的参与才类型,根据实现业务的不同,会有区别
        --更新工作项信息
        insert into wfworkitem
          (workitemid,
           workitemname,
           workitemtype,
           workitemdesc,
           currentstate,
           participant,
           priority,
           istimeout,
           limitnum,
           limitnumdesc,
           createtime,
           starttime,
           endtime,
           finaltime,
           actionurl,
           processinstid,
           activityinstid,
           stateslist,
           timeoutnum,
           timeoutnumdesc,
           extend1,
           extend2,
           processinstname,
           activityinstname,
           processdefid,
           processdefname,
           processchname,
           activitydefid,
           assistant,
           bizstate,
           allowagent
          
           )
       
          (select k as workitemid,
                  workitemname,
                  workitemtype,
                  workitemdesc,
                  "10" as currentstate,---多工作项的状态为10
                  tt.busman as participant,
                  priority,
                  istimeout,
                  limitnum,
                  limitnumdesc,
                  createtime,
                  starttime,
                  endtime,
                  finaltime,
                  actionurl,
                  each.processinstid as processinstid,
                  each.activityinstid as activityinstid,
                  stateslist,
                  timeoutnum,
                  timeoutnumdesc,
                  extend1,
                  "NPNYYNYNN" as extend2,-----多工作项与单工作项区别
                  processinstname,
                  activityinstname,
                  processdefid,
                  processdefname,
                  processchname,
                  activitydefid,
                  assistant,
                  bizstate,
                  allowagent
          
             from wfworkitem wftp
            where wftp.workitemid = each.workitemid);
     
      end loop;
   
      --更新工作项表信息
      update wfworkitem wfwor
         set wfwor.workitemid     = 0 - each.workitemid,
             wfwor.processinstid  = 0 - each.processinstid ,
             wfwor.currentstate= 12
       where wfwor.workitemid = each.workitemid ;
   
    END LOOP;
 
    commit;
  end;
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值