基于标签方式的工作流启动及任务执行开发说明


基于现在的系统的整合需求,本系统提供基于标签的工作流整合方式,工作流的启动及执行下一步时,均需要通过可以通过标识来处理完成。这使得基于JSP方式的流程整合变得很简单.



  • 自定义工作流启动

    系统提供启动参数,只需要提交至/flow/startProcessActivity.do,提交的参数包括以下:(可以参考ProcessRunStart.js的)

  1.     defId: 必需,流程定义Id,即pro_definition表里的主键
  2.     startFlow: 必需,值为true,则表示启动流程   必填
  3.     destName:目标节点,当开始节点有两个以上的分支时,可以指定该值,以决定流程启动后,跳转至的目标节点,若没有指定,则默认会跳至第一个节点。
  4.     flowAssignId:目标节点的执行人员,其格式如:格式为:节点1:节点2|节点1执行人IDs:节点2执行IDs,其中节点IDs值格式如1,2,3,若没有指定,则以后台的节点指定的执行人员。
  5.     useTemplate:默认为false,表示用的是后台的在线表单保存值,若用模板表单,则设置该值为true。
  6.     sendMail: 默认为false,true则表示发送邮件通知相关的人员
  7.     sendMsg: 默认为false,true则表示发送短信通知待办人员



若调用标签,可以简化启动流程的使用方式。
start标签调用示例:

Java代码 复制代码  收藏代码
  1. <%@ taglib prefix="flow" tagdir="/WEB-INF/tags/flow"%>   
  2. <flow:start curUserId="1" defId="1">   
  3.         <table cellpadding="0" cellspacing="1" border="1" >   
  4.             <tr>   
  5.                 <td>我的业务表单</td>   
  6.             </tr>   
  7.             <tr>   
  8.                 <td>   
  9.                     xx:<input type="text" name="xxx"/>   
  10.                     <input type="hidden" name="afterHandler" value="axxxService.aaMethod"/>   
  11.                     <input type="hidden" name="preHandler" value="axxxService.aaMethod"/>   
  12.                 </td>   
  13.             </tr>   
  14.         </table>   
  15.     </flow:start>  
<%@ taglib prefix="flow" tagdir="/WEB-INF/tags/flow"%>
<flow:start curUserId="1" defId="1">
        <table cellpadding="0" cellspacing="1" border="1" >
            <tr>
                <td>我的业务表单</td>
            </tr>
            <tr>
                <td>
                    xx:<input type="text" name="xxx"/>
                    <input type="hidden" name="afterHandler" value="axxxService.aaMethod"/>
                    <input type="hidden" name="preHandler" value="axxxService.aaMethod"/>
                </td>
            </tr>
        </table>
    </flow:start>
 



    start标签只带两个参数, curUserId表示为当前启动的流程的Id,defId为流程定义Id,中间标着色的部分为自己的业务表单,可以在自己的业务表单中加上preHandler及afterHandler参数值,如:<input type=”hidden” name=”afterHandler” value=”xxService.xxMethod”/>

在工作流启动的时候,一般只需要指定afterHandler方法对应的参数,其值格式为xxxxService.xxMethod,若指定了该值,则表示在工作流启动后,会从Spring容器中查找xxService的Bean,并且调用其xxMethod的方法,而xxMethod的方法格式如下所示:

Integer xxMethod(FlowFlowRunInfo flowRunInfo);
FlowFlowRunInfo里面会携带流程的相关信息,如更改流程中的待办事项的名称,则可以在在该方法中调用:
ProcessRun processRun=flowRunInfo.getProcessRun();
processRun.setSubject(“xxx审批流程”);
processRunService.save(processRun);

在这里加上自己的业务变量加至流程中,可以像以下调用:
Map map=new HashMap();
map.put(“pkId”,xx.getId());
executionService.setVariables(processRun.getPiId(),map);

或像以下方式中调用:
flowRunInfo.getFlowVars().put(“pkId”,xx.getId());
xx.getId()表示取得xx实体变量中的id键值,可以在后续的流程中获取。


若要在该方法,需要获取表单中的业务方法,可以通过flowRunInfo.getRequest()获取HttpServletRequest对象。若需要获取在业务表单中自动封装的实体,可以在业务表单中用以下的方式命名,如
<input type=”text” name=”salesOrder.orderNo” value=”xxx”/>
在xxMethod方法可以把参数名以salesOrder开头的参数自动组装至salesOrder对象,则需要像以下方式调用:

Java代码 复制代码  收藏代码
  1. SalesOrder salesOrder=new SalesOrder();   
  2.         try{   
  3.             BeanUtil.populateEntity(flowRunInfo.getRequest(), salesOrder, "salesOrder");   
  4.         }catch(Exception ex){   
  5.             logger.error(ex.getMessage());   
  6.         }  
SalesOrder salesOrder=new SalesOrder();
        try{
            BeanUtil.populateEntity(flowRunInfo.getRequest(), salesOrder, "salesOrder");
        }catch(Exception ex){
            logger.error(ex.getMessage());
        }
 

 

  • 自定义工作流执行下一步

    流程执行下一步时,只需要把流程表单中提交至/flow/nextProcess.do,并且携带以下参数则可。

  1.     taskId:必需,jbpm中的任务Id
  2.     destName:目标节点,当开始节点有两个以上的分支时,可以指定该值,以决定流程启动后,跳转至的目标节点,若没有指定,则默认会跳至第一个节点。
  3.     flowAssignId:目标节点的执行人员,其格式如:格式为:节点1:节点2|节点1执行人IDs:节点2执行IDs,其中节点IDs值格式如1,2,3,若没有指定,则以后台的节点指定的执行人员。
  4.     useTemplate:默认为false,表示用的是后台的在线表单保存值,若用模板表单,则设置该值为true。
  5.     signVoteType:会签投票类型,当前节点为会签时,表示需要进行参与会签,当前用户投的会签的决定(1=同意,2=拒绝,3=弃权)
  6.     sendMail: 默认为false,true则表示发送邮件通知相关的人员
  7.     sendMsg:默认为false,true则表示发送短信通知待办人员



标签的使用以下所示:

      

Java代码 复制代码  收藏代码
  1. <flow:next curUserId="${params.curUserId}" taskId="${params.taskId}">   
  2.         <table>   
  3.             <tr>   
  4.                 <td>我的业务表单</td>   
  5.             </tr>   
  6.             <tr>   
  7.                 <td>   
  8.                     taskName:<input type="text" name="xxx"/>   
  9.                 </td>   
  10.             </tr>   
  11.         </table>   
  12.     </flow:next>  
<flow:next curUserId="${params.curUserId}" taskId="${params.taskId}">
        <table>
            <tr>
                <td>我的业务表单</td>
            </tr>
            <tr>
                <td>
                    taskName:<input type="text" name="xxx"/>
                </td>
            </tr>
        </table>
    </flow:next>
 

   
在该标签内,也可以像start标签一样,接收preHandler参数及afterHandler方法,以方便加上在业务表单的处理方法。

 

3.在后台指定流程表单路径


进入某个流程后台设置,如下:
 



把“使用表单模板”,同时在每个节点,指定模板类型为JSP模板,并且在url指定自己的业务执行表单路径

 

qq:1848175569

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值