工作流可取回工作项列表实现

日期: 2008-09-22 作者:majs 来源:TechTarget中国

  在工作流应用中,用户往往有这样的需求:当一个用户完成一个活动后,他发现某个业务数据填写错误或其他原因,需要进行对已经提交的数据进行修改。这时工作流已经到了下个活动,为了满足这种需求,我们需要给这个用户列出他可以进行取回的工作任务,以便他进行重新填写或做其他什么事情
<!–[if !vml]–><!–[endif]–>
我的处理方法是编写可取回工作视图,具体思路如下:


  <!–[if !supportLists]–>1、  <!–[endif]–>找到workitem表中,每个流程当前最新的两个工作项(以下sql红色粗体部分)


  <!–[if !supportLists]–>2、  <!–[endif]–>将第一步产生的数据合并为一笔数据:将两个最新工作项的PARTICIPANT进行连接(以下sql蓝色粗体部分)


  <!–[if !supportLists]–>3、  <!–[endif]–>将第二步的结果和workitem进行连接取得最终数据


  以上也考虑到了主流程到子流程的情况


  select /*+ rule */
       A.PROCESSCHNAME,
       A.WORKITEMDESC,
       A.WORKITEMNAME,
       A.PROCESSDEFNAME,
       A.PROCESSDEFID,
       A.ACTIONURL,
       A.TIMEOUTNUM,
       A.ENDTIME,
       A.BIZSTATE,
       A.createTIME,
       A.STARTTIME,
       A.FINALTIME,
       A.PRIORITY,
       A.EXTEND2,
       A.TIMEOUTNUMDESC,
       A.PROCESSINSTNAME,
       A.PROCESSINSTID,
       A.ISTIMEOUT,
       A.ACTIVITYINSTNAME,
       A.ACTIVITYDEFID,
       A.WORKITEmid,
       A.ASSISTANT,
       A.CURRENTSTATE,
       A.LIMITNUMDESC,
       A.EXTEND1,
       A.ACTIVITYINSTID,
       A.STATESLIST,
       A.PARTICIPANT,
       B.PARTICIPANTS
  FROM WFWORKITEM A,
       (select PROCESSINSTID,
               MAX(SYS_CONNECT_BY_PATH(PARTICIPANT, ” “)) PARTICIPANTS
          FROM (select PROCESSINSTID,
                       PARTICIPANT,
                       ROW_NUMBER() OVER(PARTITION BY PROCESSINSTID ORDER BY WORKITEmid DESC) RN
                  FROM (select T.PROCESSINSTID, T.PARTICIPANT,T.WORKITEmid
                          FROM WFWORKITEM T, WFPROCESSINST P
                         where (select count(WORKITEmid)
                                  FROM WFWORKITEM
                                 where PROCESSINSTID = T.PROCESSINSTID
                                   AND PROCESSINSTID = P.PROCESSINSTID
                                   AND P.CURRENTSTATE = 2
                                   AND T.STARTTIME <= STARTTIME) <= 2
                           AND T.PROCESSINSTID = P.PROCESSINSTID
                           AND P.CURRENTSTATE = 2))
         GROUP BY PROCESSINSTID
         START WITH RN = 1
        CONNECT BY PRIOR RN = RN – 1
               AND PRIOR PROCESSINSTID = PROCESSINSTID) B
 where 1 = 1
   AND A.PROCESSINSTID = B.PROCESSINSTID
   AND (A.CURRENTSTATE = 10 OR A.CURRENTSTATE = 4)
   ORDER BY A.createTIME DESC


  原文链接:http://gocom.primeton.com/blog12815_26026.htm

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

majs
majs

相关推荐

  • API创建影响生产的六个方面

    在API创建方面,简单性至关重要。AnyPresence的Vivek Gupta讨论了开发者可以从6个方面处理好API的创建问题,从而加速API生产。

  • 微服务:是谁看上了这块小鲜肉

    微服务——IT领域的又一个新名词。但它是否能如同OpenStack,如同Docker那样成为众人疯抢的“肥肉”呢?从目前来看,可能还没有到达疯抢的地步,但也不乏支持者。

  • 应用开发工具帮助报社与时俱进

    新闻媒体业务要一直向顶尖技术看齐,如果他们想要打败竞争对手,成为社会的脉搏的话。心态一直是最重要的,无论是在收集和报道新闻方面,还是在内部运营方法。

  • 为移动工作者赋权构建API及工作流的步骤

    主管不能简单地把移动工作者认为是不坐在一起的人。相反,赋权要从评估员工需求开始,因为接下来关键的速度爆发当然就必须来自于移动设备和宽带服务的利用。