`
dary_zhou
  • 浏览: 40756 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • 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;

分享到:
评论

相关推荐

    上海普元EOS6工作流教程

    在此基础上,进一步阐述了EOS工作流的机制,比如工作流引擎的工作方式、业务流程的生命周期管理等。为了让读者更好地融入到学习过程中,这部分内容的讲解会结合实际工作流应用的案例,使得理论知识能够与实践相结合...

    EOS流程设计

    综上所述,EOS流程设计是一个复杂而细致的过程,涉及到多个方面的考量。在实践中,应根据具体业务需求灵活调整设计方案,同时也要注重技术细节的把握。只有这样,才能构建出既符合业务需求又能提供优质用户体验的...

    EOS工作流Demo

    2. **流程引擎**:这是EOS工作流的核心部分,负责解析流程定义并执行流程实例。它能够根据流程图中的指令进行任务调度、状态跟踪和数据处理。 3. **数据库存储**:EOS工作流将流程实例、任务状态以及相关数据存储在...

    普元EOS工作流教程-案例部分

    【普元EOS工作流教程-案例部分】是一个逐步引导学习者掌握EOS工作流开发的教程,旨在通过实际案例,从入门到深入,演示如何利用EOS平台进行工作流的开发和集成。教程分为入门、进阶和深入三个阶段,每个阶段都以同一...

    普元EOS-Platform-7.0基础开发教程完整版

    - **平台业务化能力**:通过业务支撑平台提供的引擎扩展能力,EOS Platform 7支持在线业务开发工具,帮助用户设计开发业务组件、业务向导、在线表单和在线流程。这使得用户能够更轻松地构建业务平台化的应用,具有更...

    普元eos7.5开发手册

    - 了解EOS 7.5 的工作流引擎。 - 设计并实现复杂的业务流程。 **2.2 HelloWorld案例描述** - **知识点概述:** - HelloWorld案例是初学者接触EOS 7.5 的第一个项目。 - 通过这个简单的案例,可以快速入门并...

    canon eos数码相机控制源程序

    在这里,C++可能被用来实现与Canon EOS相机的通信,创建用户界面,处理图像数据等。 5. **软件开发流程**:开发这样一个程序需要经历设计、编码、调试、测试等多个阶段。开发者需要理解Canon的API文档,根据需求...

    工作流开源框架技术选型对比.doc

    EOS Workflow是一款与EOS平台无缝集成的工作流管理系统,特点在于可视化业务流程建模、灵活的参与者设置和任务分配策略,同时支持自由流和多种事件,适用于高并发、大数据量的企业级应用。 6. SynchroFLOW(西安...

    BPS开发指南.chm

    01.03.01 BPS Process Server(BPS流程引擎) 01.03.02 BPS API & Component Library(BPS API和构件库) 01.03.03 BPS Studio(BPS流程设计建模工具) 01.03.04 BPS Governor(BPS引擎治理工具) 01.03.05 BPS ...

Global site tag (gtag.js) - Google Analytics