基于标签方式的工作流启动及任务执行开发说明
基于现在的系统的整合需求,本系统提供基于标签的工作流整合方式,工作流的启动及执行下一步时,均需要通过可以通过标识来处理完成。这使得基于JSP方式的流程整合变得很简单.
??? 系统提供启动参数,只需要提交至/flow/startProcessActivity.do,提交的参数包括以下:(可以参考ProcessRunStart.js的)
若调用标签,可以简化启动流程的使用方式。
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对象,则需要像以下方式调用:
SalesOrder salesOrder=new SalesOrder(); try{ BeanUtil.populateEntity(flowRunInfo.getRequest(), salesOrder, "salesOrder"); }catch(Exception ex){ logger.error(ex.getMessage()); }?
?
自定义工作流执行下一步??? 流程执行下一步时,只需要把流程表单中提交至/flow/nextProcess.do,并且携带以下参数则可。
标签的使用以下所示:
??? ??
<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指定自己的业务执行表单路径。